diff options
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 11 | ||||
| -rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 2 | ||||
| -rw-r--r-- | src/server/game/Scripting/ScriptMgr.cpp | 30 | 
3 files changed, 29 insertions, 14 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 3513b5d97b8..3efeb1ca273 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -5222,7 +5222,10 @@ void ObjectMgr::ValidateSpellScripts()                      spellScript->_Register();                      if (!spellScript->_Validate(spellEntry)) +                    {                          itr->second.second = false; +                        continue; +                    }                  }                  if (auraScript) @@ -5231,9 +5234,17 @@ void ObjectMgr::ValidateSpellScripts()                      auraScript->_Register();                      if (!auraScript->_Validate(spellEntry)) +                    {                          itr->second.second = false; +                        continue; +                    }                  } + +                // Enable the script when all checks passed +                itr->second.second = true;              } +            else +                itr->second.second = false;          }      } diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index b59aa5a8d98..576a8d2ccac 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -370,7 +370,7 @@ struct ScriptInfo  typedef std::multimap<uint32, ScriptInfo> ScriptMap;  typedef std::map<uint32, ScriptMap > ScriptMapMap; -typedef std::multimap<uint32 /*spell id*/, std::pair<uint32 /*script id*/, bool /*disabled*/>> SpellScriptsContainer; +typedef std::multimap<uint32 /*spell id*/, std::pair<uint32 /*script id*/, bool /*enabled*/>> SpellScriptsContainer;  typedef std::pair<SpellScriptsContainer::iterator, SpellScriptsContainer::iterator> SpellScriptsBounds;  TC_GAME_API extern ScriptMapMap sSpellScripts;  TC_GAME_API extern ScriptMapMap sEventScripts; 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;  | 
