Converted ZC_ENTER_ROOM to struct (#8590)

Co-authored-by: Lemongrass3110 <lemongrass@kstp.at>
This commit is contained in:
AoShinHo 2024-09-03 13:16:18 -03:00 committed by GitHub
parent 247483c538
commit d6f2f49b6d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 45 additions and 28 deletions

View File

@ -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

View File

@ -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_ZC_ENTER_ROOM*>( 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<npc_data*>(cd.owner)->name, sizeof(owner.name));
p->packetSize += static_cast<decltype(p->packetSize)>( 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_cast<decltype(p->packetSize)>( 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_cast<decltype(p->packetSize)>( sizeof( member ) );
}
}
WFIFOSET(fd, WFIFOW(fd, 2));
clif_send(p,p->packetSize,&sd.bl,SELF);
}

View File

@ -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

View File

@ -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);

View File

@ -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;