Scripts/Spells: Implement druid talent Embrace of the Dream (#29185)

This commit is contained in:
Teleqraph
2023-08-20 19:07:47 +02:00
committed by GitHub
parent ba944151bd
commit 30d304298c
2 changed files with 87 additions and 8 deletions

View File

@@ -0,0 +1,8 @@
DELETE FROM `spell_proc` WHERE `SpellId` IN (392124);
INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
(392124,0x00,7,0x00000000,0x04000000,0x00000000,0x00000000,0x0,0x0,0x4,0x4,0x1,0x0,0x0,0,0,0,0); -- Embrace of the Dream
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_dru_embrace_of_the_dream', 'spell_dru_embrace_of_the_dream_effect');
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(392124, 'spell_dru_embrace_of_the_dream'),
(392146, 'spell_dru_embrace_of_the_dream_effect');

View File

@@ -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
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_EFFECT })
&& ValidateSpellEffect({ { spellInfo->Id, EFFECT_2 } });
}
void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& /*eventInfo*/)
bool CheckProc(AuraEffect const* /*aurEff*/, ProcEventInfo const& /*eventInfo*/) const
{
Unit* target = GetTarget();
target->CastSpell(target, SPELL_DRUID_EARTHWARDEN_AURA, true);
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
{
OnEffectProc += AuraEffectProcFn(spell_dru_earthwarden::HandleProc, EFFECT_0, SPELL_AURA_DUMMY);
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_EMBRACE_OF_THE_DREAM_HEAL,
SPELL_DRUID_REGROWTH,
SPELL_DRUID_REJUVENATION,
SPELL_DRUID_REJUVENATION_GERMINATION
});
}
void FilterTargets(std::list<WorldObject*>& targets) const
{
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
{
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);