diff options
| author | Shauren <shauren.trinity@gmail.com> | 2026-01-11 00:17:57 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2026-01-11 00:17:57 +0100 |
| commit | e5a46c2da9a6fa376b63ba2b5064549b6ff74a85 (patch) | |
| tree | 2b531be47a0add021d510258a13970a837a10f7d /src/server | |
| parent | df670cf0acb8a97ee53b47e78f625a0e030e4823 (diff) | |
Scripts/Spells: Added Halo effect selection script
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/scripts/Spells/spell_priest.cpp | 107 |
1 files changed, 105 insertions, 2 deletions
diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 91f0f80ab6f..2c8de0562f5 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -83,6 +83,7 @@ enum PriestSpells SPELL_PRIEST_DIVINE_BLESSING = 40440, SPELL_PRIEST_DIVINE_FAVOR_CHASTISE = 372761, SPELL_PRIEST_DIVINE_FAVOR_SERENITY = 372791, + SPELL_PRIEST_DIVINE_HALO = 449806, SPELL_PRIEST_DIVINE_HYMN_HEAL = 64844, SPELL_PRIEST_DIVINE_IMAGE_SUMMON = 392990, SPELL_PRIEST_DIVINE_IMAGE_EMPOWER = 409387, @@ -171,6 +172,7 @@ enum PriestSpells SPELL_PRIEST_PENANCE_CHANNEL_HEALING = 47757, SPELL_PRIEST_PENANCE_DAMAGE = 47666, SPELL_PRIEST_PENANCE_HEALING = 47750, + SPELL_PRIEST_PHANTOM_REACH = 459559, SPELL_PRIEST_POWER_LEECH_MINDBENDER_MANA = 123051, SPELL_PRIEST_POWER_LEECH_MINDBENDER_INSANITY = 200010, SPELL_PRIEST_POWER_LEECH_SHADOWFIEND_MANA = 343727, @@ -2096,6 +2098,81 @@ class spell_pri_heavens_wrath : public AuraScript } }; +// 120517 - Halo (Holy) +// 120644 - Halo (Shadow) +class spell_pri_halo_effect_selector : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_PHANTOM_REACH, SPELL_PRIEST_POWER_SURGE, SPELL_PRIEST_DIVINE_HALO }); + } + + static void PreventUnwantedAura(SpellScript const&, WorldObject*& target) + { + target = nullptr; + } + + void Register() override + { + Optional<SpellEffIndex> selectedEffect; + if (Unit* caster = GetSpell() ? GetCaster() : nullptr) + { + if (caster->HasAura(SPELL_PRIEST_DIVINE_HALO)) + selectedEffect = caster->HasAura(SPELL_PRIEST_PHANTOM_REACH) ? EFFECT_5 : EFFECT_2; + else if (caster->HasAura(SPELL_PRIEST_POWER_SURGE)) + selectedEffect = caster->HasAura(SPELL_PRIEST_PHANTOM_REACH) ? EFFECT_4 : EFFECT_1; + else + selectedEffect = caster->HasAura(SPELL_PRIEST_PHANTOM_REACH) ? EFFECT_3 : EFFECT_0; + } + + if (selectedEffect != EFFECT_0) + OnEffectLaunch += SpellEffectFn(spell_pri_halo_effect_selector::PreventHitDefaultEffect, EFFECT_0, SPELL_EFFECT_CREATE_AREATRIGGER); + + if (selectedEffect != EFFECT_1) + OnEffectLaunch += SpellEffectFn(spell_pri_halo_effect_selector::PreventHitDefaultEffect, EFFECT_1, SPELL_EFFECT_CREATE_AREATRIGGER); + + if (selectedEffect != EFFECT_2) + OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_pri_halo_effect_selector::PreventUnwantedAura, EFFECT_2, TARGET_UNIT_CASTER); + + if (selectedEffect != EFFECT_3) + OnEffectLaunch += SpellEffectFn(spell_pri_halo_effect_selector::PreventHitDefaultEffect, EFFECT_3, SPELL_EFFECT_CREATE_AREATRIGGER); + + if (selectedEffect != EFFECT_4) + OnEffectLaunch += SpellEffectFn(spell_pri_halo_effect_selector::PreventHitDefaultEffect, EFFECT_4, SPELL_EFFECT_CREATE_AREATRIGGER); + + if (selectedEffect != EFFECT_5) + OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_pri_halo_effect_selector::PreventUnwantedAura, EFFECT_5, TARGET_UNIT_CASTER); + } +}; + +// 449840 - Halo (Holy) +// 453094 - Halo (Shadow) +class spell_pri_halo_return_effect_selector : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_PRIEST_PHANTOM_REACH }); + } + + static void PreventUnwantedAura(SpellScript const&, WorldObject*& target) + { + target = nullptr; + } + + void Register() override + { + Optional<SpellEffIndex> selectedEffect; + if (Unit* caster = GetSpell() ? GetCaster() : nullptr) + selectedEffect = caster->HasAura(SPELL_PRIEST_PHANTOM_REACH) ? EFFECT_1 : EFFECT_0; + + if (selectedEffect != EFFECT_0) + OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_pri_halo_return_effect_selector::PreventUnwantedAura, EFFECT_0, TARGET_UNIT_CASTER); + + if (selectedEffect != EFFECT_1) + OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_pri_halo_return_effect_selector::PreventUnwantedAura, EFFECT_1, TARGET_UNIT_CASTER); + } +}; + // 120644 - Halo (Shadow) class spell_pri_halo_shadow : public SpellScript { @@ -2109,7 +2186,7 @@ class spell_pri_halo_shadow : public SpellScript void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_pri_halo_shadow::HandleHitTarget, EFFECT_1, SPELL_EFFECT_ENERGIZE); + OnEffectHitTarget += SpellEffectFn(spell_pri_halo_shadow::HandleHitTarget, EFFECT_6, SPELL_EFFECT_ENERGIZE); } }; @@ -2117,7 +2194,7 @@ class spell_pri_halo_shadow : public SpellScript // 120644 - Halo (Shadow) struct areatrigger_pri_halo : AreaTriggerAI { - areatrigger_pri_halo(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) {} + using AreaTriggerAI::AreaTriggerAI; void OnUnitEnter(Unit* unit) override { @@ -2133,6 +2210,29 @@ struct areatrigger_pri_halo : AreaTriggerAI } }; +// 449840 - Halo (Holy) +// 453094 - Halo (Shadow) +struct areatrigger_pri_halo_return : AreaTriggerAI +{ + using AreaTriggerAI::AreaTriggerAI; + + void OnUnitExit(Unit* unit, AreaTriggerExitReason reason) override + { + if (reason != AreaTriggerExitReason::NotInside) + return; + + if (Unit* caster = at->GetCaster()) + { + if (caster->IsValidAttackTarget(unit)) + caster->CastSpell(unit, at->GetSpellId() == SPELL_PRIEST_HALO_SHADOW ? SPELL_PRIEST_HALO_SHADOW_DAMAGE : SPELL_PRIEST_HALO_HOLY_DAMAGE, + TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS); + else if (caster->IsValidAssistTarget(unit)) + caster->CastSpell(unit, at->GetSpellId() == SPELL_PRIEST_HALO_SHADOW ? SPELL_PRIEST_HALO_SHADOW_HEAL : SPELL_PRIEST_HALO_HOLY_HEAL, + TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_IN_PROGRESS); + } + } +}; + // 391154 - Holy Mending class spell_pri_holy_mending : public AuraScript { @@ -4838,8 +4938,11 @@ void AddSC_priest_spell_scripts() RegisterSpellScript(spell_pri_focused_mending); RegisterSpellScript(spell_pri_from_darkness_comes_light); RegisterSpellScript(spell_pri_guardian_spirit); + RegisterSpellScript(spell_pri_halo_effect_selector); + RegisterSpellScript(spell_pri_halo_return_effect_selector); RegisterSpellScript(spell_pri_halo_shadow); RegisterAreaTriggerAI(areatrigger_pri_halo); + RegisterAreaTriggerAI(areatrigger_pri_halo_return); RegisterSpellScript(spell_pri_harsh_discipline); RegisterSpellScript(spell_pri_heavens_wrath); RegisterSpellScript(spell_pri_holy_mending); |
