aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2019-01-01 15:57:35 +0100
committerShauren <shauren.trinity@gmail.com>2021-11-18 15:59:31 +0100
commit0b556d8a9183a8109a8559473c32a55405bd30df (patch)
treeed5fcfdf760c8eb7ad675d8961feceba1bb469f2 /src/server
parentff2cd4a0322fc2942323702a37844b0cfa963ce4 (diff)
Core/Handlers: fix ".whisper on" with opposite faction/low level
Closes #22283 (cherry picked from commit f11117584d0b787bbf36ae61dad2b46e559b0953)
Diffstat (limited to 'src/server')
-rw-r--r--src/server/game/Entities/Player/Player.h1
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp21
2 files changed, 14 insertions, 8 deletions
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 708ff50a886..e86afb16863 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1159,6 +1159,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
bool isAcceptWhispers() const { return (m_ExtraFlags & PLAYER_EXTRA_ACCEPT_WHISPERS) != 0; }
void SetAcceptWhispers(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_ACCEPT_WHISPERS; else m_ExtraFlags &= ~PLAYER_EXTRA_ACCEPT_WHISPERS; }
bool IsGameMaster() const { return (m_ExtraFlags & PLAYER_EXTRA_GM_ON) != 0; }
+ bool IsGameMasterAcceptingWhispers() const { return IsGameMaster() && isAcceptWhispers(); }
bool CanBeGameMaster() const;
void SetGameMaster(bool on);
bool isGMChat() const { return (m_ExtraFlags & PLAYER_EXTRA_GM_CHAT) != 0; }
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index 8974b909a2a..3aa3545bdfc 100644
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -305,16 +305,21 @@ void WorldSession::HandleChatMessage(ChatMsg type, Language lang, std::string ms
SendChatPlayerNotfoundNotice(target);
return;
}
- if (!sender->IsGameMaster() && sender->getLevel() < sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ) && !receiver->IsInWhisperWhiteList(sender->GetGUID()))
- {
- SendNotification(GetTrinityString(LANG_WHISPER_REQ), sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ));
- return;
- }
- if (GetPlayer()->GetTeam() != receiver->GetTeam() && !HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHAT) && !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() < sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ))
+ {
+ SendNotification(GetTrinityString(LANG_WHISPER_REQ), sWorld->getIntConfig(CONFIG_CHAT_WHISPER_LEVEL_REQ));
+ return;
+ }
+
+ if (GetPlayer()->GetTeam() != receiver->GetTeam() && !HasPermission(rbac::RBAC_PERM_TWO_SIDE_INTERACTION_CHAT))
+ {
+ SendChatPlayerNotfoundNotice(target);
+ return;
+ }
}
if (GetPlayer()->HasAura(1852) && !receiver->IsGameMaster())