Scripts/Commands: New utility command: .list spawnpoints.

(I just needed it for dynspawn follow-up work, really.)
This commit is contained in:
Treeston
2017-08-01 03:41:47 +02:00
parent 41721642f7
commit fcd6fe0aac
7 changed files with 73 additions and 17 deletions

View File

@@ -48,12 +48,13 @@ public:
{
static std::vector<ChatCommand> listCommandTable =
{
{ "creature", rbac::RBAC_PERM_COMMAND_LIST_CREATURE, true, &HandleListCreatureCommand, "" },
{ "item", rbac::RBAC_PERM_COMMAND_LIST_ITEM, true, &HandleListItemCommand, "" },
{ "object", rbac::RBAC_PERM_COMMAND_LIST_OBJECT, true, &HandleListObjectCommand, "" },
{ "auras", rbac::RBAC_PERM_COMMAND_LIST_AURAS, false, &HandleListAurasCommand, "" },
{ "mail", rbac::RBAC_PERM_COMMAND_LIST_MAIL, true, &HandleListMailCommand, "" },
{ "respawns", rbac::RBAC_PERM_COMMAND_LIST_MAIL, false, &HandleListRespawnsCommand, "" },
{ "creature", rbac::RBAC_PERM_COMMAND_LIST_CREATURE, true, &HandleListCreatureCommand, "" },
{ "item", rbac::RBAC_PERM_COMMAND_LIST_ITEM, true, &HandleListItemCommand, "" },
{ "object", rbac::RBAC_PERM_COMMAND_LIST_OBJECT, true, &HandleListObjectCommand, "" },
{ "auras", rbac::RBAC_PERM_COMMAND_LIST_AURAS, false, &HandleListAurasCommand, "" },
{ "mail", rbac::RBAC_PERM_COMMAND_LIST_MAIL, true, &HandleListMailCommand, "" },
{ "spawnpoints", rbac::RBAC_PERM_COMMAND_LIST_SPAWNPOINTS, false, &HandleListSpawnPointsCommand, "" },
{ "respawns", rbac::RBAC_PERM_COMMAND_LIST_RESPAWNS, false, &HandleListRespawnsCommand, "" },
};
static std::vector<ChatCommand> commandTable =
{
@@ -644,6 +645,44 @@ public:
return true;
}
static bool HandleListSpawnPointsCommand(ChatHandler* handler, char const* /*args*/)
{
Player const* player = handler->GetSession()->GetPlayer();
if (!player)
return false;
Map const* map = player->GetMap();
if (!map)
return false;
LocaleConstant const locale = handler->GetSession()->GetSessionDbcLocale();
uint32 const mapId = map->GetId();
bool const showAll = map->IsBattlegroundOrArena() || map->IsDungeon();
handler->PSendSysMessage("Listing all spawn points in map %u (%s)%s:", mapId, map->GetMapName(), showAll ? "" : " within 5000yd");
for (auto const& pair : sObjectMgr->GetAllCreatureData())
{
SpawnData const& data = pair.second;
if (data.spawnPoint.GetMapId() != mapId)
continue;
CreatureTemplate const* cTemp = sObjectMgr->GetCreatureTemplate(data.id);
if (!cTemp)
continue;
if (showAll || data.spawnPoint.IsInDist2d(player, 5000.0))
handler->PSendSysMessage("Type: %u | SpawnId: %u | Entry: %u (%s) | X: %.3f | Y: %.3f | Z: %.3f", uint32(data.type), data.spawnId, data.id, cTemp->Name.c_str(), data.spawnPoint.GetPositionX(), data.spawnPoint.GetPositionY(), data.spawnPoint.GetPositionZ());
}
for (auto const& pair : sObjectMgr->GetAllGameObjectData())
{
SpawnData const& data = pair.second;
if (data.spawnPoint.GetMapId() != mapId)
continue;
GameObjectTemplate const* goTemp = sObjectMgr->GetGameObjectTemplate(data.id);
if (!goTemp)
continue;
if (showAll || data.spawnPoint.IsInDist2d(player, 5000.0))
handler->PSendSysMessage("Type: %u | SpawnId: %u | Entry: %u (%s) | X: %.3f | Y: %.3f | Z: %.3f", uint32(data.type), data.spawnId, data.id, goTemp->name.c_str(), data.spawnPoint.GetPositionX(), data.spawnPoint.GetPositionY(), data.spawnPoint.GetPositionZ());
}
return true;
}
static char const* GetZoneName(uint32 zoneId, LocaleConstant locale)
{
AreaTableEntry const* zoneEntry = sAreaTableStore.LookupEntry(zoneId);