فهرست منبع

Introducing @partysharelvl, a method to updating the party share level in run time!
- Temporarily changes share level until character server is restarted
- Updated atcommands documentation

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@17358 54d463be-8e91-2dee-dedb-b68131a5f0ec

akinari1087 12 سال پیش
والد
کامیت
72bcb87f0f
7فایلهای تغییر یافته به همراه70 افزوده شده و 1 حذف شده
  1. 3 0
      conf/msg_conf/map_msg.conf
  2. 10 0
      doc/atcommands.txt
  3. 19 0
      src/char/int_party.c
  4. 1 1
      src/char/inter.c
  5. 24 0
      src/map/atcommand.c
  6. 12 0
      src/map/intif.c
  7. 1 0
      src/map/intif.h

+ 3 - 0
conf/msg_conf/map_msg.conf

@@ -1515,5 +1515,8 @@
 // @reloadpacketdb
 1477: Packet database has been reloaded.
 
+1478: Party share level has been changed successfully.
+1479: Failed updating configuration. Character server offline.
+
 //Custom translations
 //import: conf/msg_conf/import/map_msg_eng_conf.txt

+ 10 - 0
doc/atcommands.txt

@@ -1260,6 +1260,16 @@ Example:
 
 ---------------------------------------
 
+@partysharelvl <value>
+
+Updates party share level until character server is restarted.
+Automatically updates all online parties.
+
+Example:
+@partysharelvl 25
+
+---------------------------------------
+
 =====================
 | 6. Party Commands |
 =====================

+ 19 - 0
src/char/int_party.c

@@ -740,6 +740,24 @@ int mapif_parse_PartyLeaderChange(int fd,int party_id,int account_id,int char_id
 	return 1;
 }
 
+int mapif_parse_PartyShareLevel(int fd,unsigned int share_lvl)
+{
+	struct party_data *p;
+	DBIterator* iter = db_iterator(party_db_);
+
+	party_share_level = share_lvl;
+
+	for(p = dbi_first(iter); dbi_exists(iter); p = dbi_next(iter)) { //Update online parties
+		if(p->party.count > 1)
+			int_party_calc_state(p);
+		else if(!p->party.count) //Remove parties from memory that have no players online
+			idb_remove(party_db_, p->party.party_id);
+	}
+	dbi_destroy(iter);
+
+	return 1;
+}
+
 
 // Communication from the map server
 //-Analysis that only one packet
@@ -761,6 +779,7 @@ int inter_party_parse_frommap(int fd)
 	case 0x3026: mapif_parse_BreakParty(fd, RFIFOL(fd,2)); break;
 	case 0x3027: mapif_parse_PartyMessage(fd, RFIFOL(fd,4), RFIFOL(fd,8), (char*)RFIFOP(fd,12), RFIFOW(fd,2)-12); break;
 	case 0x3029: mapif_parse_PartyLeaderChange(fd, RFIFOL(fd,2), RFIFOL(fd,6), RFIFOL(fd,10)); break;
+	case 0x302A: mapif_parse_PartyShareLevel(fd, RFIFOL(fd,2)); break;
 	default:
 		return 0;
 	}

+ 1 - 1
src/char/inter.c

@@ -48,7 +48,7 @@ unsigned int party_share_level = 10;
 int inter_recv_packet_length[] = {
 	-1,-1, 7,-1, -1,13,36, (2 + 4 + 4 + 4 + NAME_LENGTH),  0, 0, 0, 0,  0, 0,  0, 0,	// 3000-
 	 6,-1, 0, 0,  0, 0, 0, 0, 10,-1, 0, 0,  0, 0,  0, 0,	// 3010-
-	-1,10,-1,14, 14,19, 6,-1, 14,14, 0, 0,  0, 0,  0, 0,	// 3020- Party
+	-1,10,-1,14, 14,19, 6,-1, 14,14, 6, 0,  0, 0,  0, 0,	// 3020- Party
 	-1, 6,-1,-1, 55,19, 6,-1, 14,-1,-1,-1, 18,19,186,-1,	// 3030-
 	-1, 9, 0, 0,  0, 0, 0, 0,  7, 6,10,10, 10,-1,  0, 0,	// 3040-
 	-1,-1,10,10,  0,-1,12, 0,  0, 0, 0, 0,  0, 0,  0, 0,	// 3050-  Auction System [Zephyrus]

+ 24 - 0
src/map/atcommand.c

@@ -3729,6 +3729,29 @@ ACMD_FUNC(reload) {
 
 	return 0;
 }
+/*==========================================
+ * @partysharelvl <share_range> [Akinari]
+ * Updates char server party share level in runtime
+ * Temporary - Permanent update in inter_athena.conf
+ *------------------------------------------*/
+ACMD_FUNC(partysharelvl) {
+	unsigned int share_lvl;
+
+	nullpo_retr(-1, sd);
+
+	if(!message || !*message) {
+		clif_displaymessage(fd, msg_txt(sd,1322));
+		return -1;
+	} else
+		share_lvl = min(atof(message),MAX_LEVEL);
+
+	if(intif_party_sharelvlupdate(share_lvl)) //Successfully updated
+		clif_displaymessage(fd, msg_txt(sd,1478));
+	else //Char server offline
+		clif_displaymessage(fd, msg_txt(sd,1479));
+
+	return 0;
+}
 
 /*==========================================
  * @mapinfo [0-3] <map name> by MC_Cameri
@@ -9107,6 +9130,7 @@ void atcommand_basecommands(void) {
 		ACMD_DEF2("reloadquestdb", reload),
 		ACMD_DEF2("reloadmsgconf", reload),
 		ACMD_DEF2("reloadpacketdb", reload),
+		ACMD_DEF(partysharelvl),
 		ACMD_DEF(mapinfo),
 		ACMD_DEF(dye),
 		ACMD_DEF2("hairstyle", hair_style),

+ 12 - 0
src/map/intif.c

@@ -529,6 +529,18 @@ int intif_party_leaderchange(int party_id,int account_id,int char_id)
 	return 0;
 }
 
+// Request to update party share level
+int intif_party_sharelvlupdate(unsigned int share_lvl)
+{
+	if (CheckForCharServer())
+		return 0;
+	WFIFOHEAD(inter_fd,6);
+	WFIFOW(inter_fd,0)=0x302A;
+	WFIFOL(inter_fd,2)=share_lvl;
+	WFIFOSET(inter_fd,6);
+	return 1;
+}
+
 // Request a Guild creation
 int intif_guild_create(const char *name,const struct guild_member *master)
 {

+ 1 - 0
src/map/intif.h

@@ -41,6 +41,7 @@ int intif_party_changemap(struct map_session_data *sd, int online);
 int intif_break_party(int party_id);
 int intif_party_message(int party_id, int account_id, const char *mes,int len);
 int intif_party_leaderchange(int party_id,int account_id,int char_id);
+int intif_party_sharelvlupdate(unsigned int share_lvl);
 
 
 int intif_guild_create(const char *name, const struct guild_member *master);