@@ -164,6 +164,8 @@ enum DemonHunterSpells
164164 SPELL_DH_NEMESIS_HUMANOIDS = 208605 ,
165165 SPELL_DH_NEMESIS_MECHANICALS = 208613 ,
166166 SPELL_DH_NEMESIS_UNDEAD = 208614 ,
167+ SPELL_DH_PAINBRINGER_DUMMY = 225413 ,
168+ SPELL_DH_PAINBRINGER_STACK = 212988 ,
167169 SPELL_DH_RAIN_FROM_ABOVE = 206803 ,
168170 SPELL_DH_RAIN_OF_CHAOS = 205628 ,
169171 SPELL_DH_RAIN_OF_CHAOS_IMPACT = 232538 ,
@@ -1498,6 +1500,66 @@ class spell_dh_monster_rising : public AuraScript
14981500 }
14991501};
15001502
1503+ // 207387 - Painbringer
1504+ class spell_dh_painbringer : public AuraScript
1505+ {
1506+ bool Validate (SpellInfo const * /* spellInfo*/ ) override
1507+ {
1508+ return ValidateSpellInfo ({ SPELL_DH_PAINBRINGER_STACK });
1509+ }
1510+
1511+ void HandleProc (ProcEventInfo const & eventInfo) const
1512+ {
1513+ Unit* target = eventInfo.GetActor ();
1514+ target->CastSpell (target, SPELL_DH_PAINBRINGER_STACK, CastSpellExtraArgsInit{
1515+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
1516+ .TriggeringSpell = eventInfo.GetProcSpell ()
1517+ });
1518+ }
1519+
1520+ void Register () override
1521+ {
1522+ OnProc += AuraProcFn (spell_dh_painbringer::HandleProc);
1523+ }
1524+ };
1525+
1526+ // 212988 - Painbringer
1527+ class spell_dh_painbringer_reduce_damage : public AuraScript
1528+ {
1529+ bool Validate (SpellInfo const * /* spell*/ ) override
1530+ {
1531+ return ValidateSpellInfo ({ SPELL_DH_PAINBRINGER_DUMMY });
1532+ }
1533+
1534+ void OnApply (AuraEffect const * aurEff, AuraEffectHandleModes mode) const
1535+ {
1536+ Unit* target = GetTarget ();
1537+
1538+ if (mode & AURA_EFFECT_HANDLE_REAL)
1539+ target->CastSpell (target, SPELL_DH_PAINBRINGER_DUMMY, CastSpellExtraArgsInit{
1540+ .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
1541+ .TriggeringAura = aurEff
1542+ });
1543+
1544+ target->m_Events .AddEventAtOffset ([self = GetAura ()->GetWeakPtr ()]
1545+ {
1546+ if (Trinity::unique_strong_ref_ptr<Aura> aura = self.lock ())
1547+ aura->ModStackAmount (-1 , AURA_REMOVE_BY_EXPIRE, false );
1548+ }, Milliseconds (GetMaxDuration ()));
1549+ }
1550+
1551+ void OnRemove (AuraEffect const * /* aurEff*/ , AuraEffectHandleModes /* mode*/ ) const
1552+ {
1553+ GetTarget ()->RemoveAurasDueToSpell (SPELL_DH_PAINBRINGER_DUMMY);
1554+ }
1555+
1556+ void Register () override
1557+ {
1558+ AfterEffectApply += AuraEffectApplyFn (spell_dh_painbringer_reduce_damage::OnApply, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
1559+ AfterEffectRemove += AuraEffectRemoveFn (spell_dh_painbringer_reduce_damage::OnRemove, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
1560+ }
1561+ };
1562+
15011563// 188499 - Blade Dance
15021564// 210152 - Death Sweep
15031565class spell_dh_blade_dance : public SpellScript
@@ -2238,6 +2300,8 @@ void AddSC_demon_hunter_spell_scripts()
22382300 RegisterSpellScript (spell_dh_know_your_enemy);
22392301 RegisterSpellScript (spell_dh_last_resort);
22402302 RegisterSpellScript (spell_dh_monster_rising);
2303+ RegisterSpellScript (spell_dh_painbringer);
2304+ RegisterSpellScript (spell_dh_painbringer_reduce_damage);
22412305 RegisterSpellScript (spell_dh_repeat_decree_conduit);
22422306 RegisterSpellScript (spell_dh_restless_hunter);
22432307 RegisterSpellScript (spell_dh_retaliation);
0 commit comments