From 2352fc7cdfff0e677f6516c0ab2b91d3efc9ab70 Mon Sep 17 00:00:00 2001 From: QAston Date: Sat, 24 Jul 2010 22:41:42 +0200 Subject: *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 --- src/server/game/Scripting/ScriptLoader.cpp | 27 +++++++++++++++++++++++++++ src/server/game/Scripting/ScriptMgr.cpp | 22 ++++++++++++++++++++++ src/server/game/Scripting/ScriptMgr.h | 9 ++++++++- 3 files changed, 57 insertions(+), 1 deletion(-) (limited to 'src/server/game/Scripting') diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index cf378db2bac..54bd9150a91 100644 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -513,6 +513,20 @@ void AddSC_terokkar_forest(); void AddSC_zangarmarsh(); void AddSC_onevents(); +// spells +void AddSC_deathknight_spell_scripts(); +void AddSC_druid_spell_scripts(); +void AddSC_generic_spell_scripts(); +void AddSC_hunter_spell_scripts(); +void AddSC_mage_spell_scripts(); +void AddSC_paladin_spell_scripts(); +void AddSC_priest_spell_scripts(); +void AddSC_rogue_spell_scripts(); +void AddSC_shaman_spell_scripts(); +void AddSC_warlock_spell_scripts(); +void AddSC_warrior_spell_scripts(); +void AddSC_example_spell_scripts(); + #endif void AddScripts() @@ -1015,5 +1029,18 @@ void AddScripts() AddSC_zangarmarsh(); AddSC_onevents(); + // spells + AddSC_deathknight_spell_scripts(); + AddSC_druid_spell_scripts(); + AddSC_generic_spell_scripts(); + AddSC_hunter_spell_scripts(); + AddSC_mage_spell_scripts(); + AddSC_paladin_spell_scripts(); + AddSC_priest_spell_scripts(); + AddSC_rogue_spell_scripts(); + AddSC_shaman_spell_scripts(); + AddSC_warlock_spell_scripts(); + AddSC_warrior_spell_scripts(); + AddSC_example_spell_scripts(); #endif } diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 70b1ff6be64..5f6cce4917d 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -544,3 +544,25 @@ InstanceData* ScriptMgr::CreateInstanceData(Map *map) return tmpscript->GetInstanceData(map); } +void ScriptMgr::CreateSpellScripts(uint32 spell_id, std::list & script_vector) +{ + SpellScriptsBounds bounds = objmgr.GetSpellScriptsBounds(spell_id); + for (SpellScriptsMap::iterator itr = bounds.first; itr != bounds.second; ++itr) + { + Script *tmpscript = m_scripts[itr->second]; + if (!tmpscript || !tmpscript->GetSpellScript) continue; + script_vector.push_back(tmpscript->GetSpellScript()); + } +} + +void ScriptMgr::CreateSpellScripts(uint32 spell_id, std::vector > & script_vector) +{ + SpellScriptsBounds bounds = objmgr.GetSpellScriptsBounds(spell_id); + script_vector.reserve(std::distance(bounds.first, bounds.second)); + for (SpellScriptsMap::iterator itr = bounds.first; itr != bounds.second; ++itr) + { + Script *tmpscript = m_scripts[itr->second]; + if (!tmpscript || !tmpscript->GetSpellScript) continue; + script_vector.push_back(std::make_pair(tmpscript->GetSpellScript(), itr)); + } +} diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index bcb26381809..d477d7a1e39 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -17,6 +17,7 @@ class Player; class Creature; class CreatureAI; class InstanceData; +class SpellScript; class Quest; class Item; class GameObject; @@ -25,6 +26,7 @@ class Map; class Unit; class WorldObject; struct ItemPrototype; +class Spell; #define MAX_SCRIPTS 5000 //72 bytes each (approx 351kb) #define VISIBLE_RANGE (166.0f) //MAX visible range (size of grid) @@ -42,7 +44,7 @@ struct Script pChooseReward(NULL), pGODestroyed(NULL), pItemHello(NULL), pGOHello(NULL), pAreaTrigger(NULL), pItemQuestAccept(NULL), pGOQuestAccept(NULL), pGOChooseReward(NULL),pItemUse(NULL), pItemExpire(NULL), pEffectDummyCreature(NULL), pEffectDummyGameObj(NULL), pEffectDummyItem(NULL), - GetAI(NULL), GetInstanceData(NULL) + GetAI(NULL), GetInstanceData(NULL), GetSpellScript(NULL) {} std::string Name; @@ -89,6 +91,9 @@ struct Script CreatureAI* (*GetAI)(Creature*); InstanceData* (*GetInstanceData)(Map*); + SpellScript*(*GetSpellScript)(); + //AuraScript*(*GetAuraScript)(); + void RegisterSelf(); }; @@ -143,6 +148,8 @@ class ScriptMgr bool EffectDummyGameObj(Unit *caster, uint32 spellId, uint32 effIndex, GameObject *gameObjTarget); bool EffectDummyItem(Unit *caster, uint32 spellId, uint32 effIndex, Item *itemTarget); InstanceData* CreateInstanceData(Map *map); + void CreateSpellScripts(uint32 spell_id, std::list & script_vector); + void CreateSpellScripts(uint32 spell_id, std::vector > & script_vector); }; //Config file accessors -- cgit v1.2.3