From 8a39a82b91ceeead5e9042d03a0ac662ed512ebe Mon Sep 17 00:00:00 2001 From: d1str4ught <> Date: Tue, 30 Sep 2025 11:27:22 +0200 Subject: [PATCH] guild packets same size --- src/game/guild.cpp | 68 +++++++++++++++++++++----------------- src/game/guild.h | 40 +++++++++++----------- src/game/guild_manager.cpp | 17 +++++----- 3 files changed, 67 insertions(+), 58 deletions(-) diff --git a/src/game/guild.cpp b/src/game/guild.cpp index 9e7ce59..f07dc00 100644 --- a/src/game/guild.cpp +++ b/src/game/guild.cpp @@ -28,11 +28,11 @@ namespace { struct FGuildNameSender { - FGuildNameSender(DWORD id, const char* guild_name) : id(id), name(guild_name) + FGuildNameSender(uint32_t id, const char* guild_name) : id(id), name(guild_name) { p.header = HEADER_GC_GUILD; p.subheader = GUILD_SUBHEADER_GC_GUILD_NAME; - p.size = sizeof(p) + sizeof(DWORD) + GUILD_NAME_MAX_LEN; + p.size = sizeof(p) + sizeof(uint32_t) + GUILD_NAME_MAX_LEN; } void operator() (LPCHARACTER ch) @@ -47,7 +47,7 @@ namespace } } - DWORD id; + uint32_t id; const char * name; TPacketGCGuild p; }; @@ -319,7 +319,7 @@ void CGuild::LogoutMember(LPCHARACTER ch) } } -void CGuild::SendOnlineRemoveOnePacket(DWORD pid) +void CGuild::SendOnlineRemoveOnePacket(uint32_t pid) { TPacketGCGuild pack; pack.header = HEADER_GC_GUILD; @@ -396,15 +396,20 @@ void CGuild::SendListOneToAll(DWORD pid) if (!d) continue; + TGuildMemberPacketData p; + p.pid = cit->second.pid; + p.grade = cit->second.grade; + p.is_general = cit->second.is_general; + p.job = cit->second.job; + p.level = cit->second.level; + p.offer = cit->second.offer_exp; + p.name_flag = 1; + strlcpy(p.name, cit->second.name.c_str(), sizeof(p.name)); + + TEMP_BUFFER buf; - buf.write(&pack, sizeof(pack)); - - cit->second._dummy = 1; - - buf.write(&(cit->second), sizeof(DWORD) * 3 +1); - buf.write(cit->second.name.c_str(), cit->second.name.length()); - buf.write(c, CHARACTER_NAME_MAX_LEN + 1 - cit->second.name.length()); + buf.write(&p, sizeof(p)); d->Packet(buf.read_peek(), buf.size()); } } @@ -435,20 +440,20 @@ void CGuild::SendListPacket(LPCHARACTER ch) pack.size += sizeof(TGuildMemberPacketData) * m_member.size(); TEMP_BUFFER buf; - buf.write(&pack,sizeof(pack)); - char c[CHARACTER_NAME_MAX_LEN+1]; - for (TGuildMemberContainer::iterator it = m_member.begin(); it != m_member.end(); ++it) { - it->second._dummy = 1; - - buf.write(&(it->second), sizeof(DWORD)*3+1); - - strlcpy(c, it->second.name.c_str(), MIN(sizeof(c), it->second.name.length() + 1)); - - buf.write(c, CHARACTER_NAME_MAX_LEN+1 ); + TGuildMemberPacketData p; + p.pid = it->second.pid; + p.grade = it->second.grade; + p.is_general = it->second.is_general; + p.job = it->second.job; + p.level = it->second.level; + p.offer = it->second.offer_exp; + p.name_flag = 1; + strlcpy(p.name, it->second.name.c_str(), sizeof(p.name)); + buf.write(&p, sizeof(p)); if ( test_server ) sys_log(0 ,"name %s job %d ", it->second.name.c_str(), it->second.job ); @@ -473,7 +478,7 @@ void CGuild::SendLoginPacket(LPCHARACTER ch, LPCHARACTER chLogin) SendLoginPacket(ch, chLogin->GetPlayerID()); } -void CGuild::SendLoginPacket(LPCHARACTER ch, DWORD pid) +void CGuild::SendLoginPacket(LPCHARACTER ch, uint32_t pid) { /* Login Packet @@ -502,7 +507,7 @@ void CGuild::SendLogoutPacket(LPCHARACTER ch, LPCHARACTER chLogout) SendLogoutPacket(ch, chLogout->GetPlayerID()); } -void CGuild::SendLogoutPacket(LPCHARACTER ch, DWORD pid) +void CGuild::SendLogoutPacket(LPCHARACTER ch, uint32_t pid) { /* Logout Packet @@ -1098,7 +1103,7 @@ void CGuild::RefreshCommentForce(DWORD player_id) } } -bool CGuild::ChangeMemberGeneral(DWORD pid, BYTE is_general) +bool CGuild::ChangeMemberGeneral(uint32_t pid, BYTE is_general) { if (is_general && GetGeneralCount() >= GetMaxGeneralCount()) return false; @@ -1144,7 +1149,7 @@ bool CGuild::ChangeMemberGeneral(DWORD pid, BYTE is_general) return true; } -void CGuild::ChangeMemberGrade(DWORD pid, BYTE grade) +void CGuild::ChangeMemberGrade(uint32_t pid, BYTE grade) { if (grade == 1) return; @@ -1552,7 +1557,9 @@ void CGuild::GuildPointChange(BYTE type, int amount, bool save) TEMP_BUFFER buf; buf.write(&pack,sizeof(pack)); buf.write(&m_data.level,1); - buf.write(&m_data.exp,4); + + uint32_t exp = m_data.exp; + buf.write(&exp,4); for (TGuildMemberOnlineContainer::iterator it = m_memberOnline.begin(); it != m_memberOnline.end(); ++it) { @@ -1873,12 +1880,13 @@ void CGuild::RecvMoneyChange(int iGold) p.size = sizeof(p) + sizeof(int); p.subheader = GUILD_SUBHEADER_GC_MONEY_CHANGE; + uint32_t gold = iGold; for (itertype(m_memberOnline) it = m_memberOnline.begin(); it != m_memberOnline.end(); ++it) { LPCHARACTER ch = *it; LPDESC d = ch->GetDesc(); d->BufferedPacket(&p, sizeof(p)); - d->Packet(&iGold, sizeof(int)); + d->Packet(&gold, sizeof(uint32_t)); } } @@ -2009,16 +2017,16 @@ void CGuild::Invite( LPCHARACTER pchInviter, LPCHARACTER pchInvitee ) // 초대 받는 character 에게 초대 패킷 전송 // - DWORD gid = GetID(); + uint32_t gid = GetID(); TPacketGCGuild p; p.header = HEADER_GC_GUILD; - p.size = sizeof(p) + sizeof(DWORD) + GUILD_NAME_MAX_LEN; + p.size = sizeof(p) + sizeof(uint32_t) + GUILD_NAME_MAX_LEN; p.subheader = GUILD_SUBHEADER_GC_GUILD_INVITE; TEMP_BUFFER buf; buf.write( &p, sizeof(p) ); - buf.write( &gid, sizeof(DWORD) ); + buf.write( &gid, sizeof(uint32_t) ); buf.write( GetName(), GUILD_NAME_MAX_LEN ); pchInvitee->GetDesc()->Packet( buf.read_peek(), buf.size() ); diff --git a/src/game/guild.h b/src/game/guild.h index 22d61e0..6243d5b 100644 --- a/src/game/guild.h +++ b/src/game/guild.h @@ -47,27 +47,27 @@ typedef struct SGuildMember #pragma pack(1) typedef struct SGuildMemberPacketData { - DWORD pid; - BYTE grade; - BYTE is_general; - BYTE job; - BYTE level; - DWORD offer; - BYTE name_flag; + uint32_t pid; + uint8_t grade; + uint8_t is_general; + uint8_t job; + uint8_t level; + uint32_t offer; + uint8_t name_flag; char name[CHARACTER_NAME_MAX_LEN+1]; } TGuildMemberPacketData; typedef struct packet_guild_sub_info { - WORD member_count; - WORD max_member_count; - DWORD guild_id; - DWORD master_pid; - DWORD exp; - BYTE level; + uint16_t member_count; + uint16_t max_member_count; + uint32_t guild_id; + uint32_t master_pid; + uint32_t exp; + uint8_t level; char name[GUILD_NAME_MAX_LEN+1]; - DWORD gold; - BYTE has_land; + uint32_t gold; + uint8_t has_land; } TPacketGCGuildInfo; typedef struct SGuildGrade @@ -182,7 +182,7 @@ class CGuild void LogoutMember(LPCHARACTER ch); void P2PLogoutMember(DWORD pid); - void ChangeMemberGrade(DWORD pid, BYTE grade); + void ChangeMemberGrade(uint32_t pid, BYTE grade); bool OfferExp(LPCHARACTER ch, int amount); void LevelChange(DWORD pid, BYTE level); void ChangeMemberData(DWORD pid, DWORD offer, BYTE level, BYTE grade); @@ -191,21 +191,21 @@ class CGuild void ChangeGradeAuth(BYTE grade, BYTE auth); void P2PChangeGrade(BYTE grade); - bool ChangeMemberGeneral(DWORD pid, BYTE is_general); + bool ChangeMemberGeneral(uint32_t pid, BYTE is_general); bool ChangeMasterTo(DWORD dwPID); void Packet(const void* buf, int size); - void SendOnlineRemoveOnePacket(DWORD pid); + void SendOnlineRemoveOnePacket(uint32_t pid); void SendAllGradePacket(LPCHARACTER ch); void SendListPacket(LPCHARACTER ch); void SendListOneToAll(DWORD pid); void SendListOneToAll(LPCHARACTER ch); void SendLoginPacket(LPCHARACTER ch, LPCHARACTER chLogin); void SendLogoutPacket(LPCHARACTER ch, LPCHARACTER chLogout); - void SendLoginPacket(LPCHARACTER ch, DWORD pid); - void SendLogoutPacket(LPCHARACTER ch, DWORD pid); + void SendLoginPacket(LPCHARACTER ch, uint32_t pid); + void SendLogoutPacket(LPCHARACTER ch, uint32_t pid); void SendGuildInfoPacket(LPCHARACTER ch); void SendGuildDataUpdateToAllMember(SQLMsg* pmsg); diff --git a/src/game/guild_manager.cpp b/src/game/guild_manager.cpp index 730ac94..5eb9a34 100644 --- a/src/game/guild_manager.cpp +++ b/src/game/guild_manager.cpp @@ -586,13 +586,13 @@ void CGuildManager::WaitStartWar(DWORD guild_id1, DWORD guild_id2) struct FSendWarList { - FSendWarList(BYTE subheader, DWORD guild_id1, DWORD guild_id2) + FSendWarList(BYTE subheader, uint32_t guild_id1, uint32_t guild_id2) { gid1 = guild_id1; gid2 = guild_id2; p.header = HEADER_GC_GUILD; - p.size = sizeof(p) + sizeof(DWORD) * 2; + p.size = sizeof(p) + sizeof(uint32_t) * 2; p.subheader = subheader; } @@ -603,12 +603,12 @@ struct FSendWarList if (d) { d->BufferedPacket(&p, sizeof(p)); - d->BufferedPacket(&gid1, sizeof(DWORD)); - d->Packet(&gid2, sizeof(DWORD)); + d->BufferedPacket(&gid1, sizeof(uint32_t)); + d->Packet(&gid2, sizeof(uint32_t)); } } - DWORD gid1, gid2; + uint32_t gid1, gid2; TPacketGCGuild p; }; @@ -798,13 +798,14 @@ void CGuildManager::SendGuildWar(LPCHARACTER ch) TPacketGCGuild p; p.header= HEADER_GC_GUILD; p.subheader = GUILD_SUBHEADER_GC_GUILD_WAR_LIST; - p.size = sizeof(p) + (sizeof(DWORD) * 2) * m_GuildWar.size(); + p.size = sizeof(p) + (sizeof(uint32_t) * 2) * m_GuildWar.size(); buf.write(&p, sizeof(p)); for (auto it = m_GuildWar.begin(); it != m_GuildWar.end(); ++it) { - buf.write(&it->first, sizeof(DWORD)); - buf.write(&it->second, sizeof(DWORD)); + uint32_t a = it->first, b = it->first; + buf.write(&a, sizeof(uint32_t)); + buf.write(&b, sizeof(uint32_t)); } ch->GetDesc()->Packet(buf.read_peek(), buf.size());