aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Phasing
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2020-05-24 22:34:25 +0200
committerShauren <shauren.trinity@gmail.com>2020-05-24 22:34:25 +0200
commiteba31dea27b7fdc4a49c024898ef3a01bcbc7295 (patch)
tree4be401cb2969769c92b571e1b8d04555f633693e /src/server/game/Phasing
parentebb6f12db811d78a538982cca9b8cc1887fc2527 (diff)
Core/Maps: Improvements to terrain swap handling
* Fixed memory leak when unloading grids * Handle child maps being entered * Allow chaining more child maps (Draenor -> Tanaan Jungle -> Tanaan Jungle - No Hubs Phase)
Diffstat (limited to 'src/server/game/Phasing')
-rw-r--r--src/server/game/Phasing/PhasingHandler.cpp13
1 files changed, 3 insertions, 10 deletions
diff --git a/src/server/game/Phasing/PhasingHandler.cpp b/src/server/game/Phasing/PhasingHandler.cpp
index edb176de644..ad725bade8d 100644
--- a/src/server/game/Phasing/PhasingHandler.cpp
+++ b/src/server/game/Phasing/PhasingHandler.cpp
@@ -487,16 +487,9 @@ uint32 PhasingHandler::GetTerrainMapId(PhaseShift const& phaseShift, Map const*
int32 gx = (MAX_NUMBER_OF_GRIDS - 1) - gridCoord.x_coord;
int32 gy = (MAX_NUMBER_OF_GRIDS - 1) - gridCoord.y_coord;
- int32 gxbegin = std::max(gx - 1, 0);
- int32 gxend = std::min(gx + 1, MAX_NUMBER_OF_GRIDS);
- int32 gybegin = std::max(gy - 1, 0);
- int32 gyend = std::min(gy + 1, MAX_NUMBER_OF_GRIDS);
-
- for (auto itr = phaseShift.VisibleMapIds.rbegin(); itr != phaseShift.VisibleMapIds.rend(); ++itr)
- for (int32 gxi = gxbegin; gxi < gxend; ++gxi)
- for (int32 gyi = gybegin; gyi < gyend; ++gyi)
- if (map->HasGrid(itr->first, gxi, gyi))
- return itr->first;
+ for (std::pair<uint32 const, PhaseShift::VisibleMapIdRef> const& visibleMap : phaseShift.VisibleMapIds)
+ if (map->HasChildMapGridFile(visibleMap.first, gx, gy))
+ return visibleMap.first;
return map->GetId();
}