From 07a3a1254b78a42a7836efee99dc3d821c726d28 Mon Sep 17 00:00:00 2001 From: QAston Date: Tue, 24 Aug 2010 00:10:49 +0200 Subject: *Add AuraScript class for scripting aura objects - scripts are registered same way as SpellScripts, bound to SpellScriptNames table. For more details see example_spell.cpp and SpellScript.h *Rename SpellHandlerScript to SpellScriptLoader, EffectHandlerFn to SpellEffectFn, HitHandlerFn to SpellHitFn, SpellScript::EffectHandlers to SpellScript::OnEffect, these changes were neccesary to prevent namespace collisions, happily you can solve these by simple find and replace *Make spells 66244 and 5581 example scripts. --HG-- branch : trunk --- src/server/game/Scripting/ScriptMgr.cpp | 48 ++++++++++++++++----------------- 1 file changed, 24 insertions(+), 24 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 c6c319f89fd..a72ce595c7a 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -148,8 +148,7 @@ ScriptMgr::~ScriptMgr() SCR_REG_LST(T).clear(); // Clear scripts for every script type. - SCR_CLEAR(SpellHandlerScript); - SCR_CLEAR(AuraHandlerScript); + SCR_CLEAR(SpellScriptLoader); SCR_CLEAR(ServerScript); SCR_CLEAR(WorldScript); SCR_CLEAR(FormulaScript); @@ -296,42 +295,50 @@ void ScriptMgr::CreateSpellScripts(uint32 spell_id, std::list & s for (SpellScriptsMap::iterator itr = bounds.first; itr != bounds.second; ++itr) { - SpellHandlerScript* tmpscript = ScriptRegistry::GetScriptById(itr->second); + SpellScriptLoader* tmpscript = ScriptRegistry::GetScriptById(itr->second); if (!tmpscript) continue; SpellScript* script = tmpscript->GetSpellScript(); if (!script) - { - sLog.outError("Spell script %s for spell %u returned a NULL SpellScript pointer!", tmpscript->GetName().c_str(), spell_id); continue; - } script_vector.push_back(script); } } -void ScriptMgr::CreateSpellScripts(uint32 spell_id, std::vector > & script_vector) +void ScriptMgr::CreateAuraScripts(uint32 spell_id, std::list & script_vector) { SpellScriptsBounds bounds = sObjectMgr.GetSpellScriptsBounds(spell_id); - script_vector.reserve(std::distance(bounds.first, bounds.second)); for (SpellScriptsMap::iterator itr = bounds.first; itr != bounds.second; ++itr) { - SpellHandlerScript* tmpscript = ScriptRegistry::GetScriptById(itr->second); + SpellScriptLoader* tmpscript = ScriptRegistry::GetScriptById(itr->second); if (!tmpscript) continue; - SpellScript* script = tmpscript->GetSpellScript(); + AuraScript* script = tmpscript->GetAuraScript(); if (!script) - { - sLog.outError("Spell script %s for spell %u returned a NULL SpellScript pointer!", tmpscript->GetName().c_str(), spell_id); continue; - } - script_vector.push_back(std::make_pair(script, itr)); + script_vector.push_back(script); + } +} + +void ScriptMgr::CreateSpellScriptLoaders(uint32 spell_id, std::vector > & script_vector) +{ + SpellScriptsBounds bounds = sObjectMgr.GetSpellScriptsBounds(spell_id); + script_vector.reserve(std::distance(bounds.first, bounds.second)); + + for (SpellScriptsMap::iterator itr = bounds.first; itr != bounds.second; ++itr) + { + SpellScriptLoader* tmpscript = ScriptRegistry::GetScriptById(itr->second); + if (!tmpscript) + continue; + + script_vector.push_back(std::make_pair(tmpscript, itr)); } } @@ -1154,16 +1161,10 @@ void ScriptMgr::OnGuildDisband(Guild *guild) FOREACH_SCRIPT(GuildScript)->OnDisband(guild); } -SpellHandlerScript::SpellHandlerScript(const char* name) - : ScriptObject(name) -{ - ScriptMgr::ScriptRegistry::AddScript(this); -} - -AuraHandlerScript::AuraHandlerScript(const char* name) +SpellScriptLoader::SpellScriptLoader(const char* name) : ScriptObject(name) { - ScriptMgr::ScriptRegistry::AddScript(this); + ScriptMgr::ScriptRegistry::AddScript(this); } ServerScript::ServerScript(const char* name) @@ -1312,8 +1313,7 @@ template std::map ScriptMgr::ScriptRegistry uint32 ScriptMgr::ScriptRegistry::_scriptIdCounter = 0; // Specialize for each script type class like so: -template class ScriptMgr::ScriptRegistry; -template class ScriptMgr::ScriptRegistry; +template class ScriptMgr::ScriptRegistry; template class ScriptMgr::ScriptRegistry; template class ScriptMgr::ScriptRegistry; template class ScriptMgr::ScriptRegistry; -- cgit v1.2.3