diff options
author | Naios <naios-dev@live.de> | 2016-04-12 15:42:16 +0200 |
---|---|---|
committer | Naios <naios-dev@live.de> | 2016-04-12 15:42:16 +0200 |
commit | 410cf0dd05e2765cf7806a9165f976a2bcc199d2 (patch) | |
tree | 2b73822b6accd8a91eacc19036d749504c784120 /src/server/game/Scripting/ScriptMgr.cpp | |
parent | 131ef5f2d682763e301102047f2f0118c88ac42d (diff) |
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
Diffstat (limited to 'src/server/game/Scripting/ScriptMgr.cpp')
-rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 99dc7a54735..63c4b69f3e9 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<Base*>(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<std::string>& scripts) final override @@ -1158,10 +1162,10 @@ void CreateSpellOrAuraScripts(uint32 spellId, std::list<T*>& 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<SpellScriptLoader>::Instance()->GetScriptById(itr->second.first); + SpellScriptLoader* tmpscript = sScriptMgr->GetSpellScriptLoader(itr->second.first); if (!tmpscript) continue; |