From 64be1a1603b2649e5d6f1f2b82403861c265edb5 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sun, 10 Nov 2019 16:15:11 -0500 Subject: [PATCH] Core/PacketIO: Implement SMSG_GUILD_EVENT_AWAY_CHANGE Port From (https://github.com/TrinityCore/TrinityCore/commit/cdb27ff3020f40c2a9a104a7ebba5c5c19452afc) --- Source/Game/Guilds/Guild.cs | 23 +++++++++++++++++++++ Source/Game/Handlers/ChatHandler.cs | 8 +++++++ Source/Game/Network/Packets/GuildPackets.cs | 17 +++++++++++++++ 3 files changed, 48 insertions(+) diff --git a/Source/Game/Guilds/Guild.cs b/Source/Game/Guilds/Guild.cs index 48e444d54..742ebc96e 100644 --- a/Source/Game/Guilds/Guild.cs +++ b/Source/Game/Guilds/Guild.cs @@ -1091,6 +1091,29 @@ namespace Game.Guilds member.AddFlag(GuildMemberFlags.Online); } + public void SendEventAwayChanged(ObjectGuid memberGuid, bool afk, bool dnd) + { + Member member = GetMember(memberGuid); + if (member == null) + return; + + if (afk) + member.AddFlag(GuildMemberFlags.AFK); + else + member.RemoveFlag(GuildMemberFlags.AFK); + + if (dnd) + member.AddFlag(GuildMemberFlags.DND); + else + member.RemoveFlag(GuildMemberFlags.DND); + + GuildEventAwayChange awayChange = new GuildEventAwayChange(); + awayChange.Guid = memberGuid; + awayChange.AFK = afk; + awayChange.DND = dnd; + BroadcastPacket(awayChange); + } + void SendEventBankMoneyChanged() { GuildEventBankMoneyChanged eventPacket = new GuildEventBankMoneyChanged(); diff --git a/Source/Game/Handlers/ChatHandler.cs b/Source/Game/Handlers/ChatHandler.cs index e46dbb1df..64bdb1e7d 100644 --- a/Source/Game/Handlers/ChatHandler.cs +++ b/Source/Game/Handlers/ChatHandler.cs @@ -494,6 +494,10 @@ namespace Game sender.ToggleAFK(); } + Guild guild = sender.GetGuild(); + if (guild != null) + guild.SendEventAwayChanged(sender.GetGUID(), sender.IsAFK(), sender.IsDND()); + Global.ScriptMgr.OnPlayerChat(sender, ChatMsg.Afk, Language.Universal, packet.Text); } @@ -528,6 +532,10 @@ namespace Game sender.ToggleDND(); } + Guild guild = sender.GetGuild(); + if (guild != null) + guild.SendEventAwayChanged(sender.GetGUID(), sender.IsAFK(), sender.IsDND()); + Global.ScriptMgr.OnPlayerChat(sender, ChatMsg.Dnd, Language.Universal, packet.Text); } diff --git a/Source/Game/Network/Packets/GuildPackets.cs b/Source/Game/Network/Packets/GuildPackets.cs index ed43b9495..25883e687 100644 --- a/Source/Game/Network/Packets/GuildPackets.cs +++ b/Source/Game/Network/Packets/GuildPackets.cs @@ -278,6 +278,23 @@ namespace Game.Network.Packets public string OldGuildName; } + public class GuildEventAwayChange : ServerPacket + { + public GuildEventAwayChange() : base(ServerOpcodes.GuildEventAwayChange) { } + + public override void Write() + { + _worldPacket.WritePackedGuid(Guid); + _worldPacket.WriteBit(AFK); + _worldPacket.WriteBit(DND); + _worldPacket.FlushBits(); + } + + public ObjectGuid Guid; + public bool AFK; + public bool DND; + } + public class GuildEventPresenceChange : ServerPacket { public GuildEventPresenceChange() : base(ServerOpcodes.GuildEventPresenceChange) { }