Index: src/char/int_party.c
===================================================================
--- src/char/int_party.c (revision 17356)
+++ src/char/int_party.c (working copy)
@@ -740,7 +740,25 @@
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
// Data packet length is set to inter.c that you
@@ -761,6 +779,7 @@
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;
}
Index: src/char/inter.c
===================================================================
--- src/char/inter.c (revision 17356)
+++ src/char/inter.c (working copy)
@@ -48,7 +48,7 @@
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]
Index: src/map/atcommand.c
===================================================================
--- src/map/atcommand.c (revision 17356)
+++ src/map/atcommand.c (working copy)
@@ -3729,7 +3729,30 @@
return 0;
}
+/*==========================================
+ * @mapinfo <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),pc_maxbaselv(sd));
+
+ 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
* => Shows information about the map [map name]
@@ -9105,6 +9128,7 @@
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),
Index: src/map/intif.c
===================================================================
--- src/map/intif.c (revision 17356)
+++ src/map/intif.c (working copy)
@@ -529,6 +529,18 @@
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)
{
@@ -2266,9 +2278,6 @@
case 0x3854: intif_parse_Auction_message(fd); break;
case 0x3855: intif_parse_Auction_bid(fd); break;
-//Bound items
- case 0x3856: intif_parse_itembound_ack(fd); break;
-
// Mercenary System
case 0x3870: intif_parse_mercenary_received(fd); break;
case 0x3871: intif_parse_mercenary_deleted(fd); break;
@@ -2286,6 +2295,9 @@
case 0x3891: intif_parse_RecvHomunculusData(fd); break;
case 0x3892: intif_parse_SaveHomunculusOk(fd); break;
case 0x3893: intif_parse_DeleteHomunculusOk(fd); break;
+//Bound items
+ case 0x3856: intif_parse_itembound_ack(fd); break;
+
default:
ShowError("intif_parse : unknown packet %d %x\n",fd,RFIFOW(fd,0));
return 0;
Index: src/map/intif.h
===================================================================
--- src/map/intif.h (revision 17356)
+++ src/map/intif.h (working copy)
@@ -41,6 +41,7 @@
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);