diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 9ec3ffeea..d97e568bf 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -30,9 +30,24 @@ namespace template inline void SCR_CLEAR() { - for (auto const& [scriptID, script] : ScriptRegistry::ScriptPointerList) + for (auto& [scriptID, script] : ScriptRegistry::ScriptPointerList) { - delete script; + try + { + if(script) + { + delete script; + script = nullptr; + } + } + catch (const std::exception& e) + { + LOG_ERROR("scripts.unloading", "Failed to unload script {} with ID: {}. Error: {}", script->GetName(), scriptID, e.what()); + } + catch (...) + { + LOG_ERROR("scripts.unloading", "Failed to unload script {} with ID: {}. Unknown error occurred.", script->GetName(), scriptID); + } } ScriptRegistry::ScriptPointerList.clear();