diff --git a/sql/updates/world/master/2026_02_27_00_world.sql b/sql/updates/world/master/2026_02_27_00_world.sql new file mode 100644 index 0000000000..1d745814e2 --- /dev/null +++ b/sql/updates/world/master/2026_02_27_00_world.sql @@ -0,0 +1,8 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_pri_evangelism','spell_pri_power_word_radiance_evangelism'); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(472433,'spell_pri_evangelism'), +(194509,'spell_pri_power_word_radiance_evangelism'); + +DELETE FROM `spell_proc` WHERE `SpellId` IN (472433); +INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES +(472433,0x00,6,0x00400000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0,0,0,0); -- Evangelism diff --git a/src/server/scripts/Spells/spell_priest.cpp b/src/server/scripts/Spells/spell_priest.cpp index 44ffe5c5bd..e09a51f625 100644 --- a/src/server/scripts/Spells/spell_priest.cpp +++ b/src/server/scripts/Spells/spell_priest.cpp @@ -116,6 +116,7 @@ enum PriestSpells SPELL_PRIEST_ESSENCE_DEVOURER = 415479, SPELL_PRIEST_ESSENCE_DEVOURER_SHADOWFIEND_HEAL = 415673, SPELL_PRIEST_ESSENCE_DEVOURER_MINDBENDER_HEAL = 415676, + SPELL_PRIEST_EVANGELISM = 472433, SPELL_PRIEST_EXPIATION = 390832, SPELL_PRIEST_EXPIATION_DAMAGE = 390844, SPELL_PRIEST_FLASH_HEAL = 2061, @@ -1960,32 +1961,40 @@ class spell_pri_eternal_sanctity : public AuraScript } }; -// 246287 - Evangelism +// 472433 - Evangelism class spell_pri_evangelism : public SpellScript { +public: + struct TriggerArgs + { + int32 EffectivenessPct = 100; + }; + bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo({ SPELL_PRIEST_ATONEMENT_EFFECT }); + return ValidateSpellInfo({ SPELL_PRIEST_POWER_WORD_RADIANCE }); } - void HandleScriptEffect(SpellEffIndex /*effIndex*/) const + void HandleCast() const + { + GetSpell()->SetSpellValue({ SPELLVALUE_AURA_STACK, GetEffectInfo(EFFECT_0).CalcValue(GetCaster()) }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) const { Unit* caster = GetCaster(); Unit* target = GetHitUnit(); - - Aura* atonementAura = target->GetAura(SPELL_PRIEST_ATONEMENT_EFFECT, caster->GetGUID()); - if (!atonementAura) - return; - - Milliseconds extraDuration = Seconds(GetEffectValue()); - - atonementAura->SetDuration(atonementAura->GetDuration() + extraDuration.count()); - atonementAura->SetMaxDuration(atonementAura->GetDuration() + extraDuration.count()); + caster->CastSpell(GetHitUnit(), SPELL_PRIEST_POWER_WORD_RADIANCE, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_CAST_DIRECTLY | TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_CAST_TIME | TRIGGERED_IGNORE_POWER_COST + | TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .CustomArg = TriggerArgs{ .EffectivenessPct = GetEffectInfo(EFFECT_1).CalcValue(caster, &GetSpellValue()->EffectBasePoints[EFFECT_1], target) } + }); } void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_pri_evangelism::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + BeforeCast += SpellCastFn(spell_pri_evangelism::HandleCast); + OnEffectLaunch += SpellEffectFn(spell_pri_evangelism::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); } }; @@ -3360,6 +3369,30 @@ class spell_pri_power_word_radiance : public SpellScript std::vector _visualTargets; }; +// 472433 - Evangelism (attached to 194509 - Power Word: Radiance) +class spell_pri_power_word_radiance_evangelism : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellEffect({ { SPELL_PRIEST_EVANGELISM, EFFECT_1 } }) + && sSpellMgr->AssertSpellInfo(SPELL_PRIEST_EVANGELISM, DIFFICULTY_NONE)->GetEffect(EFFECT_1).TargetA.GetTarget() == Targets(); + } + + void CalculateHealing(SpellEffectInfo const& /*effectInfo*/, Unit* /*victim*/, int32& /*healing*/, int32& /*flatMod*/, float& pctMod) const + { + spell_pri_evangelism::TriggerArgs const* evangelism = std::any_cast(&GetSpell()->m_customArg); + if (!evangelism) + return; + + ApplyPct(pctMod, evangelism->EffectivenessPct); + } + + void Register() override + { + CalcHealing += SpellCalcHealingFn(spell_pri_power_word_radiance_evangelism::CalculateHealing); + } +}; + // 17 - Power Word: Shield class spell_pri_power_word_shield : public AuraScript { @@ -5402,6 +5435,7 @@ void AddSC_priest_spell_scripts() 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_radiance_evangelism); RegisterSpellScript(spell_pri_power_word_shield); RegisterSpellScript(spell_pri_power_word_solace); RegisterSpellScript(spell_pri_prayer_of_mending_dummy);