Scripts/Spells: Implement dh talent "Enduring Torment" (#31523)

This commit is contained in:
Aqua Deus
2026-02-05 21:14:26 +01:00
committed by GitHub
parent 80910b9521
commit 9f96377d59
2 changed files with 65 additions and 0 deletions

View File

@@ -0,0 +1,4 @@
DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_dh_enduring_torment','spell_dh_enduring_torment_buff');
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(452410, 'spell_dh_enduring_torment'),
(453314, 'spell_dh_enduring_torment_buff');

View File

@@ -92,6 +92,7 @@ enum DemonHunterSpells
SPELL_DH_DEMONS_BITE = 162243,
SPELL_DH_ELYSIAN_DECREE = 306830,
SPELL_DH_ELYSIAN_DECREE_AOE = 307046,
SPELL_DH_ENDURING_TORMENT_BUFF = 453314,
SPELL_DH_ESSENCE_BREAK_DEBUFF = 320338,
SPELL_DH_EYE_BEAM = 198013,
SPELL_DH_EYE_BEAM_DAMAGE = 198030,
@@ -147,6 +148,7 @@ enum DemonHunterSpells
SPELL_DH_JAGGED_SPIKES_PROC = 208796,
SPELL_DH_MANA_RIFT_DMG_POWER_BURN = 235904,
SPELL_DH_METAMORPHOSIS = 191428,
SPELL_DH_METAMORPHOSIS_DEVOURER_TRANSFORM = 1217607,
SPELL_DH_METAMORPHOSIS_DUMMY = 191427,
SPELL_DH_METAMORPHOSIS_IMPACT_DAMAGE = 200166,
SPELL_DH_METAMORPHOSIS_RESET = 320645,
@@ -1008,6 +1010,63 @@ struct spell_dh_shattered_souls_base_lesser
}
};
// 452410 - Enduring Torment
class spell_dh_enduring_torment : public AuraScript
{
bool Validate(SpellInfo const* /*spellInfo*/) override
{
return ValidateSpellInfo({ SPELL_DH_ENDURING_TORMENT_BUFF, SPELL_DH_METAMORPHOSIS_TRANSFORM, SPELL_DH_METAMORPHOSIS_DEVOURER_TRANSFORM });
}
void HandlePeriodic(AuraEffect const* aurEff) const
{
Unit* target = GetTarget();
Aura* statBuff = target->GetOwnedAura(SPELL_DH_ENDURING_TORMENT_BUFF);
if (target->HasAura(SPELL_DH_METAMORPHOSIS_TRANSFORM) || target->HasAura(SPELL_DH_METAMORPHOSIS_DEVOURER_TRANSFORM))
{
if (statBuff)
target->RemoveOwnedAura(statBuff);
}
else if (!statBuff)
{
target->CastSpell(target, SPELL_DH_ENDURING_TORMENT_BUFF, CastSpellExtraArgsInit{
.TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR,
.TriggeringAura = aurEff
});
}
}
void Register() override
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_dh_enduring_torment::HandlePeriodic, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
// 453314 - Enduring Torment
class spell_dh_enduring_torment_buff : public SpellScript
{
bool Load() override
{
return GetCaster()->IsPlayer();
}
template <ChrSpecialization Spec>
void PreventEffect(WorldObject*& target) const
{
if (GetCaster()->ToPlayer()->GetPrimarySpecialization() != Spec)
target = nullptr;
}
void Register() override
{
OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_dh_enduring_torment_buff::PreventEffect<ChrSpecialization::DemonHunterHavoc>, EFFECT_0, TARGET_UNIT_CASTER);
OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_dh_enduring_torment_buff::PreventEffect<ChrSpecialization::DemonHunterHavoc>, EFFECT_1, TARGET_UNIT_CASTER);
OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_dh_enduring_torment_buff::PreventEffect<ChrSpecialization::DemonHunterDevourer>, EFFECT_2, TARGET_UNIT_CASTER);
OnObjectTargetSelect += SpellObjectTargetSelectFn(spell_dh_enduring_torment_buff::PreventEffect<ChrSpecialization::DemonHunterDevourer>, EFFECT_3, TARGET_UNIT_CASTER);
}
};
// 307046 - Elysian Decree (Kyrian)
// 389860 - Sigil of Spite
class spell_dh_elysian_decree : public SpellScript
@@ -2404,6 +2463,8 @@ void AddSC_demon_hunter_spell_scripts()
RegisterSpellScript(spell_dh_demon_spikes);
RegisterSpellScriptWithArgs(spell_dh_elysian_decree, "spell_dh_elysian_decree", SPELL_DH_ELYSIAN_DECREE);
RegisterAreaTriggerAI(at_dh_elysian_decree);
RegisterSpellScript(spell_dh_enduring_torment);
RegisterSpellScript(spell_dh_enduring_torment_buff);
RegisterSpellScript(spell_dh_essence_break);
RegisterSpellScript(spell_dh_eye_beam);
RegisterSpellScript(spell_dh_feast_of_souls);