diff options
author | Shauren <shauren.trinity@gmail.com> | 2020-05-24 22:34:25 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-05-24 22:34:25 +0200 |
commit | eba31dea27b7fdc4a49c024898ef3a01bcbc7295 (patch) | |
tree | 4be401cb2969769c92b571e1b8d04555f633693e /src/server/game/Maps/MapManager.cpp | |
parent | ebb6f12db811d78a538982cca9b8cc1887fc2527 (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/Maps/MapManager.cpp')
-rw-r--r-- | src/server/game/Maps/MapManager.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index e6ba2294f3d..e01d2dc05b6 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -78,9 +78,9 @@ Map* MapManager::CreateBaseMap(uint32 id) if (!map) { MapEntry const* entry = sMapStore.AssertEntry(id); - if (entry->ParentMapID != -1) + if (entry->ParentMapID != -1 || entry->CosmeticParentMapID != -1) { - CreateBaseMap(entry->ParentMapID); + CreateBaseMap(entry->ParentMapID != -1 ? entry->ParentMapID : entry->CosmeticParentMapID); // must have been created by parent map map = FindBaseMap(id); @@ -103,6 +103,8 @@ Map* MapManager::CreateBaseMap_i(MapEntry const* mapEntry) else map = new Map(mapEntry->ID, i_gridCleanUpDelay, 0, DIFFICULTY_NONE); + map->DiscoverGridMapFiles(); + i_maps[mapEntry->ID] = map; for (uint32 childMapId : _parentMapData[mapEntry->ID]) @@ -280,16 +282,15 @@ bool MapManager::IsValidMAP(uint32 mapid, bool startUp) void MapManager::UnloadAll() { - // first unlink child maps + // first unload maps for (auto iter = i_maps.begin(); iter != i_maps.end(); ++iter) - iter->second->UnlinkAllChildTerrainMaps(); - - for (MapMapType::iterator iter = i_maps.begin(); iter != i_maps.end();) - { iter->second->UnloadAll(); + + // then delete them + for (auto iter = i_maps.begin(); iter != i_maps.end(); ++iter) delete iter->second; - i_maps.erase(iter++); - } + + i_maps.clear(); if (m_updater.activated()) m_updater.deactivate(); |