aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Examples
diff options
context:
space:
mode:
authorQAston <none@none>2010-07-24 22:41:42 +0200
committerQAston <none@none>2010-07-24 22:41:42 +0200
commit2352fc7cdfff0e677f6516c0ab2b91d3efc9ab70 (patch)
tree470b0d66f513cb62b6be88863003408864d117ae /src/server/scripts/Examples
parent687cd83bddfbc5416ba11bff53c8a636747a5802 (diff)
*Add base scripting interfce for spells - thanks to Brian for help in making it compile with GCC.
*Add hook for handling spell effects in new scripting system. --HG-- branch : trunk
Diffstat (limited to 'src/server/scripts/Examples')
-rw-r--r--src/server/scripts/Examples/example_spell.cpp101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/server/scripts/Examples/example_spell.cpp b/src/server/scripts/Examples/example_spell.cpp
new file mode 100644
index 00000000000..149cd09d4c9
--- /dev/null
+++ b/src/server/scripts/Examples/example_spell.cpp
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2008-2010 TrinityCore <http://www.trinitycore.org/>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * An example of a spell script file
+ * to bind a script to spell you have to add entry for it in `spell_script_names`
+ * where `spell_id` is id of the spell to bind
+ * and `ScriptName` is the name of a script assigned on registration
+ */
+
+#include "ScriptPCH.h"
+
+class spell_ex_49375SpellScript : public SpellScript
+{
+public:
+ std::string localVariable;
+ char * localVariable2;
+private:
+ // effect handler hook - effIndex - effIndex of handled effect of a spell
+ void HandleDummy(SpellEffIndex effIndex)
+ {
+ // we're handling SPELL_EFFECT_DUMMY in effIndex 0 here
+ sLog.outError("WE ARE HANDLING DUMMY!");
+ sLog.outError(localVariable.c_str());
+ // make caster cast a spell on a unit target of effect
+ if (Unit * target = GetEffectUnitTarget())
+ GetCaster()->CastSpell(target, 70522, true);
+ };
+ void Register()
+ {
+ // we're registering our function here
+ // function HandleDummy will be called when unit is hit by spell, just before default effect 0 handler
+ EffectHandlers += EffectHandlerFn(spell_ex_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ // this will prompt an error on startup because effect 0 of spell 49375 is set to SPELL_EFFECT_DUMMY, not SPELL_EFFECT_APPLY_AURA
+ //EffectHandlers += EffectHandlerFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_APPLY_AURA);
+ // this will make HandleDummy function to be called on first != 0 effect of spell 49375
+ //EffectHandlers += EffectHandlerFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_FIRST_FOUND, SPELL_EFFECT_ANY);
+ // this will make HandleDummy function to be called on all != 0 effect of spell 49375
+ //EffectHandlers += EffectHandlerFn(spell_gen_49375SpellScript::HandleDummy, EFFECT_ALL, SPELL_EFFECT_ANY);
+ };
+ // function called on server startup
+ // checks if script has data required for it to work
+ bool Validate(SpellEntry const * spellEntry)
+ {
+ // check if spellid 1 exists in dbc
+ if (!sSpellStore.LookupEntry(70522))
+ return false;
+ return true;
+ };
+ // function called just after script is added to spell
+ // we initialize local variables if needed
+ bool Load()
+ {
+ localVariable = "WE'RE USING LOCAL VARIABLE";
+ localVariable2 = new char;
+ return true;
+ // script will be immediately removed from the spell
+ // for example - we don't want this script to be executed on a creature
+ // if (GetCaster()->GetTypeID() != TYPEID_PLAYER)
+ // return false
+ }
+ // function called just before script delete
+ // we free allocated memory
+ void Unload()
+ {
+ delete localVariable2;
+ }
+};
+
+// function which creates SpellScript
+SpellScript * GetSpellScript_spell_ex_49375()
+{
+ return new spell_ex_49375SpellScript();
+}
+
+// this function has to be added to function set in ScriptLoader.cpp
+void AddSC_example_spell_scripts()
+{
+ Script *newscript;
+
+ newscript = new Script;
+ // name to be put in `spell_script_names`
+ newscript->Name = "spell_ex_49375";
+ // assign create function to the script
+ newscript->GetSpellScript = &GetSpellScript_spell_ex_49375;
+ newscript->RegisterSelf();
+} \ No newline at end of file