diff options
author | Vincent-Michael <Vincent_Michael@gmx.de> | 2013-07-27 14:48:04 +0200 |
---|---|---|
committer | Vincent-Michael <Vincent_Michael@gmx.de> | 2013-07-27 14:48:04 +0200 |
commit | c87e55777168df7ecba478e9e0ffdd89712aa14c (patch) | |
tree | 707cf040bae8b90e92b1004153b737d9882cf0da /src | |
parent | f90c04c1f5d13519a781352cd23f8f971bd3effa (diff) |
Core/Spells: Fix mage talent "Improved Polymorph"
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index 5b2e8250843..2b47cc0682a 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -40,6 +40,9 @@ enum MageSpells SPELL_MAGE_FROST_NOVA = 122, SPELL_MAGE_FROST_WARDING_R1 = 11189, SPELL_MAGE_FROST_WARDING_TRIGGERED = 57776, + SPELL_MAGE_IMPROVED_POLYMORPH_RANK_1 = 11210, + SPELL_MAGE_IMPROVED_POLYMORPH_STUN_RANK_1 = 83046, + SPELL_MAGE_IMPROVED_POLYMORPH_MARKER = 87515, SPELL_MAGE_INCANTERS_ABSORBTION_R1 = 44394, SPELL_MAGE_INCANTERS_ABSORBTION_TRIGGERED = 44413, SPELL_MAGE_IGNITE = 12654, @@ -1042,6 +1045,67 @@ class spell_mage_permafrost : public SpellScriptLoader } }; +// 118 - Polymorph +class spell_mage_polymorph : public SpellScriptLoader +{ + public: + spell_mage_polymorph() : SpellScriptLoader("spell_mage_polymorph") { } + + class spell_mage_polymorph_AuraScript : public AuraScript + { + PrepareAuraScript(spell_mage_polymorph_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) OVERRIDE + { + if (!sSpellMgr->GetSpellInfo(SPELL_MAGE_IMPROVED_POLYMORPH_RANK_1) || + !sSpellMgr->GetSpellInfo(SPELL_MAGE_IMPROVED_POLYMORPH_STUN_RANK_1) || + !sSpellMgr->GetSpellInfo(SPELL_MAGE_IMPROVED_POLYMORPH_MARKER)) + return false; + return true; + } + + bool Load() OVERRIDE + { + _caster = NULL; + return true; + } + + bool DoCheck(ProcEventInfo& eventInfo) + { + _caster = GetCaster(); + return _caster && eventInfo.GetDamageInfo(); + } + + void HandleEffectProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + // Improved Polymorph + if (AuraEffect const* improvedPolymorph = _caster->GetAuraEffectOfRankedSpell(SPELL_MAGE_IMPROVED_POLYMORPH_RANK_1, EFFECT_0)) + { + if (_caster->HasAura(SPELL_MAGE_IMPROVED_POLYMORPH_MARKER)) + return; + + GetTarget()->CastSpell(GetTarget(), sSpellMgr->GetSpellWithRank(SPELL_MAGE_IMPROVED_POLYMORPH_STUN_RANK_1, improvedPolymorph->GetSpellInfo()->GetRank()), true, NULL, aurEff); + _caster->CastSpell(_caster, SPELL_MAGE_IMPROVED_POLYMORPH_MARKER, true, NULL, aurEff); + } + } + + void Register() OVERRIDE + { + DoCheckProc += AuraCheckProcFn(spell_mage_polymorph_AuraScript::DoCheck); + OnEffectProc += AuraEffectProcFn(spell_mage_polymorph_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_MOD_CONFUSE); + } + + private: + Unit* _caster; + }; + + AuraScript* GetAuraScript() const OVERRIDE + { + return new spell_mage_polymorph_AuraScript(); + } +}; + enum SilvermoonPolymorph { NPC_AUROSALIA = 18744 @@ -1363,6 +1427,7 @@ void AddSC_mage_spell_scripts() new spell_mage_master_of_elements(); new spell_mage_nether_vortex(); new spell_mage_permafrost(); + new spell_mage_polymorph(); new spell_mage_polymorph_cast_visual(); new spell_mage_replenish_mana(); new spell_mage_ring_of_frost(); |