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 [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] 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);