From 88268721c8648c3da8675df18c424217e17b6701 Mon Sep 17 00:00:00 2001 From: Mirshod Allaberganov Date: Mon, 30 Mar 2026 02:40:05 +0500 Subject: [PATCH] Scripts/Spells: Implement Feral Lunge (#31746) --- .../world/master/2026_03_29_00_world.sql | 8 +++ src/server/scripts/Spells/spell_shaman.cpp | 50 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 sql/updates/world/master/2026_03_29_00_world.sql diff --git a/sql/updates/world/master/2026_03_29_00_world.sql b/sql/updates/world/master/2026_03_29_00_world.sql new file mode 100644 index 0000000000..c6f47a8d8c --- /dev/null +++ b/sql/updates/world/master/2026_03_29_00_world.sql @@ -0,0 +1,8 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` IN (196884, 215802); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(196884, 'spell_sha_feral_lunge'), +(215802, 'spell_sha_feral_lunge_damage'); + +DELETE FROM `jump_charge_params` WHERE `id` = 1211; +INSERT INTO `jump_charge_params` (`id`, `speed`, `treatSpeedAsMoveTimeSeconds`, `unlimitedSpeed`, `minHeight`, `maxHeight`, `spellVisualId`, `progressCurveId`, `parabolicCurveId`, `triggerSpellId`) VALUES +(1211, 42, 0, 0, 2, NULL, NULL, NULL, 79789, 215802); diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index f6cc4ee356..cd6098d0af 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -77,6 +77,8 @@ enum ShamanSpells SPELL_SHAMAN_ELEMENTAL_WEAPONS_BUFF = 408390, SPELL_SHAMAN_ENERGY_SURGE = 40465, SPELL_SHAMAN_ENHANCED_ELEMENTS = 77223, + SPELL_SHAMAN_FERAL_LUNGE = 196884, + SPELL_SHAMAN_FERAL_LUNGE_DAMAGE = 215802, SPELL_SHAMAN_FIRE_NOVA_DAMAGE = 333977, SPELL_SHAMAN_FIRE_NOVA_ENABLER = 466622, SPELL_SHAMAN_FLAME_SHOCK = 188389, @@ -1140,6 +1142,52 @@ class spell_sha_elemental_weapons : public AuraScript } }; +// 196884 - Feral Lunge +class spell_sha_feral_lunge : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SHAMAN_GHOST_WOLF }); + } + + bool Load() override + { + return !GetCaster()->HasAura(SPELL_SHAMAN_GHOST_WOLF); + } + + void OnPrecast() override + { + Unit* caster = GetCaster(); + caster->CastSpell(caster, SPELL_SHAMAN_GHOST_WOLF, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_GCD | TRIGGERED_IGNORE_POWER_COST | TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .TriggeringSpell = GetSpell() + }); + } + + void Register() override + { + } +}; + +// 215802 - Feral Lunge Damage +class spell_sha_feral_lunge_damage : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SHAMAN_GHOST_WOLF }); + } + + void HandleHit(SpellEffIndex /*effIndex*/) const + { + GetCaster()->RemoveAurasDueToSpell(SPELL_SHAMAN_GHOST_WOLF); + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_sha_feral_lunge_damage::HandleHit, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } +}; + struct FireNovaTargetCheck { float MaxSearchRange = 40.0f; @@ -3459,6 +3507,8 @@ void AddSC_shaman_spell_scripts() RegisterSpellScript(spell_sha_earthquake_tick); RegisterSpellScript(spell_sha_elemental_blast); RegisterSpellScript(spell_sha_elemental_weapons); + RegisterSpellScript(spell_sha_feral_lunge); + RegisterSpellScript(spell_sha_feral_lunge_damage); RegisterSpellScript(spell_sha_fire_nova); RegisterSpellScript(spell_sha_flame_shock_fire_nova_enabler); RegisterSpellScript(spell_sha_flametongue_weapon);