diff options
| author | Shauren <shauren.trinity@gmail.com> | 2015-06-15 00:25:18 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2015-06-15 00:25:18 +0200 |
| commit | 66d8ccde7f81675be418dfe49025260d9be24dae (patch) | |
| tree | 06958193a851a3d653d448daa0ce409fff98db14 /src/server/game/Texts | |
| parent | ee01fad0d2af0be7b66cb49d9e23867996792b00 (diff) | |
Core/PacketIO: Fixed chat packet building in CreatureTextMgr
Closes #14871
Diffstat (limited to 'src/server/game/Texts')
| -rw-r--r-- | src/server/game/Texts/ChatTextBuilder.h | 18 | ||||
| -rw-r--r-- | src/server/game/Texts/CreatureTextMgr.cpp | 18 | ||||
| -rw-r--r-- | src/server/game/Texts/CreatureTextMgr.h | 8 |
3 files changed, 21 insertions, 23 deletions
diff --git a/src/server/game/Texts/ChatTextBuilder.h b/src/server/game/Texts/ChatTextBuilder.h index 167680f1cd2..68cd375edb6 100644 --- a/src/server/game/Texts/ChatTextBuilder.h +++ b/src/server/game/Texts/ChatTextBuilder.h @@ -30,13 +30,12 @@ namespace Trinity BroadcastTextBuilder(Unit const* obj, ChatMsg msgType, uint32 textId, WorldObject const* target = nullptr, uint32 achievementId = 0) : _source(obj), _msgType(msgType), _textId(textId), _target(target), _achievementId(achievementId) { } - void operator()(WorldPacket& data, LocaleConstant locale) + WorldPackets::Chat::Chat* operator()(LocaleConstant locale) const { BroadcastTextEntry const* bct = sBroadcastTextStore.LookupEntry(_textId); - WorldPackets::Chat::Chat packet; - packet.Initialize(_msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _source, _target, bct ? DB2Manager::GetBroadcastTextValue(bct, locale, _source->getGender()) : "", _achievementId, "", locale); - packet.Write(); - data = packet.Move(); + 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); + return chat; } private: @@ -53,12 +52,11 @@ namespace Trinity CustomChatTextBuilder(WorldObject const* obj, ChatMsg msgType, std::string const& text, Language language = LANG_UNIVERSAL, WorldObject const* target = nullptr) : _source(obj), _msgType(msgType), _text(text), _language(language), _target(target) { } - void operator()(WorldPacket& data, LocaleConstant locale) + WorldPackets::Chat::Chat* operator()(LocaleConstant locale) const { - WorldPackets::Chat::Chat packet; - packet.Initialize(_msgType, _language, _source, _target, _text, 0, "", locale); - packet.Write(); - data = packet.Move(); + WorldPackets::Chat::Chat* chat = new WorldPackets::Chat::Chat(); + chat->Initialize(_msgType, _language, _source, _target, _text, 0, "", locale); + return chat; } private: diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index c1ea235a3e2..4d61e2ec5d2 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -33,13 +33,12 @@ class CreatureTextBuilder CreatureTextBuilder(WorldObject const* obj, uint8 gender, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target) : _source(obj), _gender(gender), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) { } - void operator()(WorldPacket& data, LocaleConstant locale) const + WorldPackets::Chat::Chat* operator()(LocaleConstant locale) const { std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale); - WorldPackets::Chat::Chat packet; - packet.Initialize(_msgType, Language(_language), _source, _target, text, 0, "", locale); - packet.Write(); - data = packet.Move(); + WorldPackets::Chat::Chat* chat = new WorldPackets::Chat::Chat(); + chat->Initialize(_msgType, Language(_language), _source, _target, text, 0, "", locale); + return chat; } private: @@ -58,13 +57,12 @@ class PlayerTextBuilder PlayerTextBuilder(WorldObject const* obj, WorldObject const* speaker, uint8 gender, ChatMsg msgtype, uint8 textGroup, uint32 id, uint32 language, WorldObject const* target) : _source(obj), _talker(speaker), _gender(gender), _msgType(msgtype), _textGroup(textGroup), _textId(id), _language(language), _target(target) { } - void operator()(WorldPacket& data, LocaleConstant locale) const + WorldPackets::Chat::Chat* operator()(LocaleConstant locale) const { std::string const& text = sCreatureTextMgr->GetLocalizedChatString(_source->GetEntry(), _gender, _textGroup, _textId, locale); - WorldPackets::Chat::Chat packet; - packet.Initialize(_msgType, Language(_language), _talker, _target, text, 0, "", locale); - packet.Write(); - data = packet.Move(); + WorldPackets::Chat::Chat* chat = new WorldPackets::Chat::Chat(); + chat->Initialize(_msgType, Language(_language), _talker, _target, text, 0, "", locale); + return chat; } private: diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h index 307f6ece4f8..f2963006599 100644 --- a/src/server/game/Texts/CreatureTextMgr.h +++ b/src/server/game/Texts/CreatureTextMgr.h @@ -145,23 +145,25 @@ class CreatureTextLocalizer // create if not cached yet if (!_packetCache[loc_idx]) { - messageTemplate = new WorldPackets::Chat::Chat(); + messageTemplate = _builder(loc_idx); _packetCache[loc_idx] = messageTemplate; } else messageTemplate = _packetCache[loc_idx]; + WorldPackets::Chat::Chat message(*messageTemplate); + switch (_msgType) { case CHAT_MSG_MONSTER_WHISPER: case CHAT_MSG_RAID_BOSS_WHISPER: - messageTemplate->TargetGUID = player->GetGUID(); + message.SetReceiver(player, loc_idx); break; default: break; } - player->SendDirectMessage(messageTemplate->Write()); + player->SendDirectMessage(message.Write()); } private: |
