aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/MapManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Maps/MapManager.cpp')
-rw-r--r--src/server/game/Maps/MapManager.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp
index dcb6e77082b..6b1845a247b 100644
--- a/src/server/game/Maps/MapManager.cpp
+++ b/src/server/game/Maps/MapManager.cpp
@@ -66,7 +66,8 @@ MapManager* MapManager::instance()
Map* MapManager::FindMap_i(uint32 mapId, uint32 instanceId) const
{
- return Trinity::Containers::MapGetValuePtr(i_maps, { mapId, instanceId });
+ auto itr = i_maps.find({ mapId, instanceId });
+ return itr != i_maps.end() ? itr->second.get() : nullptr;
}
Map* MapManager::CreateWorldMap(uint32 mapId, uint32 instanceId)
@@ -246,7 +247,14 @@ Map* MapManager::CreateMap(uint32 mapId, Player* player)
}
if (map)
- i_maps[{ map->GetId(), map->GetInstanceId() }] = map;
+ {
+ Trinity::unique_trackable_ptr<Map>& ptr = i_maps[{ map->GetId(), map->GetInstanceId() }];
+ if (ptr.get() != map)
+ {
+ ptr.reset(map);
+ map->SetWeakPtr(ptr);
+ }
+ }
return map;
}
@@ -311,7 +319,7 @@ void MapManager::Update(uint32 diff)
{
if (iter->second->CanUnload(diff))
{
- if (DestroyMap(iter->second))
+ if (DestroyMap(iter->second.get()))
iter = i_maps.erase(iter);
else
++iter;
@@ -348,7 +356,6 @@ bool MapManager::DestroyMap(Map* map)
sMapMgr->FreeInstanceId(map->GetInstanceId());
// erase map
- delete map;
return true;
}
@@ -364,9 +371,6 @@ void MapManager::UnloadAll()
iter->second->UnloadAll();
// then delete them
- for (auto iter = i_maps.begin(); iter != i_maps.end(); ++iter)
- delete iter->second;
-
i_maps.clear();
if (m_updater.activated())