aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-03-14 20:32:03 +0100
committerShauren <shauren.trinity@gmail.com>2024-03-14 21:15:39 +0100
commit4e54a4ffb9fba004d0843f9dec945998acb561a3 (patch)
tree99233bbe7c3157d70dadf4ca06304d96f25425d1
parent303ecbbf4e9cf91da8108bbc8a5ff1ab7b3ca2c2 (diff)
Core/Scripts: Removed script calls from constructors and destructors
(cherry picked from commit 783f9c0ea38da35c328affa27ac4cf6b7bfd8bd8)
-rw-r--r--src/server/game/Maps/Map.cpp6
-rw-r--r--src/server/game/Maps/MapInstanced.cpp11
-rw-r--r--src/server/game/Maps/MapManager.cpp7
3 files changed, 18 insertions, 6 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index ded02362b1c..7c49e8d5ad3 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -86,10 +86,6 @@ struct RespawnInfoWithHandle : RespawnInfo
Map::~Map()
{
- // UnloadAll must be called before deleting the map
-
- sScriptMgr->OnDestroyMap(this);
-
// Delete all waiting spawns, else there will be a memory leak
// This doesn't delete from database.
UnloadAllRespawnInfos();
@@ -300,8 +296,6 @@ i_scriptLock(false), _respawnTimes(std::make_unique<RespawnListContainer>()), _r
_weatherUpdateTimer.SetInterval(time_t(1 * IN_MILLISECONDS));
MMAP::MMapFactory::createOrGetMMapManager()->loadMapInstance(sWorld->GetDataPath(), GetId(), GetInstanceId());
-
- sScriptMgr->OnCreateMap(this);
}
void Map::InitVisibilityDistance()
diff --git a/src/server/game/Maps/MapInstanced.cpp b/src/server/game/Maps/MapInstanced.cpp
index ccd2d962152..66a51466e7d 100644
--- a/src/server/game/Maps/MapInstanced.cpp
+++ b/src/server/game/Maps/MapInstanced.cpp
@@ -25,6 +25,7 @@
#include "MMapFactory.h"
#include "ObjectMgr.h"
#include "Player.h"
+#include "ScriptMgr.h"
#include "VMapFactory.h"
#include "VMapManager2.h"
#include "World.h"
@@ -95,8 +96,12 @@ void MapInstanced::UnloadAll()
{
// Unload instanced maps
for (InstancedMaps::iterator i = m_InstancedMaps.begin(); i != m_InstancedMaps.end(); ++i)
+ {
i->second->UnloadAll();
+ sScriptMgr->OnDestroyMap(i->second.get());
+ }
+
m_InstancedMaps.clear();
// Unload own grids (just dummy(placeholder) grids, neccesary to unload GridMaps!)
@@ -236,6 +241,8 @@ InstanceMap* MapInstanced::CreateInstance(uint32 InstanceId, InstanceSave* save,
Trinity::unique_trackable_ptr<Map>& ptr = m_InstancedMaps[InstanceId];
ptr.reset(map);
map->SetWeakPtr(ptr);
+
+ sScriptMgr->OnCreateMap(map);
return map;
}
@@ -263,6 +270,8 @@ BattlegroundMap* MapInstanced::CreateBattleground(uint32 InstanceId, Battlegroun
Trinity::unique_trackable_ptr<Map>& ptr = m_InstancedMaps[InstanceId];
ptr.reset(map);
map->SetWeakPtr(ptr);
+
+ sScriptMgr->OnCreateMap(map);
return map;
}
@@ -287,6 +296,8 @@ bool MapInstanced::DestroyInstance(InstancedMaps::iterator &itr)
Map::UnloadAll();
}
+ sScriptMgr->OnDestroyMap(itr->second.get());
+
// Free up the instance id and allow it to be reused for bgs and arenas (other instances are handled in the InstanceSaveMgr)
if (itr->second->IsBattlegroundOrArena())
sMapMgr->FreeInstanceId(itr->second->GetInstanceId());
diff --git a/src/server/game/Maps/MapManager.cpp b/src/server/game/Maps/MapManager.cpp
index d340a85e4df..d1ffc63a4c0 100644
--- a/src/server/game/Maps/MapManager.cpp
+++ b/src/server/game/Maps/MapManager.cpp
@@ -33,6 +33,7 @@
#include "Player.h"
#include "WorldSession.h"
#include "Opcodes.h"
+#include "ScriptMgr.h"
#include <numeric>
MapManager::MapManager()
@@ -89,6 +90,8 @@ Map* MapManager::CreateBaseMap(uint32 id)
Trinity::unique_trackable_ptr<Map>& ptr = i_maps[id];
ptr.reset(map);
map->SetWeakPtr(ptr);
+
+ sScriptMgr->OnCreateMap(map);
}
ASSERT(map);
@@ -260,8 +263,12 @@ void MapManager::UnloadAll()
{
// first unload maps
for (auto iter = i_maps.begin(); iter != i_maps.end(); ++iter)
+ {
iter->second->UnloadAll();
+ sScriptMgr->OnDestroyMap(iter->second.get());
+ }
+
// then delete them
i_maps.clear();