Jelajahi Sumber

Converted ZC_WHISPER_LIST to struct (#9073)

Lemongrass3110 2 bulan lalu
induk
melakukan
31c57594cc
3 mengubah file dengan 29 tambahan dan 13 penghapusan
  1. 18 12
      src/map/clif.cpp
  2. 0 1
      src/map/clif_packetdb.hpp
  3. 11 0
      src/map/packets.hpp

+ 18 - 12
src/map/clif.cpp

@@ -15190,21 +15190,23 @@ void clif_parse_PMIgnoreAll( int32 fd, map_session_data* sd ){
 }
 
 
-/// Whisper ignore list (ZC_WHISPER_LIST).
-/// 00d4 <packet len>.W { <char name>.24B }*
-void clif_PMIgnoreList(map_session_data* sd)
-{
-	int32 i, fd = sd->fd;
+/// Whisper ignore list.
+/// 00d4 <packet len>.W { <char name>.24B }* (ZC_WHISPER_LIST)
+void clif_PMIgnoreList( map_session_data& sd ){
+	PACKET_ZC_WHISPER_LIST* p = reinterpret_cast<PACKET_ZC_WHISPER_LIST*>( packet_buffer );
+
+	p->packetType = HEADER_ZC_WHISPER_LIST;
+	p->packetSize = sizeof( *p );
+
+	for( size_t i = 0; i < ARRAYLENGTH( sd.ignore ) && sd.ignore[i].name[0]; i++ ){
+		PACKET_ZC_WHISPER_LIST_sub& entry = p->names[i];
 
-	WFIFOHEAD(fd,4+ARRAYLENGTH(sd->ignore)*NAME_LENGTH);
-	WFIFOW(fd,0) = 0xd4;
+		safestrncpy( entry.name, sd.ignore[i].name, sizeof( entry.name ) );
 
-	for( i = 0; i < ARRAYLENGTH(sd->ignore) && sd->ignore[i].name[0]; i++ ) {
-		safestrncpy(WFIFOCP(fd,4+i*NAME_LENGTH), sd->ignore[i].name, NAME_LENGTH);
+		p->packetSize += static_cast<decltype(p->packetSize)>( sizeof( entry ) );
 	}
 
-	WFIFOW(fd,2) = 4+i*NAME_LENGTH;
-	WFIFOSET(fd,WFIFOW(fd,2));
+	clif_send( p, p->packetSize, &sd.bl, SELF );
 }
 
 
@@ -15212,7 +15214,11 @@ void clif_PMIgnoreList(map_session_data* sd)
 /// 00d3
 void clif_parse_PMIgnoreList(int32 fd,map_session_data *sd)
 {
-	clif_PMIgnoreList(sd);
+	if( sd == nullptr ){
+		return;
+	}
+
+	clif_PMIgnoreList( *sd );
 }
 
 

+ 0 - 1
src/map/clif_packetdb.hpp

@@ -78,7 +78,6 @@
 	parseable_packet(0x00cf,27,clif_parse_PMIgnore,2,26);
 	parseable_packet( HEADER_CZ_SETTING_WHISPER_STATE, sizeof( PACKET_CZ_SETTING_WHISPER_STATE ), clif_parse_PMIgnoreAll, 0 );
 	parseable_packet(0x00d3,2,clif_parse_PMIgnoreList,0);
-	packet(0x00d4,-1);
 	parseable_packet( HEADER_CZ_CREATE_CHATROOM, -1, clif_parse_CreateChatRoom, 0 );
 	parseable_packet( HEADER_CZ_REQ_ENTER_ROOM, sizeof( PACKET_CZ_REQ_ENTER_ROOM ), clif_parse_ChatAddMember, 0 );
 	parseable_packet( HEADER_CZ_CHANGE_CHATROOM, -1, clif_parse_ChatRoomStatusChange, 0 );

+ 11 - 0
src/map/packets.hpp

@@ -2008,6 +2008,17 @@ struct PACKET_CZ_SETTING_WHISPER_STATE{
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(CZ_SETTING_WHISPER_STATE, 0xd0);
 
+struct PACKET_ZC_WHISPER_LIST_sub{
+	char name[NAME_LENGTH];
+} __attribute__((packed));
+
+struct PACKET_ZC_WHISPER_LIST{
+	int16 packetType;
+	uint16 packetSize;
+	PACKET_ZC_WHISPER_LIST_sub names[];
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_WHISPER_LIST, 0xd4);
+
 // 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 )