From 5c7c874f7283bd2d510de4fcbb40953f4ba9b4bd Mon Sep 17 00:00:00 2001 From: AoShinHo <126742159+AoShinRO@users.noreply.github.com> Date: Sat, 14 Sep 2024 13:25:04 -0300 Subject: [PATCH] Converted ZC_GUILD_CHAT to struct (#8634) Co-authored-by: Lemongrass3110 --- src/map/clif.cpp | 41 +++++++++++++++++++++------------------ src/map/clif.hpp | 2 +- src/map/clif_packetdb.hpp | 1 - src/map/guild.cpp | 2 +- src/map/packets.hpp | 7 +++++++ 5 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/map/clif.cpp b/src/map/clif.cpp index 4c55475130..88f9c5126c 100644 --- a/src/map/clif.cpp +++ b/src/map/clif.cpp @@ -9133,29 +9133,32 @@ void clif_guild_expulsionlist(map_session_data* sd) } -/// Guild chat message (ZC_GUILD_CHAT). -/// 017f .W .?B -void clif_guild_message( const struct mmo_guild& g, uint32 account_id, const char* mes, size_t len ){ - // TODO: account_id is not used, candidate for deletion? [Ai4rei] - map_session_data *sd; - uint8 buf[256]; +/// Guild chat message +/// 017f .W .?B (ZC_GUILD_CHAT) +void clif_guild_message( const struct mmo_guild& g, const char* mes, size_t len ){ + PACKET_ZC_GUILD_CHAT *p = reinterpret_cast( packet_buffer ); + // -1 for null terminator + static const size_t max_len = CHAT_SIZE_MAX - sizeof( *p ) - 1; - if( len == 0 ) - { + map_session_data* sd = guild_getavailablesd(g); + + // Ignore this message, if no guildmember is available + if (sd == nullptr) return; - } - else if( len > sizeof(buf)-5 ) - { - ShowWarning("clif_guild_message: Truncated message '%s' (len=%d, max=%" PRIuPTR ", guild_id=%d).\n", mes, len, sizeof(buf)-5, g.guild_id); - len = sizeof(buf)-5; - } - WBUFW(buf, 0) = 0x17f; - WBUFW( buf, 2 ) = static_cast( len + 5 ); - safestrncpy(WBUFCP(buf,4), mes, len+1); + if( len == 0 ){ + return; + } else if( len > max_len ){ + ShowWarning("clif_guild_message: Truncated message '%s' (len=%" PRIuPTR ", max=%" PRIuPTR ", guild_id=%u).\n", mes, len, max_len, g.guild_id); + len = max_len; + } + p->packetType = HEADER_ZC_GUILD_CHAT; + p->packetLength = sizeof(*p); - if ((sd = guild_getavailablesd(g)) != nullptr) - clif_send(buf, WBUFW(buf,2), &sd->bl, GUILD_NOBG); + safestrncpy(p->message, mes, len+1); + p->packetLength += static_castpacketLength)>( len + 1 ); + + clif_send(p, p->packetLength, &sd->bl, GUILD_NOBG); } /// Request for guild alliance diff --git a/src/map/clif.hpp b/src/map/clif.hpp index 8d57d4d9e0..2736dddf81 100644 --- a/src/map/clif.hpp +++ b/src/map/clif.hpp @@ -1057,7 +1057,7 @@ void clif_guild_memberpositionchanged(const struct mmo_guild &g,int idx); void clif_guild_emblem(const map_session_data &sd, const struct mmo_guild &g); void clif_guild_emblem_area(struct block_list* bl); void clif_guild_notice( map_session_data& sd ); -void clif_guild_message( const struct mmo_guild& g, uint32 account_id, const char* mes, size_t len ); +void clif_guild_message( const struct mmo_guild& g, const char* mes, size_t len ); void clif_guild_reqalliance(map_session_data& sd,uint32 account_id,const char *name); void clif_guild_allianceack(map_session_data& sd, uint8 flag); void clif_guild_delalliance(map_session_data& sd,uint32 guild_id,uint32 flag); diff --git a/src/map/clif_packetdb.hpp b/src/map/clif_packetdb.hpp index b6aeb08a06..438f4df507 100644 --- a/src/map/clif_packetdb.hpp +++ b/src/map/clif_packetdb.hpp @@ -201,7 +201,6 @@ packet(0x017b,-1); parseable_packet(0x017c,6,clif_parse_InsertCard,2,4); parseable_packet(0x017e,-1,clif_parse_GuildMessage,2,4); - packet(0x017f,-1); parseable_packet(0x0180,6,clif_parse_GuildOpposition,2); packet(0x0182,106); parseable_packet(0x0183,10,clif_parse_GuildDelAlliance,2,6); diff --git a/src/map/guild.cpp b/src/map/guild.cpp index 097eec8841..d788181c0b 100644 --- a/src/map/guild.cpp +++ b/src/map/guild.cpp @@ -1476,7 +1476,7 @@ int guild_recv_message( int guild_id, uint32 account_id, const char *mes, size_t auto g = guild_search(guild_id); if (!g) return 0; - clif_guild_message(g->guild,account_id,mes,len); + clif_guild_message(g->guild,mes,len); return 0; } diff --git a/src/map/packets.hpp b/src/map/packets.hpp index d3ecc667c3..6c6289532d 100644 --- a/src/map/packets.hpp +++ b/src/map/packets.hpp @@ -825,6 +825,13 @@ struct PACKET_ZC_NOTIFY_POSITION_TO_GUILDM { } __attribute__((packed)); DEFINE_PACKET_HEADER(ZC_NOTIFY_POSITION_TO_GUILDM, 0x1eb) +struct PACKET_ZC_GUILD_CHAT { + int16 packetType; + int16 packetLength; + char message[]; +} __attribute__((packed)); +DEFINE_PACKET_HEADER(ZC_GUILD_CHAT, 0x17f) + struct PACKET_ZC_STATUS { int16 packetType; uint16 point;