diff options
author | silinoron <none@none> | 2010-07-26 19:05:20 -0700 |
---|---|---|
committer | silinoron <none@none> | 2010-07-26 19:05:20 -0700 |
commit | 297b7aac1b5e2f76e32bd7156d77f19e460dfaee (patch) | |
tree | 2e684c263edf35e6dd3268b37161504e364ff80a /src | |
parent | fb1727abb1c7b6dc992e15ae4950060d866cf193 (diff) |
Move SPELLFAMILY_MAGE dummy effect handlers to spell scripts.
--HG--
branch : trunk
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 55 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 165 |
2 files changed, 159 insertions, 61 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 50241314a6b..9338e316316 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -1540,61 +1540,6 @@ void Spell::EffectDummy(uint32 i) break; } - case SPELLFAMILY_MAGE: - switch(m_spellInfo->Id) - { - case 11958: // Cold Snap - { - if (m_caster->GetTypeId() != TYPEID_PLAYER) - return; - - // immediately finishes the cooldown on Frost spells - const SpellCooldowns& cm = m_caster->ToPlayer()->GetSpellCooldownMap(); - for (SpellCooldowns::const_iterator itr = cm.begin(); itr != cm.end();) - { - SpellEntry const *spellInfo = sSpellStore.LookupEntry(itr->first); - - if (spellInfo->SpellFamilyName == SPELLFAMILY_MAGE && - (GetSpellSchoolMask(spellInfo) & SPELL_SCHOOL_MASK_FROST) && - spellInfo->Id != 11958 && GetSpellRecoveryTime(spellInfo) > 0) - { - m_caster->ToPlayer()->RemoveSpellCooldown((itr++)->first, true); - } - else - ++itr; - } - return; - } - case 32826: // Polymorph Cast Visual - { - if (unitTarget && unitTarget->GetTypeId() == TYPEID_UNIT) - { - //Polymorph Cast Visual Rank 1 - const uint32 spell_list[6] = { - 32813, // Squirrel Form - 32816, // Giraffe Form - 32817, // Serpent Form - 32818, // Dragonhawk Form - 32819, // Worgen Form - 32820 // Sheep Form - }; - unitTarget->CastSpell(unitTarget, spell_list[urand(0, 5)], true); - } - return; - } - case 31687: // Summon Water Elemental - { - if (!unitTarget) - return; - - // Glyph of Eternal Water - if (unitTarget->HasAura(70937)) - unitTarget->CastSpell(unitTarget, 70908, true); - else - unitTarget->CastSpell(unitTarget, 70907, true); - } - } - break; case SPELLFAMILY_WARRIOR: // Charge if (m_spellInfo->SpellFamilyFlags & SPELLFAMILYFLAG_WARRIOR_CHARGE && m_spellInfo->SpellVisual[0] == 867) diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 4f609800346..a1c88a57531 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -18,19 +18,172 @@ /* * Scripts for spells with SPELLFAMILY_MAGE and SPELLFAMILY_GENERIC spells used by mage players. * Ordered alphabetically using scriptname. - * Scriptnames of files in this file should be prefixed with "spell_mag_". + * Scriptnames of files in this file should be prefixed with "spell_mage_". */ #include "ScriptPCH.h" +enum MageSpells +{ + SPELL_MAGE_COLD_SNAP = 11958, + SPELL_MAGE_SQUIRREL_FORM = 32813, + SPELL_MAGE_GIRAFFE_FORM = 32816, + SPELL_MAGE_SERPENT_FORM = 32817, + SPELL_MAGE_DRAGONHAWK_FORM = 32818, + SPELL_MAGE_WORGEN_FORM = 32819, + SPELL_MAGE_SHEEP_FORM = 32820, + SPELL_MAGE_GLYPH_OF_ETERNAL_WATER = 70937, + SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT = 70908, + SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY = 70907, +}; + +class spell_mage_cold_snap_SpellScript : public SpellScript +{ + bool Validate(SpellEntry const * spellEntry) + { + return true; + }; + + void HandleDummy(SpellEffIndex effIndex) + { + Unit *m_caster = GetCaster(); + + if (!m_caster) + return; + + if (m_caster->GetTypeId() != TYPEID_PLAYER) + return; + + // immediately finishes the cooldown on Frost spells + const SpellCooldowns& cm = m_caster->ToPlayer()->GetSpellCooldownMap(); + for (SpellCooldowns::const_iterator itr = cm.begin(); itr != cm.end();) + { + SpellEntry const *spellInfo = sSpellStore.LookupEntry(itr->first); + + if (spellInfo->SpellFamilyName == SPELLFAMILY_MAGE && + (GetSpellSchoolMask(spellInfo) & SPELL_SCHOOL_MASK_FROST) && + spellInfo->Id != SPELL_MAGE_COLD_SNAP && GetSpellRecoveryTime(spellInfo) > 0) + { + m_caster->ToPlayer()->RemoveSpellCooldown((itr++)->first, true); + } + else + ++itr; + } + } + + void Register() + { + // add dummy effect spell handler to Cold Snap + EffectHandlers += EffectHandlerFn(spell_mage_cold_snap_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +SpellScript * GetSpellScript_spell_mage_cold_snap() +{ + return new spell_mage_cold_snap_SpellScript(); +} + +class spell_mage_polymorph_cast_visual_SpellScript : public SpellScript +{ + bool Validate(SpellEntry const * spellEntry) + { + const uint32 spell_list[6] = { + SPELL_MAGE_SQUIRREL_FORM, + SPELL_MAGE_GIRAFFE_FORM, + SPELL_MAGE_SERPENT_FORM, + SPELL_MAGE_DRAGONHAWK_FORM, + SPELL_MAGE_WORGEN_FORM, + SPELL_MAGE_SHEEP_FORM + }; + + // check if spell ids exist in dbc + for (int i = 0; i < 6; i++) + if (!sSpellStore.LookupEntry(spell_list[i])) + return false; + return true; + }; + + void HandleDummy(SpellEffIndex effIndex) + { + const uint32 spell_list[6] = { + SPELL_MAGE_SQUIRREL_FORM, + SPELL_MAGE_GIRAFFE_FORM, + SPELL_MAGE_SERPENT_FORM, + SPELL_MAGE_DRAGONHAWK_FORM, + SPELL_MAGE_WORGEN_FORM, + SPELL_MAGE_SHEEP_FORM + }; + + if (Unit *unitTarget = GetHitUnit()) + if (unitTarget->GetTypeId() == TYPEID_UNIT) + unitTarget->CastSpell(unitTarget, spell_list[urand(0, 5)], true); + } + + void Register() + { + // add dummy effect spell handler to Polymorph visual + EffectHandlers += EffectHandlerFn(spell_mage_polymorph_cast_visual_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +SpellScript * GetSpellScript_spell_mage_polymorph_visual() +{ + return new spell_mage_polymorph_cast_visual_SpellScript(); +} + +class spell_mage_summon_water_elemental_SpellScript : public SpellScript +{ + bool Validate(SpellEntry const * spellEntry) + { + if (!sSpellStore.LookupEntry(SPELL_MAGE_GLYPH_OF_ETERNAL_WATER)) + return false; + if (!sSpellStore.LookupEntry(SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY)) + return false; + if (!sSpellStore.LookupEntry(SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT)) + return false; + return true; + }; + + void HandleDummy(SpellEffIndex effIndex) + { + if (Unit *unitTarget = GetHitUnit()) + { + // Glyph of Eternal Water + if (unitTarget->HasAura(SPELL_MAGE_GLYPH_OF_ETERNAL_WATER)) + unitTarget->CastSpell(unitTarget, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_PERMANENT, true); + else + unitTarget->CastSpell(unitTarget, SPELL_MAGE_SUMMON_WATER_ELEMENTAL_TEMPORARY, true); + } + } + + void Register() + { + // add dummy effect spell handler to Summon Water Elemental + EffectHandlers += EffectHandlerFn(spell_mage_summon_water_elemental_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +SpellScript * GetSpellScript_spell_mage_summon_water_elemental() +{ + return new spell_mage_summon_water_elemental_SpellScript(); +} + void AddSC_mage_spell_scripts() { - //Script *newscript; + Script *newscript; + + newscript = new Script; + newscript->Name = "spell_mage_cold_snap"; + newscript->GetSpellScript = &GetSpellScript_spell_mage_cold_snap; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "spell_mage_polymorph_visual"; + newscript->GetSpellScript = &GetSpellScript_spell_mage_polymorph_visual; + newscript->RegisterSelf(); - /* newscript = new Script; - newscript->Name = "spell_mag_"; - newscript->GetSpellScript = &GetSpellScript_spell_mag_; + newscript->Name = "spell_mage_summon_water_elemental"; + newscript->GetSpellScript = &GetSpellScript_spell_mage_summon_water_elemental; newscript->RegisterSelf(); - */ }
\ No newline at end of file |