From f4b0f587010f76c60a97ee587ba96dd1838efe33 Mon Sep 17 00:00:00 2001 From: Kargatum Date: Fri, 21 Jan 2022 18:21:00 +0700 Subject: [PATCH] feat(Core/ScriptMgr): add new hook `OnAfterUnloadAllMaps` (#10279) * feat(Core/ScriptMgr): add new hook * add desc * Update src/server/game/Scripting/ScriptDefines/WorldScript.cpp --- src/server/game/Scripting/ScriptDefines/WorldScript.cpp | 8 ++++++++ src/server/game/Scripting/ScriptMgr.h | 6 ++++++ src/server/worldserver/Main.cpp | 2 ++ 3 files changed, 16 insertions(+) diff --git a/src/server/game/Scripting/ScriptDefines/WorldScript.cpp b/src/server/game/Scripting/ScriptDefines/WorldScript.cpp index 633c7944b..33cef453b 100644 --- a/src/server/game/Scripting/ScriptDefines/WorldScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/WorldScript.cpp @@ -113,3 +113,11 @@ void ScriptMgr::OnBeforeWorldInitialized() script->OnBeforeWorldInitialized(); }); } + +void ScriptMgr::OnAfterUnloadAllMaps() +{ + ExecuteScript([](WorldScript* script) + { + script->OnAfterUnloadAllMaps(); + }); +} diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 9e47737f2..52f696c21 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -225,6 +225,11 @@ public: // Called when the world is actually shut down. virtual void OnShutdown() { } + /** + * @brief Called after all maps are unloaded from core + */ + virtual void OnAfterUnloadAllMaps() { } + /** * @brief This hook runs before finalizing the player world session. Can be also used to mutate the cache version of the Client. * @@ -2025,6 +2030,7 @@ public: /* WorldScript */ void OnStartup(); void OnShutdown(); void OnBeforeWorldInitialized(); + void OnAfterUnloadAllMaps(); public: /* FormulaScript */ void OnHonorCalculation(float& honor, uint8 level, float multiplier); diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index d36235f65..51f1928f9 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -329,6 +329,8 @@ int main(int argc, char** argv) sOutdoorPvPMgr->Die(); // unload it before MapMgr sMapMgr->UnloadAll(); // unload all grids (including locked in memory) + + sScriptMgr->OnAfterUnloadAllMaps(); }); // Start the Remote Access port (acceptor) if enabled