diff options
author | Andrei Karas <akaras@inbox.ru> | 2018-09-25 21:29:33 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2018-09-25 21:29:33 +0300 |
commit | df0761d02f541723a4d127ef1d252cfa66e6a852 (patch) | |
tree | a2bb25eeccb1755bc3757026d98953069da7b1c7 /src/net | |
parent | 600bd9adc18e2c8b5f62e998779c1e1650272cc0 (diff) | |
download | mv-df0761d02f541723a4d127ef1d252cfa66e6a852.tar.gz mv-df0761d02f541723a4d127ef1d252cfa66e6a852.tar.bz2 mv-df0761d02f541723a4d127ef1d252cfa66e6a852.tar.xz mv-df0761d02f541723a4d127ef1d252cfa66e6a852.zip |
Add packet SMSG_GUILD_LEAVE2 0x0a83.
Diffstat (limited to 'src/net')
-rw-r--r-- | src/net/eathena/guildrecv.cpp | 51 | ||||
-rw-r--r-- | src/net/eathena/guildrecv.h | 1 | ||||
-rw-r--r-- | src/net/eathena/packetsin.inc | 13 |
3 files changed, 65 insertions, 0 deletions
diff --git a/src/net/eathena/guildrecv.cpp b/src/net/eathena/guildrecv.cpp index 48546b6cf..5fa99bb78 100644 --- a/src/net/eathena/guildrecv.cpp +++ b/src/net/eathena/guildrecv.cpp @@ -505,6 +505,57 @@ void GuildRecv::processGuildLeave(Net::MessageIn &msg) } } +void GuildRecv::processGuildLeave2(Net::MessageIn &msg) +{ + const int charId = msg.readInt32("char id"); + msg.readString(40, "message"); + std::string nick; + + if (taGuild != nullptr) + { + const GuildMember *const member = taGuild->getMemberByCharId(charId); + if (member != nullptr) + { + nick = member->getName(); + taGuild->removeMember(member); + } + } + + if (localPlayer == nullptr) + return; + + if (charId == PlayerInfo::getCharId()) + { + if (taGuild != nullptr) + { + taGuild->removeFromMembers(); + taGuild->clearMembers(); + localPlayer->removeGuild(taGuild->getId()); + } + NotifyManager::notify(NotifyTypes::GUILD_LEFT); + delete2(guildTab) + + if ((socialWindow != nullptr) && (taGuild != nullptr)) + socialWindow->removeTab(taGuild); + if (actorManager != nullptr) + actorManager->updatePlayerColors(); + } + else + { + NotifyManager::notify(NotifyTypes::GUILD_USER_LEFT, nick); + if (actorManager != nullptr) + { + Being *const b = actorManager->findBeingByName( + nick, ActorType::Player); + + if (b != nullptr) + b->clearGuilds(); + if (taGuild != nullptr) + taGuild->removeMember(nick); + } + } +} + void GuildRecv::processGuildMessage(Net::MessageIn &msg) { const int msgLength = msg.readInt16("len") - 4; diff --git a/src/net/eathena/guildrecv.h b/src/net/eathena/guildrecv.h index 951bf6519..733e98633 100644 --- a/src/net/eathena/guildrecv.h +++ b/src/net/eathena/guildrecv.h @@ -53,6 +53,7 @@ namespace EAthena void processGuildInvite(Net::MessageIn &msg); void processGuildInviteAck(Net::MessageIn &msg); void processGuildLeave(Net::MessageIn &msg); + void processGuildLeave2(Net::MessageIn &msg); void processGuildMessage(Net::MessageIn &msg); void processGuildReqAlliance(Net::MessageIn &msg); void processGuildReqAllianceAck(Net::MessageIn &msg); diff --git a/src/net/eathena/packetsin.inc b/src/net/eathena/packetsin.inc index 52660ad5b..fbc9ee818 100644 --- a/src/net/eathena/packetsin.inc +++ b/src/net/eathena/packetsin.inc @@ -990,6 +990,18 @@ if (packetVersion >= 20160921) packet(SMSG_VENDING_ITEMS_LIST, 0x0800, -1, &VendingRecv::processItemsList, 20160921); } +// 20160921 re +if (packetVersionRe >= 20160921) +{ + packet(SMSG_GUILD_LEAVE2, 0x0a83, 46, &GuildRecv::processGuildLeave2, 20160921); +} + +// 20161019 main +if (packetVersionMain >= 20161019) +{ + packet(SMSG_GUILD_LEAVE2, 0x0a83, 46, &GuildRecv::processGuildLeave2, 20161019); +} + // 20161026 if (packetVersion >= 20161026) { @@ -1103,6 +1115,7 @@ if (packets_zero == true) packet(SMSG_PARTY_INFO, 0x0a44, -1, &PartyRecv::processPartyInfo, 20171018); packet(SMSG_PARTY_MEMBER_JOB_LEVEL, 0x0abd, 10, &PartyRecv::processPartyMemberJobLevel, 20171018); packet(SMSG_MVP_EXP, 0x010b, 6, &ChatRecv::processMVPExp, 20171018); + packet(SMSG_GUILD_LEAVE2, 0x0a83, 46, &GuildRecv::processGuildLeave2, 20171018); } // 20171207 |