Scripts/Spells: Implement priest talent Power Surge (#31475)

This commit is contained in:
Cristian Vintila
2026-01-10 22:54:25 +02:00
committed by GitHub
parent a83df0536c
commit 1ff3bac726
2 changed files with 91 additions and 0 deletions

View File

@@ -177,6 +177,11 @@ enum PriestSpells
SPELL_PRIEST_POWER_LEECH_SHADOWFIEND_INSANITY = 262485,
SPELL_PRIEST_POWER_OF_THE_DARK_SIDE = 198069,
SPELL_PRIEST_POWER_OF_THE_DARK_SIDE_TINT = 225795,
SPELL_PRIEST_POWER_SURGE = 453109,
SPELL_PRIEST_POWER_SURGE_HALO_VISUAL = 454342,
SPELL_PRIEST_POWER_SURGE_HALO_VISUAL_RETURN = 467824, // TODO: cast when triggering first return halo from Divine Halo (from halo on expire script)
SPELL_PRIEST_POWER_SURGE_PERIODIC_HOLY = 453112,
SPELL_PRIEST_POWER_SURGE_PERIODIC_SHADOW = 453113,
SPELL_PRIEST_POWER_WORD_LIFE = 373481,
SPELL_PRIEST_POWER_WORD_RADIANCE = 194509,
SPELL_PRIEST_POWER_WORD_SHIELD = 17,
@@ -2898,6 +2903,80 @@ class spell_pri_power_of_the_dark_side_healing_bonus : public SpellScript
}
};
// 453109 - Power Surge
// Triggered by 120517 - Halo (Holy) and 120644 - Halo (Shadow)
class spell_pri_power_surge : public AuraScript
{
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo
({
SPELL_PRIEST_HALO_HOLY,
SPELL_PRIEST_HALO_SHADOW,
SPELL_PRIEST_POWER_SURGE_PERIODIC_HOLY,
SPELL_PRIEST_POWER_SURGE_PERIODIC_SHADOW,
SPELL_PRIEST_POWER_SURGE_HALO_VISUAL
});
}
static void HandleProc(AuraScript const&, AuraEffect const* aurEff, ProcEventInfo const& eventInfo)
{
Unit* caster = eventInfo.GetActor();
uint32 spellId = 0;
switch (eventInfo.GetSpellInfo()->Id)
{
case SPELL_PRIEST_HALO_HOLY:
spellId = SPELL_PRIEST_POWER_SURGE_PERIODIC_HOLY;
break;
case SPELL_PRIEST_HALO_SHADOW:
spellId = SPELL_PRIEST_POWER_SURGE_PERIODIC_SHADOW;
break;
default:
return;
}
CastSpellExtraArgs args = CastSpellExtraArgsInit{
.TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
.TriggeringSpell = eventInfo.GetProcSpell(),
.TriggeringAura = aurEff
};
caster->CastSpell(caster, SPELL_PRIEST_POWER_SURGE_HALO_VISUAL, args);
caster->CastSpell(caster, spellId, args);
}
void Register() override
{
OnEffectProc += AuraEffectProcFn(spell_pri_power_surge::HandleProc, EFFECT_1, SPELL_AURA_DUMMY);
}
};
// 453112 - Power Surge (Holy - Periodic)
// 453113 - Power Surge (Shadow - Periodic)
class spell_pri_power_surge_periodic : public AuraScript
{
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ _spellId });
}
void HandleEffectPeriodic(AuraEffect const* /*aurEff*/) const
{
GetTarget()->CastSpell(GetTarget(), _spellId, TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD | TRIGGERED_IGNORE_POWER_COST | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_IGNORE_CAST_TIME | TRIGGERED_DONT_REPORT_CAST_ERROR);
}
void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_pri_power_surge_periodic::HandleEffectPeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
uint32 _spellId;
public:
explicit spell_pri_power_surge_periodic(uint32 haloSpellId) : _spellId(haloSpellId) {}
};
// 194509 - Power Word: Radiance
class spell_pri_power_word_radiance : public SpellScript
{
@@ -4787,6 +4866,9 @@ void AddSC_priest_spell_scripts()
RegisterSpellScript(spell_pri_power_of_the_dark_side);
RegisterSpellScript(spell_pri_power_of_the_dark_side_damage_bonus);
RegisterSpellScript(spell_pri_power_of_the_dark_side_healing_bonus);
RegisterSpellScript(spell_pri_power_surge);
RegisterSpellScriptWithArgs(spell_pri_power_surge_periodic, "spell_pri_power_surge_periodic_holy", SPELL_PRIEST_HALO_HOLY);
RegisterSpellScriptWithArgs(spell_pri_power_surge_periodic, "spell_pri_power_surge_periodic_shadow", SPELL_PRIEST_HALO_SHADOW);
RegisterSpellScript(spell_pri_power_word_radiance);
RegisterSpellScript(spell_pri_power_word_shield);
RegisterSpellScript(spell_pri_power_word_solace);