diff options
| author | Shauren <shauren.trinity@gmail.com> | 2017-08-27 11:28:08 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2017-08-27 11:28:08 +0200 |
| commit | 5774e926d997ef870bf3f184d0f23396e283fe56 (patch) | |
| tree | 9228f0a0f3c3d48cc9e2c5d9716f31b7505f656d /src | |
| parent | aca16d22e18bc161cadca0718eff6db99d7fb2a0 (diff) | |
Core/Spells: Fixed mage Cauterize
* No more immortal fire mages
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Spells/SpellScript.h | 2 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_mage.cpp | 58 |
2 files changed, 59 insertions, 1 deletions
diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h index 268ef5cc12e..1c38de31787 100644 --- a/src/server/game/Spells/SpellScript.h +++ b/src/server/game/Spells/SpellScript.h @@ -793,7 +793,7 @@ class TC_GAME_API AuraScript : public _SpellScript // executed when absorb aura effect is going to reduce damage // example: OnEffectAbsorb += AuraEffectAbsorbFn(class::function, EffectIndexSpecifier); - // where function is: void function (AuraEffect const* aurEff, DamageInfo& dmgInfo, uint32& absorbAmount); + // where function is: void function (AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& absorbAmount); HookList<EffectAbsorbHandler> OnEffectAbsorb; #define AuraEffectAbsorbFn(F, I) EffectAbsorbFunction(&F, I) diff --git a/src/server/scripts/Spells/spell_mage.cpp b/src/server/scripts/Spells/spell_mage.cpp index a870223bc74..6809d9a8e7a 100644 --- a/src/server/scripts/Spells/spell_mage.cpp +++ b/src/server/scripts/Spells/spell_mage.cpp @@ -34,6 +34,8 @@ enum MageSpells { SPELL_MAGE_BLAZING_BARRIER_TRIGGER = 235314, + SPELL_MAGE_CAUTERIZE_DOT = 87023, + SPELL_MAGE_CAUTERIZED = 87024, SPELL_MAGE_CONE_OF_COLD = 120, SPELL_MAGE_CONE_OF_COLD_SLOW = 212792, SPELL_MAGE_CONJURE_REFRESHMENT = 116136, @@ -121,6 +123,61 @@ class spell_mage_burning_determination : public AuraScript } }; +// 86949 - Cauterize +class spell_mage_cauterize : public SpellScript +{ + PrepareSpellScript(spell_mage_cauterize); + + void SuppressSpeedBuff(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + } + + void Register() override + { + OnEffectLaunch += SpellEffectFn(spell_mage_cauterize::SuppressSpeedBuff, EFFECT_2, SPELL_EFFECT_TRIGGER_SPELL); + } +}; + +class spell_mage_cauterize_AuraScript : public AuraScript +{ + PrepareAuraScript(spell_mage_cauterize_AuraScript); + + bool Validate(SpellInfo const* spellInfo) override + { + return spellInfo->GetEffect(EFFECT_2) && ValidateSpellInfo + ({ + SPELL_MAGE_CAUTERIZE_DOT, + SPELL_MAGE_CAUTERIZED, + spellInfo->GetEffect(EFFECT_2)->TriggerSpell + }); + } + + void HandleAbsorb(AuraEffect* aurEff, DamageInfo& dmgInfo, uint32& absorbAmount) + { + AuraEffect const* effect1 = GetEffect(EFFECT_1); + if (!effect1 || + !GetTargetApplication()->HasEffect(EFFECT_1) || + dmgInfo.GetDamage() < GetTarget()->GetHealth() || + dmgInfo.GetDamage() > GetTarget()->GetMaxHealth() * 2 || + GetTarget()->HasAura(SPELL_MAGE_CAUTERIZED)) + { + PreventDefaultAction(); + return; + } + + GetTarget()->SetHealth(GetTarget()->CountPctFromMaxHealth(effect1->GetAmount())); + GetTarget()->CastSpell(GetTarget(), GetAura()->GetSpellEffectInfo(EFFECT_2)->TriggerSpell, TRIGGERED_FULL_MASK); + GetTarget()->CastSpell(GetTarget(), SPELL_MAGE_CAUTERIZE_DOT, TRIGGERED_FULL_MASK); + GetTarget()->CastSpell(GetTarget(), SPELL_MAGE_CAUTERIZED, TRIGGERED_FULL_MASK); + } + + void Register() override + { + OnEffectAbsorb += AuraEffectAbsorbFn(spell_mage_cauterize_AuraScript::HandleAbsorb, EFFECT_0); + } +}; + // 235219 - Cold Snap class spell_mage_cold_snap : public SpellScript { @@ -642,6 +699,7 @@ void AddSC_mage_spell_scripts() { RegisterAuraScript(spell_mage_blazing_barrier); RegisterAuraScript(spell_mage_burning_determination); + RegisterSpellAndAuraScriptPair(spell_mage_cauterize, spell_mage_cauterize_AuraScript); RegisterSpellScript(spell_mage_cold_snap); RegisterSpellScript(spell_mage_cone_of_cold); RegisterSpellScript(spell_mage_conjure_refreshment); |
