From 59720664b31dfe199895b47dbde46193844231e6 Mon Sep 17 00:00:00 2001 From: Jeremy Date: Mon, 2 Mar 2026 20:58:34 +0100 Subject: [PATCH] Scripts/Spells: Implement Rampaging Ruin (Fury Warrior Talent) (#31681) --- .../world/master/2026_03_02_01_world.sql | 3 ++ src/server/game/Spells/SpellMgr.cpp | 6 +++ src/server/scripts/Spells/spell_warrior.cpp | 38 +++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 sql/updates/world/master/2026_03_02_01_world.sql diff --git a/sql/updates/world/master/2026_03_02_01_world.sql b/sql/updates/world/master/2026_03_02_01_world.sql new file mode 100644 index 0000000000..05d0cb4361 --- /dev/null +++ b/sql/updates/world/master/2026_03_02_01_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_warr_rampaging_ruin'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(184367, 'spell_warr_rampaging_ruin'); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 81b0190e5d..3cace4b65a 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -5490,6 +5490,12 @@ void SpellMgr::LoadSpellInfoTargetCaps() spellInfo->_LoadSqrtTargetLimit(5, 0, {}, EFFECT_1, {}, {}); }); + // Rampaging Ruin + ApplySpellFix({ 1265579, 1265580, 1265581, 1265582 }, [](SpellInfo* spellInfo) + { + spellInfo->_LoadSqrtTargetLimit(5, 0, 1265357, EFFECT_0, {}, {}); + }); + TC_LOG_INFO("server.loading", ">> Loaded SpellInfo target caps in {} ms", GetMSTimeDiffToNow(oldMSTime)); } diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index b40a1a3d1a..0bd6222aa0 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -95,6 +95,7 @@ enum WarriorSpells SPELL_WARRIOR_OVERPOWER = 7384, SPELL_WARRIOR_OVERPOWERING_FINISH = 400205, SPELL_WARRIOR_POWERFUL_ENRAGE = 440277, + SPELL_WARRIOR_RAMPAGING_RUIN = 1265357, SPELL_WARRIOR_RALLYING_CRY = 97463, SPELL_WARRIOR_RAVAGER = 228920, SPELL_WARRIOR_RECKLESSNESS = 1719, @@ -1570,6 +1571,42 @@ class spell_warr_rallying_cry : public SpellScript } }; +// 1265357 - Rampaging Ruin (attached to 184367 - Rampage) +class spell_warr_rampaging_ruin : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_WARRIOR_RAMPAGING_RUIN, SPELL_WARRIOR_WHIRLWIND_CLEAVE_AURA }); + } + + void HandleSingleTarget(SpellEffIndex effIndex) + { + Unit const* caster = GetCaster(); + if (caster->HasAura(SPELL_WARRIOR_RAMPAGING_RUIN) && caster->HasAura(SPELL_WARRIOR_WHIRLWIND_CLEAVE_AURA)) + PreventHitDefaultEffect(effIndex); + } + + void HandleCone(SpellEffIndex effIndex) + { + Unit const* caster = GetCaster(); + if (!caster->HasAura(SPELL_WARRIOR_RAMPAGING_RUIN) || !caster->HasAura(SPELL_WARRIOR_WHIRLWIND_CLEAVE_AURA)) + PreventHitDefaultEffect(effIndex); + } + + void Register() override + { + OnEffectLaunchTarget += SpellEffectFn(spell_warr_rampaging_ruin::HandleSingleTarget, EFFECT_1, SPELL_EFFECT_TRIGGER_SPELL); + OnEffectLaunchTarget += SpellEffectFn(spell_warr_rampaging_ruin::HandleSingleTarget, EFFECT_2, SPELL_EFFECT_TRIGGER_SPELL); + OnEffectLaunchTarget += SpellEffectFn(spell_warr_rampaging_ruin::HandleSingleTarget, EFFECT_3, SPELL_EFFECT_TRIGGER_SPELL); + OnEffectLaunchTarget += SpellEffectFn(spell_warr_rampaging_ruin::HandleSingleTarget, EFFECT_4, SPELL_EFFECT_TRIGGER_SPELL); + + OnEffectLaunch += SpellEffectFn(spell_warr_rampaging_ruin::HandleCone, EFFECT_5, SPELL_EFFECT_TRIGGER_SPELL); + OnEffectLaunch += SpellEffectFn(spell_warr_rampaging_ruin::HandleCone, EFFECT_6, SPELL_EFFECT_TRIGGER_SPELL); + OnEffectLaunch += SpellEffectFn(spell_warr_rampaging_ruin::HandleCone, EFFECT_7, SPELL_EFFECT_TRIGGER_SPELL); + OnEffectLaunch += SpellEffectFn(spell_warr_rampaging_ruin::HandleCone, EFFECT_8, SPELL_EFFECT_TRIGGER_SPELL); + } +}; + // 275339 - (attached to 46968 - Shockwave) class spell_warr_rumbling_earth : public SpellScript { @@ -2184,6 +2221,7 @@ void AddSC_warrior_spell_scripts() RegisterSpellScript(spell_warr_powerful_enrage); RegisterSpellScript(spell_warr_raging_blow_cooldown_reset); RegisterSpellScript(spell_warr_rallying_cry); + RegisterSpellScript(spell_warr_rampaging_ruin); RegisterSpellScript(spell_warr_rumbling_earth); RegisterSpellScript(spell_warr_shield_block); RegisterSpellScript(spell_warr_shield_charge);