From 89a3fc21677f4c253e9ba09bab29e98a77bc875e Mon Sep 17 00:00:00 2001 From: Naios Date: Tue, 12 Apr 2016 15:42:16 +0200 Subject: Core/Scripting: Fix loading of spell/aurascripts * Broken since 9cc97f226d * There is still a crash when using lazy unloading which I will fix in a later commit (this commit should fix at least the static build and normal usage of the dynamic build). * Closes #16948 (cherry picked from commit 410cf0dd05e2765cf7806a9165f976a2bcc199d2) --- src/server/game/Scripting/ScriptMgr.cpp | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) (limited to 'src/server/game/Scripting/ScriptMgr.cpp') diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 6ac539594bf..0e8bc517ca8 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -296,7 +296,7 @@ public: virtual void BeforeReleaseContext(std::string const& /*context*/) { } /// Called before SwapContext - virtual void BeforeSwapContext() { } + virtual void BeforeSwapContext(bool /*initialize*/) { } /// Called before Unload virtual void BeforeUnload() { } @@ -482,8 +482,12 @@ public: ids_removed_.insert(ids_to_remove.begin(), ids_to_remove.end()); } - void BeforeSwapContext() final override + void BeforeSwapContext(bool initialize) override { + // Never swap creature or gameobject scripts when initializing + if (initialize) + return; + // Add the recently added scripts to the deleted scripts to replace // default AI's with recently added core scripts. ids_removed_.insert(static_cast(this)->GetRecentlyAddedScriptIDs().begin(), @@ -566,9 +570,10 @@ public: } } - void BeforeSwapContext() final override + void BeforeSwapContext(bool initialize) override { - if (swapped) + // Never swap outdoor pvp scripts when initializing + if ((!initialize) && swapped) { sOutdoorPvPMgr->InitOutdoorPvP(); swapped = false; @@ -599,7 +604,7 @@ public: swapped = true; } - void BeforeSwapContext() final override + void BeforeSwapContext(bool initialize) override { swapped = false; } @@ -629,7 +634,7 @@ public: swapped = true; } - void BeforeSwapContext() final override + void BeforeSwapContext(bool initialize) override { if (swapped) { @@ -683,8 +688,7 @@ public: void SwapContext(bool initialize) final override { - if (!initialize) - this->BeforeSwapContext(); + this->BeforeSwapContext(initialize); _recently_added_ids.clear(); } @@ -813,7 +817,7 @@ public: ChatHandler::invalidateCommandTable(); } - void BeforeSwapContext() final override + void BeforeSwapContext(bool /*initialize*/) override { ChatHandler::invalidateCommandTable(); } @@ -846,9 +850,9 @@ public: _scripts.erase(context); } - void SwapContext(bool) final override + void SwapContext(bool initialize) final override { - this->BeforeSwapContext(); + this->BeforeSwapContext(initialize); } void RemoveUsedScriptsFromContainer(std::unordered_set& scripts) final override @@ -1161,10 +1165,10 @@ void CreateSpellOrAuraScripts(uint32 spellId, std::list& scriptVector, F&& e for (SpellScriptsContainer::iterator itr = bounds.first; itr != bounds.second; ++itr) { // When the script is disabled continue with the next one - if (itr->second.second) + if (!itr->second.second) continue; - SpellScriptLoader* tmpscript = ScriptRegistry::Instance()->GetScriptById(itr->second.first); + SpellScriptLoader* tmpscript = sScriptMgr->GetSpellScriptLoader(itr->second.first); if (!tmpscript) continue; -- cgit v1.2.3