diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index aaf52504049..66131f306af 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -348,6 +348,33 @@ class spell_pri_atonement_triggered : public AuraScript } }; +// 204883 - Circle of Healing +class spell_pri_circle_of_healing : public SpellScript +{ + PrepareSpellScript(spell_pri_circle_of_healing); + + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellEffect({ { spellInfo->Id, EFFECT_1 } }); + } + + void FilterTargets(std::list<WorldObject*>& targets) + { + // Note: we must remove one since target is always chosen. + uint32 const maxTargets = uint32(GetSpellInfo()->GetEffect(EFFECT_1).CalcValue(GetCaster()) - 1); + + Trinity::SelectRandomInjuredTargets(targets, maxTargets, true); + + if (Unit* explicitTarget = GetExplTargetUnit()) + targets.push_front(explicitTarget); + } + + void Register() override + { + OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_pri_circle_of_healing::FilterTargets, EFFECT_0, TARGET_UNIT_DEST_AREA_ALLY); + } +}; + // 64844 - Divine Hymn class spell_pri_divine_hymn : public SpellScript { @@ -1871,6 +1898,7 @@ void AddSC_priest_spell_scripts() RegisterSpellScript(spell_pri_aq_3p_bonus); RegisterSpellScript(spell_pri_atonement); RegisterSpellScript(spell_pri_atonement_triggered); + RegisterSpellScript(spell_pri_circle_of_healing); RegisterSpellScript(spell_pri_divine_hymn); RegisterSpellScript(spell_pri_divine_star_shadow); RegisterAreaTriggerAI(areatrigger_pri_divine_star); |
