From 6535a75121008454c7d425002c8a4e4f42bef100 Mon Sep 17 00:00:00 2001 From: Jelle Meeus Date: Mon, 17 Mar 2025 11:04:31 +0100 Subject: [PATCH] fix(Scripts/Spells): add warrior heroic strike daze bonus damage (#21650) --- .../rev_1741106880644889078.sql | 7 ++ src/server/scripts/Spells/spell_warrior.cpp | 69 +++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1741106880644889078.sql diff --git a/data/sql/updates/pending_db_world/rev_1741106880644889078.sql b/data/sql/updates/pending_db_world/rev_1741106880644889078.sql new file mode 100644 index 000000000..b82d7d7c9 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1741106880644889078.sql @@ -0,0 +1,7 @@ +-- +DELETE FROM `spell_script_names` WHERE `spell_id` IN (29707, 30324, 47449, 47450) AND `ScriptName` = 'spell_warr_heroic_strike'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(29707, 'spell_warr_heroic_strike'), +(30324, 'spell_warr_heroic_strike'), +(47449, 'spell_warr_heroic_strike'), +(47450, 'spell_warr_heroic_strike'); diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index 44b35a35c..3298acc92 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -899,6 +899,74 @@ class spell_warr_retaliation : public AuraScript } }; +// 29707 - Heroic Strike (Rank 10) +// 30324 - Heroic Strike (Rank 11) +// 47449 - Heroic Strike (Rank 12) +// 47450 - Heroic Strike (Rank 13) +enum DazeSpells +{ + ICON_GENERIC_DAZE = 15, + SPELL_GENERIC_AFTERMATH = 18118, +}; + +class spell_warr_heroic_strike : public SpellScript +{ + PrepareSpellScript(spell_warr_heroic_strike); + + void HandleOnHit() + { + Unit* target = GetHitUnit(); + if (!target) + return; + std::list AuraEffectList = target->GetAuraEffectsByType(SPELL_AURA_MOD_DECREASE_SPEED); + bool bonusDamage = false; + for (AuraEffect* eff : AuraEffectList) + { + const SpellInfo* spellInfo = eff->GetSpellInfo(); + if (!spellInfo) + continue; + + // Warrior Spells: Piercing Howl or Dazed (29703) + if (spellInfo->SpellFamilyName == SPELLFAMILY_WARRIOR && (spellInfo->SpellFamilyFlags[1] & (0x20 | 0x200000))) + { + bonusDamage = true; + break; + } + + // Generic Daze: icon 15 with mechanic daze or snare + if ((spellInfo->SpellIconID == ICON_GENERIC_DAZE) + && ((spellInfo->Mechanic == MECHANIC_DAZE || spellInfo->HasEffectMechanic(MECHANIC_DAZE)) + || (spellInfo->Mechanic == MECHANIC_SNARE || spellInfo->HasEffectMechanic(MECHANIC_SNARE)) + ) + ) + { + bonusDamage = true; + break; + } + + if ((spellInfo->Id == SPELL_GENERIC_AFTERMATH) + || (spellInfo->SpellFamilyName == SPELLFAMILY_MAGE && (spellInfo->SpellFamilyFlags[1] & 0x40)) // Blast Wave + || (spellInfo->SpellFamilyName == SPELLFAMILY_PALADIN && (spellInfo->SpellFamilyFlags[2] & 0x4000)) // Avenger's Shield + ) + { + bonusDamage = true; + break; + } + } + if (bonusDamage) + { + int32 damage = GetHitDamage(); + AddPct(damage, 35); // "Causes ${0.35*$m1} additional damage against Dazed targets." + SetHitDamage(damage); + } + } + + void Register() override + { + OnHit += SpellHitFn(spell_warr_heroic_strike::HandleOnHit); + } +}; + void AddSC_warrior_spell_scripts() { RegisterSpellScript(spell_warr_mocking_blow); @@ -925,4 +993,5 @@ void AddSC_warrior_spell_scripts() RegisterSpellScript(spell_warr_vigilance); RegisterSpellScript(spell_warr_vigilance_trigger); RegisterSpellScript(spell_warr_t3_prot_8p_bonus); + RegisterSpellScript(spell_warr_heroic_strike); }