Skip to content

Commit a4bbb61

Browse files
authored
Scripts/Spells: Implement priest talent Expiation (TrinityCore#31448)
1 parent d22dae0 commit a4bbb61

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_pri_expiation');
2+
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
3+
(8092, 'spell_pri_expiation'),
4+
(32379, 'spell_pri_expiation');

src/server/scripts/Spells/spell_priest.cpp

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
13421402
class 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

Comments
 (0)