diff options
Diffstat (limited to 'src/server/game/Texts/ChatTextBuilder.cpp')
-rw-r--r-- | src/server/game/Texts/ChatTextBuilder.cpp | 58 |
1 files changed, 38 insertions, 20 deletions
diff --git a/src/server/game/Texts/ChatTextBuilder.cpp b/src/server/game/Texts/ChatTextBuilder.cpp index 4abaa62392b..6c4b7b3761d 100644 --- a/src/server/game/Texts/ChatTextBuilder.cpp +++ b/src/server/game/Texts/ChatTextBuilder.cpp @@ -18,32 +18,54 @@ #include "ChatTextBuilder.h" #include "CreatureTextMgr.h" #include "DB2Stores.h" -#include "GridNotifiers.h" +#include "LanguageMgr.h" #include "ObjectMgr.h" #include "Player.h" #include <cstdarg> namespace Trinity { -PacketSenderOwning<WorldPackets::Chat::Chat>* BroadcastTextBuilder::operator()(LocaleConstant locale) const +ChatPacketSender::ChatPacketSender(ChatMsg chatType, ::Language language, WorldObject const* sender, WorldObject const* receiver, + std::string message, uint32 achievementId /*= 0*/, LocaleConstant locale /*= LOCALE_enUS*/) + : Type(chatType), Language(language), Sender(sender), Receiver(receiver), Text(std::move(message)), AchievementId(achievementId), Locale(locale), LanguageSkillId(0) { - BroadcastTextEntry const* bct = sBroadcastTextStore.LookupEntry(_textId); - PacketSenderOwning<WorldPackets::Chat::Chat>* chat = new PacketSenderOwning<WorldPackets::Chat::Chat>(); - chat->Data.Initialize(_msgType, bct ? Language(bct->LanguageID) : LANG_UNIVERSAL, _source, _target, bct ? DB2Manager::GetBroadcastTextValue(bct, locale, _gender) : "", _achievementId, "", locale); - return chat; + UntranslatedPacket.Initialize(Type, Language, Sender, Receiver, Text, AchievementId, "", Locale); + UntranslatedPacket.Write(); + if (LanguageDesc const* languageDesc = sLanguageMgr->GetLanguageDescById(language)) + LanguageSkillId = languageDesc->SkillId; } -PacketSenderOwning<WorldPackets::Chat::Chat>* CustomChatTextBuilder::operator()(LocaleConstant locale) const +void ChatPacketSender::operator()(Player const* player) const { - PacketSenderOwning<WorldPackets::Chat::Chat>* chat = new PacketSenderOwning<WorldPackets::Chat::Chat>(); - chat->Data.Initialize(_msgType, _language, _source, _target, _text, 0, "", locale); - return chat; + if (player->CanUnderstandLanguageSkillId(LanguageSkillId)) + { + player->SendDirectMessage(UntranslatedPacket.GetRawPacket()); + return; + } + + if (!TranslatedPacket) + { + TranslatedPacket.emplace(); + TranslatedPacket->Initialize(Type, Language, Sender, Receiver, sLanguageMgr->Translate(Text, Language), AchievementId, "", Locale); + TranslatedPacket->Write(); + } + + player->SendDirectMessage(TranslatedPacket->GetRawPacket()); } -PacketSenderOwning<WorldPackets::Chat::Chat>* TrinityStringChatBuilder::operator()(LocaleConstant locale) const +ChatPacketSender* BroadcastTextBuilder::operator()(LocaleConstant locale) const { - PacketSenderOwning<WorldPackets::Chat::Chat>* chat = new PacketSenderOwning<WorldPackets::Chat::Chat>(); + BroadcastTextEntry const* bct = sBroadcastTextStore.LookupEntry(_textId); + return new ChatPacketSender(_msgType, bct ? Language(bct->LanguageID) : LANG_UNIVERSAL, _source, _target, bct ? DB2Manager::GetBroadcastTextValue(bct, locale, _gender) : "", _achievementId, locale); +} + +ChatPacketSender* CustomChatTextBuilder::operator()(LocaleConstant locale) const +{ + return new ChatPacketSender(_msgType, _language, _source, _target, _text, 0, locale); +} +ChatPacketSender* TrinityStringChatBuilder::operator()(LocaleConstant locale) const +{ char const* text = sObjectMgr->GetTrinityString(_textId, locale); if (_args) @@ -57,18 +79,14 @@ PacketSenderOwning<WorldPackets::Chat::Chat>* TrinityStringChatBuilder::operator vsnprintf(strBuffer, BufferSize, text, ap); va_end(ap); - chat->Data.Initialize(_msgType, LANG_UNIVERSAL, _source, _target, strBuffer, 0, "", locale); + return new ChatPacketSender(_msgType, LANG_UNIVERSAL, _source, _target, strBuffer, 0, locale); } - else - chat->Data.Initialize(_msgType, LANG_UNIVERSAL, _source, _target, text, 0, "", locale); - return chat; + return new ChatPacketSender(_msgType, LANG_UNIVERSAL, _source, _target, text, 0, locale); } -PacketSenderOwning<WorldPackets::Chat::Chat>* CreatureTextTextBuilder::operator()(LocaleConstant locale) const +ChatPacketSender* CreatureTextTextBuilder::operator()(LocaleConstant locale) const { - PacketSenderOwning<WorldPackets::Chat::Chat>* chat = new PacketSenderOwning<WorldPackets::Chat::Chat>(); - chat->Data.Initialize(_msgType, _language, _talker, _target, sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale), 0, "", locale); - return chat; + return new ChatPacketSender(_msgType, _language, _talker, _target, sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale), 0, locale); } } |