Explorar el Código

Fixed some packets for 2022 clients (#7276)

Migrates a few packets from FIFO to structs.
Migrates friendlist to struct and fixed invalid version check.
Added a new guild related packet that does nothing for the time being.
Synced to latest Hercules' packet definitions.
Fixed name of ZC_SOULENERGY.

Thanks to @Dia and @Pokye.
Lemongrass3110 hace 2 años
padre
commit
fa4666d7af

+ 1 - 1
src/map/atcommand.cpp

@@ -7026,7 +7026,7 @@ ACMD_FUNC(sound)
 	if(strstr(sound_file, ".wav") == NULL)
 		strcat(sound_file, ".wav");
 
-	clif_soundeffectall(&sd->bl, sound_file, 0, AREA);
+	clif_soundeffect( sd->bl, sound_file, 0, AREA );
 
 	return 0;
 }

+ 1 - 1
src/map/battleground.cpp

@@ -507,7 +507,7 @@ bool bg_team_join(int bg_id, struct map_session_data *sd, bool is_queue)
 
 		for (const auto &pl_sd : bgteam->members) {
 			if (pl_sd.sd != sd)
-				clif_hpmeter_single(sd->fd, pl_sd.sd->bl.id, pl_sd.sd->battle_status.hp, pl_sd.sd->battle_status.max_hp);
+				clif_hpmeter_single( *sd, pl_sd.sd->bl.id, pl_sd.sd->battle_status.hp, pl_sd.sd->battle_status.max_hp );
 		}
 
 		clif_bg_hp(sd);

+ 2 - 2
src/map/buyingstore.cpp

@@ -249,7 +249,7 @@ int8 buyingstore_create( struct map_session_data* sd, int zenylimit, unsigned ch
 	StringBuf_Destroy(&buf);
 
 	clif_buyingstore_myitemlist(sd);
-	clif_buyingstore_entry(sd);
+	clif_buyingstore_entry( *sd );
 	idb_put(buyingstore_db, sd->status.char_id, sd);
 
 	return 0;
@@ -276,7 +276,7 @@ void buyingstore_close(struct map_session_data* sd) {
 		idb_remove(buyingstore_db, sd->status.char_id);
 
 		// notify other players
-		clif_buyingstore_disappear_entry(sd);
+		clif_buyingstore_disappear_entry( *sd );
 	}
 }
 

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 347 - 430
src/map/clif.cpp


+ 24 - 27
src/map/clif.hpp

@@ -638,8 +638,8 @@ void clif_selllist(struct map_session_data *sd);	//self
 void clif_npc_market_open(struct map_session_data *sd, struct npc_data *nd);
 void clif_parse_NPCMarketClosed(int fd, struct map_session_data *sd);
 void clif_parse_NPCMarketPurchase(int fd, struct map_session_data *sd);
-void clif_scriptmes(struct map_session_data *sd, int npcid, const char *mes);	//self
-void clif_scriptnext(struct map_session_data *sd,int npcid);	//self
+void clif_scriptmes( struct map_session_data& sd, uint32 npcid, const char *mes );
+void clif_scriptnext( struct map_session_data& sd, uint32 npcid );
 void clif_scriptclose(struct map_session_data *sd, int npcid);	//self
 void clif_scriptclear(struct map_session_data *sd, int npcid);	//self
 void clif_scriptmenu(struct map_session_data* sd, int npcid, const char* mes);	//self
@@ -690,9 +690,8 @@ void clif_talkiebox(struct block_list* bl, const char* talkie);
 void clif_wedding_effect(struct block_list *bl);
 void clif_divorced(struct map_session_data* sd, const char* name);
 void clif_callpartner(struct map_session_data *sd);
-void clif_playBGM(struct map_session_data* sd, const char* name);
-void clif_soundeffect(struct map_session_data* sd, struct block_list* bl, const char* name, int type);
-void clif_soundeffectall(struct block_list* bl, const char* name, int type, enum send_target coverage);
+void clif_playBGM( struct map_session_data& sd, const char* name );
+void clif_soundeffect( struct block_list& bl, const char* name, int type, enum send_target target );
 void clif_parse_ActionRequest_sub(struct map_session_data *sd, int action_type, int target_id, t_tick tick);
 void clif_parse_LoadEndAck(int fd,struct map_session_data *sd);
 void clif_hotkeys_send(struct map_session_data *sd, int tab);
@@ -804,7 +803,7 @@ void clif_changed_dir(struct block_list *bl, enum send_target target);
 
 // vending
 void clif_openvendingreq(struct map_session_data* sd, int num);
-void clif_showvendingboard(struct block_list* bl, const char* message, int fd);
+void clif_showvendingboard( struct map_session_data& sd, enum send_target target = AREA_WOS, struct block_list* tbl = nullptr );
 void clif_closevendingboard(struct block_list* bl, int fd);
 void clif_vendinglist( struct map_session_data* sd, struct map_session_data* vsd );
 void clif_buyvending(struct map_session_data* sd, int index, int amount, int fail);
