From 1edb82d7db06e0e10f2b3d30e2302da84e38ec4a Mon Sep 17 00:00:00 2001 From: MoltenCrystal Date: Sat, 14 Feb 2026 15:59:10 +0100 Subject: [PATCH] Scripts/Spells: Implement Intervene (#31536) --- .../world/master/2026_02_14_00_world.sql | 8 +++ src/server/scripts/Spells/spell_warrior.cpp | 56 ++++++++++++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 sql/updates/world/master/2026_02_14_00_world.sql diff --git a/sql/updates/world/master/2026_02_14_00_world.sql b/sql/updates/world/master/2026_02_14_00_world.sql new file mode 100644 index 0000000000..b7dc3baefd --- /dev/null +++ b/sql/updates/world/master/2026_02_14_00_world.sql @@ -0,0 +1,8 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_warr_intervene','spell_warr_intervene_charge'); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(3411,'spell_warr_intervene'), +(316531,'spell_warr_intervene_charge'); + +DELETE FROM `spell_proc` WHERE `SpellId` IN (147833); +INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES +(147833,0x00,4,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0,0,0,0); -- Intervene diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index fbeab164e1..941feb4b99 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -68,6 +68,8 @@ enum WarriorSpells SPELL_WARRIOR_IGNORE_PAIN = 190456, SPELL_WARRIOR_IMPROVED_RAGING_BLOW = 383854, SPELL_WARRIOR_IMPROVED_WHIRLWIND = 12950, + SPELL_WARRIOR_INTERVENE_CHARGE = 316531, + SPELL_WARRIOR_INTERVENE_AURA = 147833, SPELL_WARRIOR_INTIMIDATING_SHOUT_MENACE_AOE = 316595, SPELL_WARRIOR_INVIGORATING_FURY = 385174, SPELL_WARRIOR_INVIGORATING_FURY_TALENT = 383468, @@ -112,7 +114,7 @@ enum WarriorSpells SPELL_WARRIOR_WARBREAKER = 262161, SPELL_WARRIOR_WHIRLWIND_CLEAVE_AURA = 85739, SPELL_WARRIOR_WHIRLWIND_ENERGIZE = 280715, - SPELL_WARRIOR_WRATH_AND_FURY = 392936 + SPELL_WARRIOR_WRATH_AND_FURY = 392936, }; enum WarriorMisc @@ -1025,6 +1027,56 @@ class spell_improved_whirlwind : public SpellScript } }; +// 3411 - Intervene +class spell_warr_intervene : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_WARRIOR_INTERVENE_CHARGE }); + } + + void HandleDummy(SpellEffIndex /*effIndex*/) const + { + Unit* caster = GetCaster(); + Unit* target = GetHitUnit(); + uint32 spellId = SPELL_WARRIOR_INTERVENE_CHARGE; + if (caster->IsWithinCombatRange(target, 3.0f)) + spellId = SPELL_WARRIOR_INTERVENE_AURA; + + caster->CastSpell(target, spellId, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_warr_intervene::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + +// 316531 - Intervene (charge) +class spell_warr_intervene_charge : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_WARRIOR_INTERVENE_AURA }); + } + + void HandleAura(SpellEffIndex /*effIndex*/) const + { + GetCaster()->CastSpell(GetHitUnit(), SPELL_WARRIOR_INTERVENE_AURA, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_FULL_MASK & ~TRIGGERED_CAST_DIRECTLY, + .TriggeringSpell = GetSpell() + }); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_warr_intervene_charge::HandleAura, EFFECT_0, SPELL_EFFECT_CHARGE); + } +}; + // 5246 - Intimidating Shout class spell_warr_intimidating_shout : public SpellScript { @@ -1763,6 +1815,8 @@ void AddSC_warrior_spell_scripts() RegisterSpellScript(spell_warr_heroic_leap_damage); RegisterSpellScript(spell_warr_impending_victory); RegisterSpellScript(spell_improved_whirlwind); + RegisterSpellScript(spell_warr_intervene); + RegisterSpellScript(spell_warr_intervene_charge); RegisterSpellScript(spell_warr_intimidating_shout); RegisterSpellScript(spell_warr_intimidating_shout_menace_knock_back); RegisterSpellScript(spell_warr_invigorating_fury);