diff options
author | Shauren <shauren.trinity@gmail.com> | 2019-11-10 19:03:27 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2019-11-10 19:03:27 +0100 |
commit | cdb27ff3020f40c2a9a104a7ebba5c5c19452afc (patch) | |
tree | 83ec53917d201b4c3ff96e63e56cb43774158e97 | |
parent | aa64226b64bcad428a3d6207b322a48f97d5cf42 (diff) |
Core/PacketIO: Implement SMSG_GUILD_EVENT_AWAY_CHANGE
-rw-r--r-- | src/server/game/Guilds/Guild.cpp | 23 | ||||
-rw-r--r-- | src/server/game/Guilds/Guild.h | 1 | ||||
-rw-r--r-- | src/server/game/Handlers/ChatHandler.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Server/Packets/GuildPackets.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Server/Packets/GuildPackets.h | 12 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 2 |
6 files changed, 53 insertions, 1 deletions
diff --git a/src/server/game/Guilds/Guild.cpp b/src/server/game/Guilds/Guild.cpp index ab4f51ad274..6133fa2cf95 100644 --- a/src/server/game/Guilds/Guild.cpp +++ b/src/server/game/Guilds/Guild.cpp @@ -2249,6 +2249,29 @@ void Guild::SendLoginInfo(WorldSession* session) member->AddFlag(GUILDMEMBER_STATUS_ONLINE); } +void Guild::SendEventAwayChanged(ObjectGuid const& memberGuid, bool afk, bool dnd) +{ + Member* member = GetMember(memberGuid); + if (!member) + return; + + if (afk) + member->AddFlag(GUILDMEMBER_STATUS_AFK); + else + member->RemFlag(GUILDMEMBER_STATUS_AFK); + + if (dnd) + member->AddFlag(GUILDMEMBER_STATUS_DND); + else + member->RemFlag(GUILDMEMBER_STATUS_DND); + + WorldPackets::Guild::GuildEventAwayChange awayChange; + awayChange.Guid = memberGuid; + awayChange.AFK = afk; + awayChange.DND = dnd; + BroadcastPacket(awayChange.Write()); +} + void Guild::SendEventBankMoneyChanged() const { WorldPackets::Guild::GuildEventBankMoneyChanged eventPacket; diff --git a/src/server/game/Guilds/Guild.h b/src/server/game/Guilds/Guild.h index c13bdc728c5..c1a85e7af1e 100644 --- a/src/server/game/Guilds/Guild.h +++ b/src/server/game/Guilds/Guild.h @@ -796,6 +796,7 @@ class TC_GAME_API Guild void SendNewsUpdate(WorldSession* session) const; // Send events + void SendEventAwayChanged(ObjectGuid const& memberGuid, bool afk, bool dnd); void SendEventBankMoneyChanged() const; void SendEventMOTD(WorldSession* session, bool broadcast = false) const; void SendEventNewLeader(Member* newLeader, Member* oldLeader, bool isSelfPromoted = false) const; diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp index 34185d478d5..6114609ae83 100644 --- a/src/server/game/Handlers/ChatHandler.cpp +++ b/src/server/game/Handlers/ChatHandler.cpp @@ -527,6 +527,9 @@ void WorldSession::HandleChatMessageAFKOpcode(WorldPackets::Chat::ChatMessageAFK sender->ToggleAFK(); } + if (Guild* guild = sender->GetGuild()) + guild->SendEventAwayChanged(sender->GetGUID(), sender->isAFK(), sender->isDND()); + sScriptMgr->OnPlayerChat(sender, CHAT_MSG_AFK, LANG_UNIVERSAL, chatMessageAFK.Text); } @@ -560,6 +563,9 @@ void WorldSession::HandleChatMessageDNDOpcode(WorldPackets::Chat::ChatMessageDND sender->ToggleDND(); } + if (Guild* guild = sender->GetGuild()) + guild->SendEventAwayChanged(sender->GetGUID(), sender->isAFK(), sender->isDND()); + sScriptMgr->OnPlayerChat(sender, CHAT_MSG_DND, LANG_UNIVERSAL, chatMessageDND.Text); } diff --git a/src/server/game/Server/Packets/GuildPackets.cpp b/src/server/game/Server/Packets/GuildPackets.cpp index b82d9b1c777..f342836d765 100644 --- a/src/server/game/Server/Packets/GuildPackets.cpp +++ b/src/server/game/Server/Packets/GuildPackets.cpp @@ -188,6 +188,16 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Guild::GuildRosterMemberD return data; } +WorldPacket const* WorldPackets::Guild::GuildEventAwayChange::Write() +{ + _worldPacket << Guid; + _worldPacket.WriteBit(AFK); + _worldPacket.WriteBit(DND); + _worldPacket.FlushBits(); + + return &_worldPacket; +} + WorldPacket const* WorldPackets::Guild::GuildEventPresenceChange::Write() { _worldPacket << Guid; diff --git a/src/server/game/Server/Packets/GuildPackets.h b/src/server/game/Server/Packets/GuildPackets.h index e285a940f9e..b58eb3bfe9c 100644 --- a/src/server/game/Server/Packets/GuildPackets.h +++ b/src/server/game/Server/Packets/GuildPackets.h @@ -227,6 +227,18 @@ namespace WorldPackets std::string OldGuildName; }; + class GuildEventAwayChange final : public ServerPacket + { + public: + GuildEventAwayChange() : ServerPacket(SMSG_GUILD_EVENT_AWAY_CHANGE, 16 + 1) { } + + WorldPacket const* Write() override; + + ObjectGuid Guid; + bool AFK = false; + bool DND = false; + }; + class GuildEventPresenceChange final : public ServerPacket { public: diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index a0e21730399..72638402eb8 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1292,7 +1292,7 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_COMMAND_RESULT, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CRITERIA_DELETED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_CRITERIA_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_AWAY_CHANGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_AWAY_CHANGE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_BANK_CONTENTS_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_BANK_MONEY_CHANGED, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_GUILD_EVENT_DISBANDED, STATUS_NEVER, CONNECTION_TYPE_REALM); |