From 2ce3cc84f8bce4e3fe690ccd344198ce20d04a21 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Thu, 18 Nov 2021 17:21:47 -0500 Subject: [PATCH] Core/Handlers: fix ".whisper on" with opposite faction/low level Port From (https://github.com/TrinityCore/TrinityCore/commit/0b556d8a9183a8109a8559473c32a55405bd30df) --- Source/Game/Entities/Player/Player.cs | 3 ++- Source/Game/Handlers/ChatHandler.cs | 21 +++++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index e7e5a9cd2..33eedf998 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -2156,7 +2156,8 @@ namespace Game.Entities else m_ExtraFlags &= ~PlayerExtraFlags.AcceptWhispers; } - public bool IsGameMaster() { return Convert.ToBoolean(m_ExtraFlags & PlayerExtraFlags.GMOn); } + public bool IsGameMaster() { return m_ExtraFlags.HasAnyFlag(PlayerExtraFlags.GMOn); } + public bool IsGameMasterAcceptingWhispers() { return IsGameMaster() && IsAcceptWhispers(); } public bool CanBeGameMaster() { return GetSession().HasPermission(RBACPermissions.CommandGm); } public void SetGameMaster(bool on) { diff --git a/Source/Game/Handlers/ChatHandler.cs b/Source/Game/Handlers/ChatHandler.cs index b359e36d8..e630b9875 100644 --- a/Source/Game/Handlers/ChatHandler.cs +++ b/Source/Game/Handlers/ChatHandler.cs @@ -233,16 +233,21 @@ namespace Game SendChatPlayerNotfoundNotice(target); return; } - if (!sender.IsGameMaster() && sender.GetLevel() < WorldConfig.GetIntValue(WorldCfg.ChatWhisperLevelReq) && !receiver.IsInWhisperWhiteList(sender.GetGUID())) - { - SendNotification(Global.ObjectMgr.GetCypherString(CypherStrings.WhisperReq), WorldConfig.GetIntValue(WorldCfg.ChatWhisperLevelReq)); - return; - } - if (GetPlayer().GetTeam() != receiver.GetTeam() && !HasPermission(RBACPermissions.TwoSideInteractionChat) && !receiver.IsInWhisperWhiteList(sender.GetGUID())) + // Apply checks only if receiver is not already in whitelist and if receiver is not a GM with ".whisper on" + if (!receiver.IsInWhisperWhiteList(sender.GetGUID()) && !receiver.IsGameMasterAcceptingWhispers()) { - SendChatPlayerNotfoundNotice(target); - return; + if (!sender.IsGameMaster() && sender.GetLevel() < WorldConfig.GetIntValue(WorldCfg.ChatWhisperLevelReq)) + { + SendNotification(Global.ObjectMgr.GetCypherString(CypherStrings.WhisperReq), WorldConfig.GetIntValue(WorldCfg.ChatWhisperLevelReq)); + return; + } + + if (GetPlayer().GetTeam() != receiver.GetTeam() && !HasPermission(RBACPermissions.TwoSideInteractionChat) && !receiver.IsInWhisperWhiteList(sender.GetGUID())) + { + SendChatPlayerNotfoundNotice(target); + return; + } } if (GetPlayer().HasAura(1852) && !receiver.IsGameMaster())