diff options
Diffstat (limited to 'src/server')
-rw-r--r-- | src/server/scripts/Spells/spell_shaman.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index 991ad4a0ed1..b8dbbcd81f5 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -54,6 +54,8 @@ enum ShamanSpells SPELL_SHAMAN_CRASH_LIGHTNING = 187874, SPELL_SHAMAN_CRASH_LIGHTNING_CLEAVE = 187878, SPELL_SHAMAN_CRASH_LIGHTNING_DAMAGE_BUFF = 333964, + SPELL_SHAMAN_DELUGE_AURA = 200075, + SPELL_SHAMAN_DELUGE_TALENT = 200076, SPELL_SHAMAN_DOOM_WINDS_DAMAGE = 469270, SPELL_SHAMAN_DOOM_WINDS_LEGENDARY_COOLDOWN = 335904, SPELL_SHAMAN_EARTHQUAKE = 61882, @@ -91,6 +93,7 @@ enum ShamanSpells SPELL_SHAMAN_HAILSTORM_BUFF = 334196, SPELL_SHAMAN_HAILSTORM_TALENT = 334195, SPELL_SHAMAN_HEALING_RAIN_VISUAL = 147490, + SPELL_SHAMAN_HEALING_RAIN = 73920, SPELL_SHAMAN_HEALING_RAIN_HEAL = 73921, SPELL_SHAMAN_ICE_STRIKE_OVERRIDE_AURA = 466469, SPELL_SHAMAN_ICE_STRIKE_PROC = 466467, @@ -585,6 +588,57 @@ class spell_sha_crash_lightning : public SpellScript } }; +// 200076 - Deluge (attached to 77472 - Healing Wave, 8004 - Healing Surge and 1064 - Chain Heal +class spell_sha_deluge : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SHAMAN_RIPTIDE, SPELL_SHAMAN_DELUGE_AURA }) + && ValidateSpellEffect({ { SPELL_SHAMAN_DELUGE_TALENT, EFFECT_0 } }); + } + + void CalculateHealingBonus(SpellEffectInfo const& /*spellEffectInfo*/, Unit const* victim, int32& /*healing*/, int32& /*flatMod*/, float& pctMod) const + { + if (AuraEffect const* deluge = GetCaster()->GetAuraEffect(SPELL_SHAMAN_DELUGE_TALENT, EFFECT_0)) + if (victim->GetAura(SPELL_SHAMAN_RIPTIDE, GetCaster()->GetGUID()) || victim->GetAura(SPELL_SHAMAN_DELUGE_AURA, GetCaster()->GetGUID())) + AddPct(pctMod, deluge->GetAmount()); + } + + void Register() override + { + CalcHealing += SpellCalcHealingFn(spell_sha_deluge::CalculateHealingBonus); + } +}; + +namespace HealingRain +{ +Position GetHealingRainPosition(Aura const* healingRain); +} + +// 200075 - Deluge (attached to 73920 - Healing Rain) +class spell_sha_deluge_healing_rain : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SHAMAN_DELUGE_TALENT, SPELL_SHAMAN_DELUGE_AURA }); + } + + bool Load() override + { + return GetUnitOwner()->HasAura(SPELL_SHAMAN_DELUGE_TALENT); + } + + void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) const + { + GetCaster()->CastSpell(HealingRain::GetHealingRainPosition(GetAura()), SPELL_SHAMAN_DELUGE_AURA, TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR); + } + + void Register() override + { + OnEffectPeriodic += AuraEffectPeriodicFn(spell_sha_deluge_healing_rain::HandleEffectPeriodic, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY); + } +}; + // 378270 - Deeply Rooted Elements class spell_sha_deeply_rooted_elements : public AuraScript { @@ -1258,6 +1312,8 @@ public: _dest = summon->GetPosition(); } + Position GetPosition() const { return _dest; } + private: void HandleEffectPeriodic(AuraEffect const* aurEff) const { @@ -1283,6 +1339,14 @@ private: Position _dest; }; +Position HealingRain::GetHealingRainPosition(Aura const* healingRain) +{ + if (spell_sha_healing_rain_aura const* script = healingRain->GetScript<spell_sha_healing_rain_aura>()) + return script->GetPosition(); + + return healingRain->GetUnitOwner()->GetPosition(); +} + // 73920 - Healing Rain class spell_sha_healing_rain : public SpellScript { @@ -3361,6 +3425,8 @@ void AddSC_shaman_spell_scripts() RegisterSpellScriptWithArgs(spell_sha_delayed_stormstrike_mod_charge_drop_proc, "spell_sha_converging_storms_buff"); RegisterSpellScript(spell_sha_crash_lightning); RegisterSpellScript(spell_sha_deeply_rooted_elements); + RegisterSpellScript(spell_sha_deluge); + RegisterSpellScript(spell_sha_deluge_healing_rain); RegisterSpellScript(spell_sha_doom_winds); RegisterSpellScript(spell_sha_doom_winds_legendary); RegisterSpellScript(spell_sha_downpour); |