diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-05-08 20:55:51 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-05-08 20:55:51 +0200 |
commit | 468a06baf046b716305ee665e3cfd93c80e99457 (patch) | |
tree | c44fd1da4d426fa0abca9d5a96d7030dea7102bf /src/server/game/Handlers/ChatHandler.cpp | |
parent | 83f4763b25891c9fe6c7f01b75cdf0f4ef66fc9a (diff) |
Core: Update to 10.2.7
Diffstat (limited to 'src/server/game/Handlers/ChatHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/ChatHandler.cpp | 66 |
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); |