From 4eadd7f69a22865d3068dae432a19b662ed1a2de Mon Sep 17 00:00:00 2001 From: Jeremy Date: Sat, 28 Feb 2026 18:52:27 +0100 Subject: [PATCH] Scripts/Spells: Implement Meat Cleaver (Fury Warrior Talent) (#31671) --- .../world/master/2026_02_28_01_world.sql | 8 +++ src/server/scripts/Spells/spell_warrior.cpp | 61 +++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 sql/updates/world/master/2026_02_28_01_world.sql diff --git a/sql/updates/world/master/2026_02_28_01_world.sql b/sql/updates/world/master/2026_02_28_01_world.sql new file mode 100644 index 0000000000..3a7d386c10 --- /dev/null +++ b/sql/updates/world/master/2026_02_28_01_world.sql @@ -0,0 +1,8 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_warr_meat_cleaver_damage_bonus', 'spell_warr_meat_cleaver_damage_bonus_thunder_clap'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(199667, 'spell_warr_meat_cleaver_damage_bonus'), +(44949, 'spell_warr_meat_cleaver_damage_bonus'), +(199852, 'spell_warr_meat_cleaver_damage_bonus'), +(199851, 'spell_warr_meat_cleaver_damage_bonus'), +(6343, 'spell_warr_meat_cleaver_damage_bonus_thunder_clap'), +(435222, 'spell_warr_meat_cleaver_damage_bonus_thunder_clap'); diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index e771c7632a..fae5623d1f 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -49,6 +49,7 @@ enum WarriorSpells SPELL_WARRIOR_CHARGE_DROP_FIRE_PERIODIC = 126661, SPELL_WARRIOR_CHARGE_EFFECT = 198337, SPELL_WARRIOR_CHARGE_ROOT_EFFECT = 105771, + SPELL_WARRIOR_CRASHING_THUNDER_TALENT = 436707, SPELL_WARRIOR_COLD_STEEL_HOT_BLOOD_TALENT = 383959, SPELL_WARRIOR_COLOSSUS_SMASH = 167105, SPELL_WARRIOR_COLOSSUS_SMASH_AURA = 208086, @@ -83,6 +84,7 @@ enum WarriorSpells SPELL_WARRIOR_IMPENDING_VICTORY = 202168, SPELL_WARRIOR_IMPENDING_VICTORY_HEAL = 202166, SPELL_WARRIOR_IMPROVED_HEROIC_LEAP = 157449, + SPELL_WARRIOR_MEAT_CLEAVER_TALENT = 280392, SPELL_WARRIOR_MORTAL_STRIKE = 12294, SPELL_WARRIOR_MORTAL_WOUNDS = 115804, SPELL_WARRIOR_OVERPOWER = 7384, @@ -1314,6 +1316,63 @@ class spell_warr_item_t10_prot_4p_bonus : public AuraScript } }; +// 280392 - Meat Cleaver (attached to 199667 - Whirlwind, 44949 - Whirlwind Off-Hand, 199852 - Whirlwind, 199851 - Whirlwind Off-Hand) +class spell_warr_meat_cleaver_damage_bonus : public SpellScript +{ +protected: + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellEffect({{ SPELL_WARRIOR_MEAT_CLEAVER_TALENT, EFFECT_1 } }); + } + + bool Load() override + { + return GetCaster()->HasAura(SPELL_WARRIOR_MEAT_CLEAVER_TALENT); + } + + void HandleDamageBonus(SpellEffectInfo const& spellEffectInfo, Unit const* /*victim*/, int32& /*damage*/, int32& /*flatMod*/, float& pctMod) const + { + Unit const* caster = GetCaster(); + Aura const* meatCleaver = caster->GetAura(SPELL_WARRIOR_MEAT_CLEAVER_TALENT); + if (!meatCleaver) + return; + + AuraEffect const* minTargetCount = meatCleaver->GetEffect(EFFECT_1); + if (!minTargetCount) + return; + + int64 const targetCount = GetUnitTargetCountForEffect(spellEffectInfo.EffectIndex); + + if (targetCount < minTargetCount->GetAmount()) + return; + + if (AuraEffect const* aurEff = meatCleaver->GetEffect(EFFECT_0)) + AddPct(pctMod, aurEff->GetAmount()); + } + + void Register() override + { + CalcDamage += SpellCalcDamageFn(spell_warr_meat_cleaver_damage_bonus::HandleDamageBonus); + } +}; + +// 280392 - Meat Cleaver (attached to 6343 - Thunder Clap) +// 280392 - Meat Cleaver (attached to 435222 - Thunder Blast) +class spell_warr_meat_cleaver_damage_bonus_thunder_clap : public spell_warr_meat_cleaver_damage_bonus +{ + bool Validate(SpellInfo const* spellInfo) override + { + return spell_warr_meat_cleaver_damage_bonus::Validate(spellInfo) + && ValidateSpellInfo({ SPELL_WARRIOR_CRASHING_THUNDER_TALENT }); + } + + bool Load() override + { + return spell_warr_meat_cleaver_damage_bonus::Load() + && GetCaster()->HasAura(SPELL_WARRIOR_CRASHING_THUNDER_TALENT); + } +}; + // 12294 - Mortal Strike class spell_warr_mortal_strike : public SpellScript { @@ -2011,6 +2070,8 @@ void AddSC_warrior_spell_scripts() RegisterSpellScript(spell_warr_intimidating_shout_menace_knock_back); RegisterSpellScript(spell_warr_invigorating_fury); RegisterSpellScript(spell_warr_item_t10_prot_4p_bonus); + RegisterSpellScript(spell_warr_meat_cleaver_damage_bonus); + RegisterSpellScript(spell_warr_meat_cleaver_damage_bonus_thunder_clap); RegisterSpellScript(spell_warr_mortal_strike); RegisterSpellScript(spell_warr_overpowering_finish); RegisterSpellScript(spell_warr_pain_and_gain_heal);