diff --git a/sql/updates/world/master/2026_02_23_01_world.sql b/sql/updates/world/master/2026_02_23_01_world.sql new file mode 100644 index 0000000000..d1e60327d0 --- /dev/null +++ b/sql/updates/world/master/2026_02_23_01_world.sql @@ -0,0 +1,4 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_dh_voidblade', 'spell_dh_voidblade_charge'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(1245412, 'spell_dh_voidblade'), +(1241285, 'spell_dh_voidblade_charge'); diff --git a/src/server/scripts/Spells/spell_dh.cpp b/src/server/scripts/Spells/spell_dh.cpp index 63f88e22a0..7e4b92a9b5 100644 --- a/src/server/scripts/Spells/spell_dh.cpp +++ b/src/server/scripts/Spells/spell_dh.cpp @@ -235,6 +235,8 @@ enum DemonHunterSpells SPELL_DH_VENGEFUL_BONDS = 320635, SPELL_DH_VENGEFUL_RETREAT = 198813, SPELL_DH_VENGEFUL_RETREAT_TRIGGER = 198793, + SPELL_DH_VOIDBLADE_CHARGE = 1241285, + SPELL_DH_VOIDBLADE_DAMAGE = 1245414, SPELL_DH_WAVE_OF_DEBILITATION_TALENT = 452403, SPELL_DH_WAVE_OF_DEBILITATION_SLOW = 453263, }; @@ -2383,6 +2385,51 @@ class spell_dh_unhindered_assault : public AuraScript } }; +// 1245412 - Voidblade +class spell_dh_voidblade : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DH_VOIDBLADE_CHARGE, SPELL_DH_VOIDBLADE_DAMAGE }); + } + + void HandleCharge(SpellEffIndex /*effIndex*/) const + { + uint32 spellToCast = GetCaster()->IsWithinMeleeRange(GetHitUnit()) ? SPELL_DH_VOIDBLADE_DAMAGE : SPELL_DH_VOIDBLADE_CHARGE; + GetCaster()->CastSpell(GetHitUnit(), spellToCast, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_dh_voidblade::HandleCharge, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 1241285 - Voidblade Charge +class spell_dh_voidblade_charge : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DH_VOIDBLADE_DAMAGE }); + } + + void HandleDamage(SpellEffIndex /*effIndex*/) const + { + GetCaster()->CastSpell(GetHitUnit(), SPELL_DH_VOIDBLADE_DAMAGE, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_dh_voidblade_charge::HandleDamage, EFFECT_0, SPELL_EFFECT_CHARGE); + } +}; + // 198813 - Vengeful Retreat class spell_dh_vengeful_retreat_damage : public SpellScript { @@ -2536,6 +2583,8 @@ void AddSC_demon_hunter_spell_scripts() RegisterSpellScript(spell_dh_unhindered_assault); RegisterSpellScript(spell_dh_vengeful_retreat_damage); RegisterSpellScript(spell_dh_violent_transformation); + RegisterSpellScript(spell_dh_voidblade); + RegisterSpellScript(spell_dh_voidblade_charge); RegisterSpellScript(spell_dh_wave_of_debilitation); RegisterAreaTriggerAI(areatrigger_dh_darkness);