ソースを参照

Converted ZC_DESTROY_ROOM to struct (#8591)

Co-authored-by: Aleos <aleos89@users.noreply.github.com>
Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
AoShinHo 8 ヶ月 前
コミット
d382b3f55a
5 ファイル変更19 行追加21 行削除
  1. 4 4
      src/map/chat.cpp
  2. 8 15
      src/map/clif.cpp
  3. 1 1
      src/map/clif.hpp
  4. 0 1
      src/map/clif_packetdb.hpp
  5. 6 0
      src/map/packets.hpp

+ 4 - 4
src/map/chat.cpp

@@ -218,7 +218,7 @@ int chat_leavechat(map_session_data* sd, bool kicked)
 		cd->usersd[i] = cd->usersd[i+1];
 
 	if( cd->users == 0 && cd->owner->type == BL_PC ) { // Delete empty chatroom
-		clif_clearchat(cd, 0);
+		clif_clearchat(*cd);
 		db_destroy(cd->kick_list);
 		map_deliddb(&cd->bl);
 		map_delblock(&cd->bl);
@@ -235,7 +235,7 @@ int chat_leavechat(map_session_data* sd, bool kicked)
 	if( leavechar == 0 && cd->owner->type == BL_PC ) { // Set and announce new owner
 		cd->owner = (struct block_list*) cd->usersd[0];
 		clif_changechatowner(cd, cd->usersd[0]);
-		clif_clearchat(cd, 0);
+		clif_clearchat(*cd);
 
 		//Adjust Chat location after owner has been changed.
 		map_delblock( &cd->bl );
@@ -276,7 +276,7 @@ int chat_changechatowner(map_session_data* sd, const char* nextownername)
 		return -1;  // name not found
 
 	// erase temporarily
-	clif_clearchat(cd,0);
+	clif_clearchat(*cd);
 
 	// set new owner
 	cd->owner = (struct block_list*) cd->usersd[i];
@@ -437,7 +437,7 @@ int chat_deletenpcchat(struct npc_data* nd)
 		return 0;
 
 	chat_npckickall(cd);
-	clif_clearchat(cd, 0);
+	clif_clearchat(*cd);
 	map_deliddb(&cd->bl);
 	map_delblock(&cd->bl);
 	map_freeblock(&cd->bl);

+ 8 - 15
src/map/clif.cpp

@@ -4514,23 +4514,16 @@ void clif_changechatstatus(chat_data& cd) {
 }
 
 
-/// Removes the chatroom (ZC_DESTROY_ROOM).
-/// 00d8 <chat id>.L
-void clif_clearchat(struct chat_data *cd,int fd)
-{
-	unsigned char buf[32];
+/// Removes the chatroom
+/// 00d8 <chat id>.L (ZC_DESTROY_ROOM)
+void clif_clearchat(chat_data &cd){
 
-	nullpo_retv(cd);
+	PACKET_ZC_DESTROY_ROOM p{};
 
-	WBUFW(buf,0) = 0xd8;
-	WBUFL(buf,2) = cd->bl.id;
-	if( session_isActive(fd) ) {
-		WFIFOHEAD(fd,packet_len(0xd8));
-		memcpy(WFIFOP(fd,0),buf,packet_len(0xd8));
-		WFIFOSET(fd,packet_len(0xd8));
-	} else {
-		clif_send(buf,packet_len(0xd8),cd->owner,AREA_WOSC);
-	}
+	p.packetType = HEADER_ZC_DESTROY_ROOM;
+	p.chatId = cd.bl.id;
+
+	clif_send(&p,sizeof(p),cd.owner,AREA_WOSC);
 }
 
 

+ 1 - 1
src/map/clif.hpp

@@ -888,7 +888,7 @@ void clif_joinchatfail( map_session_data& sd, e_refuse_enter_room result );
 void clif_joinchatok(map_session_data& sd,chat_data& cd);
 void clif_addchat(struct chat_data* cd,map_session_data *sd);	// chat
 void clif_changechatowner(struct chat_data* cd, map_session_data* sd);	// chat
-void clif_clearchat(struct chat_data *cd,int fd);	// area or fd
+void clif_clearchat(chat_data &cd);
 void clif_leavechat(struct chat_data* cd, map_session_data* sd, bool flag);	// chat
 void clif_changechatstatus(chat_data& cd);
 void clif_refresh_storagewindow(map_session_data *sd);

+ 0 - 1
src/map/clif_packetdb.hpp

@@ -86,7 +86,6 @@
 	packet(0x00d4,-1);
 	parseable_packet(0x00d5,-1,clif_parse_CreateChatRoom,2,4,6,7,15);
 	packet(0x00d7,-1);
-	packet(0x00d8,6);
 	parseable_packet(0x00d9,14,clif_parse_ChatAddMember,2,6);
 	packet(0x00dc,28);
 	packet(0x00dd,29);

+ 6 - 0
src/map/packets.hpp

@@ -1015,6 +1015,12 @@ struct PACKET_ZC_REFUSE_ENTER_ROOM {
 } __attribute__((packed));
 DEFINE_PACKET_HEADER(ZC_REFUSE_ENTER_ROOM, 0xda);
 
+struct PACKET_ZC_DESTROY_ROOM {
+	int16 packetType;
+	uint32 chatId;
+} __attribute__((packed));
+DEFINE_PACKET_HEADER(ZC_DESTROY_ROOM, 0xd8);
+
 struct PACKET_ZC_ENTER_ROOM_sub{
 	uint32 flag;
 	char name[NAME_LENGTH];