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) { }