Procházet zdrojové kódy

Converted ZC_ITEMCOMPOSITION_LIST to struct

Lemongrass3110 před 3 měsíci
rodič
revize
3850a86bd9
2 změnil soubory, kde provedl 23 přidání a 9 odebrání
  1. 12 9
      src/map/clif.cpp
  2. 11 0
      src/map/packets.hpp

+ 12 - 9
src/map/clif.cpp

@@ -7057,13 +7057,11 @@ void clif_solved_charname( map_session_data& sd, uint32 charid, const char* name
 }
 
 
-/// Presents a list of items that can be carded/composed (ZC_ITEMCOMPOSITION_LIST).
-/// 017b <packet len>.W { <name id>.W }*
+/// Presents a list of items that can be carded/composed.
+/// 017b <packet len>.W { <name id>.W }* (ZC_ITEMCOMPOSITION_LIST)
 void clif_use_card(map_session_data *sd,int32 idx)
 {
 	int32 i,c,ep;
-	int32 fd=sd->fd;
-
 	nullpo_retv(sd);
 	if (idx < 0 || idx >= MAX_INVENTORY) //Crash-fix from bad packets.
 		return;
@@ -7072,8 +7070,11 @@ void clif_use_card(map_session_data *sd,int32 idx)
 		return; //Avoid parsing invalid item indexes (no card/no item)
 
 	ep=sd->inventory_data[idx]->equip;
-	WFIFOHEAD(fd,MAX_INVENTORY * 2 + 4);
-	WFIFOW(fd,0)=0x17b;
+
+	PACKET_ZC_ITEMCOMPOSITION_LIST* p = reinterpret_cast<PACKET_ZC_ITEMCOMPOSITION_LIST*>( packet_buffer );
+
+	p->packetType = HEADER_ZC_ITEMCOMPOSITION_LIST;
+	p->packetLength = sizeof( *p );
 
 	for(i=c=0;i<MAX_INVENTORY;i++){
 		int32 j;
@@ -7104,14 +7105,16 @@ void clif_use_card(map_session_data *sd,int32 idx)
 		if( sd->inventory.u.items_inventory[i].equip > 0 )	// Do not check items that are already equipped
 			continue;
 
-		WFIFOW(fd,4+c*2)=i+2;
+		PACKET_ZC_ITEMCOMPOSITION_LIST_sub& entry = p->items[c];
+
+		entry.inventory_index = client_index( i );
+		p->packetLength += static_cast<decltype(p->packetLength)>( sizeof( entry ) );
 		c++;
 	}
 
 	if( !c ) return;	// no item is available for card insertion
 
-	WFIFOW(fd,2)=4+c*2;
-	WFIFOSET(fd,WFIFOW(fd,2));
+	clif_send( p, p->packetLength, &sd->bl, SELF );
 }
 
 

+ 11 - 0
src/map/packets.hpp

@@ -1875,6 +1875,17 @@ struct PACKET_CZ_MAKE_GROUP2{
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(CZ_MAKE_GROUP2, 0x1e8);
 
+struct PACKET_ZC_ITEMCOMPOSITION_LIST_sub{
+	int16 inventory_index;
+} __attribute__((packed));
+
+struct PACKET_ZC_ITEMCOMPOSITION_LIST{
+	int16 packetType;
+	int16 packetLength;
+	PACKET_ZC_ITEMCOMPOSITION_LIST_sub items[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_ITEMCOMPOSITION_LIST, 0x17b);
+
 // 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 )