aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Texts
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2017-06-19 23:20:06 -0300
committerariel- <ariel-@users.noreply.github.com>2017-06-19 23:20:06 -0300
commit85a7d5ce9ac68b30da2277cc91d4b70358f1880d (patch)
treedf3d2084ee2e35008903c03178039b9c986e2d08 /src/server/game/Texts
parent052fc24315ace866ea1cf610e85df119b68100c9 (diff)
Core: ported headers cleanup from master branch
Diffstat (limited to 'src/server/game/Texts')
-rw-r--r--src/server/game/Texts/ChatTextBuilder.cpp38
-rw-r--r--src/server/game/Texts/ChatTextBuilder.h27
-rw-r--r--src/server/game/Texts/CreatureTextMgr.cpp45
-rw-r--r--src/server/game/Texts/CreatureTextMgr.h169
-rw-r--r--src/server/game/Texts/CreatureTextMgrImpl.h170
5 files changed, 248 insertions, 201 deletions
diff --git a/src/server/game/Texts/ChatTextBuilder.cpp b/src/server/game/Texts/ChatTextBuilder.cpp
new file mode 100644
index 00000000000..8328e7f8bbf
--- /dev/null
+++ b/src/server/game/Texts/ChatTextBuilder.cpp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2008-2017 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "ChatTextBuilder.h"
+#include "Chat.h"
+#include "ObjectMgr.h"
+#include "Unit.h"
+
+void Trinity::BroadcastTextBuilder::operator()(WorldPacket& data, LocaleConstant locale) const
+{
+ BroadcastText const* bct = sObjectMgr->GetBroadcastText(_textId);
+ ChatHandler::BuildChatPacket(data, _msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _source, _target, bct ? bct->GetText(locale, _source->getGender()) : "", _achievementId, "", locale);
+}
+
+size_t Trinity::BroadcastTextBuilder::operator()(WorldPacket* data, LocaleConstant locale) const
+{
+ BroadcastText const* bct = sObjectMgr->GetBroadcastText(_textId);
+ return ChatHandler::BuildChatPacket(*data, _msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _source, _target, bct ? bct->GetText(locale, _source->getGender()) : "", _achievementId, "", locale);
+}
+
+void Trinity::CustomChatTextBuilder::operator()(WorldPacket& data, LocaleConstant locale) const
+{
+ ChatHandler::BuildChatPacket(data, _msgType, _language, _source, _target, _text, 0, "", locale);
+}
diff --git a/src/server/game/Texts/ChatTextBuilder.h b/src/server/game/Texts/ChatTextBuilder.h
index c913e177894..1fe51dc7258 100644
--- a/src/server/game/Texts/ChatTextBuilder.h
+++ b/src/server/game/Texts/ChatTextBuilder.h
@@ -18,8 +18,13 @@
#ifndef __CHATTEXT_BUILDER_H
#define __CHATTEXT_BUILDER_H
-#include "Chat.h"
-#include "ObjectMgr.h"
+#include "Common.h"
+#include "SharedDefines.h"
+#include <string>
+
+class Unit;
+class WorldObject;
+class WorldPacket;
namespace Trinity
{
@@ -29,17 +34,8 @@ 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)
- {
- BroadcastText const* bct = sObjectMgr->GetBroadcastText(_textId);
- ChatHandler::BuildChatPacket(data, _msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _source, _target, bct ? bct->GetText(locale, _source->getGender()) : "", _achievementId, "", locale);
- }
-
- size_t operator()(WorldPacket* data, LocaleConstant locale) const
- {
- BroadcastText const* bct = sObjectMgr->GetBroadcastText(_textId);
- return ChatHandler::BuildChatPacket(*data, _msgType, bct ? Language(bct->Language) : LANG_UNIVERSAL, _source, _target, bct ? bct->GetText(locale, _source->getGender()) : "", _achievementId, "", locale);
- }
+ void operator()(WorldPacket& data, LocaleConstant locale) const;
+ size_t operator()(WorldPacket* data, LocaleConstant locale) const;
private:
Unit const* _source;
@@ -55,10 +51,7 @@ 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)
- {
- ChatHandler::BuildChatPacket(data, _msgType, _language, _source, _target, _text, 0, "", locale);
- }
+ void operator()(WorldPacket& data, LocaleConstant locale) const;
private:
WorldObject const* _source;
diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp
index 77a886af3e5..9d2c7d6769f 100644
--- a/src/server/game/Texts/CreatureTextMgr.cpp
+++ b/src/server/game/Texts/CreatureTextMgr.cpp
@@ -15,15 +15,17 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "Common.h"
-#include "DatabaseEnv.h"
-#include "ObjectMgr.h"
-#include "Cell.h"
+#include "CreatureTextMgr.h"
+#include "CreatureTextMgrImpl.h"
#include "CellImpl.h"
#include "Chat.h"
-#include "GridNotifiers.h"
+#include "Common.h"
+#include "DatabaseEnv.h"
+#include "DBCStores.h"
#include "GridNotifiersImpl.h"
-#include "CreatureTextMgr.h"
+#include "Log.h"
+#include "ObjectMgr.h"
+#include "World.h"
class CreatureTextBuilder
{
@@ -224,7 +226,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject
}
CreatureTextGroup const& textGroupContainer = itr->second; //has all texts in the group
- CreatureTextRepeatIds repeatGroup = GetRepeatGroup(source, textGroup);//has all textIDs from the group that were already said
+ CreatureTextRepeatIds repeatGroup = source->GetTextRepeatGroup(textGroup);//has all textIDs from the group that were already said
CreatureTextGroup tempGroup;//will use this to talk after sorting repeatGroup
for (CreatureTextGroup::const_iterator giter = textGroupContainer.begin(); giter != textGroupContainer.end(); ++giter)
@@ -270,7 +272,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject
SendChatPacket(finalSource, builder, finalType, whisperTarget, range, team, gmOnly);
}
- SetRepeatId(source, textGroup, iter->id);
+ source->SetTextRepeatId(textGroup, iter->id);
return iter->duration;
}
@@ -327,7 +329,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data,
if (!whisperTarget || whisperTarget->GetTypeId() != TYPEID_PLAYER)
return;
- whisperTarget->ToPlayer()->GetSession()->SendPacket(data);
+ whisperTarget->ToPlayer()->SendDirectMessage(data);
return;
}
break;
@@ -344,7 +346,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data,
Map::PlayerList const& players = source->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
if (itr->GetSource()->GetAreaId() == areaId && (!team || Team(itr->GetSource()->GetTeam()) == team) && (!gmOnly || itr->GetSource()->IsGameMaster()))
- itr->GetSource()->GetSession()->SendPacket(data);
+ itr->GetSource()->SendDirectMessage(data);
return;
}
case TEXT_RANGE_ZONE:
@@ -353,7 +355,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data,
Map::PlayerList const& players = source->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
if (itr->GetSource()->GetZoneId() == zoneId && (!team || Team(itr->GetSource()->GetTeam()) == team) && (!gmOnly || itr->GetSource()->IsGameMaster()))
- itr->GetSource()->GetSession()->SendPacket(data);
+ itr->GetSource()->SendDirectMessage(data);
return;
}
case TEXT_RANGE_MAP:
@@ -361,7 +363,7 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data,
Map::PlayerList const& players = source->GetMap()->GetPlayers();
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
if ((!team || Team(itr->GetSource()->GetTeam()) == team) && (!gmOnly || itr->GetSource()->IsGameMaster()))
- itr->GetSource()->GetSession()->SendPacket(data);
+ itr->GetSource()->SendDirectMessage(data);
return;
}
case TEXT_RANGE_WORLD:
@@ -369,8 +371,8 @@ void CreatureTextMgr::SendNonChatPacket(WorldObject* source, WorldPacket* data,
SessionMap const& smap = sWorld->GetAllSessions();
for (SessionMap::const_iterator iter = smap.begin(); iter != smap.end(); ++iter)
if (Player* player = iter->second->GetPlayer())
- if (player->GetSession() && (!team || Team(player->GetTeam()) == team) && (!gmOnly || player->IsGameMaster()))
- player->GetSession()->SendPacket(data);
+ if ((!team || Team(player->GetTeam()) == team) && (!gmOnly || player->IsGameMaster()))
+ player->SendDirectMessage(data);
return;
}
case TEXT_RANGE_NORMAL:
@@ -390,21 +392,6 @@ void CreatureTextMgr::SendEmote(Unit* source, uint32 emote)
source->HandleEmoteCommand(emote);
}
-void CreatureTextMgr::SetRepeatId(Creature* source, uint8 textGroup, uint8 id)
-{
- if (!source)
- return;
-
- source->SetTextRepeatId(textGroup, id);
-}
-
-CreatureTextRepeatIds CreatureTextMgr::GetRepeatGroup(Creature* source, uint8 textGroup)
-{
- ASSERT(source);//should never happen
-
- return source->GetTextRepeatGroup(textGroup);
-}
-
bool CreatureTextMgr::TextExist(uint32 sourceEntry, uint8 textGroup)
{
if (!sourceEntry)
diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h
index 70825f75307..08040882461 100644
--- a/src/server/game/Texts/CreatureTextMgr.h
+++ b/src/server/game/Texts/CreatureTextMgr.h
@@ -18,12 +18,17 @@
#ifndef TRINITY_CREATURE_TEXT_MGR_H
#define TRINITY_CREATURE_TEXT_MGR_H
-#include "Creature.h"
-#include "GridNotifiers.h"
-#include "ObjectAccessor.h"
+#include "Common.h"
#include "SharedDefines.h"
-#include "Opcodes.h"
-#include "Group.h"
+#include <map>
+#include <unordered_map>
+#include <vector>
+
+class Creature;
+class Player;
+class Unit;
+class WorldObject;
+class WorldPacket;
enum CreatureTextRange
{
@@ -52,7 +57,7 @@ struct CreatureTextEntry
struct CreatureTextLocale
{
- StringVector Text;
+ std::vector<std::string> Text;
};
struct CreatureTextId
@@ -61,7 +66,7 @@ struct CreatureTextId
bool operator<(CreatureTextId const& right) const
{
- return memcmp(this, &right, sizeof(CreatureTextId)) < 0;
+ return std::tie(entry, textGroup, textId) < std::tie(right.entry, right.textGroup, right.textId);
}
uint32 entry;
@@ -96,12 +101,10 @@ class TC_GAME_API CreatureTextMgr
bool TextExist(uint32 sourceEntry, uint8 textGroup);
std::string GetLocalizedChatString(uint32 entry, uint8 gender, uint8 textGroup, uint32 id, LocaleConstant locale) const;
- template<class Builder> void SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* whisperTarget = nullptr, CreatureTextRange range = TEXT_RANGE_NORMAL, Team team = TEAM_OTHER, bool gmOnly = false) const;
+ template<class Builder>
+ void SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* whisperTarget = nullptr, CreatureTextRange range = TEXT_RANGE_NORMAL, Team team = TEAM_OTHER, bool gmOnly = false) const;
private:
- CreatureTextRepeatIds GetRepeatGroup(Creature* source, uint8 textGroup);
- void SetRepeatId(Creature* source, uint8 textGroup, uint8 id);
-
void SendNonChatPacket(WorldObject* source, WorldPacket* data, ChatMsg msgType, WorldObject const* whisperTarget, CreatureTextRange range, Team team, bool gmOnly) const;
float GetRangeForChatType(ChatMsg msgType) const;
@@ -111,148 +114,4 @@ class TC_GAME_API CreatureTextMgr
#define sCreatureTextMgr CreatureTextMgr::instance()
-template<class Builder>
-class CreatureTextLocalizer
-{
- public:
- CreatureTextLocalizer(Builder const& builder, ChatMsg msgType) : _builder(builder), _msgType(msgType)
- {
- _packetCache.resize(TOTAL_LOCALES, NULL);
- }
-
- ~CreatureTextLocalizer()
- {
- for (size_t i = 0; i < _packetCache.size(); ++i)
- {
- if (_packetCache[i])
- delete _packetCache[i]->first;
- delete _packetCache[i];
- }
- }
-
- void operator()(Player* player)
- {
- LocaleConstant loc_idx = player->GetSession()->GetSessionDbLocaleIndex();
- WorldPacket* messageTemplate;
- size_t whisperGUIDpos;
-
- // create if not cached yet
- if (!_packetCache[loc_idx])
- {
- messageTemplate = new WorldPacket();
- whisperGUIDpos = _builder(messageTemplate, loc_idx);
- _packetCache[loc_idx] = new std::pair<WorldPacket*, size_t>(messageTemplate, whisperGUIDpos);
- }
- else
- {
- messageTemplate = _packetCache[loc_idx]->first;
- whisperGUIDpos = _packetCache[loc_idx]->second;
- }
-
- WorldPacket data(*messageTemplate);
- switch (_msgType)
- {
- case CHAT_MSG_MONSTER_WHISPER:
- case CHAT_MSG_RAID_BOSS_WHISPER:
- data.put<uint64>(whisperGUIDpos, player->GetGUID().GetRawValue());
- break;
- default:
- break;
- }
-
- player->SendDirectMessage(&data);
- }
-
- private:
- std::vector<std::pair<WorldPacket*, size_t>* > _packetCache;
- Builder const& _builder;
- ChatMsg _msgType;
-};
-
-template<class Builder>
-void CreatureTextMgr::SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* whisperTarget /*= nullptr*/, CreatureTextRange range /*= TEXT_RANGE_NORMAL*/, Team team /*= TEAM_OTHER*/, bool gmOnly /*= false*/) const
-{
- if (!source)
- return;
-
- CreatureTextLocalizer<Builder> localizer(builder, msgType);
-
- switch (msgType)
- {
- case CHAT_MSG_MONSTER_PARTY:
- {
- if (!whisperTarget)
- return;
-
- if (Player* whisperPlayer = const_cast<Player*>(whisperTarget->ToPlayer()))
- {
- if (Group* group = whisperPlayer->GetGroup())
- group->BroadcastWorker(localizer);
- }
- return;
- }
- case CHAT_MSG_MONSTER_WHISPER:
- case CHAT_MSG_RAID_BOSS_WHISPER:
- {
- if (range == TEXT_RANGE_NORMAL) // ignores team and gmOnly
- {
- if (!whisperTarget || whisperTarget->GetTypeId() != TYPEID_PLAYER)
- return;
-
- localizer(const_cast<Player*>(whisperTarget->ToPlayer()));
- return;
- }
- break;
- }
- default:
- break;
- }
-
- switch (range)
- {
- case TEXT_RANGE_AREA:
- {
- uint32 areaId = source->GetAreaId();
- Map::PlayerList const& players = source->GetMap()->GetPlayers();
- for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
- if (itr->GetSource()->GetAreaId() == areaId && (!team || Team(itr->GetSource()->GetTeam()) == team) && (!gmOnly || itr->GetSource()->IsGameMaster()))
- localizer(itr->GetSource());
- return;
- }
- case TEXT_RANGE_ZONE:
- {
- uint32 zoneId = source->GetZoneId();
- Map::PlayerList const& players = source->GetMap()->GetPlayers();
- for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
- if (itr->GetSource()->GetZoneId() == zoneId && (!team || Team(itr->GetSource()->GetTeam()) == team) && (!gmOnly || itr->GetSource()->IsGameMaster()))
- localizer(itr->GetSource());
- return;
- }
- case TEXT_RANGE_MAP:
- {
- Map::PlayerList const& players = source->GetMap()->GetPlayers();
- for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
- if ((!team || Team(itr->GetSource()->GetTeam()) == team) && (!gmOnly || itr->GetSource()->IsGameMaster()))
- localizer(itr->GetSource());
- return;
- }
- case TEXT_RANGE_WORLD:
- {
- SessionMap const& smap = sWorld->GetAllSessions();
- for (SessionMap::const_iterator iter = smap.begin(); iter != smap.end(); ++iter)
- if (Player* player = iter->second->GetPlayer())
- if ((!team || Team(player->GetTeam()) == team) && (!gmOnly || player->IsGameMaster()))
- localizer(player);
- return;
- }
- case TEXT_RANGE_NORMAL:
- default:
- break;
- }
-
- float dist = GetRangeForChatType(msgType);
- Trinity::PlayerDistWorker<CreatureTextLocalizer<Builder>> worker(source, dist, localizer);
- Cell::VisitWorldObjects(source, worker, dist);
-}
-
#endif
diff --git a/src/server/game/Texts/CreatureTextMgrImpl.h b/src/server/game/Texts/CreatureTextMgrImpl.h
new file mode 100644
index 00000000000..219c257a7e4
--- /dev/null
+++ b/src/server/game/Texts/CreatureTextMgrImpl.h
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2008-2017 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef CreatureTextMgrImpl_h__
+#define CreatureTextMgrImpl_h__
+
+#include "CreatureTextMgr.h"
+#include "CellImpl.h"
+#include "Group.h"
+#include "GridNotifiers.h"
+#include "World.h"
+#include "WorldSession.h"
+
+template<class Builder>
+class CreatureTextLocalizer
+{
+public:
+ CreatureTextLocalizer(Builder const& builder, ChatMsg msgType) : _builder(builder), _msgType(msgType)
+ {
+ _packetCache.resize(TOTAL_LOCALES, nullptr);
+ }
+
+ ~CreatureTextLocalizer()
+ {
+ for (size_t i = 0; i < _packetCache.size(); ++i)
+ {
+ if (_packetCache[i])
+ delete _packetCache[i]->first;
+ delete _packetCache[i];
+ }
+ }
+
+ void operator()(Player const* player) const
+ {
+ LocaleConstant loc_idx = player->GetSession()->GetSessionDbLocaleIndex();
+ WorldPacket* messageTemplate;
+ size_t whisperGUIDpos;
+
+ // create if not cached yet
+ if (!_packetCache[loc_idx])
+ {
+ messageTemplate = new WorldPacket();
+ whisperGUIDpos = _builder(messageTemplate, loc_idx);
+ _packetCache[loc_idx] = new std::pair<WorldPacket*, size_t>(messageTemplate, whisperGUIDpos);
+ }
+ else
+ {
+ messageTemplate = _packetCache[loc_idx]->first;
+ whisperGUIDpos = _packetCache[loc_idx]->second;
+ }
+
+ WorldPacket data(*messageTemplate);
+ switch (_msgType)
+ {
+ case CHAT_MSG_MONSTER_WHISPER:
+ case CHAT_MSG_RAID_BOSS_WHISPER:
+ data.put<uint64>(whisperGUIDpos, player->GetGUID().GetRawValue());
+ break;
+ default:
+ break;
+ }
+
+ player->SendDirectMessage(&data);
+ }
+
+private:
+ mutable std::vector<std::pair<WorldPacket*, size_t>*> _packetCache;
+ Builder const& _builder;
+ ChatMsg _msgType;
+};
+
+template<class Builder>
+void CreatureTextMgr::SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* whisperTarget /*= nullptr*/, CreatureTextRange range /*= TEXT_RANGE_NORMAL*/, Team team /*= TEAM_OTHER*/, bool gmOnly /*= false*/) const
+{
+ if (!source)
+ return;
+
+ CreatureTextLocalizer<Builder> localizer(builder, msgType);
+
+ switch (msgType)
+ {
+ case CHAT_MSG_MONSTER_PARTY:
+ {
+ if (!whisperTarget)
+ return;
+
+ if (Player const* whisperPlayer = whisperTarget->ToPlayer())
+ if (Group const* group = whisperPlayer->GetGroup())
+ group->BroadcastWorker(localizer);
+ return;
+ }
+ case CHAT_MSG_MONSTER_WHISPER:
+ case CHAT_MSG_RAID_BOSS_WHISPER:
+ {
+ if (range == TEXT_RANGE_NORMAL) // ignores team and gmOnly
+ {
+ if (!whisperTarget || whisperTarget->GetTypeId() != TYPEID_PLAYER)
+ return;
+
+ localizer(const_cast<Player*>(whisperTarget->ToPlayer()));
+ return;
+ }
+ break;
+ }
+ default:
+ break;
+ }
+
+ switch (range)
+ {
+ case TEXT_RANGE_AREA:
+ {
+ uint32 areaId = source->GetAreaId();
+ Map::PlayerList const& players = source->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ if (itr->GetSource()->GetAreaId() == areaId && (!team || Team(itr->GetSource()->GetTeam()) == team) && (!gmOnly || itr->GetSource()->IsGameMaster()))
+ localizer(itr->GetSource());
+ return;
+ }
+ case TEXT_RANGE_ZONE:
+ {
+ uint32 zoneId = source->GetZoneId();
+ Map::PlayerList const& players = source->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ if (itr->GetSource()->GetZoneId() == zoneId && (!team || Team(itr->GetSource()->GetTeam()) == team) && (!gmOnly || itr->GetSource()->IsGameMaster()))
+ localizer(itr->GetSource());
+ return;
+ }
+ case TEXT_RANGE_MAP:
+ {
+ Map::PlayerList const& players = source->GetMap()->GetPlayers();
+ for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ if ((!team || Team(itr->GetSource()->GetTeam()) == team) && (!gmOnly || itr->GetSource()->IsGameMaster()))
+ localizer(itr->GetSource());
+ return;
+ }
+ case TEXT_RANGE_WORLD:
+ {
+ SessionMap const& smap = sWorld->GetAllSessions();
+ for (SessionMap::const_iterator iter = smap.begin(); iter != smap.end(); ++iter)
+ if (Player* player = iter->second->GetPlayer())
+ if ((!team || Team(player->GetTeam()) == team) && (!gmOnly || player->IsGameMaster()))
+ localizer(player);
+ return;
+ }
+ case TEXT_RANGE_NORMAL:
+ default:
+ break;
+ }
+
+ float dist = GetRangeForChatType(msgType);
+ Trinity::PlayerDistWorker<CreatureTextLocalizer<Builder>> worker(source, dist, localizer);
+ Cell::VisitWorldObjects(source, worker, dist);
+}
+
+#endif // CreatureTextMgrImpl_h__