diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Spells/spell_druid.cpp | 85 |
1 files changed, 78 insertions, 7 deletions
diff --git a/src/server/scripts/Spells/spell_druid.cpp b/src/server/scripts/Spells/spell_druid.cpp index a9973bbf925..4d1e00f2bf9 100644 --- a/src/server/scripts/Spells/spell_druid.cpp +++ b/src/server/scripts/Spells/spell_druid.cpp @@ -64,6 +64,8 @@ enum DruidSpells SPELL_DRUID_ECLIPSE_SOLAR_SPELL_CNT = 326053, SPELL_DRUID_EFFLORESCENCE_AURA = 81262, SPELL_DRUID_EFFLORESCENCE_HEAL = 81269, + SPELL_DRUID_EMBRACE_OF_THE_DREAM_EFFECT = 392146, + SPELL_DRUID_EMBRACE_OF_THE_DREAM_HEAL = 392147, SPELL_DRUID_ENTANGLING_ROOTS = 339, SPELL_DRUID_EXHILARATE = 28742, SPELL_DRUID_FORM_AQUATIC_PASSIVE = 276012, @@ -98,6 +100,7 @@ enum DruidSpells SPELL_DRUID_MOONFIRE_DAMAGE = 164812, SPELL_DRUID_POWER_OF_THE_ARCHDRUID = 392302, SPELL_DRUID_PROWL = 5215, + SPELL_DRUID_REGROWTH = 8936, SPELL_DRUID_REJUVENATION = 774, SPELL_DRUID_REJUVENATION_GERMINATION = 155777, SPELL_DRUID_REJUVENATION_T10_PROC = 70691, @@ -351,6 +354,26 @@ class spell_dru_dash : public AuraScript } }; +// 203974 - Earthwarden +class spell_dru_earthwarden : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DRUID_THRASH_CAT, SPELL_DRUID_THRASH_BEAR, SPELL_DRUID_EARTHWARDEN_AURA }); + } + + void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& /*eventInfo*/) + { + Unit* target = GetTarget(); + target->CastSpell(target, SPELL_DRUID_EARTHWARDEN_AURA, true); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_dru_earthwarden::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } +}; + class spell_dru_eclipse_common { public: @@ -569,23 +592,69 @@ class spell_dru_efflorescence_heal : public SpellScript } }; -// 203974 - Earthwarden -class spell_dru_earthwarden : public AuraScript +// 392124 - Embrace of the Dream +class spell_dru_embrace_of_the_dream : public AuraScript +{ + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellInfo ({ SPELL_DRUID_EMBRACE_OF_THE_DREAM_EFFECT }) + && ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } }); + } + + bool CheckProc(AuraEffect const* /*aurEff*/, ProcEventInfo const& /*eventInfo*/) const + { + return roll_chance_i(GetEffectInfo(EFFECT_2).CalcValue(GetCaster())); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo const& eventInfo) const + { + GetTarget()->CastSpell(GetTarget(), SPELL_DRUID_EMBRACE_OF_THE_DREAM_EFFECT, + CastSpellExtraArgs(TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR) + .SetTriggeringAura(aurEff) + .SetTriggeringSpell(eventInfo.GetProcSpell())); + } + + void Register() override + { + DoCheckEffectProc += AuraCheckEffectProcFn(spell_dru_embrace_of_the_dream::CheckProc, EFFECT_0, SPELL_AURA_DUMMY); + OnEffectProc += AuraEffectProcFn(spell_dru_embrace_of_the_dream::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } +}; + +// 392146 - Embrace of the Dream (Selector) +class spell_dru_embrace_of_the_dream_effect : public SpellScript { bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo({ SPELL_DRUID_THRASH_CAT, SPELL_DRUID_THRASH_BEAR, SPELL_DRUID_EARTHWARDEN_AURA }); + return ValidateSpellInfo + ({ + SPELL_DRUID_EMBRACE_OF_THE_DREAM_HEAL, + SPELL_DRUID_REGROWTH, + SPELL_DRUID_REJUVENATION, + SPELL_DRUID_REJUVENATION_GERMINATION + }); } - void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& /*eventInfo*/) + void FilterTargets(std::list<WorldObject*>& targets) const { - Unit* target = GetTarget(); - target->CastSpell(target, SPELL_DRUID_EARTHWARDEN_AURA, true); + targets.remove_if([&](WorldObject const* target) + { + Unit const* unitTarget = target->ToUnit(); + return !unitTarget || !unitTarget->GetAuraEffect(SPELL_AURA_PERIODIC_HEAL, SPELLFAMILY_DRUID, flag128(0x50, 0, 0, 0), GetCaster()->GetGUID()); + }); + } + + void HandleEffect(SpellEffIndex /*effIndex*/) const + { + GetCaster()->CastSpell(GetHitUnit(), SPELL_DRUID_EMBRACE_OF_THE_DREAM_HEAL, + CastSpellExtraArgs(TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR) + .SetTriggeringSpell(GetSpell())); } void Register() override { - OnEffectProc += AuraEffectProcFn(spell_dru_earthwarden::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_dru_embrace_of_the_dream_effect::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); + OnEffectHitTarget += SpellEffectFn(spell_dru_embrace_of_the_dream_effect::HandleEffect, EFFECT_0, SPELL_EFFECT_DUMMY); } }; @@ -1991,6 +2060,8 @@ void AddSC_druid_spell_scripts() RegisterSpellScript(spell_dru_efflorescence); RegisterSpellScript(spell_dru_efflorescence_dummy); RegisterSpellScript(spell_dru_efflorescence_heal); + RegisterSpellScript(spell_dru_embrace_of_the_dream); + RegisterSpellScript(spell_dru_embrace_of_the_dream_effect); RegisterSpellAndAuraScriptPair(spell_dru_entangling_roots, spell_dru_entangling_roots_aura); RegisterSpellScript(spell_dru_ferocious_bite); RegisterSpellScript(spell_dru_forms_trinket); |