guild packets same size

This commit is contained in:
d1str4ught
2025-09-30 11:27:22 +02:00
parent 7504f3ae61
commit 8a39a82b91
3 changed files with 67 additions and 58 deletions

View File

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

View File

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

View File

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