diff --git a/sql/updates/world/master/2026_03_04_00_world.sql b/sql/updates/world/master/2026_03_04_00_world.sql new file mode 100644 index 0000000000..00eb0a60f9 --- /dev/null +++ b/sql/updates/world/master/2026_03_04_00_world.sql @@ -0,0 +1,37 @@ +DELETE FROM `spell_proc` WHERE `SpellId` IN (85739); +INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES +(85739,0x00,4,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x0,0x1,0x0,0x18,0x0,0,0,0,0); -- Whirlwind + +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_warr_improved_whirlwind_cleave'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(1464, 'spell_warr_improved_whirlwind_cleave'), -- Slam +(1715, 'spell_warr_improved_whirlwind_cleave'), -- Hamstring +(23881, 'spell_warr_improved_whirlwind_cleave'), -- Bloodthirst +(23922, 'spell_warr_improved_whirlwind_cleave'), -- Shield Slam +(34428, 'spell_warr_improved_whirlwind_cleave'), -- Victory Rush +(85384, 'spell_warr_improved_whirlwind_cleave'), -- Raging Blow +(96103, 'spell_warr_improved_whirlwind_cleave'), -- Raging Blow +(100130, 'spell_warr_improved_whirlwind_cleave'), -- Furious Slash +(163558, 'spell_warr_improved_whirlwind_cleave'), -- Execute Off-Hand +(184707, 'spell_warr_improved_whirlwind_cleave'), -- Rampage +(184709, 'spell_warr_improved_whirlwind_cleave'), -- Rampage +(201363, 'spell_warr_improved_whirlwind_cleave'), -- Rampage +(201364, 'spell_warr_improved_whirlwind_cleave'), -- Rampage +(202168, 'spell_warr_improved_whirlwind_cleave'), -- Impending Victory +(218617, 'spell_warr_improved_whirlwind_cleave'), -- Rampage +(260798, 'spell_warr_improved_whirlwind_cleave'), -- Execute +(280772, 'spell_warr_improved_whirlwind_cleave'), -- Siegebreaker +(280849, 'spell_warr_improved_whirlwind_cleave'), -- Execute +(317483, 'spell_warr_improved_whirlwind_cleave'), -- Condemn (Venthyr) +(317488, 'spell_warr_improved_whirlwind_cleave'), -- Condemn (Venthyr) +(317489, 'spell_warr_improved_whirlwind_cleave'), -- Condemn Off-Hand (Venthyr) +(335096, 'spell_warr_improved_whirlwind_cleave'), -- Bloodbath +(335098, 'spell_warr_improved_whirlwind_cleave'), -- Crushing Blow +(335100, 'spell_warr_improved_whirlwind_cleave'), -- Crushing Blow +(394062, 'spell_warr_improved_whirlwind_cleave'), -- Rend +(394063, 'spell_warr_improved_whirlwind_cleave'), -- Rend +(396718, 'spell_warr_improved_whirlwind_cleave'), -- Onslaught +(463815, 'spell_warr_improved_whirlwind_cleave'), -- Arms Execute FX Test +(463816, 'spell_warr_improved_whirlwind_cleave'), -- Fury Execute FX Test +(463817, 'spell_warr_improved_whirlwind_cleave'), -- Fury Execute Off-Hand FX Test +(1269383, 'spell_warr_improved_whirlwind_cleave'); -- Heroic Strike diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index 0bd6222aa0..4d094401b8 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -1163,6 +1163,70 @@ class spell_warr_improved_whirlwind : public SpellScript } }; +/** + * 85739 - Whirlwind Cleave aura, attached to the following spells: + * + * 1464 - Slam + * 1715 - Hamstring + * 23881 - Bloodthirst + * 23922 - Shield Slam + * 34428 - Victory Rush + * 85384 - Raging Blow + * 96103 - Raging Blow + * 100130 - Furious Slash + * 163558 - Execute Off-Hand + * 184707 - Rampage + * 184709 - Rampage + * 201363 - Rampage + * 201364 - Rampage + * 202168 - Impending Victory + * 218617 - Rampage + * 260798 - Execute + * 280772 - Siegebreaker + * 280849 - Execute + * 317483 - Condemn (Venthyr) + * 317488 - Condemn (Venthyr) + * 317489 - Condemn Off-Hand (Venthyr) + * 335096 - Bloodbath + * 335098 - Crushing Blow + * 335100 - Crushing Blow + * 394062 - Rend + * 394063 - Rend + * 396718 - Onslaught + * 463815 - Arms Execute FX Test + * 463816 - Fury Execute FX Test + * 463817 - Fury Execute Off-Hand FX Test + * 1269383 - Heroic Strike + */ +class spell_warr_improved_whirlwind_cleave : public SpellScript +{ + bool Validate(SpellInfo const* spellInfo) override + { + return ValidateSpellEffect({ { SPELL_WARRIOR_WHIRLWIND_CLEAVE_AURA, EFFECT_1 } }) + && spellInfo->IsAffected(SPELLFAMILY_WARRIOR, sSpellMgr->AssertSpellInfo(SPELL_WARRIOR_WHIRLWIND_CLEAVE_AURA, DIFFICULTY_NONE)->GetEffect(EFFECT_0).SpellClassMask); + } + + bool Load() override + { + return GetCaster()->HasAura(SPELL_WARRIOR_WHIRLWIND_CLEAVE_AURA); + } + + void CalculateDamage(SpellEffectInfo const& spellEffectInfo, Unit const* victim, int32& /*damage*/, int32& /*flatMod*/, float& pctMod) const + { + int32 const targetIndex = GetUnitTargetIndexForEffect(victim->GetGUID(), spellEffectInfo.EffectIndex); + if (targetIndex == 0) + return; // nothing to do, it's the first target + + if (AuraEffect const* damageEffect = GetCaster()->GetAuraEffect(SPELL_WARRIOR_WHIRLWIND_CLEAVE_AURA, EFFECT_1)) + ApplyPct(pctMod, damageEffect->GetAmount()); + } + + void Register() override + { + CalcDamage += SpellCalcDamageFn(spell_warr_improved_whirlwind_cleave::CalculateDamage); + } +}; + // 3411 - Intervene class spell_warr_intervene : public SpellScript { @@ -2204,6 +2268,7 @@ void AddSC_warrior_spell_scripts() RegisterSpellScript(spell_warr_heroic_leap_damage); RegisterSpellScript(spell_warr_impending_victory); RegisterSpellScript(spell_warr_improved_whirlwind); + RegisterSpellScript(spell_warr_improved_whirlwind_cleave); RegisterSpellScript(spell_warr_intervene); RegisterSpellScript(spell_warr_intervene_charge); RegisterSpellScript(spell_warr_intimidating_shout);