AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
pool_commandscript Class Reference
Inheritance diagram for pool_commandscript:
CommandScript ScriptObject

Public Member Functions

 pool_commandscript ()
 
ChatCommandTable GetCommands () const override
 
- Public Member Functions inherited from ScriptObject
virtual bool IsDatabaseBound () const
 
virtual bool isAfterLoadScript () const
 
virtual void checkValidity ()
 
std::string const & GetName () const
 
uint16 GetTotalAvailableHooks ()
 

Static Private Member Functions

static char const * StatusTag (bool active)
 
static SpawnedPoolData const * GetPoolSpawns (ChatHandler *handler, PoolTemplateData const *tpl)
 
static void ListPoolMembers (ChatHandler *handler, char const *typeName, std::vector< PoolObject > const &explicitly, std::vector< PoolObject > const &equal, bool isCreature, SpawnedPoolData const *spawns)
 
static bool HandlePoolInfoCommand (ChatHandler *handler, uint32 poolId)
 
static bool HandlePoolLookupCommand (ChatHandler *handler)
 

Additional Inherited Members

- Protected Member Functions inherited from CommandScript
 CommandScript (char const *name)
 
- Protected Member Functions inherited from ScriptObject
 ScriptObject (char const *name, uint16 totalAvailableHooks=0)
 
virtual ~ScriptObject ()=default
 

Detailed Description

Constructor & Destructor Documentation

◆ pool_commandscript()

pool_commandscript::pool_commandscript ( )
inline
35: CommandScript("pool_commandscript") { }
Definition CommandScript.h:25

Member Function Documentation

◆ GetCommands()

ChatCommandTable pool_commandscript::GetCommands ( ) const
inlineoverridevirtual

Implements CommandScript.

38 {
39 static ChatCommandTable poolCommandTable =
40 {
43 };
44 static ChatCommandTable commandTable =
45 {
46 { "pool", poolCommandTable }
47 };
48 return commandTable;
49 }
static bool HandlePoolLookupCommand(ChatHandler *handler)
Definition cs_pool.cpp:205
static bool HandlePoolInfoCommand(ChatHandler *handler, uint32 poolId)
Definition cs_pool.cpp:134
std::vector< ChatCommandBuilder > ChatCommandTable
Definition ChatCommand.h:46
@ RBAC_PERM_COMMAND_POOL_INFO
Definition RBAC.h:697
@ RBAC_PERM_COMMAND_POOL_LOOKUP
Definition RBAC.h:698

References HandlePoolInfoCommand(), HandlePoolLookupCommand(), rbac::RBAC_PERM_COMMAND_POOL_INFO, and rbac::RBAC_PERM_COMMAND_POOL_LOOKUP.

◆ GetPoolSpawns()

static SpawnedPoolData const * pool_commandscript::GetPoolSpawns ( ChatHandler handler,
PoolTemplateData const *  tpl 
)
inlinestaticprivate
61 {
62 if (tpl->MapId == -1)
63 return nullptr;
64
65 if (Player* player = handler->GetPlayer())
66 if (player->GetMap()->GetId() == uint32(tpl->MapId))
67 return &player->GetMap()->GetPoolData();
68
69 if (Map* map = sMapMgr->FindMap(uint32(tpl->MapId), 0))
70 if (!map->Instanceable())
71 return &map->GetPoolData();
72
73 return nullptr;
74 }
std::uint32_t uint32
Definition Define.h:107
#define sMapMgr
Definition MapMgr.h:220
Player * GetPlayer() const
Definition Chat.cpp:37
Definition Map.h:168
Definition Player.h:1086

References SpawnedPoolData::GetMap(), ChatHandler::GetPlayer(), Map::GetPoolData(), PoolTemplateData::MapId, and sMapMgr.

Referenced by HandlePoolInfoCommand().

◆ HandlePoolInfoCommand()

