aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2020-02-08 20:22:37 +0100
committerShauren <shauren.trinity@gmail.com>2021-12-21 15:16:26 +0100
commit94a79bac7a06aa0f931e9d651928de7eea0a8b5c (patch)
tree0f28508689237d951d0a44ae05c85ab3a29d8c62 /src/server/scripts
parentfe489e2be1312bc559d0c38691c9741ad69cfec8 (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> (cherry picked from commit 9304e496cbf6ab6c028671fb8526c732ae5d799f)
Diffstat (limited to 'src/server/scripts')
-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
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp4
4 files changed, 37 insertions, 33 deletions
diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp
index 98d599e2720..47e1c737849 100644
--- a/src/server/scripts/Commands/cs_go.cpp
+++ b/src/server/scripts/Commands/cs_go.cpp
@@ -85,13 +85,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;
}
@@ -102,7 +104,7 @@ public:
else
player->SaveRecallPosition(); // save only in non-flight case
- player->TeleportTo(loc);
+ player->TeleportTo({ mapId, pos });
return true;
}
@@ -116,7 +118,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)
@@ -143,7 +145,7 @@ public:
return false;
}
- return DoTeleport(handler, spawnpoint->spawnPoint);
+ return DoTeleport(handler, spawnpoint->spawnPoint, spawnpoint->mapId);
}
static bool HandleGoGameObjectSpawnIdCommand(ChatHandler* handler, uint32 spawnId)
@@ -156,7 +158,7 @@ public:
return false;
}
- return DoTeleport(handler, spawnpoint->spawnPoint);
+ return DoTeleport(handler, spawnpoint->spawnPoint, spawnpoint->mapId);
}
static bool HandleGoGameObjectGOIdCommand(ChatHandler* handler, uint32 goId)
@@ -183,7 +185,7 @@ public:
return false;
}
- return DoTeleport(handler, spawnpoint->spawnPoint);
+ return DoTeleport(handler, spawnpoint->spawnPoint, spawnpoint->mapId);
}
static bool HandleGoGraveyardCommand(ChatHandler* handler, uint32 gyId)
@@ -315,7 +317,7 @@ public:
handler->SetSentErrorMessage(true);
return false;
}
- return DoTeleport(handler, { node->ContinentID, { node->Pos.X, node->Pos.Y, node->Pos.Z } });
+ return DoTeleport(handler, { node->Pos.X, node->Pos.Y, node->Pos.Z }, node->ContinentID);
}
static bool HandleGoAreaTriggerCommand(ChatHandler* handler, Variant<Hyperlink<areatrigger>, uint32> areaTriggerId)
@@ -327,7 +329,7 @@ public:
handler->SetSentErrorMessage(true);
return false;
}
- return DoTeleport(handler, { uint32(at->ContinentID), { at->Pos.X, at->Pos.Y, at->Pos.Z } });
+ return DoTeleport(handler, { at->Pos.X, at->Pos.Y, at->Pos.Z }, at->ContinentID);
}
//teleport at coordinates
@@ -428,7 +430,7 @@ public:
z = std::max(map->GetStaticHeight(PhasingHandler::GetEmptyPhaseShift(), x, y, MAX_HEIGHT), map->GetWaterLevel(PhasingHandler::GetEmptyPhaseShift(), 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);
}
template<typename T>
@@ -455,7 +457,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);
@@ -620,9 +622,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->MapName[handler->GetSessionDbcLocale()], spawn->spawnPoint.GetPosition().ToString().c_str());
+ handler->PSendSysMessage(LANG_COMMAND_BOSS_MULTIPLE_SPAWN_ETY, spawn->spawnId, mapId, map->MapName[handler->GetSessionDbcLocale()], spawn->spawnPoint.ToString().c_str());
}
handler->SetSentErrorMessage(true);
return false;
@@ -635,8 +637,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))->MapName[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 b0fdcd613d2..f0856c9a028 100644
--- a/src/server/scripts/Commands/cs_list.cpp
+++ b/src/server/scripts/Commands/cs_list.cpp
@@ -658,7 +658,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)
@@ -669,7 +669,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)
@@ -711,25 +711,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(PhasingHandler::GetEmptyPhaseShift(), 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(PhasingHandler::GetEmptyPhaseShift(), 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(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)");
}
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index 6530652fe71..db5531c9eef 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -804,7 +804,7 @@ public:
return false;
}
- if (player->GetMapId() != data->spawnPoint.GetMapId())
+ if (player->GetMapId() != data->mapId)
{
handler->PSendSysMessage(LANG_COMMAND_CREATUREATSAMEMAP, std::to_string(lowguid).c_str());
handler->SetSentErrorMessage(true);
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
index f4a2e8b6adb..e109a1e793e 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp
@@ -380,8 +380,8 @@ class instance_icecrown_citadel : public InstanceMapScript
break;
case NPC_ZAFOD_BOOMBOX:
if (GameObjectTemplate const* go = sObjectMgr->GetGameObjectTemplate(GO_THE_SKYBREAKER_A))
- if ((TeamInInstance == ALLIANCE && int32(data->spawnPoint.GetMapId()) == go->moTransport.SpawnMap) ||
- (TeamInInstance == HORDE && int32(data->spawnPoint.GetMapId()) != go->moTransport.SpawnMap))
+ if ((TeamInInstance == ALLIANCE && int32(data->mapId) == go->moTransport.SpawnMap) ||
+ (TeamInInstance == HORDE && int32(data->mapId) != go->moTransport.SpawnMap))
return entry;
return 0;
case NPC_IGB_MURADIN_BRONZEBEARD: