From 8f3904f8fd4e7536d1e7ba8e701f4774519fd867 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 17 Aug 2019 22:30:27 +0200 Subject: Core/Map: Kill zoneId from RespawnInfo, all it did was significantly slow down startup to make one gm command faster (cherry picked from commit 3a4216fd979eb2a7667b0861a770e9af4f242eab) --- src/server/scripts/Commands/cs_list.cpp | 29 ++++++++++++++++++++++------- src/server/scripts/Commands/cs_misc.cpp | 2 +- 2 files changed, 23 insertions(+), 8 deletions(-) (limited to 'src/server/scripts/Commands') diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp index a1b263e7ad8..b0fdcd613d2 100644 --- a/src/server/scripts/Commands/cs_list.cpp +++ b/src/server/scripts/Commands/cs_list.cpp @@ -34,6 +34,7 @@ EndScriptData */ #include "MapManager.h" #include "ObjectAccessor.h" #include "ObjectMgr.h" +#include "PhasingHandler.h" #include "Player.h" #include "RBAC.h" #include "SpellAuraEffects.h" @@ -684,10 +685,11 @@ public: AreaTableEntry const* zoneEntry = sAreaTableStore.LookupEntry(zoneId); return zoneEntry ? zoneEntry->AreaName[locale] : ""; } + static bool HandleListRespawnsCommand(ChatHandler* handler, char const* args) { Player const* player = handler->GetSession()->GetPlayer(); - Map const* map = player->GetMap(); + Map* map = player->GetMap(); uint32 range = 0; if (*args) range = atoi((char*)args); @@ -696,27 +698,40 @@ public: char const* stringOverdue = sObjectMgr->GetTrinityString(LANG_LIST_RESPAWNS_OVERDUE, locale); uint32 zoneId = player->GetZoneId(); + char const* zoneName = GetZoneName(zoneId, locale); for (SpawnObjectType type : EnumUtils::Iterate()) { if (range) handler->PSendSysMessage(LANG_LIST_RESPAWNS_RANGE, EnumUtils::ToTitle(type), range); else - handler->PSendSysMessage(LANG_LIST_RESPAWNS_ZONE, EnumUtils::ToTitle(type), GetZoneName(zoneId, locale), zoneId); + handler->PSendSysMessage(LANG_LIST_RESPAWNS_ZONE, EnumUtils::ToTitle(type), zoneName, zoneId); + handler->PSendSysMessage(LANG_LIST_RESPAWNS_LISTHEADER); std::vector respawns; - map->GetRespawnInfo(respawns, SpawnObjectTypeMask(1 << type), range ? 0 : zoneId); - for (RespawnInfo* ri : respawns) + map->GetRespawnInfo(respawns, SpawnObjectTypeMask(1 << type)); + for (RespawnInfo const* ri : respawns) { SpawnData const* data = sObjectMgr->GetSpawnData(ri->type, ri->spawnId); if (!data) continue; - if (range && !player->IsInDist(data->spawnPoint, range)) - continue; + + uint32 respawnZoneId = map->GetZoneId(PhasingHandler::GetEmptyPhaseShift(), data->spawnPoint); + if (range) + { + if (!player->IsInDist(data->spawnPoint, range)) + continue; + } + else + { + if (zoneId != respawnZoneId) + continue; + } + uint32 gridY = ri->gridId / MAX_NUMBER_OF_GRIDS; uint32 gridX = ri->gridId % MAX_NUMBER_OF_GRIDS; std::string respawnTime = ri->respawnTime > GameTime::GetGameTime() ? secsToTimeString(uint64(ri->respawnTime - GameTime::GetGameTime()), true) : stringOverdue; - handler->PSendSysMessage(UI64FMTD " | %u | [%02u,%02u] | %s (%u) | %s%s", ri->spawnId, ri->entry, gridX, gridY, GetZoneName(ri->zoneId, locale), ri->zoneId, respawnTime.c_str(), map->IsSpawnGroupActive(data->spawnGroupData->groupId) ? "" : " (inactive)"); + handler->PSendSysMessage(UI64FMTD " | %u | [%02u,%02u] | %s (%u) | %s%s", ri->spawnId, ri->entry, gridX, gridY, GetZoneName(respawnZoneId, locale), respawnZoneId, respawnTime.c_str(), map->IsSpawnGroupActive(data->spawnGroupData->groupId) ? "" : " (inactive)"); } } return true; diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index bfb45069900..7b74a54774f 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1977,7 +1977,7 @@ public: // Now handle any that had despawned, but had respawn time logged. std::vector data; - player->GetMap()->GetRespawnInfo(data, SPAWN_TYPEMASK_ALL, 0); + player->GetMap()->GetRespawnInfo(data, SPAWN_TYPEMASK_ALL); if (!data.empty()) { uint32 const gridId = Trinity::ComputeGridCoord(player->GetPositionX(), player->GetPositionY()).GetId(); -- cgit v1.2.3