aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/ChatHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/ChatHandler.cpp')
-rw-r--r--src/server/game/Handlers/ChatHandler.cpp66
1 files changed, 47 insertions, 19 deletions
diff --git a/src/server/game/Handlers/ChatHandler.cpp b/src/server/game/Handlers/ChatHandler.cpp
index e1c3b74622c..410eb8ec122 100644
--- a/src/server/game/Handlers/ChatHandler.cpp
+++ b/src/server/game/Handlers/ChatHandler.cpp
@@ -130,7 +130,7 @@ void WorldSession::HandleChatMessageOpcode(WorldPackets::Chat::ChatMessage& chat
void WorldSession::HandleChatMessageWhisperOpcode(WorldPackets::Chat::ChatMessageWhisper& chatMessageWhisper)
{
- HandleChatMessage(CHAT_MSG_WHISPER, Language(chatMessageWhisper.Language), chatMessageWhisper.Text, chatMessageWhisper.Target);
+ HandleChatMessage(CHAT_MSG_WHISPER, Language(chatMessageWhisper.Language), chatMessageWhisper.Text, chatMessageWhisper.Target, chatMessageWhisper.TargetGUID);
}
void WorldSession::HandleChatMessageChannelOpcode(WorldPackets::Chat::ChatMessageChannel& chatMessageChannel)
@@ -143,7 +143,7 @@ void WorldSession::HandleChatMessageEmoteOpcode(WorldPackets::Chat::ChatMessageE
HandleChatMessage(CHAT_MSG_EMOTE, LANG_UNIVERSAL, chatMessageEmote.Text);
}
-ChatMessageResult WorldSession::HandleChatMessage(ChatMsg type, Language lang, std::string msg, std::string target /*= ""*/, Optional<ObjectGuid> channelGuid /*= {}*/)
+ChatMessageResult WorldSession::HandleChatMessage(ChatMsg type, Language lang, std::string msg, std::string target /*= ""*/, Optional<ObjectGuid> targetGuid /*= {}*/)
{
Player* sender = GetPlayer();
@@ -292,15 +292,23 @@ ChatMessageResult WorldSession::HandleChatMessage(ChatMsg type, Language lang, s
case CHAT_MSG_WHISPER:
{
/// @todo implement cross realm whispers (someday)
- ExtendedPlayerName extName = ExtractExtendedPlayerName(target);
-
- if (!normalizePlayerName(extName.Name))
+ Player* receiver = nullptr;
+ if (targetGuid && !targetGuid->IsEmpty())
{
- SendChatPlayerNotfoundNotice(target);
- break;
+ receiver = ObjectAccessor::FindConnectedPlayer(*targetGuid);
}
+ else
+ {
+ ExtendedPlayerName extName = ExtractExtendedPlayerName(target);
+
+ if (!normalizePlayerName(extName.Name))
+ {
+ SendChatPlayerNotfoundNotice(target);
+ break;
+ }
- Player* receiver = ObjectAccessor::FindConnectedPlayerByName(extName.Name);
+ receiver = ObjectAccessor::FindConnectedPlayerByName(extName.Name);
+ }
if (!receiver || (lang != LANG_ADDON && !receiver->isAcceptWhispers() && receiver->GetSession()->HasPermission(rbac::RBAC_PERM_CAN_FILTER_WHISPERS) && !receiver->IsInWhisperWhiteList(sender->GetGUID())))
{
SendChatPlayerNotfoundNotice(target);
@@ -434,8 +442,8 @@ ChatMessageResult WorldSession::HandleChatMessage(ChatMsg type, Language lang, s
}
}
- Channel* chn = channelGuid
- ? ChannelMgr::GetChannelForPlayerByGuid(*channelGuid, sender)
+ Channel* chn = targetGuid
+ ? ChannelMgr::GetChannelForPlayerByGuid(*targetGuid, sender)
: ChannelMgr::GetChannelForPlayerByNamePart(target, sender);
if (chn)
{
@@ -479,11 +487,23 @@ void WorldSession::HandleChatAddonMessageOpcode(WorldPackets::Chat::ChatAddonMes
void WorldSession::HandleChatAddonMessageTargetedOpcode(WorldPackets::Chat::ChatAddonMessageTargeted& chatAddonMessageTargeted)
{
- HandleChatAddonMessage(chatAddonMessageTargeted.Params.Type, chatAddonMessageTargeted.Params.Prefix, chatAddonMessageTargeted.Params.Text,
- chatAddonMessageTargeted.Params.IsLogged, chatAddonMessageTargeted.Target, chatAddonMessageTargeted.ChannelGUID);
+ switch (chatAddonMessageTargeted.Params.Type)
+ {
+ case CHAT_MSG_WHISPER:
+ HandleChatAddonMessage(chatAddonMessageTargeted.Params.Type, chatAddonMessageTargeted.Params.Prefix, chatAddonMessageTargeted.Params.Text,
+ chatAddonMessageTargeted.Params.IsLogged, chatAddonMessageTargeted.PlayerName, chatAddonMessageTargeted.PlayerGUID);
+ break;
+ case CHAT_MSG_CHANNEL:
+ HandleChatAddonMessage(chatAddonMessageTargeted.Params.Type, chatAddonMessageTargeted.Params.Prefix, chatAddonMessageTargeted.Params.Text,
+ chatAddonMessageTargeted.Params.IsLogged, chatAddonMessageTargeted.ChannelName, chatAddonMessageTargeted.ChannelGUID);
+ break;
+ default:
+ TC_LOG_ERROR("misc", "HandleChatAddonMessageTargetedOpcode: unknown addon message type {}", chatAddonMessageTargeted.Params.Type);
+ break;
+ }
}
-void WorldSession::HandleChatAddonMessage(ChatMsg type, std::string prefix, std::string text, bool isLogged, std::string target /*= ""*/, Optional<ObjectGuid> channelGuid /*= {}*/)
+void WorldSession::HandleChatAddonMessage(ChatMsg type, std::string prefix, std::string text, bool isLogged, std::string target /*= ""*/, Optional<ObjectGuid> targetGuid /*= {}*/)
{
Player* sender = GetPlayer();
@@ -525,12 +545,20 @@ void WorldSession::HandleChatAddonMessage(ChatMsg type, std::string prefix, std:
case CHAT_MSG_WHISPER:
{
/// @todo implement cross realm whispers (someday)
- ExtendedPlayerName extName = ExtractExtendedPlayerName(target);
+ Player* receiver = nullptr;
+ if (targetGuid && !targetGuid->IsEmpty())
+ {
+ receiver = ObjectAccessor::FindConnectedPlayer(*targetGuid);
+ }
+ else
+ {
+ ExtendedPlayerName extName = ExtractExtendedPlayerName(target);
- if (!normalizePlayerName(extName.Name))
- break;
+ if (!normalizePlayerName(extName.Name))
+ break;
- Player* receiver = ObjectAccessor::FindPlayerByName(extName.Name);
+ receiver = ObjectAccessor::FindConnectedPlayerByName(extName.Name);
+ }
if (!receiver)
break;
@@ -564,8 +592,8 @@ void WorldSession::HandleChatAddonMessage(ChatMsg type, std::string prefix, std:
}
case CHAT_MSG_CHANNEL:
{
- Channel* chn = channelGuid
- ? ChannelMgr::GetChannelForPlayerByGuid(*channelGuid, sender)
+ Channel* chn = targetGuid
+ ? ChannelMgr::GetChannelForPlayerByGuid(*targetGuid, sender)
: ChannelMgr::GetChannelForPlayerByNamePart(target, sender);
if (chn)
chn->AddonSay(sender->GetGUID(), prefix, text.c_str(), isLogged);