aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Commands
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2020-02-08 20:22:37 +0100
committerGitHub <noreply@github.com>2020-02-08 20:22:37 +0100
commit9304e496cbf6ab6c028671fb8526c732ae5d799f (patch)
tree997040bf14477bbd30b9b175aac93fa287de03e1 /src/server/scripts/Commands
parent726d5e91b55d4742dcbd6b0a82d84788dbb117b7 (diff)
Core/Misc: Some refactoring, #23603 prep: (#23676)
- Split SpawnMetadata off from SpawnData - No longer allocate Creature/Gameobject objects in ObjectGridLoader just to check their typeid and delete them afterwards Co-authored-by: Giacomo Pozzoni <giacomopoz@gmail.com>
Diffstat (limited to 'src/server/scripts/Commands')
-rw-r--r--src/server/scripts/Commands/cs_go.cpp34
-rw-r--r--src/server/scripts/Commands/cs_list.cpp30
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp2
3 files changed, 35 insertions, 31 deletions
diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp
index 9122099ff92..171185428cb 100644
--- a/src/server/scripts/Commands/cs_go.cpp
+++ b/src/server/scripts/Commands/cs_go.cpp
@@ -79,13 +79,15 @@ public:
return commandTable;
}
- static bool DoTeleport(ChatHandler* handler, WorldLocation loc)
+ static bool DoTeleport(ChatHandler* handler, Position pos, uint32 mapId = MAPID_INVALID)
{
Player* player = handler->GetSession()->GetPlayer();
- if (!MapManager::IsValidMapCoord(loc) || sObjectMgr->IsTransportMap(loc.GetMapId()))
+ if (mapId == MAPID_INVALID)
+ mapId = player->GetMapId();
+ if (!MapManager::IsValidMapCoord(mapId, pos) || sObjectMgr->IsTransportMap(mapId))
{
- handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, loc.GetPositionX(), loc.GetPositionY(), loc.GetMapId());
+ handler->PSendSysMessage(LANG_INVALID_TARGET_COORD, pos.GetPositionX(), pos.GetPositionY(), mapId);
handler->SetSentErrorMessage(true);
return false;
}
@@ -96,7 +98,7 @@ public:
else
player->SaveRecallPosition(); // save only in non-flight case
- player->TeleportTo(loc);
+ player->TeleportTo({ mapId, pos });
return true;
}
@@ -110,7 +112,7 @@ public:
return false;
}
- return DoTeleport(handler, spawnpoint->spawnPoint);
+ return DoTeleport(handler, spawnpoint->spawnPoint, spawnpoint->mapId);
}
static bool HandleGoCreatureCIdCommand(ChatHandler* handler, Variant<Hyperlink<creature_entry>, uint32> cId)
@@ -137,7 +139,7 @@ public:
return false;
}
- return DoTeleport(handler, spawnpoint->spawnPoint);
+ return DoTeleport(handler, spawnpoint->spawnPoint, spawnpoint->mapId);
}
static bool HandleGoGameObjectSpawnIdCommand(ChatHandler* handler, uint32 spawnId)
@@ -150,7 +152,7 @@ public:
return false;
}
- return DoTeleport(handler, spawnpoint->spawnPoint);
+ return DoTeleport(handler, spawnpoint->spawnPoint, spawnpoint->mapId);
}
static bool HandleGoGameObjectGOIdCommand(ChatHandler* handler, uint32 goId)
@@ -177,7 +179,7 @@ public:
return false;
}
- return DoTeleport(handler, spawnpoint->spawnPoint);
+ return DoTeleport(handler, spawnpoint->spawnPoint, spawnpoint->mapId);
}
static bool HandleGoGraveyardCommand(ChatHandler* handler, uint32 gyId)
@@ -247,7 +249,7 @@ public:
handler->SetSentErrorMessage(true);
return false;
}
- return DoTeleport(handler, { node->map_id, { node->x, node->y, node->z } });
+ return DoTeleport(handler, { node->x, node->y, node->z }, node->map_id);
}
static bool HandleGoAreaTriggerCommand(ChatHandler* handler, Variant<Hyperlink<areatrigger>, uint32> areaTriggerId)
@@ -259,7 +261,7 @@ public:
handler->SetSentErrorMessage(true);
return false;
}
- return DoTeleport(handler, { at->mapid, { at->x, at->y, at->z } });
+ return DoTeleport(handler, { at->x, at->y, at->z }, at->mapid);
}
//teleport at coordinates
@@ -357,7 +359,7 @@ public:
z = std::max(map->GetHeight(x, y, MAX_HEIGHT), map->GetWaterLevel(x, y));
}
- return DoTeleport(handler, { mapId, { x, y, *z, o.get_value_or(0.0f) } });
+ return DoTeleport(handler, { x, y, *z, o.get_value_or(0.0f) }, mapId);
}
static bool HandleGoTicketCommand(ChatHandler* handler, uint32 ticketId)
@@ -383,7 +385,7 @@ public:
static bool HandleGoOffsetCommand(ChatHandler* handler, float dX, Optional<float> dY, Optional<float> dZ, Optional<float> dO)
{
- WorldLocation loc = handler->GetSession()->GetPlayer()->GetWorldLocation();
+ Position loc = handler->GetSession()->GetPlayer()->GetPosition();
loc.RelocateOffset({ dX, dY.get_value_or(0.0f), dZ.get_value_or(0.0f), dO.get_value_or(0.0f) });
return DoTeleport(handler, loc);
@@ -548,9 +550,9 @@ public:
handler->PSendSysMessage(LANG_COMMAND_BOSS_MULTIPLE_SPAWNS, boss->Name.c_str(), boss->Entry);
for (CreatureData const* spawn : spawns)
{
- uint32 const mapId = spawn->spawnPoint.GetMapId();
+ uint32 const mapId = spawn->mapId;
MapEntry const* const map = ASSERT_NOTNULL(sMapStore.LookupEntry(mapId));
- handler->PSendSysMessage(LANG_COMMAND_BOSS_MULTIPLE_SPAWN_ETY, spawn->spawnId, mapId, map->name[handler->GetSessionDbcLocale()], spawn->spawnPoint.GetPosition().ToString().c_str());
+ handler->PSendSysMessage(LANG_COMMAND_BOSS_MULTIPLE_SPAWN_ETY, spawn->spawnId, mapId, map->name[handler->GetSessionDbcLocale()], spawn->spawnPoint.ToString().c_str());
}
handler->SetSentErrorMessage(true);
return false;
@@ -563,8 +565,8 @@ public:
player->SaveRecallPosition();
CreatureData const* const spawn = spawns.front();
- uint32 const mapId = spawn->spawnPoint.GetMapId();
- if (!player->TeleportTo(spawn->spawnPoint))
+ uint32 const mapId = spawn->mapId;
+ if (!player->TeleportTo({ mapId, spawn->spawnPoint }))
{
char const* const mapName = ASSERT_NOTNULL(sMapStore.LookupEntry(mapId))->name[handler->GetSessionDbcLocale()];
handler->PSendSysMessage(LANG_COMMAND_GO_BOSS_FAILED, spawn->spawnId, boss->Name.c_str(), boss->Entry, mapName);
diff --git a/src/server/scripts/Commands/cs_list.cpp b/src/server/scripts/Commands/cs_list.cpp
index e264e7153c3..430a496b418 100644
--- a/src/server/scripts/Commands/cs_list.cpp
+++ b/src/server/scripts/Commands/cs_list.cpp
@@ -656,7 +656,7 @@ public:
for (auto const& pair : sObjectMgr->GetAllCreatureData())
{
SpawnData const& data = pair.second;
- if (data.spawnPoint.GetMapId() != mapId)
+ if (data.mapId != mapId)
continue;
CreatureTemplate const* cTemp = sObjectMgr->GetCreatureTemplate(data.id);
if (!cTemp)
@@ -667,7 +667,7 @@ public:
for (auto const& pair : sObjectMgr->GetAllGameObjectData())
{
SpawnData const& data = pair.second;
- if (data.spawnPoint.GetMapId() != mapId)
+ if (data.mapId != mapId)
continue;
GameObjectTemplate const* goTemp = sObjectMgr->GetGameObjectTemplate(data.id);
if (!goTemp)
@@ -709,25 +709,27 @@ public:
map->GetRespawnInfo(respawns, SpawnObjectTypeMask(1 << type));
for (RespawnInfo const* ri : respawns)
{
- SpawnData const* data = sObjectMgr->GetSpawnData(ri->type, ri->spawnId);
+ SpawnMetadata const* data = sObjectMgr->GetSpawnMetadata(ri->type, ri->spawnId);
if (!data)
continue;
- uint32 respawnZoneId = map->GetZoneId(data->spawnPoint);
- if (range)
+ uint32 respawnZoneId = 0;
+ if (SpawnData const* edata = data->ToSpawnData())
{
- if (!player->IsInDist(data->spawnPoint, range))
- continue;
- }
- else
- {
- if (zoneId != respawnZoneId)
- continue;
+ respawnZoneId = map->GetZoneId(edata->spawnPoint);
+ if (range)
+ {
+ if (!player->IsInDist(edata->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("%u | %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)");
}
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index 358be467e39..f60a0225b97 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -763,7 +763,7 @@ public:
return false;
}
- if (player->GetMapId() != data->spawnPoint.GetMapId())
+ if (player->GetMapId() != data->mapId)
{
handler->PSendSysMessage(LANG_COMMAND_CREATUREATSAMEMAP, lowguid);
handler->SetSentErrorMessage(true);