浏览代码

Converted CZ_REQ_ITEMCOMPOSITION to struct (#8997)

Lemongrass3110 3 月之前
父节点
当前提交
6e7dd2ce6b
共有 3 个文件被更改,包括 28 次插入4 次删除
  1. 20 3
      src/map/clif.cpp
  2. 1 1
      src/map/clif_packetdb.hpp
  3. 7 0
      src/map/packets.hpp

+ 20 - 3
src/map/clif.cpp

@@ -13460,14 +13460,31 @@ void clif_parse_UseCard(int32 fd,map_session_data *sd)
 }
 
 
-/// Answer to carding/composing item selection dialog (CZ_REQ_ITEMCOMPOSITION).
-/// 017c <card index>.W <equip index>.W
+/// Answer to carding/composing item selection dialog.
+/// 017c <card index>.W <equip index>.W (CZ_REQ_ITEMCOMPOSITION)
 void clif_parse_InsertCard(int32 fd,map_session_data *sd)
 {
+	if( sd == nullptr ){
+		return;
+	}
+
 	struct s_packet_db* info = &packet_db[RFIFOW(fd,0)];
 	if (sd->state.trading != 0)
 		return;
-	pc_insert_card(sd,RFIFOW(fd,info->pos[0])-2,RFIFOW(fd,info->pos[1])-2);
+
+	const PACKET_CZ_REQ_ITEMCOMPOSITION* p = reinterpret_cast<PACKET_CZ_REQ_ITEMCOMPOSITION*>( RFIFOP( fd, 0 ) );
+	uint16 card_idx = server_index( p->index_card );
+	uint16 equip_idx = server_index( p->index_equip );
+
+	if( card_idx >= MAX_INVENTORY ){
+		return;
+	}
+
+	if( equip_idx >= MAX_INVENTORY ){
+		return;
+	}
+
+	pc_insert_card( sd, card_idx, equip_idx );
 }
 
 

+ 1 - 1
src/map/clif_packetdb.hpp

@@ -179,7 +179,7 @@
 	parseable_packet( HEADER_CZ_REQ_ITEMIDENTIFY, sizeof( PACKET_CZ_REQ_ITEMIDENTIFY ), clif_parse_ItemIdentify, 0 );
 	parseable_packet( HEADER_CZ_REQ_ITEMCOMPOSITION_LIST, sizeof( PACKET_CZ_REQ_ITEMCOMPOSITION_LIST ), clif_parse_UseCard, 0 );
 	packet(0x017b,-1);
-	parseable_packet(0x017c,6,clif_parse_InsertCard,2,4);
+	parseable_packet( HEADER_CZ_REQ_ITEMCOMPOSITION, sizeof( PACKET_CZ_REQ_ITEMCOMPOSITION ), clif_parse_InsertCard, 0 );
 	parseable_packet(0x017e,-1,clif_parse_GuildMessage,2,4);
 	parseable_packet(0x0180,6,clif_parse_GuildOpposition,2);
 	packet(0x0182,106);

+ 7 - 0
src/map/packets.hpp

@@ -1821,6 +1821,13 @@ struct PACKET_CZ_REQ_ITEMCOMPOSITION_LIST{
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(CZ_REQ_ITEMCOMPOSITION_LIST, 0x17a);
 
+struct PACKET_CZ_REQ_ITEMCOMPOSITION{
+	int16 packetType;
+	uint16 index_card;
+	uint16 index_equip;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_REQ_ITEMCOMPOSITION, 0x17c);
+
 // 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 )