@@ -94,6 +94,8 @@ enum PriestSpells
9494 SPELL_PRIEST_ESSENCE_DEVOURER = 415479 ,
9595 SPELL_PRIEST_ESSENCE_DEVOURER_SHADOWFIEND_HEAL = 415673 ,
9696 SPELL_PRIEST_ESSENCE_DEVOURER_MINDBENDER_HEAL = 415676 ,
97+ SPELL_PRIEST_EXPIATION = 390832 ,
98+ SPELL_PRIEST_EXPIATION_DAMAGE = 390844 ,
9799 SPELL_PRIEST_FLASH_HEAL = 2061 ,
98100 SPELL_PRIEST_FROM_DARKNESS_COMES_LIGHT_AURA = 390617 ,
99101 SPELL_PRIEST_GREATER_HEAL = 289666 ,
@@ -1338,6 +1340,64 @@ class spell_pri_evangelism : public SpellScript
13381340 }
13391341};
13401342
1343+ // 390832 - Expiation
1344+ // Triggered by 8092 - Mind Blast and 32379 - Shadow Word: Death
1345+ class spell_pri_expiation : public SpellScript
1346+ {
1347+ bool Validate (SpellInfo const * /* spellInfo*/ ) override
1348+ {
1349+ return ValidateSpellInfo ({ SPELL_PRIEST_EXPIATION_DAMAGE })
1350+ && ValidateSpellEffect ({ { SPELL_PRIEST_EXPIATION, EFFECT_1 }, { SPELL_PRIEST_SHADOW_WORD_PAIN, EFFECT_1 } });
1351+ }
1352+
1353+ bool Load () override
1354+ {
1355+ return GetCaster ()->HasAura (SPELL_PRIEST_EXPIATION);
1356+ }
1357+
1358+ void HandleHitTarget (SpellEffIndex /* effIndex*/ ) const
1359+ {
1360+ Unit* caster = GetCaster ();
1361+ Unit* target = GetHitUnit ();
1362+
1363+ Aura const * expiation = caster->GetAura (SPELL_PRIEST_EXPIATION);
1364+ if (!expiation)
1365+ return ;
1366+
1367+ AuraEffect const * expiationConsume = expiation->GetEffect (EFFECT_0);
1368+ AuraEffect const * expiationDmgMul = expiation->GetEffect (EFFECT_1);
1369+ if (!expiationConsume || !expiationDmgMul)
1370+ return ;
1371+
1372+ AuraEffect const * swPainAuraEffect = target->GetAuraEffect (SPELL_PRIEST_SHADOW_WORD_PAIN, EFFECT_1, caster->GetGUID ());
1373+ if (!swPainAuraEffect)
1374+ return ;
1375+
1376+ Aura* swPainAura = swPainAuraEffect->GetBase ();
1377+ int32 debuffDuration = swPainAura->GetDuration ();
1378+ int32 consumeDuration = std::min (debuffDuration, expiationConsume->GetAmount () * IN_MILLISECONDS);
1379+ if (consumeDuration == 0 )
1380+ return ;
1381+
1382+ float ticksConsumed = static_cast <float >(consumeDuration) / swPainAuraEffect->GetPeriod ();
1383+ float damagePerTick = swPainAuraEffect->CalculateEstimatedAmount (caster, swPainAuraEffect->GetAmount ()).value_or (swPainAuraEffect->GetAmount ());
1384+ int32 totalDamage = static_cast <int32>(damagePerTick * ticksConsumed);
1385+
1386+ swPainAura->SetDuration (debuffDuration - consumeDuration);
1387+
1388+ caster->CastSpell (target, SPELL_PRIEST_EXPIATION_DAMAGE, CastSpellExtraArgsInit
1389+ {
1390+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
1391+ .SpellValueOverrides = { { SPELLVALUE_BASE_POINT0, CalculatePct (totalDamage, expiationDmgMul->GetAmount ()) } }
1392+ });
1393+ }
1394+
1395+ void Register () override
1396+ {
1397+ OnEffectHitTarget += SpellEffectFn (spell_pri_expiation::HandleHitTarget, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE);
1398+ }
1399+ };
1400+
13411401// 33110 - Prayer of Mending (Heal)
13421402class spell_pri_focused_mending : public SpellScript
13431403{
@@ -3929,6 +3989,7 @@ void AddSC_priest_spell_scripts()
39293989 RegisterSpellScript (spell_pri_epiphany);
39303990 RegisterSpellScript (spell_pri_essence_devourer_heal);
39313991 RegisterSpellScript (spell_pri_evangelism);
3992+ RegisterSpellScript (spell_pri_expiation);
39323993 RegisterSpellScript (spell_pri_focused_mending);
39333994 RegisterSpellScript (spell_pri_from_darkness_comes_light);
39343995 RegisterSpellScript (spell_pri_guardian_spirit);
0 commit comments