Skip to content

Commit b384c2b

Browse files
authored
Scripts/Spells: Implement dh talent "Painbringer" (TrinityCore#31501)
1 parent 2e41f6d commit b384c2b

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
DELETE FROM `spell_proc` WHERE `SpellId` IN (207387);
2+
INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES
3+
(207387,0x00,107,0x00100000,0x00000000,0x00000000,0x00000000,0x4000,0x0,0x2,0x2,0x0,0x2,0x0,0,100,0,0); -- Painbringer
4+
5+
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_dh_painbringer', 'spell_dh_painbringer_reduce_damage');
6+
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
7+
(207387, 'spell_dh_painbringer'),
8+
(212988, 'spell_dh_painbringer_reduce_damage');

src/server/scripts/Spells/spell_dh.cpp

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

Comments
 (0)