diff options
Diffstat (limited to 'src/server/game/Texts/ChatTextBuilder.cpp')
-rw-r--r-- | src/server/game/Texts/ChatTextBuilder.cpp | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/server/game/Texts/ChatTextBuilder.cpp b/src/server/game/Texts/ChatTextBuilder.cpp index 7291f2e1dbf..45827e3271b 100644 --- a/src/server/game/Texts/ChatTextBuilder.cpp +++ b/src/server/game/Texts/ChatTextBuilder.cpp @@ -18,13 +18,13 @@ #include "ChatTextBuilder.h" #include "ChatPackets.h" #include "DB2Stores.h" -#include "Unit.h" +#include <cstdarg> WorldPackets::Packet* Trinity::BroadcastTextBuilder::operator()(LocaleConstant locale) const { BroadcastTextEntry const* bct = sBroadcastTextStore.LookupEntry(_textId); WorldPackets::Chat::Chat* chat = new WorldPackets::Chat::Chat(); - chat->Initialize(_msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _source, _target, bct ? DB2Manager::GetBroadcastTextValue(bct, locale, _source->getGender()) : "", _achievementId, "", locale); + chat->Initialize(_msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _source, _target, bct ? DB2Manager::GetBroadcastTextValue(bct, locale, _gender) : "", _achievementId, "", locale); return chat; } @@ -34,3 +34,28 @@ WorldPackets::Packet* Trinity::CustomChatTextBuilder::operator()(LocaleConstant chat->Initialize(_msgType, _language, _source, _target, _text, 0, "", locale); return chat; } + +WorldPackets::Packet* Trinity::TrinityStringChatBuilder::operator()(LocaleConstant locale) const +{ + WorldPackets::Chat::Chat* packet = new WorldPackets::Chat::Chat(); + + char const* text = sObjectMgr->GetTrinityString(_textId, locale); + + if (_args) + { + // we need copy va_list before use or original va_list will corrupted + va_list ap; + va_copy(ap, *_args); + + static size_t const BufferSize = 2048; + char strBuffer[BufferSize]; + vsnprintf(strBuffer, BufferSize, text, ap); + va_end(ap); + + packet->Initialize(_msgType, LANG_UNIVERSAL, _source, _target, strBuffer, 0, "", locale); + } + else + packet->Initialize(_msgType, LANG_UNIVERSAL, _source, _target, text, 0, "", locale); + + return packet; +} |