diff options
-rw-r--r-- | src/net/eathena/guildrecv.cpp | 26 | ||||
-rw-r--r-- | src/net/eathena/packetsin.inc | 6 |
2 files changed, 29 insertions, 3 deletions
diff --git a/src/net/eathena/guildrecv.cpp b/src/net/eathena/guildrecv.cpp index 2b3c2b9e2..741fcd6d8 100644 --- a/src/net/eathena/guildrecv.cpp +++ b/src/net/eathena/guildrecv.cpp @@ -41,6 +41,7 @@ #include "net/eathena/guildhandler.h" #include "utils/delete2.h" +#include "utils/checkutils.h" #include "utils/gettext.h" #include "debug.h" @@ -183,7 +184,18 @@ void GuildRecv::processGuildMemberList(Net::MessageIn &msg) const int length = msg.readInt16("len"); if (length < 4) return; - const int count = (length - 4) / 104; + int guildSize = 0; + if (msg.getVersion() >= 20161026) + { + guildSize = 34; + reportAlways("missing guild member names"); + } + else + { + guildSize = 104; + } + + const int count = (length - 4) / guildSize; if (taGuild == nullptr) { logger->log1("!taGuild"); @@ -206,8 +218,16 @@ void GuildRecv::processGuildMemberList(Net::MessageIn &msg) const int exp = msg.readInt32("exp"); const int online = msg.readInt32("online"); const int pos = msg.readInt32("position"); - msg.skip(50, "unused"); - std::string name = msg.readString(24, "name"); + std::string name; + if (msg.getVersion() < 20161026) + { + msg.skip(50, "unused"); + name = msg.readString(24, "name"); + } + else + { + continue; + } GuildMember *const m = taGuild->addMember(id, charId, name); if (m != nullptr) diff --git a/src/net/eathena/packetsin.inc b/src/net/eathena/packetsin.inc index 0a10c21a5..036c5fde9 100644 --- a/src/net/eathena/packetsin.inc +++ b/src/net/eathena/packetsin.inc @@ -900,6 +900,12 @@ if (packetVersion >= 20160921) packet(SMSG_VENDING_ITEMS_LIST, 0x0800, -1, &VendingRecv::processItemsList, 20160921); } +// 20161026 +if (packetVersion >= 20161026) +{ + packet(SMSG_GUILD_MEMBER_LIST, 0x0aa5, -1, &GuildRecv::processGuildMemberList, 20161026); +} + // 20170315 if (packetVersion >= 20170315) { |