diff --git a/src/map/chat.cpp b/src/map/chat.cpp index 6f4e9075c7..8612cec409 100644 --- a/src/map/chat.cpp +++ b/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); diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 35716321c2..30d19fbe81 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -4514,23 +4514,16 @@ void clif_changechatstatus(chat_data& cd) { } -/// Removes the chatroom (ZC_DESTROY_ROOM). -/// 00d8 .L -void clif_clearchat(struct chat_data *cd,int fd) -{ - unsigned char buf[32]; +/// Removes the chatroom +/// 00d8 .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); } diff --git a/src/map/clif.hpp b/src/map/clif.hpp index 493adeeb0a..82d50f2987 100644 --- a/src/map/clif.hpp +++ b/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); diff --git a/src/map/clif_packetdb.hpp b/src/map/clif_packetdb.hpp index af5bdd1644..0bd77dc2fd 100644 --- a/src/map/clif_packetdb.hpp +++ b/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); diff --git a/src/map/packets.hpp b/src/map/packets.hpp index ca4606959d..22ebae31ac 100644 --- a/src/map/packets.hpp +++ b/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];