diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-03-13 18:51:29 +0100 |
---|---|---|
committer | funjoker <funjoker109@gmail.com> | 2024-03-25 20:21:24 +0100 |
commit | 64724464407e5b7646a48e6a5191d6fd8997ac77 (patch) | |
tree | c2ddc8dcdfc7032e9d60fb59735895b388c0b096 /src/server/game/Maps/MapManager.cpp | |
parent | 382d67622fc9b4ec7eeb9e3f8bd56876133901fd (diff) |
Core/Misc: Use our new unique_trackable_ptr for various classes exposed to scripts (not actually used anywhere currently)
(cherry picked from commit 4779fa5048642b57a0f69de7ab56b9d563c1cbc4)
Diffstat (limited to 'src/server/game/Maps/MapManager.cpp')
-rw-r--r-- | src/server/game/Maps/MapManager.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp index a5adf85a197..3288b8551d1 100644 --- a/src/server/game/Maps/MapManager.cpp +++ b/src/server/game/Maps/MapManager.cpp @@ -65,7 +65,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) @@ -230,7 +231,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; } @@ -295,7 +303,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; @@ -332,7 +340,6 @@ bool MapManager::DestroyMap(Map* map) sMapMgr->FreeInstanceId(map->GetInstanceId()); // erase map - delete map; return true; } @@ -348,9 +355,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()) |