static bool pool_commandscript::HandlePoolInfoCommand ( ChatHandler handler,
uint32  poolId 
)
inlinestaticprivate
135 {
136 PoolTemplateData const* tpl = sPoolMgr->GetPoolTemplate(poolId);
137 if (!tpl)
138 {
139 handler->PSendSysMessage(LANG_POOL_NOT_FOUND, poolId);
140 handler->SetSentErrorMessage(true);
141 return false;
142 }
143
144 SpawnedPoolData const* spawns = GetPoolSpawns(handler, tpl);
145
146 uint32 activeCount = sPoolMgr->GetQuestSpawnedData().GetSpawnedObjects(poolId);
147 if (spawns)
148 activeCount += spawns->GetSpawnedObjects(poolId);
149
150 handler->PSendSysMessage(LANG_POOL_INFO_HEADER, poolId,
151 tpl->Description.empty() ? "(none)" : tpl->Description,
152 tpl->MaxLimit, activeCount);
153
154 // Show parent pool if nested
155 uint32 parentPool = sPoolMgr->IsPartOfAPool<Pool>(poolId);
156 if (parentPool)
157 handler->PSendSysMessage(" Parent pool: {}", parentPool);
158
159 // Creature members
160 if (PoolGroup<Creature> const* creGroup = sPoolMgr->GetPoolCreatureGroup(poolId))
161 {
162 if (!creGroup->IsEmpty())
163 ListPoolMembers(handler, "Creatures",
164 creGroup->GetExplicitlyChanced(), creGroup->GetEqualChanced(), true, spawns);
165 }
166
167 // GameObject members
168 if (PoolGroup<GameObject> const* goGroup = sPoolMgr->GetPoolGameObjectGroup(poolId))
169 {
170 if (!goGroup->IsEmpty())
171 ListPoolMembers(handler, "GameObjects",
172 goGroup->GetExplicitlyChanced(), goGroup->GetEqualChanced(), false, spawns);
173 }
174
175 // Sub-pool members
176 if (PoolGroup<Pool> const* poolGroup = sPoolMgr->GetPoolPoolGroup(poolId))
177 {
178 auto const& explicitly = poolGroup->GetExplicitlyChanced();
179 auto const& equal = poolGroup->GetEqualChanced();
180 if (!explicitly.empty() || !equal.empty())
181 {
182 uint32 total = explicitly.size() + equal.size();
184
185 auto printSubPool = [&](PoolObject const& obj)
186 {
187 bool active = spawns && spawns->IsSpawnedObject<Pool>(obj.guid);
188 PoolTemplateData const* subTpl = sPoolMgr->GetPoolTemplate(obj.guid);
189 std::string desc = subTpl ? subTpl->Description : "Unknown";
190
192 StatusTag(active), obj.guid, desc);
193 };
194
195 for (auto const& obj : explicitly)
196 printSubPool(obj);
197 for (auto const& obj : equal)
198 printSubPool(obj);
199 }
200 }
201
202 return true;
203 }
@ LANG_POOL_INFO_SUBPOOL
Definition Language.h:1486
@ LANG_POOL_NOT_FOUND
Definition Language.h:1481
@ LANG_POOL_INFO_SUBPOOLS_HEADER
Definition Language.h:1485
@ LANG_POOL_INFO_HEADER
Definition Language.h:1482
#define sPoolMgr
Definition PoolMgr.h:216
void PSendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:219
void SetSentErrorMessage(bool val)
Definition Chat.h:238
Definition PoolMgr.h:86
Definition PoolMgr.h:45
Definition PoolMgr.h:52
bool IsSpawnedObject(uint32 db_guid_or_pool_id) const
uint32 GetSpawnedObjects(uint32 pool_id) const
Definition PoolMgr.cpp:30
static void ListPoolMembers(ChatHandler *handler, char const *typeName, std::vector< PoolObject > const &explicitly, std::vector< PoolObject > const &equal, bool isCreature, SpawnedPoolData const *spawns)
Definition cs_pool.cpp:76
static SpawnedPoolData const * GetPoolSpawns(ChatHandler *handler, PoolTemplateData const *tpl)
Definition cs_pool.cpp:60
static char const * StatusTag(bool active)
Definition cs_pool.cpp:52
Definition PoolMgr.h:38
Definition PoolMgr.h:31
std::string Description
Definition PoolMgr.h:34

References PoolTemplateData::Description, GetPoolSpawns(), SpawnedPoolData::GetSpawnedObjects(), SpawnedPoolData::IsSpawnedObject(), LANG_POOL_INFO_HEADER, LANG_POOL_INFO_SUBPOOL, LANG_POOL_INFO_SUBPOOLS_HEADER, LANG_POOL_NOT_FOUND, ListPoolMembers(), PoolTemplateData::MaxLimit, ChatHandler::PSendSysMessage(), ChatHandler::SetSentErrorMessage(), sPoolMgr, and StatusTag().

Referenced by GetCommands().

◆ HandlePoolLookupCommand()

static bool pool_commandscript::HandlePoolLookupCommand ( ChatHandler handler)
inlinestaticprivate
206 {
207 Player* player = handler->GetSession()->GetPlayer();
208 if (!player)
209 return false;
210
211 // Check targeted creature
212 Creature* target = handler->getSelectedCreature();
213 if (target && target->GetSpawnId())
214 {
215 uint32 spawnId = target->GetSpawnId();
216 uint32 poolId = sPoolMgr->GetCreaturePoolId(spawnId);
217 if (poolId)
218 {
219 bool spawned = target->GetMap()->GetPoolData().IsSpawnedObject<Creature>(spawnId);
221 target->GetName(), spawnId, poolId, StatusTag(spawned));
223 }
224 else
226 target->GetName(), spawnId);
227
228 return true;
229 }
230
231 // Check nearby gameobject
232 GameObject* goTarget = handler->GetNearbyGameObject();
233 if (goTarget && goTarget->GetSpawnId())
234 {
235 uint32 spawnId = goTarget->GetSpawnId();
236 uint32 poolId = sPoolMgr->GetGameObjectPoolId(spawnId);
237 if (poolId)
238 {
239 bool spawned = goTarget->GetMap()->GetPoolData().IsSpawnedObject<GameObject>(spawnId);
241 goTarget->GetName(), spawnId, poolId, StatusTag(spawned));
243 }
244 else
246 goTarget->GetName(), spawnId);
247
248 return true;
249 }
250
252 handler->SetSentErrorMessage(true);
253 return false;
254 }
@ LANG_POOL_LOOKUP_NOT_IN_POOL
Definition Language.h:1488
@ LANG_POOL_LOOKUP_USE_INFO
Definition Language.h:1489
@ LANG_POOL_LOOKUP_IN_POOL
Definition Language.h:1487
@ LANG_POOL_LOOKUP_NOTARGET
Definition Language.h:1490
WorldSession * GetSession()
Definition Chat.h:242
virtual void SendSysMessage(std::string_view str, bool escapeCharacters=false)
Definition Chat.cpp:168
GameObject * GetNearbyGameObject() const
Definition Chat.cpp:573
Creature * getSelectedCreature() const
Definition Chat.cpp:418
Definition Creature.h:47
ObjectGuid::LowType GetSpawnId() const
Definition Creature.h:69
Definition GameObject.h:120
ObjectGuid::LowType GetSpawnId() const
Definition GameObject.h:144
SpawnedPoolData & GetPoolData()
Definition Map.h:384
Map * GetMap() const
Definition Object.h:631
std::string const & GetName() const
Definition Object.h:529
Player * GetPlayer() const
Definition WorldSession.h:480

