Implement clientless transports, Lua reload and same-map portals

Add native transport recording and execution with grid lifecycle handling, clientless teleport acknowledgements, and regression tests. Support targeted same-map portal imports and preserve disabled taxi nodes. Document live transport and portal verification and the remaining portal inventory.
This commit is contained in:
Nico committed 2026-10-26 11:27:56 +01:00
1 parent 01a9ba4b0b
commit 1164a72ea3
40 files changed
+4533 -163

No files matched your search

+21
View File
@@ -116,6 +116,27 @@ void Map::LoadAllCells()
LoadGrid((cellX + 0.5f - CENTER_GRID_CELL_ID) * SIZE_OF_GRID_CELL, (cellY + 0.5f - CENTER_GRID_CELL_ID) * SIZE_OF_GRID_CELL);
}
void Map::LoadTransportGameObjectGrids()
{
auto spawns = sObjectMgr->GetTransportGameObjectSpawns(GetId());
if (!spawns)
return;
uint32 grids = 0;
for (ObjectGuid::LowType spawnId : *spawns)
{
GameObjectData const* data = sObjectMgr->GetGameObjectData(spawnId);
if (!data || data->mapId != GetId() || !(data->spawnMask & (1u << GetSpawnMode())))
continue;
// Use the normal loader: respawns, pools, phases and spawn groups retain
// their existing rules. Loading an already loaded grid is idempotent.
if (EnsureGridLoaded(Cell(data->spawnPoint.GetPositionX(), data->spawnPoint.GetPositionY())))
++grids;
}
TC_LOG_INFO("server.loading", "Initialized transport GameObject grids: map=%u instance=%u grids=%u candidates=%u",
GetId(), GetInstanceId(), grids, uint32(spawns->size()));
}
void Map::InitStateMachine()
{
si_GridStates[GRID_STATE_INVALID] = new InvalidState();