aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-11-10 19:03:27 +0100
committerShauren <shauren.trinity@gmail.com>2019-11-10 19:03:27 +0100
commitcdb27ff3020f40c2a9a104a7ebba5c5c19452afc (patch)
tree83ec53917d201b4c3ff96e63e56cb43774158e97
parentaa64226b64bcad428a3d6207b322a48f97d5cf42 (diff)
Core/PacketIO: Implement SMSG_GUILD_EVENT_AWAY_CHANGE
-rw-r--r--src/server/game/Guilds/Guild.cpp23
-rw-r--r--src/server/game/Guilds/Guild.h1
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp6
-rw-r--r--src/server/game/Server/Packets/GuildPackets.cpp10
-rw-r--r--src/server/game/Server/Packets/GuildPackets.h12
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
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);