diff options
-rw-r--r-- | sql/updates/world/master/2025_06_15_03_world.sql | 4 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_warrior.cpp | 61 |
2 files changed, 65 insertions, 0 deletions
diff --git a/sql/updates/world/master/2025_06_15_03_world.sql b/sql/updates/world/master/2025_06_15_03_world.sql new file mode 100644 index 00000000000..1e9f98f54da --- /dev/null +++ b/sql/updates/world/master/2025_06_15_03_world.sql @@ -0,0 +1,4 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_warr_frenzy', 'spell_warr_frenzy_rampage'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(335082, 'spell_warr_frenzy'), +(184367, 'spell_warr_frenzy_rampage'); diff --git a/src/server/scripts/Spells/spell_warrior.cpp b/src/server/scripts/Spells/spell_warrior.cpp index 7e91e4381e3..82292c68c84 100644 --- a/src/server/scripts/Spells/spell_warrior.cpp +++ b/src/server/scripts/Spells/spell_warrior.cpp @@ -46,6 +46,8 @@ enum WarriorSpells SPELL_WARRIOR_EXECUTE = 20647, SPELL_WARRIOR_ENRAGE = 184362, SPELL_WARRIOR_FRENZIED_ENRAGE = 383848, + SPELL_WARRIOR_FRENZY_TALENT = 335077, + SPELL_WARRIOR_FRENZY_BUFF = 335082, SPELL_WARRIOR_FUELED_BY_VIOLENCE_HEAL = 383104, SPELL_WARRIOR_GLYPH_OF_THE_BLAZING_TRAIL = 123779, SPELL_WARRIOR_GLYPH_OF_HEROIC_LEAP = 159708, @@ -432,6 +434,63 @@ class spell_warr_frenzied_enrage : public SpellScript } }; +// 335082 - frenzy +class spell_warr_frenzy : public AuraScript +{ +public: + void SetTargetGUID(ObjectGuid const& guid) { _targetGUID = guid; } + ObjectGuid const& GetTargetGUID() const { return _targetGUID; } + +private: + void Register() override { } + + ObjectGuid _targetGUID; +}; + +// 335077 - Frenzy (attached to 184367 - Rampage) +class spell_warr_frenzy_rampage : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_WARRIOR_FRENZY_BUFF, SPELL_WARRIOR_FRENZY_TALENT }); + } + + bool Load() override + { + return GetCaster()->HasAura(SPELL_WARRIOR_FRENZY_TALENT); + } + + void HandleAfterCast(SpellEffIndex /*effIndex*/) const + { + Unit* caster = GetCaster(); + Unit* hitUnit = GetHitUnit(); + + if (hitUnit != GetExplTargetUnit()) + return; + + caster->CastSpell(nullptr, SPELL_WARRIOR_FRENZY_BUFF, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); + + if (Aura* frenzyAura = caster->GetAura(SPELL_WARRIOR_FRENZY_BUFF)) + { + if (spell_warr_frenzy* script = frenzyAura->GetScript<spell_warr_frenzy>()) + { + if (!script->GetTargetGUID().IsEmpty() && script->GetTargetGUID() != hitUnit->GetGUID()) + frenzyAura->SetStackAmount(1); + + script->SetTargetGUID(hitUnit->GetGUID()); + } + } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_warr_frenzy_rampage::HandleAfterCast, EFFECT_0, SPELL_EFFECT_DUMMY); + } +}; + // 440277 - Powerful Enrage (attached to 184362 - Enrage) class spell_warr_powerful_enrage : public SpellScript { @@ -1105,6 +1164,8 @@ void AddSC_warrior_spell_scripts() RegisterSpellScript(spell_warr_enrage_proc); RegisterSpellScript(spell_warr_execute_damage); RegisterSpellScript(spell_warr_frenzied_enrage); + RegisterSpellScript(spell_warr_frenzy); + RegisterSpellScript(spell_warr_frenzy_rampage); RegisterSpellScript(spell_warr_fueled_by_violence); RegisterSpellScript(spell_warr_heroic_leap); RegisterSpellScript(spell_warr_heroic_leap_jump); |