aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_druid.cpp85
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);