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