References WorldObject::GetMap(), WorldObject::GetName(), ChatHandler::GetNearbyGameObject(), WorldSession::GetPlayer(), Map::GetPoolData(), ChatHandler::getSelectedCreature(), ChatHandler::GetSession(), Creature::GetSpawnId(), GameObject::GetSpawnId(), SpawnedPoolData::IsSpawnedObject(), LANG_POOL_LOOKUP_IN_POOL, LANG_POOL_LOOKUP_NOT_IN_POOL, LANG_POOL_LOOKUP_NOTARGET, LANG_POOL_LOOKUP_USE_INFO, ChatHandler::PSendSysMessage(), ChatHandler::SendSysMessage(), ChatHandler::SetSentErrorMessage(), sPoolMgr, and StatusTag().

Referenced by GetCommands().

◆ ListPoolMembers()

static void pool_commandscript::ListPoolMembers ( ChatHandler handler,
char const *  typeName,
std::vector< PoolObject > const &  explicitly,
std::vector< PoolObject > const &  equal,
bool  isCreature,
SpawnedPoolData const *  spawns 
)
inlinestaticprivate
79 {
80 if (explicitly.empty() && equal.empty())
81 return;
82
83 uint32 total = explicitly.size() + equal.size();
84 handler->PSendSysMessage(LANG_POOL_INFO_MEMBERS_HEADER, typeName, total);
85
86 auto printMember = [&](PoolObject const& obj)
87 {
88 bool spawned = spawns && (isCreature
89 ? spawns->IsSpawnedObject<Creature>(obj.guid)
90 : spawns->IsSpawnedObject<GameObject>(obj.guid));
91
92 std::string name = "Unknown";
93 uint32 entry = 0;
94 uint32 mapId = 0;
95 float x = 0, y = 0, z = 0;
96
97 if (isCreature)
98 {
99 if (CreatureData const* data = sObjectMgr->GetCreatureData(obj.guid))
100 {
101 entry = data->id;
102 mapId = data->mapid;
103 x = data->posX;
104 y = data->posY;
105 z = data->posZ;
106 if (CreatureTemplate const* tpl = sObjectMgr->GetCreatureTemplate(entry))
107 name = tpl->Name;
108 }
109 }
110 else
111 {
112 if (GameObjectData const* data = sObjectMgr->GetGameObjectData(obj.guid))
113 {
114 entry = data->id;
115 mapId = data->mapid;
116 x = data->posX;
117 y = data->posY;
118 z = data->posZ;
119 if (GameObjectTemplate const* tpl = sObjectMgr->GetGameObjectTemplate(entry))
120 name = tpl->name;
121 }
122 }
123
125 StatusTag(spawned), obj.guid, name, entry, mapId, x, y, z);
126 };
127
128 for (auto const& obj : explicitly)
129 printMember(obj);
130 for (auto const& obj : equal)
131 printMember(obj);
132 }
@ LANG_POOL_INFO_MEMBERS_HEADER
Definition Language.h:1483
@ LANG_POOL_INFO_MEMBER
Definition Language.h:1484
#define sObjectMgr
Definition ObjectMgr.h:1730
Definition CreatureData.h:370
Definition CreatureData.h:187
Definition GameObjectData.h:715
Definition GameObjectData.h:32

References SpawnedPoolData::IsSpawnedObject(), LANG_POOL_INFO_MEMBER, LANG_POOL_INFO_MEMBERS_HEADER, ChatHandler::PSendSysMessage(), sObjectMgr, and StatusTag().

Referenced by HandlePoolInfoCommand().

◆ StatusTag()

static char const * pool_commandscript::StatusTag ( bool  active)
inlinestaticprivate
53 {
54 return active ? "ACTIVE" : "inactive";
55 }

Referenced by HandlePoolInfoCommand(), HandlePoolLookupCommand(), and ListPoolMembers().


The documentation for this class was generated from the following file: