aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Texts/ChatTextBuilder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Texts/ChatTextBuilder.cpp')
-rw-r--r--src/server/game/Texts/ChatTextBuilder.cpp58
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);
}
}