From d6f2f49b6d86c452bcdbd28db32e130a92bec0ff Mon Sep 17 00:00:00 2001 From: AoShinHo <126742159+AoShinRO@users.noreply.github.com> Date: Tue, 3 Sep 2024 13:16:18 -0300 Subject: [PATCH] Converted ZC_ENTER_ROOM to struct (#8590) Co-authored-by: Lemongrass3110 --- src/map/chat.cpp | 3 ++- src/map/clif.cpp | 54 +++++++++++++++++++++------------------ src/map/clif.hpp | 2 +- src/map/clif_packetdb.hpp | 1 - src/map/packets.hpp | 13 ++++++++++ 5 files changed, 45 insertions(+), 28 deletions(-) diff --git a/src/map/chat.cpp b/src/map/chat.cpp index eeb87ef331..9dcbf966cd 100644 --- a/src/map/chat.cpp +++ b/src/map/chat.cpp @@ -168,7 +168,8 @@ int chat_joinchat(map_session_data* sd, int chatid, const char* pass) pc_setchatid(sd,cd->bl.id); - clif_joinchatok(sd, cd); //To the person who newly joined the list of all + // To the person who newly joined the chat + clif_joinchatok(*sd, *cd); clif_addchat(cd, sd); //Reports To the person who already in the chat clif_dispchat(cd, 0); //Reported number of changes to the people around diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 4d735ddd78..29e25c8111 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -4557,38 +4557,42 @@ void clif_joinchatfail( map_session_data& sd, e_refuse_enter_room result ){ /// role: /// 0 = owner (menu) /// 1 = normal -void clif_joinchatok(map_session_data *sd,struct chat_data* cd) -{ - int fd; - int i,t; +void clif_joinchatok(map_session_data& sd, chat_data& cd){ - nullpo_retv(sd); - nullpo_retv(cd); - fd = sd->fd; - if (!session_isActive(fd)) - return; - t = (int)(cd->owner->type == BL_NPC); - WFIFOHEAD(fd, 8 + (28*(cd->users+t))); - WFIFOW(fd, 0) = 0xdb; - WFIFOW(fd, 2) = 8 + (28*(cd->users+t)); - WFIFOL(fd, 4) = cd->bl.id; + PACKET_ZC_ENTER_ROOM* p = reinterpret_cast( packet_buffer ); - if(cd->owner->type == BL_NPC){ - WFIFOL(fd, 30) = 1; - WFIFOL(fd, 8) = 0; - safestrncpy(WFIFOCP(fd, 12), ((struct npc_data *)cd->owner)->name, NAME_LENGTH); - for (i = 0; i < cd->users; i++) { - WFIFOL(fd, 8+(i+1)*28) = 1; - safestrncpy(WFIFOCP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH); + p->packetType = HEADER_ZC_ENTER_ROOM; + p->packetSize = sizeof(*p); + p->chatId = cd.bl.id; + + if(cd.owner->type == BL_NPC){ + PACKET_ZC_ENTER_ROOM_sub& owner = p->members[0]; + owner.flag = 0; + safestrncpy(owner.name, reinterpret_cast(cd.owner)->name, sizeof(owner.name)); + p->packetSize += static_castpacketSize)>( sizeof( owner ) ); + + for (size_t i = 0; i < cd.users; i++) { + PACKET_ZC_ENTER_ROOM_sub& member = p->members[i + 1]; + + member.flag = 1; + safestrncpy(member.name, cd.usersd[i]->status.name, sizeof(member.name)); + + p->packetSize += static_castpacketSize)>( sizeof( member ) ); } }else{ - for (i = 0; i < cd->users; i++) { - WFIFOL(fd, 8+i*28) = (i != 0 || cd->owner->type == BL_NPC); - safestrncpy(WFIFOCP(fd, 8+(i+t)*28+4), cd->usersd[i]->status.name, NAME_LENGTH); + for (size_t i = 0; i < cd.users; i++) { + PACKET_ZC_ENTER_ROOM_sub& member = p->members[i]; + + member.flag = i > 0; + safestrncpy(member.name, cd.usersd[i]->status.name, sizeof(member.name)); + + p->packetSize += static_castpacketSize)>( sizeof( member ) ); } } - WFIFOSET(fd, WFIFOW(fd, 2)); + + clif_send(p,p->packetSize,&sd.bl,SELF); + } diff --git a/src/map/clif.hpp b/src/map/clif.hpp index ffd2bb6998..51e1f98997 100644 --- a/src/map/clif.hpp +++ b/src/map/clif.hpp @@ -884,7 +884,7 @@ void clif_GlobalMessage( block_list& bl, const char* message, enum send_target t void clif_createchat( map_session_data& sd, e_create_chatroom flag ); void clif_dispchat(struct chat_data* cd, int fd); // area or fd void clif_joinchatfail( map_session_data& sd, e_refuse_enter_room result ); -void clif_joinchatok(map_session_data *sd,struct chat_data* cd); // self +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 diff --git a/src/map/clif_packetdb.hpp b/src/map/clif_packetdb.hpp index 8d2b07fbd6..f2e98d23c5 100644 --- a/src/map/clif_packetdb.hpp +++ b/src/map/clif_packetdb.hpp @@ -92,7 +92,6 @@ packet(0x00d7,-1); packet(0x00d8,6); parseable_packet(0x00d9,14,clif_parse_ChatAddMember,2,6); - packet(0x00db,-1); packet(0x00dc,28); packet(0x00dd,29); parseable_packet(0x00de,-1,clif_parse_ChatRoomStatusChange,2,4,6,7,15); diff --git a/src/map/packets.hpp b/src/map/packets.hpp index 74ee30f4c3..5a35037456 100644 --- a/src/map/packets.hpp +++ b/src/map/packets.hpp @@ -906,6 +906,19 @@ struct PACKET_ZC_REFUSE_ENTER_ROOM { } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_REFUSE_ENTER_ROOM, 0xda); +struct PACKET_ZC_ENTER_ROOM_sub{ + uint32 flag; + char name[NAME_LENGTH]; +} __attribute__((packed)); + +struct PACKET_ZC_ENTER_ROOM{ + uint16 packetType; + uint16 packetSize; + uint32 chatId; + PACKET_ZC_ENTER_ROOM_sub members[]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_ENTER_ROOM, 0xdb); + struct PACKET_ZC_NPC_SHOWEFST_UPDATE { int16 packetType; uint32 gid;