diff options
author | Jeremy <Golrag@users.noreply.github.com> | 2025-06-15 10:21:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-06-15 10:21:17 +0200 |
commit | fd043d611bdcb3288fe30a968bfa24b584155ec9 (patch) | |
tree | c3c59fd6d403ce6acbd48fe246c3c3b914c88c1e | |
parent | 65276ba69a8058ca3e077ac23f86baab005cb53e (diff) |
Scripts/Spells: Implement Frenzy fury warrior talent (#31075)
-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); |