diff options
author | silinoron <none@none> | 2010-08-23 15:13:20 -0700 |
---|---|---|
committer | silinoron <none@none> | 2010-08-23 15:13:20 -0700 |
commit | 8bebc56b8f4ca872198e7d44c6efbdb8e24e2d8f (patch) | |
tree | 72b7a5d8919ada388368d2da9759e4021329592a /src/server/game/Globals/ObjectMgr.cpp | |
parent | c09528a6bf1cee9dbbf45bfd564f52a3a4e4a1b7 (diff) | |
parent | 07a3a1254b78a42a7836efee99dc3d821c726d28 (diff) |
merge
--HG--
branch : trunk
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 31fce16b114..52915b27f90 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -5103,18 +5103,38 @@ void ObjectMgr::ValidateSpellScripts() for (SpellScriptsMap::iterator itr = mSpellScripts.begin(); itr != mSpellScripts.end();) { SpellEntry const * spellEntry = sSpellStore.LookupEntry(itr->first); - std::vector<std::pair<SpellScript *, SpellScriptsMap::iterator> > spellScripts; - sScriptMgr.CreateSpellScripts(itr->first, spellScripts); + std::vector<std::pair<SpellScriptLoader *, SpellScriptsMap::iterator> > SpellScriptLoaders; + sScriptMgr.CreateSpellScriptLoaders(itr->first, SpellScriptLoaders); SpellScriptsMap::iterator bitr; itr = mSpellScripts.upper_bound(itr->first); - for (std::vector<std::pair<SpellScript *, SpellScriptsMap::iterator> >::iterator sitr = spellScripts.begin(); sitr != spellScripts.end(); ++sitr) + for (std::vector<std::pair<SpellScriptLoader *, SpellScriptsMap::iterator> >::iterator sitr = SpellScriptLoaders.begin(); sitr != SpellScriptLoaders.end(); ++sitr) { bar.step(); - sitr->first->Register(); - if (!sitr->first->_Validate(spellEntry, sObjectMgr.GetScriptName(sitr->second->second))) + SpellScript * spellScript = sitr->first->GetSpellScript(); + AuraScript * auraScript = sitr->first->GetAuraScript(); + bool valid = true; + if (!spellScript && !auraScript) + { + sLog.outError("TSCR: Functions GetSpellScript() and GetAuraScript() of script `%s` do not return objects - script skipped", GetScriptName(sitr->second->second)); + valid = false; + } + if (spellScript) + { + spellScript->Register(); + if (!spellScript->_Validate(spellEntry, sObjectMgr.GetScriptName(sitr->second->second))) + valid = false; + delete spellScript; + } + if (auraScript) + { + auraScript->Register(); + if (!auraScript->_Validate(spellEntry, sObjectMgr.GetScriptName(sitr->second->second))) + valid = false; + delete auraScript; + } + if (!valid) mSpellScripts.erase(sitr->second); - delete sitr->first; } } |