Jelajahi Sumber

Converted CZ_INPUT_EDITDLGSTR to struct (#9002)

Lemongrass3110 4 bulan lalu
induk
melakukan
9619dc0d7e
3 mengubah file dengan 19 tambahan dan 9 penghapusan
  1. 10 8
      src/map/clif.cpp
  2. 1 1
      src/map/clif_packetdb.hpp
  3. 8 0
      src/map/packets.hpp

+ 10 - 8
src/map/clif.cpp

@@ -13315,13 +13315,15 @@ void clif_parse_NpcAmountInput(int32 fd,map_session_data *sd){
 }
 
 
-/// NPC text input dialog value (CZ_INPUT_EDITDLGSTR).
-/// 01d5 <packet len>.W <npc id>.L <string>.?B
+/// NPC text input dialog value.
+/// 01d5 <packet len>.W <npc id>.L <string>.?B (CZ_INPUT_EDITDLGSTR)
 void clif_parse_NpcStringInput(int32 fd, map_session_data* sd){
-	struct s_packet_db* info = &packet_db[RFIFOW(fd,0)];
-	int32 message_len = RFIFOW(fd,info->pos[0])-8;
-	int32 npcid = RFIFOL(fd,info->pos[1]);
-	const char* message = RFIFOCP(fd,info->pos[2]);
+	if( sd == nullptr ){
+		return;
+	}
+
+	const PACKET_CZ_INPUT_EDITDLGSTR* p = reinterpret_cast<PACKET_CZ_INPUT_EDITDLGSTR*>( RFIFOP( fd, 0 ) );
+	size_t message_len = p->packetSize - sizeof( *p );
 
 	if( message_len <= 0 )
 		return; // invalid input
@@ -13330,13 +13332,13 @@ void clif_parse_NpcStringInput(int32 fd, map_session_data* sd){
 	message_len++;
 #endif
 
-	safestrncpy(sd->npc_str, message, min(message_len,CHATBOX_SIZE));
+	safestrncpy( sd->npc_str, p->value, min( message_len, CHATBOX_SIZE ) );
 
 	if( battle_config.idletime_option&IDLE_NPC_INPUT ){
 		sd->idletime = last_tick;
 	}
 
-	npc_scriptcont(sd, npcid, false);
+	npc_scriptcont( sd, p->GID, false );
 }
 
 

+ 1 - 1
src/map/clif_packetdb.hpp

@@ -234,7 +234,7 @@
 	parseable_packet(0x01ce,6,clif_parse_AutoSpell,2);
 	packet(0x01cf,28);
 	packet(0x01d0,8);
-	parseable_packet(0x01d5,-1,clif_parse_NpcStringInput,2,4,8);
+	parseable_packet( HEADER_CZ_INPUT_EDITDLGSTR, -1, clif_parse_NpcStringInput, 0 );
 	packet(0x01d7,11);
 	packet(0x01d8,54);
 	packet(0x01d9,53);

+ 8 - 0
src/map/packets.hpp

@@ -1776,6 +1776,14 @@ struct PACKET_CZ_INPUT_EDITDLG{
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(CZ_INPUT_EDITDLG, 0x143);
 
+struct PACKET_CZ_INPUT_EDITDLGSTR{
+	int16 packetType;
+	uint16 packetSize;
+	int32 GID;
+	char value[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(CZ_INPUT_EDITDLGSTR, 0x1d5);
+
 // 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 )