aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Scripting
diff options
context:
space:
mode:
authorQAston <none@none>2010-08-24 00:10:49 +0200
committerQAston <none@none>2010-08-24 00:10:49 +0200
commit07a3a1254b78a42a7836efee99dc3d821c726d28 (patch)
treea60eea1353da993ef27cef51e6a30cbabd92a47f /src/server/game/Scripting
parente581feb551cb54803da1478da04032e260b35937 (diff)
*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
Diffstat (limited to 'src/server/game/Scripting')
-rw-r--r--src/server/game/Scripting/ScriptMgr.cpp48
-rw-r--r--src/server/game/Scripting/ScriptMgr.h31
2 files changed, 32 insertions, 47 deletions
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<SpellScript *> & s
for (SpellScriptsMap::iterator itr = bounds.first; itr != bounds.second; ++itr)
{
- SpellHandlerScript* tmpscript = ScriptRegistry<SpellHandlerScript>::GetScriptById(itr->second);
+ SpellScriptLoader* tmpscript = ScriptRegistry<SpellScriptLoader>::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<std::pair<SpellScript *, SpellScriptsMap::iterator> > & script_vector)
+void ScriptMgr::CreateAuraScripts(uint32 spell_id, std::list<AuraScript *> & 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<SpellHandlerScript>::GetScriptById(itr->second);
+ SpellScriptLoader* tmpscript = ScriptRegistry<SpellScriptLoader>::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<std::pair<SpellScriptLoader *, SpellScriptsMap::iterator> > & 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<SpellScriptLoader>::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<SpellHandlerScript>::AddScript(this);
-}
-
-AuraHandlerScript::AuraHandlerScript(const char* name)
+SpellScriptLoader::SpellScriptLoader(const char* name)
: ScriptObject(name)
{
- ScriptMgr::ScriptRegistry<AuraHandlerScript>::AddScript(this);
+ ScriptMgr::ScriptRegistry<SpellScriptLoader>::AddScript(this);
}
ServerScript::ServerScript(const char* name)
@@ -1312,8 +1313,7 @@ template<class TScript> std::map<uint32, TScript*> ScriptMgr::ScriptRegistry<TSc
template<class TScript> uint32 ScriptMgr::ScriptRegistry<TScript>::_scriptIdCounter = 0;
// Specialize for each script type class like so:
-template class ScriptMgr::ScriptRegistry<SpellHandlerScript>;
-template class ScriptMgr::ScriptRegistry<AuraHandlerScript>;
+template class ScriptMgr::ScriptRegistry<SpellScriptLoader>;
template class ScriptMgr::ScriptRegistry<ServerScript>;
template class ScriptMgr::ScriptRegistry<WorldScript>;
template class ScriptMgr::ScriptRegistry<FormulaScript>;
diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h
index c8baeddf48d..2bf023babf8 100644
--- a/src/server/game/Scripting/ScriptMgr.h
+++ b/src/server/game/Scripting/ScriptMgr.h
@@ -42,6 +42,7 @@ class Creature;
class CreatureAI;
class InstanceScript;
class SpellScript;
+class AuraScript;
class Quest;
class Item;
class GameObject;
@@ -180,32 +181,20 @@ template<class TObject> class UpdatableScript
virtual void OnUpdate(TObject* /*obj*/, uint32 /*diff*/) { }
};
-class SpellHandlerScript : public ScriptObject
+class SpellScriptLoader : public ScriptObject
{
protected:
- SpellHandlerScript(const char* name);
+ SpellScriptLoader(const char* name);
public:
bool IsDatabaseBound() const { return true; }
// Should return a fully valid SpellScript pointer.
- virtual SpellScript* GetSpellScript() const = 0;
-};
-
-class AuraHandlerScript : public ScriptObject
-{
- protected:
-
- AuraHandlerScript(const char* name);
-
- public:
-
- bool IsDatabaseBound() const { return true; }
-
+ virtual SpellScript* GetSpellScript() const { return NULL; };
// Should return a fully valid AuraScript pointer.
- // virtual AuraScript* GetAuraScript() const = 0;
+ virtual AuraScript* GetAuraScript() const { return NULL; };
};
class ServerScript : public ScriptObject
@@ -742,15 +731,11 @@ class ScriptMgr
void IncrementScriptCount() { ++_scriptCount; }
uint32 GetScriptCount() const { return _scriptCount; }
- public: /* SpellHandlerScript */
+ public: /* SpellScriptLoader */
void CreateSpellScripts(uint32 spell_id, std::list<SpellScript*>& script_vector);
- void CreateSpellScripts(uint32 spell_id, std::vector<std::pair<SpellScript*, SpellScriptsMap::iterator> >& script_vector);
-
- public: /* AuraHandlerScript */
-
- // void CreateAuraScripts(uint32 spell_id, std::list<AuraScript*>& script_vector);
- // void CreateAuraScripts(uint32 spell_id, std::vector<std::pair<AuraScript*, SpellScriptsMap::iterator> >& script_vector);
+ void CreateAuraScripts(uint32 spell_id, std::list<AuraScript*>& script_vector);
+ void CreateSpellScriptLoaders(uint32 spell_id, std::vector<std::pair<SpellScriptLoader*, SpellScriptsMap::iterator> >& script_vector);
public: /* ServerScript */