@@ -814,28 +813,28 @@ void clif_vendingreport(struct map_session_data* sd, int index, int amount, uint
 void clif_movetoattack(struct map_session_data *sd,struct block_list *bl);
 
 // party
-void clif_party_created(struct map_session_data *sd,int result);
-void clif_party_member_info(struct party_data *p, struct map_session_data *sd);
-void clif_party_info(struct party_data* p, struct map_session_data *sd);
-void clif_party_invite(struct map_session_data *sd,struct map_session_data *tsd);
-void clif_party_invite_reply(struct map_session_data* sd, const char* nick, enum e_party_invite_reply reply);
+void clif_party_created( struct map_session_data& sd, int result );
+void clif_party_member_info( struct party_data& party, struct map_session_data& sd );
+void clif_party_info( struct party_data& party, struct map_session_data *sd = nullptr );
+void clif_party_invite( struct map_session_data& sd, struct map_session_data& tsd );
+void clif_party_invite_reply( struct map_session_data& sd, const char* nick, enum e_party_invite_reply reply );
 void clif_party_option(struct party_data *p,struct map_session_data *sd,int flag);
-void clif_party_withdraw(struct map_session_data *sd, uint32 account_id, const char* name, enum e_party_member_withdraw result, enum send_target target);
-void clif_party_message(struct party_data* p, uint32 account_id, const char* mes, int len);
-void clif_party_xy(struct map_session_data *sd);
-void clif_party_xy_single(int fd, struct map_session_data *sd);
-void clif_party_hp(struct map_session_data *sd);
-void clif_hpmeter_single(int fd, int id, unsigned int hp, unsigned int maxhp);
-void clif_party_job_and_level(struct map_session_data *sd);
-void clif_party_dead( struct map_session_data *sd );
+void clif_party_withdraw( struct map_session_data& sd, uint32 account_id, const char* name, enum e_party_member_withdraw result, enum send_target target );
+void clif_party_message( struct party_data& party, uint32 account_id, const char* mes, int len );
+void clif_party_xy( struct map_session_data& sd );
+void clif_party_xy_single( struct map_session_data& sd, struct map_session_data& tsd );
+void clif_party_hp( struct map_session_data& sd );
+void clif_hpmeter_single( struct map_session_data& sd, uint32 id, uint32 hp, uint32 maxhp );
+void clif_party_job_and_level( struct map_session_data& sd );
+void clif_party_dead( struct map_session_data& sd );
 
 // guild
 void clif_guild_created(struct map_session_data *sd,int flag);
-void clif_guild_belonginfo(struct map_session_data *sd);
+void clif_guild_belonginfo( struct map_session_data& sd );
 void clif_guild_masterormember(struct map_session_data *sd);
-void clif_guild_basicinfo(struct map_session_data *sd);
+void clif_guild_basicinfo( struct map_session_data& sd );
 void clif_guild_allianceinfo(struct map_session_data *sd);
-void clif_guild_memberlist(struct map_session_data *sd);
+void clif_guild_memberlist( struct map_session_data& sd );
 void clif_guild_skillinfo(struct map_session_data* sd);
 void clif_guild_send_onlineinfo(struct map_session_data *sd); //[LuzZza]
 void clif_guild_memberlogin_notice(struct guild *g,int idx,int flag);
@@ -914,7 +913,7 @@ void clif_pet_autofeed_status(struct map_session_data* sd, bool force);
 
 //friends list
 int clif_friendslist_toggle_sub(struct map_session_data *sd,va_list ap);
-void clif_friendslist_send(struct map_session_data *sd);
+void clif_friendslist_send( struct map_session_data& sd );
 void clif_friendslist_reqack(struct map_session_data *sd, struct map_session_data *f_sd, int type);
 
 void clif_weather(int16 m); // [Valaris]
@@ -1052,10 +1051,8 @@ void clif_showdigit(struct map_session_data* sd, unsigned char type, int value);
 void clif_buyingstore_open(struct map_session_data* sd);
 void clif_buyingstore_open_failed(struct map_session_data* sd, unsigned short result, unsigned int weight);
 void clif_buyingstore_myitemlist(struct map_session_data* sd);
-void clif_buyingstore_entry(struct map_session_data* sd);
-void clif_buyingstore_entry_single(struct map_session_data* sd, struct map_session_data* pl_sd);
-void clif_buyingstore_disappear_entry(struct map_session_data* sd);
-void clif_buyingstore_disappear_entry_single(struct map_session_data* sd, struct map_session_data* pl_sd);
+void clif_buyingstore_entry( struct map_session_data& sd, struct block_list* tbl = nullptr );
+void clif_buyingstore_disappear_entry( struct map_session_data& sd, struct block_list* tbl = nullptr );
 void clif_buyingstore_itemlist(struct map_session_data* sd, struct map_session_data* pl_sd);
 void clif_buyingstore_trade_failed_buyer(struct map_session_data* sd, short result);
 void clif_buyingstore_update_item(struct map_session_data* sd, t_itemid nameid, unsigned short amount, uint32 char_id, int zeny);

+ 7 - 29
src/map/clif_packetdb.hpp

@@ -88,8 +88,6 @@
 	packet(0x00b1,8);
 	parseable_packet(0x00b2,3,clif_parse_Restart,2);
 	packet(0x00b3,3);
-	packet(0x00b4,-1);
-	packet(0x00b5,6);
 	packet(0x00b6,6);
 	packet(0x00b7,-1);
 	parseable_packet(0x00b8,7,clif_parse_NpcSelectMenu,2,6);
@@ -156,20 +154,15 @@
 	parseable_packet(0x00f7,2,clif_parse_CloseKafra,0);
 	packet(0x00f8,2);
 	parseable_packet(0x00f9,26,clif_parse_CreateParty,2);
-	packet(0x00fa,3);
 	packet(0x00fb,-1);
 	parseable_packet(0x00fc,6,clif_parse_PartyInvite,2);
 	packet(0x00fd,27);
-	packet(0x00fe,30);
 	parseable_packet(0x00ff,10,clif_parse_ReplyPartyInvite,2,6);
 	parseable_packet(0x0100,2,clif_parse_LeaveParty,0);
 	packet(0x0101,6);
 	parseable_packet(0x0102,6,clif_parse_PartyChangeOption,2);
 	parseable_packet(0x0103,30,clif_parse_RemovePartyMember,2,6);
 	packet(0x0104,79);
-	packet(0x0105,31);
-	packet(0x0106,10);
-	packet(0x0107,10);
 	parseable_packet(0x0108,-1,clif_parse_PartyMessage,2,4);
 	packet(0x0109,-1);
 	packet( HEADER_ZC_MVP_GETTING_ITEM, sizeof( struct PACKET_ZC_MVP_GETTING_ITEM ) );
@@ -199,7 +192,7 @@
 	packet( cartlistequipType, -1 );
 	packet( cartlistnormalType, -1 );
 	packet(0x0125,8);
-	parseable_packet(0x0126,8,clif_parse_PutItemToCart,2,4);
+	parseable_packet( HEADER_CZ_MOVE_ITEM_FROM_BODY_TO_CART, sizeof( PACKET_CZ_MOVE_ITEM_FROM_BODY_TO_CART ), clif_parse_PutItemToCart, 0 );
 	parseable_packet(0x0127,8,clif_parse_GetItemFromCart,2,4);
 	parseable_packet(0x0128,8,clif_parse_MoveFromKafraToCart,2,4);
 	parseable_packet(0x0129,8,clif_parse_MoveToKafraFromCart,2,4);
@@ -210,9 +203,8 @@
 	parseable_packet(0x012e,2,clif_parse_CloseVending,0);
 	parseable_packet(0x012f,-1,clif_parse_OpenVending,2,4,0,84);
 	parseable_packet(0x0130,6,clif_parse_VendingListReq,2);
-	packet(0x0131,86);
 	packet(0x0132,6);
-	parseable_packet(0x0134,-1,clif_parse_PurchaseReq,2,4,8);
+	parseable_packet( HEADER_CZ_PC_PURCHASE_ITEMLIST_FROMMC, -1, clif_parse_PurchaseReq, 0 );
 	packet(0x0135,7);
 	packet(0x0137,6);
 	packet(0x0138,3);
@@ -367,7 +359,6 @@
 	packet(0x01d0,8);
 	packet(0x01d1,14);
 	packet(0x01d2,10);
-	packet(0x01d3,35);
 	packet(0x01d4,6);
 	parseable_packet(0x01d5,-1,clif_parse_NpcStringInput,2,4,8);
 	packet(0x01d6,4);
@@ -389,7 +380,6 @@
 	packet(0x01e6,26);
 	parseable_packet(0x01e7,2,clif_parse_NoviceDoriDori,0);
 	parseable_packet(0x01e8,28,clif_parse_CreateParty2,2,26,27);
-	packet(0x01e9,81);
 	packet(0x01ea,6);
 	packet(0x01eb,10);
 	packet(0x01ec,26);
@@ -1084,10 +1074,8 @@
 	packet(0x02c2,-1);
 	parseable_packet(0x02c4,26,clif_parse_PartyInvite2,2);
 	packet(0x02c5,30);
-	packet(0x02c6,30);
 	parseable_packet(0x02c7,7,clif_parse_ReplyPartyInvite2,2,6);
 	parseable_packet(0x02c8,3,clif_parse_PartyTick,2);
-	packet(0x02c9,3);
 	packet(0x02ca,3);
 	packet(0x02cb,20);
 	packet(0x02cc,4);
@@ -1595,15 +1583,9 @@
 #if PACKETVER >= 20091201
 	packet(0x07fc,10);
 	ack_packet(ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN,0x07fd,-1,0);
-	packet(0x07fe,26);
 	//packet(0x07ff,-1);
 #endif
 
-// 2009-12-15aRagexeRE
-#if PACKETVER >= 20091215
-	//packet(0x0801,-1);
-#endif
-
 // 2009-12-22aRagexeRE
 #if PACKETVER >= 2009122
 	parseable_packet(0x0802,18,clif_parse_PartyBookingRegisterReq,2,4,6); // Booking System
@@ -1632,14 +1614,13 @@
 
 // 2010-01-05aRagexeRE
 #if PACKETVER >= 20100105
-	parseable_packet(0x0801,-1,clif_parse_PurchaseReq2,2,4,8,12);
+	parseable_packet( HEADER_CZ_PC_PURCHASE_ITEMLIST_FROMMC2, -1, clif_parse_PurchaseReq2, 0 );
 #endif
 
 // 2010-01-26aRagexeRE
 #if PACKETVER >= 20100126
 	//packet(0x080C,2);
 	//packet(0x080D,3);
-	packet(0x080E,14);
 #endif
 
 // 2010-02-09aRagexeRE
@@ -1653,7 +1634,6 @@
 	parseable_packet(0x0811,-1,clif_parse_ReqOpenBuyingStore,2,4,8,9,89);
 	//packet(0x0812,86);
 	//packet(0x0813,6);
-	//packet(0x0814,6);
 	//packet(0x0815,-1);
 	//packet(0x0817,-1);
 	//packet(0x0818,6);
@@ -1663,9 +1643,7 @@
 // 2010-03-09aRagexeRE
 #if PACKETVER >= 20100309
 	packet(0x0813,-1);
-	//packet(0x0814,2);
 	//packet(0x0815,6);
-	packet(0x0816,6);
 	packet(0x0818,-1);
 	//packet(0x0819,10);
 	//packet(0x081A,4);
@@ -1702,7 +1680,6 @@
 // 2010-04-20aRagexeRE
 #if PACKETVER >= 20100420
 	packet(0x0812,8);
-	packet(0x0814,86);
 	parseable_packet(0x0815,2,clif_parse_ReqCloseBuyingStore,0);
 	parseable_packet(0x0817,6,clif_parse_ReqClickBuyingStore,2);
 	parseable_packet(0x0819,-1,clif_parse_ReqTradeBuyingStore,2,4,8,12);
@@ -2331,10 +2308,7 @@
 
 // 2017-05-02dRagexeRE
 #if PACKETVER >= 20170502
-	packet(0x0A43,85);
 	packet(0x0A44,-1);
-	packet(0x0AB2,7);
-	packet(0x0ABD,10);
 	packet(0x0A98,10);
 	parseable_packet(0x0A99,4,clif_parse_equipswitch_remove,2,4);
 	parseable_packet(0x0ACE,4,clif_parse_equipswitch_request_single,0);
@@ -2465,6 +2439,10 @@
 	parseable_packet( HEADER_CZ_CLOSE_UI_ENCHANT, sizeof( struct PACKET_CZ_CLOSE_UI_ENCHANT ), clif_parse_enchantwindow_close, 0 );
 #endif
 
+#if PACKETVER_MAIN_NUM >= 20220216
+	parseable_packet( HEADER_CZ_APPROXIMATE_ACTOR, sizeof( struct PACKET_CZ_APPROXIMATE_ACTOR ), clif_parse_dull, 0 );
+#endif
+
 #if PACKETVER_MAIN_NUM >= 20220216 || PACKETVER_ZERO_NUM >= 20220316
 	parseable_packet( HEADER_CZ_USE_PACKAGEITEM, sizeof( struct PACKET_CZ_USE_PACKAGEITEM ), clif_parse_itempackage_select, 0 );
 #endif

+ 1 - 1
src/map/elemental.cpp

@@ -284,7 +284,7 @@ int elemental_data_received(s_elemental *ele, bool flag) {
 		clif_spawn(&ed->bl);
 		clif_elemental_info(sd);
 		clif_elemental_updatestatus(sd,SP_HP);
-		clif_hpmeter_single(sd->fd,ed->bl.id,ed->battle_status.hp,ed->battle_status.max_hp);
+		clif_hpmeter_single( *sd, ed->bl.id, ed->battle_status.hp, ed->battle_status.max_hp );
 		clif_elemental_updatestatus(sd,SP_SP);
 	}
 

+ 11 - 11
src/map/guild.cpp

@@ -692,19 +692,19 @@ int guild_recv_info(struct guild *sg) {
 
 		if (before.guild_lv != g->guild_lv || bm != m ||
 			before.max_member != g->max_member) {
-			clif_guild_basicinfo(sd); //Submit basic information
+			clif_guild_basicinfo( *sd ); //Submit basic information
 			clif_guild_emblem(sd, g); //Submit emblem
 		}
 
 		if (bm != m) { //Send members information
-			clif_guild_memberlist(g->member[i].sd);
+			clif_guild_memberlist( *sd );
 		}
 
 		if (before.skill_point != g->skill_point)
 			clif_guild_skillinfo(sd); //Submit information skills
 
 		if (guild_new) { // Send information and affiliation if unsent
-			clif_guild_belonginfo(sd);
+			clif_guild_belonginfo( *sd );
 			clif_guild_notice(sd);
 			sd->guild_emblem_id = g->emblem_id;
 		}
@@ -894,7 +894,7 @@ int guild_member_added(int guild_id,uint32 account_id,uint32 char_id,int flag) {
 	sd->guild_emblem_id = g->emblem_id;
 	sd->guild = g;
 	//Packets which were sent in the previous 'guild_sent' implementation.
-	clif_guild_belonginfo(sd);
+	clif_guild_belonginfo( *sd );
 	clif_guild_notice(sd);
 
 	//TODO: send new emblem info to others
@@ -1011,7 +1011,7 @@ int guild_member_withdraw(int guild_id, uint32 account_id, uint32 char_id, int f
 
 	// remove member from guild
 	memset(&g->member[i],0,sizeof(struct guild_member));
-	clif_guild_memberlist(online_member_sd);
+	clif_guild_memberlist( *online_member_sd );
 
 	// update char, if online
 	if(sd != NULL && sd->status.guild_id == guild_id) {
@@ -1118,7 +1118,7 @@ int guild_send_memberinfoshort(struct map_session_data *sd,int online) { // clea
 	}
 
 	if(sd->state.connect_new) {	//Note that this works because it is invoked in parse_LoadEndAck before connect_new is cleared.
-		clif_guild_belonginfo(sd);
+		clif_guild_belonginfo( *sd );
 		sd->guild_emblem_id = g->emblem_id;
 	}
 	return 0;
@@ -1359,7 +1359,7 @@ int guild_emblem_changed(int len,int guild_id,int emblem_id,const char *data) {
 	for(i=0;i<g->max_member;i++){
 		if((sd=g->member[i].sd)!=NULL){
 			sd->guild_emblem_id=emblem_id;
-			clif_guild_belonginfo(sd);
+			clif_guild_belonginfo( *sd );
 			clif_guild_emblem(sd,g);
 			clif_guild_emblem_area(&sd->bl);
 		}
@@ -2009,10 +2009,10 @@ int guild_gm_changed(int guild_id, uint32 account_id, uint32 char_id, time_t tim
 
 	// announce the change to all guild members
 	for( i = 0; i < g->max_member; i++ ) {
-		if( g->member[i].sd && g->member[i].sd->fd ) {
-			clif_guild_basicinfo(g->member[i].sd);
-			clif_guild_memberlist(g->member[i].sd);
-			clif_guild_belonginfo(g->member[i].sd); // Update clientside guildmaster flag
+		if( g->member[i].sd ){
+			clif_guild_basicinfo( *g->member[i].sd );
+			clif_guild_memberlist( *g->member[i].sd );
+			clif_guild_belonginfo( *g->member[i].sd ); // Update clientside guildmaster flag
 		}
 	}
 

+ 8 - 8
src/map/npc.cpp

@@ -2113,18 +2113,18 @@ void run_tomb(struct map_session_data* sd, struct npc_data* nd)
 	strftime(time, sizeof(time), "%H:%M", localtime(&nd->u.tomb.kill_time));
 
 	// TODO: Find exact color?
-	snprintf(buffer, sizeof(buffer), msg_txt(sd,657), nd->u.tomb.md->db->name.c_str());
-	clif_scriptmes(sd, nd->bl.id, buffer);
+	snprintf( buffer, sizeof( buffer ), msg_txt( sd, 657 ), nd->u.tomb.md->db->name.c_str() ); // [ ^EE0000%s^000000 ]
+	clif_scriptmes( *sd, nd->bl.id, buffer );
 
-	clif_scriptmes(sd, nd->bl.id, msg_txt(sd,658));
+	clif_scriptmes( *sd, nd->bl.id, msg_txt( sd, 658 ) ); // Has met its demise
 
-	snprintf(buffer, sizeof(buffer), msg_txt(sd,659), time);
-	clif_scriptmes(sd, nd->bl.id, buffer);
+	snprintf( buffer, sizeof( buffer ), msg_txt( sd, 659 ), time ); // Time of death : ^EE0000%s^000000
+	clif_scriptmes( *sd, nd->bl.id, buffer );
 
-	clif_scriptmes(sd, nd->bl.id, msg_txt(sd,660));
+	clif_scriptmes( *sd, nd->bl.id, msg_txt( sd, 660 ) ); // Defeated by
 
-	snprintf(buffer, sizeof(buffer), msg_txt(sd,661), nd->u.tomb.killer_name[0] ? nd->u.tomb.killer_name : "Unknown");
-	clif_scriptmes(sd, nd->bl.id, buffer);
+	snprintf( buffer, sizeof( buffer ), msg_txt( sd, 661 ), nd->u.tomb.killer_name[0] ? nd->u.tomb.killer_name : "Unknown" ); // [^EE0000%s^000000]
+	clif_scriptmes( *sd, nd->bl.id, buffer );
 
 	clif_scriptclose(sd, nd->bl.id);
 }

+ 21 - 13
src/map/packets.hpp

@@ -207,16 +207,10 @@ struct PACKET_ZC_BROADCAST2{
 	char message[];
 } __attribute__((packed));
 
-struct PACKET_ZC_SPIRITS{
-	int16 packetType;
-	uint32 GID;
-	uint16 amount;
-} __attribute__((packed));
-
-struct PACKET_ZC_UNCONFIRMED_SPIRITS3{
-	int16 packetType;
-	uint32 GID;
-	uint16 amount;
+struct PACKET_ZC_SOULENERGY{
+	int16 PacketType;
+	uint32 AID;
+	uint16 num;
 } __attribute__((packed));
 
 struct PACKET_ZC_ENTRY_QUEUE_INIT {
@@ -336,6 +330,20 @@ struct PACKET_CZ_USE_PACKAGEITEM{
 	uint32 BoxIndex;
 } __attribute__((packed));
 
+struct PACKET_ZC_FRIENDS_LIST_sub{
+	uint32 AID;
+	uint32 CID;
+#if !( PACKETVER_MAIN_NUM >= 20180307 || PACKETVER_RE_NUM >= 20180221 || PACKETVER_ZERO_NUM >= 20180328 ) || PACKETVER >= 20200902
+	char name[NAME_LENGTH];
+#endif
+} __attribute__((packed));
+
+struct PACKET_ZC_FRIENDS_LIST{
+	int16 packetType;
+	int16 PacketLength;
+	struct PACKET_ZC_FRIENDS_LIST_sub friends[];
+} __attribute__((packed));
+
 // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
 #if !defined( sun ) && ( !defined( __NETBSD__ ) || __NetBSD_Version__ >= 600000000 )
 	#pragma pack( pop )
@@ -346,12 +354,10 @@ DEFINE_PACKET_HEADER(ZC_BROADCAST, 0x9a)
 DEFINE_PACKET_HEADER(ZC_ITEM_ENTRY, 0x9d)
 DEFINE_PACKET_HEADER(ZC_PC_PURCHASE_RESULT, 0xca)
 DEFINE_PACKET_HEADER(ZC_MVP_GETTING_ITEM, 0x10a)
-DEFINE_PACKET_HEADER(ZC_ACK_TOUSESKILL, 0x110)
 DEFINE_PACKET_HEADER(CZ_REQMAKINGITEM, 0x18e)
 DEFINE_PACKET_HEADER(ZC_ACK_REQMAKINGITEM, 0x18f)
 DEFINE_PACKET_HEADER(CZ_REQ_MAKINGARROW, 0x1ae)
 DEFINE_PACKET_HEADER(ZC_BROADCAST2, 0x1c3)
-DEFINE_PACKET_HEADER(ZC_SPIRITS, 0x1d0)
 #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200724
 	DEFINE_PACKET_HEADER(CZ_REQ_ITEMREPAIR, 0xb66)
 #else
@@ -362,6 +368,7 @@ DEFINE_PACKET_HEADER(ZC_SPIRITS, 0x1d0)
 #else
 	DEFINE_PACKET_HEADER(ZC_CHANGE_GUILD, 0x1b4)
 #endif
+DEFINE_PACKET_HEADER(ZC_FRIENDS_LIST, 0x201)
 DEFINE_PACKET_HEADER(ZC_NOTIFY_WEAPONITEMLIST, 0x221)
 DEFINE_PACKET_HEADER(ZC_ACK_WEAPONREFINE, 0x223)
 DEFINE_PACKET_HEADER(CZ_REQ_MAKINGITEM, 0x25b)
@@ -382,12 +389,13 @@ DEFINE_PACKET_HEADER(CZ_REQ_APPLY_BARGAIN_SALE_ITEM2, 0xa3d)
 DEFINE_PACKET_HEADER(CZ_REQ_STYLE_CHANGE, 0xa46)
 DEFINE_PACKET_HEADER(ZC_STYLE_CHANGE_RES, 0xa47)
 DEFINE_PACKET_HEADER(CZ_REQ_STYLE_CLOSE, 0xa48)
+DEFINE_PACKET_HEADER(ZC_GROUP_ISALIVE, 0xab2)
 DEFINE_PACKET_HEADER(CZ_REQ_STYLE_CHANGE2, 0xafc)
 DEFINE_PACKET_HEADER(ZC_REMOVE_EFFECT, 0x0b0d)
 DEFINE_PACKET_HEADER(CZ_UNCONFIRMED_TSTATUS_UP, 0x0b24)
 DEFINE_PACKET_HEADER(CZ_GUILD_EMBLEM_CHANGE2, 0x0b46)
 DEFINE_PACKET_HEADER(ZC_TARGET_SPIRITS, 0xb68)
-DEFINE_PACKET_HEADER(ZC_UNCONFIRMED_SPIRITS3, 0xb73)
+DEFINE_PACKET_HEADER(ZC_SOULENERGY, 0xb73)
 DEFINE_PACKET_HEADER(CZ_UNCONFIRMED_RODEX_RETURN, 0xb98)
 DEFINE_PACKET_HEADER(ZC_SUMMON_HP_INIT, 0xb6b)
 DEFINE_PACKET_HEADER(ZC_SUMMON_HP_UPDATE, 0xb6c)

+ 222 - 22
src/map/packets_struct.hpp

@@ -212,6 +212,14 @@ enum packet_headers {
 #else
 	cartlistequipType = 0x122,
 #endif
+#if PACKETVER < 20100105
+	vendinglistType = 0x133,
+#elif !(PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723)
+	vendinglistType = 0x800,
+#else
+	vendinglistType = 0xb3d,
+#endif
+	openvendingType = 0x136,
 #if PACKETVER >= 20120925
 	equipitemType = 0x998,
 #else
@@ -573,7 +581,7 @@ struct PACKET_ZC_ITEM_PICKUP_ACK {
 #endif
 #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723
 	uint8 refiningLevel;
-	uint8 enchantgrade;
+	uint8 grade;
 #endif  // PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723
 } __attribute__((packed));
 
@@ -1011,8 +1019,35 @@ struct packet_script_clear {
 	uint32 NpcID;
 } __attribute__((packed));
 
+#if PACKETVER_MAIN_NUM >= 20220518 || PACKETVER_ZERO_NUM >= 20220518
+struct PACKET_ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN_item {
+	int16 PacketType;
+	int16 PacketLength;
+	uint8 type;
+#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
+	uint32 ItemID;
+#else
+	uint16 ItemID;
+#endif
+	int8 len;
+	char Name[NAME_LENGTH];
+	int8 boxItemID_len;
+#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
+	uint32 BoxItemID;
+#else
+	uint16 BoxItemID;
+#endif
+	int8 refineLevel_len;
+#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
+	uint32 refineLevel;
+#else
+	uint16 refineLevel;
+#endif
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN_item, 0x0bba)
+#elif PACKETVER >= 20091201
 /* made possible thanks to Yommy!! */
-struct packet_package_item_announce {
+struct PACKET_ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN_item {
 	int16 PacketType;
 	int16 PacketLength;
 	uint8 type;
@@ -1023,13 +1058,15 @@ struct packet_package_item_announce {
 #endif
 	int8 len;
 	char Name[NAME_LENGTH];
-	int8 unknown;  // probably unused
+	int8 boxItemID_len;
 #if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
 	uint32 BoxItemID;
 #else
 	uint16 BoxItemID;
 #endif
 } __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_BROADCASTING_SPECIAL_ITEM_OBTAIN_item, 0x07fd)
+#endif
 
 /* made possible thanks to Yommy!! */
 struct packet_item_drop_announce {
@@ -1724,7 +1761,7 @@ struct PACKET_ZC_ACK_ADD_ITEM_RODEX {
 	uint8 favorite;
 	uint32 location;
 	int8 refiningLevel;
-	uint8 enchantgrade;
+	int8 grade;
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_ACK_ADD_ITEM_RODEX, 0x0b3f);
 #elif PACKETVER >= 20141119
@@ -1904,7 +1941,7 @@ struct PACKET_ZC_ACK_READ_RODEX_SUB {
 	uint16 bindOnEquip;
 	struct ItemOptions option_data[MAX_ITEM_OPTIONS];
 	int8 refiningLevel;
-	int8 enchantgrade;
+	int8 grade;
 } __attribute__((packed));
 
 struct PACKET_ZC_ACK_READ_RODEX {
@@ -2428,6 +2465,7 @@ struct PACKET_ZC_ACK_TOUSESKILL {
 	uint8 flag;
 	uint8 cause;
 } __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_ACK_TOUSESKILL, 0x0110)
 
 #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723
 struct PACKET_ZC_ADD_ITEM_TO_CART {
@@ -2445,7 +2483,7 @@ struct PACKET_ZC_ADD_ITEM_TO_CART {
 	struct EQUIPSLOTINFO slot;
 	struct ItemOptions option_data[MAX_ITEM_OPTIONS];
 	uint8 refine;
-	uint8 enchantgrade;
+	uint8 grade;
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_ADD_ITEM_TO_CART, 0x0b45);
 #elif PACKETVER_MAIN_NUM >= 20140813 || PACKETVER_RE_NUM >= 20140402 || defined(PACKETVER_ZERO)
@@ -2603,7 +2641,7 @@ struct PACKET_ZC_ADD_EXCHANGE_ITEM {
 #endif  // PACKETVER_MAIN_NUM >= 20161102 || PACKETVER_RE_NUM >= 20161026 || defined(PACKETVER_ZERO)
 #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723
 	uint8 refine;
-	uint8 enchantgrade;
+	uint8 grade;
 #endif  // PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723
 } __attribute__((packed));
 
@@ -2654,7 +2692,7 @@ struct PACKET_ZC_ITEM_PICKUP_PARTY {
 	uint16 location;
 	uint8 itemType;
 	uint8 refine;
-	uint8 enchantgrade;
+	uint8 grade;
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_ITEM_PICKUP_PARTY, 0x0b67);
 #elif PACKETVER >= 20070731
@@ -2876,7 +2914,7 @@ struct REPAIRITEM_INFO2 {
 #endif
 	struct EQUIPSLOTINFO slot;  // unused?
 	uint8 refine;  // unused?
-	uint8 enchantgrade;  // unused?
+	uint8 grade;  // unused?
 } __attribute__((packed));
 #elif PACKETVER >= 20191106
 struct REPAIRITEM_INFO2 {
@@ -2974,7 +3012,7 @@ struct PACKET_ZC_PC_PURCHASE_MYITEMLIST_sub {
 	struct EQUIPSLOTINFO slot;
 	struct ItemOptions option_data[MAX_ITEM_OPTIONS];
 	uint8 refine;
-	uint8 enchantgrade;
+	uint8 grade;
 } __attribute__((packed));
 struct PACKET_ZC_PC_PURCHASE_MYITEMLIST {
 	int16 packetType;
@@ -3120,7 +3158,7 @@ struct PACKET_ZC_PC_PURCHASE_ITEMLIST_FROMMC_sub {
 	uint32 location;
 	uint16 viewSprite;
 	uint8 refine;
-	uint8 enchantgrade;
+	uint8 grade;
 } __attribute__((packed));
 
 struct PACKET_ZC_PC_PURCHASE_ITEMLIST_FROMMC {
@@ -3158,7 +3196,7 @@ struct PACKET_ZC_PC_PURCHASE_ITEMLIST_FROMMC_sub {
 #endif
 #if PACKETVER_MAIN_NUM >= 20200916 || PACKETVER_RE_NUM >= 20200723
 	uint8 refine;
-	uint8 enchantgrade;
+	uint8 grade;
 #endif
 } __attribute__((packed));
 
@@ -3406,7 +3444,7 @@ struct PACKET_ZC_SEARCH_STORE_INFO_ACK_sub {
 	struct EQUIPSLOTINFO slot;
 	struct ItemOptions option_data[MAX_ITEM_OPTIONS];
 	uint8 refine;
-	uint8 enchantgrade;
+	uint8 grade;
 } __attribute__((packed));
 
 struct PACKET_ZC_SEARCH_STORE_INFO_ACK {
@@ -3568,11 +3606,14 @@ struct PACKET_ZC_GUILD_POSITION {
 	char position[];
 } __attribute__((packed));
 
-struct PACKET_ZC_INVENTORY_MOVE_FAILED {
+#if PACKETVER_MAIN_NUM >= 20161214 || PACKETVER_RE_NUM >= 20161130 || defined(PACKETVER_ZERO)
+struct PACKET_ZC_MOVE_ITEM_FAILED {
 	int16 packetType;
-	int16 index;
-	int16 unknown;
+	int16 itemIndex;
+	int16 itemCount;
 } __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_MOVE_ITEM_FAILED, 0x0aa7);
+#endif  // PACKETVER_MAIN_NUM >= 20161214 || PACKETVER_RE_NUM >= 20161130 || defined(PACKETVER_ZERO)
 
 #if PACKETVER_MAIN_NUM >= 20161019 || PACKETVER_RE_NUM >= 20160921 || defined(PACKETVER_ZERO)
 #define PACKET_ZC_ACK_BAN_GUILD PACKET_ZC_ACK_BAN_GUILD3
@@ -3677,7 +3718,7 @@ struct PACKET_ZC_CHANGE_ITEM_OPTION {
 	struct EQUIPSLOTINFO slot;
 	struct ItemOptions option_data[MAX_ITEM_OPTIONS];
 	uint8 refiningLevel;
-	uint8 enchantgrade;
+	uint8 grade;
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_CHANGE_ITEM_OPTION, 0x0b43);
 #elif PACKETVER_MAIN_NUM >= 20181017 || PACKETVER_RE_NUM >= 20181017 || PACKETVER_ZERO_NUM >= 20181024
@@ -5345,7 +5386,7 @@ DEFINE_PACKET_HEADER(CZ_GRADE_ENCHANT_CLOSE_UI, 0x0b5c);
 struct PACKET_ZC_GRADE_ENCHANT_ACK {
 	int16 PacketType;
 	int16 index;
-	int16 enchantgrade;
+	int16 grade;
 	int result;
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_GRADE_ENCHANT_ACK, 0x0b5d);
@@ -5356,7 +5397,7 @@ struct PACKET_ZC_GRADE_ENCHANT_BROADCAST_RESULT {
 	int16 packetType;
 	char name[NAME_LENGTH];
 	uint32 itemId;
-	int16 enchantgrade;
+	int16 grade;
 	int8 status;
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_GRADE_ENCHANT_BROADCAST_RESULT, 0x0b5e);
@@ -5425,16 +5466,15 @@ DEFINE_PACKET_HEADER(ZC_UPDATE_GDID, 0x016c)
 #endif  // PACKETVER_MAIN_NUM >= 20220216
 
 #if PACKETVER_MAIN_NUM >= 20220216
-struct PACKET_CZ_SEE_GUILD_MEMBERS {
+struct PACKET_CZ_APPROXIMATE_ACTOR {
 	int16 PacketType;
 	uint32 masterGID;
 	uint16 unused1;
 	uint8 unused2;
 } __attribute__((packed));
-DEFINE_PACKET_HEADER(CZ_SEE_GUILD_MEMBERS, 0x0bb0)
+DEFINE_PACKET_HEADER(CZ_APPROXIMATE_ACTOR, 0x0bb0)
 #endif  // PACKETVER_MAIN_NUM >= 20220216
 
-
 struct PACKET_CZ_CONTACTNPC {
 	int16 PacketType;
 	uint32 AID;
@@ -5486,6 +5526,166 @@ struct PACKET_ZC_CHANGESTATE_PET {
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_CHANGESTATE_PET, 0x01a4)
 
+struct PACKET_ZC_SPIRITS {
+	int16 PacketType;
+	uint32 AID;
+	int16 num;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_SPIRITS, 0x01d0)
+
+struct PACKET_ZC_SAY_DIALOG {
+	int16 PacketType;
+	int16 PacketLength;
+	uint32 NpcID;
+	char message[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_SAY_DIALOG, 0x00b4)
+
+#if PACKETVER_MAIN_NUM >= 20220504
+struct PACKET_ZC_SAY_DIALOG2 {
+	int16 PacketType;
+	int16 PacketLength;
+	uint32 NpcID;
+	uint8 type;
+	char message[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_SAY_DIALOG2, 0x0972)
+#else  // PACKETVER_MAIN_NUM >= 20220504
+struct PACKET_ZC_SAY_DIALOG2 {
+	int16 PacketType;
+	int16 PacketLength;
+	uint32 NpcID;
+	char message[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_SAY_DIALOG2, 0x00b4)
+#endif  // PACKETVER_MAIN_NUM >= 20220504
+
+struct PACKET_ZC_WAIT_DIALOG {
+	int16 PacketType;
+	uint32 NpcID;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_WAIT_DIALOG, 0x00b5)
+
+#if PACKETVER_MAIN_NUM >= 20220504
+struct PACKET_ZC_WAIT_DIALOG2 {
+	int16 PacketType;
+	uint32 NpcID;
+	uint8 type;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_WAIT_DIALOG2, 0x0973)
+#else  // PACKETVER_MAIN_NUM >= 20220504
+struct PACKET_ZC_WAIT_DIALOG2 {
+	int16 PacketType;
+	uint32 NpcID;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_WAIT_DIALOG2, 0x00b5)
+#endif  // PACKETVER_MAIN_NUM >= 20220504
+
+#if PACKETVER_MAIN_NUM >= 20220504
+struct PACKET_ZC_DIALOG_WINDOW_SIZE {
+	int16 PacketType;
+	int height;
+	int width;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_DIALOG_WINDOW_SIZE, 0x0ba2)
+#endif  // PACKETVER_MAIN_NUM >= 20220504
+
+#if PACKETVER_MAIN_NUM >= 20220504
+struct PACKET_ZC_DIALOG_WINDOW_POS {
+	int16 PacketType;
+	int x;
+	int y;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_DIALOG_WINDOW_POS, 0x0ba3)
+#endif  // PACKETVER_MAIN_NUM >= 20220504
+
+#if PACKETVER_MAIN_NUM >= 20220504
+struct PACKET_ZC_DIALOG_WINDOW_POS2 {
+	int16 PacketType;
+	int x;
+	int y;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_DIALOG_WINDOW_POS2, 0x0bb5)
+#endif  // PACKETVER_MAIN_NUM >= 20220504
+
+#if PACKETVER_MAIN_NUM >= 20220504
+struct PACKET_ZC_PLAY_NPC_BGM {
+	int16 PacketType;
+	int16 PacketLength;
+	uint8 playType;
+	char bgm[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_PLAY_NPC_BGM, 0x0b8c)
+#elif PACKETVER >= 20091201
+struct PACKET_ZC_PLAY_NPC_BGM {
+	int16 PacketType;
+	char bgm[NAME_LENGTH];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_PLAY_NPC_BGM, 0x07fe)
+#endif  // PACKETVER >= 20091201
+
+struct PACKET_CZ_MOVE_ITEM_FROM_BODY_TO_CART {
+	int16 PacketType;
+	int16 index;
+	int count;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_MOVE_ITEM_FROM_BODY_TO_CART, 0x0126)
+
+struct PACKET_ZC_SOUND {
+	int16 PacketType;
+	char name[NAME_LENGTH];
+	uint8 act;
+	uint32 term;
+	uint32 AID;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_SOUND, 0x01d3)
+
+#if PACKETVER >= 20100420
+struct PACKET_ZC_BUYING_STORE_ENTRY {
+	int16 packetType;
+	uint32 makerAID;
+	char storeName[MESSAGE_SIZE];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_BUYING_STORE_ENTRY, 0x0814);
+#endif
+
+struct PACKET_ZC_STORE_ENTRY {
+	int16 packetType;
+	uint32 makerAID;
+	char storeName[MESSAGE_SIZE];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_STORE_ENTRY, 0x0131);
+
+struct CZ_PURCHASE_ITEM_FROMMC {
+	int16 count;
+	int16 index;
+} __attribute__((packed));
+
+struct PACKET_CZ_PC_PURCHASE_ITEMLIST_FROMMC {
+	int16 packetType;
+	int16 packetLength;
+	uint32 AID;
+	struct CZ_PURCHASE_ITEM_FROMMC list[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_PC_PURCHASE_ITEMLIST_FROMMC, 0x0134);
+
+struct PACKET_CZ_PC_PURCHASE_ITEMLIST_FROMMC2 {
+	int16 packetType;
+	int16 packetLength;
+	uint32 AID;
+	uint32 UniqueID;
+	struct CZ_PURCHASE_ITEM_FROMMC list[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_PC_PURCHASE_ITEMLIST_FROMMC2, 0x0801);
+
+#if PACKETVER >= 20100309
+struct PACKET_ZC_DISAPPEAR_BUYING_STORE_ENTRY {
+	int16 packetType;
+	uint32 makerAID;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_DISAPPEAR_BUYING_STORE_ENTRY, 0x0816);
+#endif
+
 #if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
 #pragma pack(pop)
 #endif // not NetBSD < 6 / Solaris

+ 39 - 33
src/map/party.cpp

@@ -153,7 +153,7 @@ int party_create(struct map_session_data *sd,char *name,int item,int item2)
 		return 0;
 
 	if( sd->status.party_id > 0 || sd->party_joining || sd->party_creating ) { // already associated with a party
-		clif_party_created(sd,2);
+		clif_party_created( *sd, 2 );
 		return -2;
 	}
 
@@ -179,7 +179,7 @@ void party_created(uint32 account_id,uint32 char_id,int fail,int party_id,char *
 
 	if( !fail ) {
 		sd->status.party_id = party_id;
-		clif_party_created(sd,0); // Success message
+		clif_party_created( *sd, 0 ); // Success message
 
 		achievement_update_objective(sd, AG_PARTY, 1, 1);
 
@@ -189,7 +189,7 @@ void party_created(uint32 account_id,uint32 char_id,int fail,int party_id,char *
 			party_create_byscript = 0;
 		}
 	} else
-		clif_party_created(sd,1); // "party name already exists"
+		clif_party_created( *sd, 1 ); // "party name already exists"
 }
 
 int party_request_info(int party_id, uint32 char_id)
@@ -355,12 +355,13 @@ int party_recv_info(struct party* sp, uint32 char_id)
 			continue;// not online
 
 		clif_name_area(&sd->bl); //Update other people's display. [Skotlex]
-		clif_party_member_info(p,sd);
+		clif_party_member_info( *p, *sd );
 		// Only send this on party creation, otherwise it will be sent by party_send_movemap [Lemongrass]
 		if( sd->party_creating ){
 			clif_party_option(p,sd,0x100);
 		}
-		clif_party_info(p,NULL);
+
+		clif_party_info( *p );
 
 		if (p->instance_id > 0)
 			instance_reqinfo(sd, p->instance_id);
@@ -368,7 +369,7 @@ int party_recv_info(struct party* sp, uint32 char_id)
 	
 	// If a player was renamed, make sure to resend the party information
 	if( rename ){
-		clif_party_info(p,NULL);
+		clif_party_info( *p );
 	}
 
 	if( char_id != 0 ) { // requester
@@ -402,7 +403,7 @@ int party_invite(struct map_session_data *sd,struct map_session_data *tsd)
 	if (tsd && battle_config.block_account_in_same_party) {
 		ARR_FIND(0, MAX_PARTY, i, p->party.member[i].account_id == tsd->status.account_id);
 		if (i < MAX_PARTY) {
-			clif_party_invite_reply(sd, tsd->status.name, PARTY_REPLY_DUAL);
+			clif_party_invite_reply( *sd, tsd->status.name, PARTY_REPLY_DUAL );
 			return 0;
 		}
 	}
@@ -411,7 +412,7 @@ int party_invite(struct map_session_data *sd,struct map_session_data *tsd)
 	ARR_FIND(0, MAX_PARTY, i, p->party.member[i].account_id == 0);
 
 	if( i == MAX_PARTY ) {
-		clif_party_invite_reply(sd, (tsd?tsd->status.name:""), PARTY_REPLY_FULL);
+		clif_party_invite_reply( *sd, ( tsd ? tsd->status.name : "" ), PARTY_REPLY_FULL );
 		return 0;
 	}
 
@@ -422,32 +423,32 @@ int party_invite(struct map_session_data *sd,struct map_session_data *tsd)
 	}
 
 	if( tsd == NULL) {
-		clif_party_invite_reply(sd, "", PARTY_REPLY_OFFLINE);
+		clif_party_invite_reply( *sd, "", PARTY_REPLY_OFFLINE );
 		return 0;
 	}
 
 	if(!battle_config.invite_request_check) {
 		if (tsd->guild_invite>0 || tsd->trade_partner || tsd->adopt_invite) {
-			clif_party_invite_reply(sd,tsd->status.name,PARTY_REPLY_JOIN_OTHER_PARTY);
+			clif_party_invite_reply( *sd, tsd->status.name, PARTY_REPLY_JOIN_OTHER_PARTY );
 			return 0;
 		}
 	}
 
 	if (!tsd->fd) { //You can't invite someone who has already disconnected.
-		clif_party_invite_reply(sd,tsd->status.name,PARTY_REPLY_REJECTED);
+		clif_party_invite_reply( *sd, tsd->status.name, PARTY_REPLY_REJECTED );
 		return 0;
 	}
 
 	if( tsd->status.party_id > 0 || tsd->party_invite > 0 )
 	{// already associated with a party
-		clif_party_invite_reply(sd,tsd->status.name,PARTY_REPLY_JOIN_OTHER_PARTY);
+		clif_party_invite_reply( *sd, tsd->status.name, PARTY_REPLY_JOIN_OTHER_PARTY );
 		return 0;
 	}
 
 	tsd->party_invite=sd->status.party_id;
 	tsd->party_invite_account=sd->status.account_id;
 
-	clif_party_invite(sd,tsd);
+	clif_party_invite( *sd, *tsd );
 	return 1;
 }
 
@@ -482,7 +483,7 @@ int party_reply_invite(struct map_session_data *sd,int party_id,int flag)
 		sd->party_invite_account = 0;
 
 		if( tsd != NULL )
-			clif_party_invite_reply(tsd,sd->status.name,PARTY_REPLY_REJECTED);
+			clif_party_invite_reply( *tsd, sd->status.name, PARTY_REPLY_REJECTED );
 	}
 
 	return 0;
@@ -538,28 +539,28 @@ int party_member_added(int party_id,uint32 account_id,uint32 char_id, int flag)
 
 	if( flag ) { // failed
 		if( sd2 != NULL )
-			clif_party_invite_reply(sd2,sd->status.name,PARTY_REPLY_FULL);
+			clif_party_invite_reply( *sd2, sd->status.name, PARTY_REPLY_FULL );
 		return 0;
 	}
 
 	sd->status.party_id = party_id;
 
-	clif_party_member_info(p,sd);
+	clif_party_member_info( *p, *sd );
 	clif_party_option(p,sd,0x100);
-	clif_party_info(p,sd);
+	clif_party_info( *p, sd );
 
 	if( sd2 != NULL )
-		clif_party_invite_reply(sd2,sd->status.name,PARTY_REPLY_ACCEPTED);
+		clif_party_invite_reply( *sd2, sd->status.name, PARTY_REPLY_ACCEPTED );
 
 	for( i = 0; i < ARRAYLENGTH(p->data); ++i ) { // hp of the other party members
 		sd2 = p->data[i].sd;
 
 		if( sd2 && sd2->status.account_id != account_id && sd2->status.char_id != char_id )
-			clif_hpmeter_single(sd->fd, sd2->bl.id, sd2->battle_status.hp, sd2->battle_status.max_hp);
+			clif_hpmeter_single( *sd, sd2->bl.id, sd2->battle_status.hp, sd2->battle_status.max_hp );
 	}
 
-	clif_party_hp(sd);
-	clif_party_xy(sd);
+	clif_party_hp( *sd );
+	clif_party_xy( *sd );
 	clif_name_area(&sd->bl); //Update char name's display [Skotlex]
 
 	if (p->instance_id > 0)
@@ -647,8 +648,13 @@ int party_member_withdraw(int party_id, uint32 account_id, uint32 char_id, char
 	struct party_data* p = party_search(party_id);
 
 	if( p ) {
+		struct map_session_data* party_sd = party_getavailablesd( p );
+
+		if( party_sd != nullptr ){
+			clif_party_withdraw( *party_sd, account_id, name, type, PARTY );
+		}
+
 		int i;
-		clif_party_withdraw(party_getavailablesd(p), account_id, name, type, PARTY);
 		ARR_FIND( 0, MAX_PARTY, i, p->party.member[i].account_id == account_id && p->party.member[i].char_id == char_id );
 		if( i < MAX_PARTY ) {
 			memset(&p->party.member[i], 0, sizeof(p->party.member[0]));
@@ -704,8 +710,8 @@ int party_broken(int party_id)
 		instance_destroy( p->instance_id );
 
 	for( i = 0; i < MAX_PARTY; i++ ) {
-		if( p->data[i].sd != NULL ) {
-			clif_party_withdraw(p->data[i].sd,p->party.member[i].account_id,p->party.member[i].name,PARTY_MEMBER_WITHDRAW_EXPEL,SELF);
+		if( p->data[i].sd != nullptr ) {
+			clif_party_withdraw( *p->data[i].sd, p->party.member[i].account_id, p->party.member[i].name, PARTY_MEMBER_WITHDRAW_EXPEL, SELF );
 			p->data[i].sd->status.party_id=0;
 		}
 	}
@@ -838,7 +844,7 @@ int party_changeleader(struct map_session_data *sd, struct map_session_data *tsd
 
 	// Update info.
 	intif_party_leaderchange(p->party.party_id,p->party.member[tmi].account_id,p->party.member[tmi].char_id);
-	clif_party_info(p,NULL);
+	clif_party_info( *p );
 
 	return 1;
 }
@@ -871,7 +877,7 @@ int party_recv_movemap(int party_id,uint32 account_id,uint32 char_id, unsigned s
 	//Check if they still exist on this map server
 	p->data[i].sd = party_sd_check(party_id, account_id, char_id);
 
-	clif_party_info(p,NULL);
+	clif_party_info( *p );
 
 	return 0;
 }
@@ -891,8 +897,8 @@ void party_send_movemap(struct map_session_data *sd)
 	if(sd->state.connect_new) {
 		//Note that this works because this function is invoked before connect_new is cleared.
 		clif_party_option(p,sd,0x100);
-		clif_party_info(p,sd);
-		clif_party_member_info(p,sd);
+		clif_party_info( *p, sd );
+		clif_party_member_info( *p, *sd );
 	}
 
 	if (sd->fd) { // synchronize minimap positions with the rest of the party
@@ -902,8 +908,8 @@ void party_send_movemap(struct map_session_data *sd)
 				p->data[i].sd != sd &&
 				p->data[i].sd->bl.m == sd->bl.m)
 			{
-				clif_party_xy_single(sd->fd, p->data[i].sd);
-				clif_party_xy_single(p->data[i].sd->fd, sd);
+				clif_party_xy_single( *sd, *p->data[i].sd );
+				clif_party_xy_single( *p->data[i].sd, *sd );
 			}
 		}
 	}
@@ -954,7 +960,7 @@ int party_recv_message(int party_id,uint32 account_id,const char *mes,int len)
 	struct party_data *p;
 	if( (p=party_search(party_id))==NULL)
 		return 0;
-	clif_party_message(p,account_id,mes,len);
+	clif_party_message( *p, account_id, mes, len );
 	return 0;
 }
 
@@ -1033,13 +1039,13 @@ TIMER_FUNC(party_send_xy_timer){
 				continue;
 
 			if( p->data[i].x != sd->bl.x || p->data[i].y != sd->bl.y ) { // perform position update
-				clif_party_xy(sd);
+				clif_party_xy( *sd );
 				p->data[i].x = sd->bl.x;
 				p->data[i].y = sd->bl.y;
 			}
 
 			if (battle_config.party_hp_mode && p->data[i].hp != sd->battle_status.hp) { // perform hp update
-				clif_party_hp(sd);
+				clif_party_hp( *sd );
 				p->data[i].hp = sd->battle_status.hp;
 			}
 		}

+ 4 - 4
src/map/pc.cpp

@@ -1863,7 +1863,7 @@ bool pc_authok(struct map_session_data *sd, uint32 login_id2, time_t expiration_
 	         sd->status.name, sd->status.account_id, sd->status.char_id,
 	         CONVIP(ip), sd->group_id);
 	// Send friends list
-	clif_friendslist_send(sd);
+	clif_friendslist_send( *sd );
 
 	if( !changing_mapservers ) {
 
@@ -9292,7 +9292,7 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
 
 	pc_setdead(sd);
 
-	clif_party_dead( sd );
+	clif_party_dead( *sd );
 
 	pc_setparam(sd, SP_PCDIECOUNTER, sd->die_counter+1);
 	pc_setparam(sd, SP_KILLERRID, src?src->id:0);
@@ -10483,7 +10483,7 @@ bool pc_jobchange(struct map_session_data *sd,int job, char upper)
 
 			if( i < MAX_PARTY ){
 				p->party.member[i].class_ = sd->status.class_;
-				clif_party_job_and_level(sd);
+				clif_party_job_and_level( *sd );
 			}
 		}
 	}
@@ -12517,7 +12517,7 @@ bool pc_setstand(struct map_session_data *sd, bool force){
 	sd->ssregen.tick.hp = sd->ssregen.tick.sp = 0;
 	if( pc_isdead( sd ) ){
 		sd->state.dead_sit = sd->vd.dead_sit = 0;
-		clif_party_dead( sd );
+		clif_party_dead( *sd );
 	}else{
 		sd->state.dead_sit = sd->vd.dead_sit = 0;
 	}

+ 12 - 12
src/map/script.cpp

@@ -4906,13 +4906,13 @@ void script_reload(void) {
 /// mes "<message>";
 BUILDIN_FUNC(mes)
 {
-	TBL_PC* sd;
+	struct map_session_data* sd;
 	if( !script_rid2sd(sd) )
 		return SCRIPT_CMD_SUCCESS;
 
 	if( !script_hasdata(st, 3) )
 	{// only a single line detected in the script
-		clif_scriptmes(sd, st->oid, script_getstr(st, 2));
+		clif_scriptmes( *sd, st->oid, script_getstr( st, 2 ) );
 	}
 	else
 	{// parse multiple lines as they exist
@@ -4921,7 +4921,7 @@ BUILDIN_FUNC(mes)
 		for( i = 2; script_hasdata(st, i); i++ )
 		{
 			// send the message to the client
-			clif_scriptmes(sd, st->oid, script_getstr(st, i));
+			clif_scriptmes( *sd, st->oid, script_getstr( st, i ) );
 		}
 	}
 
@@ -4935,7 +4935,7 @@ BUILDIN_FUNC(mes)
 /// next;
 BUILDIN_FUNC(next)
 {
-	TBL_PC* sd;
+	struct map_session_data* sd;
 
 	if (!st->mes_active) {
 		ShowWarning("buildin_next: There is no mes active.\n");
@@ -4948,7 +4948,7 @@ BUILDIN_FUNC(next)
 	sd->npc_idle_type = NPCT_WAIT;
 #endif
 	st->state = STOP;
-	clif_scriptnext(sd, st->oid);
+	clif_scriptnext( *sd, st->oid );
 	return SCRIPT_CMD_SUCCESS;
 }
 
@@ -14951,7 +14951,7 @@ BUILDIN_FUNC(playBGM)
 	struct map_session_data* sd;
 
 	if( script_rid2sd(sd) ) {
-		clif_playBGM(sd, script_getstr(st,2));
+		clif_playBGM( *sd, script_getstr( st, 2 ) );
 	}
 	return SCRIPT_CMD_SUCCESS;
 }
@@ -14959,14 +14959,14 @@ BUILDIN_FUNC(playBGM)
 static int playBGM_sub(struct block_list* bl,va_list ap)
 {
 	const char* name = va_arg(ap,const char*);
-	clif_playBGM(BL_CAST(BL_PC, bl), name);
+	clif_playBGM( *BL_CAST( BL_PC, bl ), name );
 	return 0;
 }
 
 static int playBGM_foreachpc_sub(struct map_session_data* sd, va_list args)
 {
 	const char* name = va_arg(args, const char*);
-	clif_playBGM(sd, name);
+	clif_playBGM( *sd, name );
 	return 0;
 }
 
@@ -15003,13 +15003,13 @@ BUILDIN_FUNC(playBGMall)
  *------------------------------------------*/
 BUILDIN_FUNC(soundeffect)
 {
-	TBL_PC* sd;
+	struct map_session_data* sd;
 
 	if(script_rid2sd(sd)){
 		const char* name = script_getstr(st,2);
 		int type = script_getnum(st,3);
 
-		clif_soundeffect(sd,&sd->bl,name,type);
+		clif_soundeffect( sd->bl, name, type, SELF );
 	}
 	return SCRIPT_CMD_SUCCESS;
 }
@@ -15019,7 +15019,7 @@ int soundeffect_sub(struct block_list* bl,va_list ap)
 	char* name = va_arg(ap,char*);
 	int type = va_arg(ap,int);
 
-	clif_soundeffect((TBL_PC *)bl, bl, name, type);
+	clif_soundeffect( *bl, name, type, SELF );
 
 	return 0;
 }
@@ -15050,7 +15050,7 @@ BUILDIN_FUNC(soundeffectall)
 
 	if(!script_hasdata(st,4))
 	{	// area around
-		clif_soundeffectall(bl, name, type, AREA);
+		clif_soundeffect( *bl, name, type, AREA );
 	}
 	else
 	if(!script_hasdata(st,5))

+ 1 - 1
src/map/vending.cpp

@@ -388,7 +388,7 @@ int8 vending_openvending(struct map_session_data* sd, const char* message, const
 	StringBuf_Destroy(&buf);
 
 	clif_openvending(sd,sd->bl.id,sd->vending);
-	clif_showvendingboard(&sd->bl,message,0);
+	clif_showvendingboard( *sd );
 
 	idb_put(vending_db, sd->status.char_id, sd);
 

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio