diff options
| -rw-r--r-- | sql/updates/world/master/2025_04_01_00_world.sql | 10 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_shaman.cpp | 55 |
2 files changed, 59 insertions, 6 deletions
diff --git a/sql/updates/world/master/2025_04_01_00_world.sql b/sql/updates/world/master/2025_04_01_00_world.sql new file mode 100644 index 00000000000..7dd5a41670a --- /dev/null +++ b/sql/updates/world/master/2025_04_01_00_world.sql @@ -0,0 +1,10 @@ +UPDATE `spell_script_names` SET `ScriptName`='spell_sha_chain_lightning_energize' WHERE `ScriptName`='spell_sha_chain_lightning'; + +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_sha_chain_lightning_crash_lightning'; +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(188443,'spell_sha_chain_lightning_crash_lightning'); + +DELETE FROM `spell_proc` WHERE `SpellId` IN (187878,333964); +INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES +(187878,0x00,11,0x00000000,0x00000010,0x00000804,0x00000000,0x0,0x0,0x5,0x1,0x0,0x0,0x0,0,0,0,0), -- Crash Lightning +(333964,0x00,11,0x00000000,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x0,0x8,0x0,0,0,0,1); -- Crash Lightning diff --git a/src/server/scripts/Spells/spell_shaman.cpp b/src/server/scripts/Spells/spell_shaman.cpp index 0951db1d2c6..f5c585edebe 100644 --- a/src/server/scripts/Spells/spell_shaman.cpp +++ b/src/server/scripts/Spells/spell_shaman.cpp @@ -52,7 +52,9 @@ enum ShamanSpells SPELL_SHAMAN_CHAIN_LIGHTNING_OVERLOAD_ENERGIZE = 218558, SPELL_SHAMAN_CHAINED_HEAL = 70809, SPELL_SHAMAN_CONVERGING_STORMS = 384363, + SPELL_SHAMAN_CRASH_LIGHTNING = 187874, SPELL_SHAMAN_CRASH_LIGHTNING_CLEAVE = 187878, + SPELL_SHAMAN_CRASH_LIGHTNING_DAMAGE_BUFF = 333964, SPELL_SHAMAN_DOOM_WINDS_DAMAGE = 469270, SPELL_SHAMAN_DOOM_WINDS_LEGENDARY_COOLDOWN = 335904, SPELL_SHAMAN_EARTHQUAKE = 61882, @@ -417,15 +419,55 @@ class spell_sha_ashen_catalyst : public AuraScript }; // 188443 - Chain Lightning -class spell_sha_chain_lightning : public SpellScript +class spell_sha_chain_lightning_crash_lightning : public SpellScript { bool Validate(SpellInfo const* /*spellInfo*/) override { - return ValidateSpellInfo({ SPELL_SHAMAN_CHAIN_LIGHTNING_ENERGIZE, SPELL_SHAMAN_MAELSTROM_CONTROLLER }) + return ValidateSpellInfo({ SPELL_SHAMAN_CRASH_LIGHTNING, SPELL_SHAMAN_CRASH_LIGHTNING_DAMAGE_BUFF }); + } + + bool Load() override + { + return GetCaster()->HasSpell(SPELL_SHAMAN_CRASH_LIGHTNING); + } + + void HandleCooldownReduction(SpellEffIndex /*effIndex*/) const + { + GetCaster()->GetSpellHistory()->ModifyCooldown(SPELL_SHAMAN_CRASH_LIGHTNING, Milliseconds(-GetEffectValue()) * GetUnitTargetCountForEffect(EFFECT_0)); + } + + void HandleDamageBuff(SpellEffIndex effIndex) const + { + int64 targetsHit = GetUnitTargetCountForEffect(effIndex); + if (targetsHit > 1) + GetCaster()->CastSpell(GetCaster(), SPELL_SHAMAN_CRASH_LIGHTNING_DAMAGE_BUFF, CastSpellExtraArgsInit{ + .TriggerFlags = TRIGGERED_IGNORE_CAST_IN_PROGRESS | TRIGGERED_DONT_REPORT_CAST_ERROR, + .SpellValueOverrides = { { SPELLVALUE_AURA_STACK, int32(targetsHit) } } + }); + } + + void Register() override + { + OnEffectLaunch += SpellEffectFn(spell_sha_chain_lightning_crash_lightning::HandleCooldownReduction, EFFECT_2, SPELL_EFFECT_DUMMY); + OnEffectLaunch += SpellEffectFn(spell_sha_chain_lightning_crash_lightning::HandleDamageBuff, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + } +}; + +// 188443 - Chain Lightning +class spell_sha_chain_lightning_energize : public SpellScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_SHAMAN_CHAIN_LIGHTNING_ENERGIZE }) && ValidateSpellEffect({ { SPELL_SHAMAN_MAELSTROM_CONTROLLER, EFFECT_4 } }); } - void HandleScript(SpellEffIndex /*effIndex*/) + bool Load() override + { + return GetCaster()->HasAuraEffect(SPELL_SHAMAN_MAELSTROM_CONTROLLER, EFFECT_4); + } + + void HandleScript(SpellEffIndex /*effIndex*/) const { if (AuraEffect const* energizeAmount = GetCaster()->GetAuraEffect(SPELL_SHAMAN_MAELSTROM_CONTROLLER, EFFECT_4)) GetCaster()->CastSpell(GetCaster(), SPELL_SHAMAN_CHAIN_LIGHTNING_ENERGIZE, CastSpellExtraArgs(energizeAmount) @@ -434,7 +476,7 @@ class spell_sha_chain_lightning : public SpellScript void Register() override { - OnEffectLaunch += SpellEffectFn(spell_sha_chain_lightning::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + OnEffectLaunch += SpellEffectFn(spell_sha_chain_lightning_energize::HandleScript, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); } }; @@ -447,7 +489,7 @@ class spell_sha_chain_lightning_overload : public SpellScript && ValidateSpellEffect({ { SPELL_SHAMAN_MAELSTROM_CONTROLLER, EFFECT_5 } }); } - void HandleScript(SpellEffIndex /*effIndex*/) + void HandleScript(SpellEffIndex /*effIndex*/) const { if (AuraEffect const* energizeAmount = GetCaster()->GetAuraEffect(SPELL_SHAMAN_MAELSTROM_CONTROLLER, EFFECT_5)) GetCaster()->CastSpell(GetCaster(), SPELL_SHAMAN_CHAIN_LIGHTNING_OVERLOAD_ENERGIZE, CastSpellExtraArgs(energizeAmount) @@ -3182,7 +3224,8 @@ void AddSC_shaman_spell_scripts() RegisterSpellScript(spell_sha_artifact_gathering_storms); RegisterSpellScript(spell_sha_ascendance_restoration); RegisterSpellScript(spell_sha_ashen_catalyst); - RegisterSpellScript(spell_sha_chain_lightning); + RegisterSpellScript(spell_sha_chain_lightning_crash_lightning); + RegisterSpellScript(spell_sha_chain_lightning_energize); RegisterSpellScript(spell_sha_chain_lightning_overload); RegisterSpellScript(spell_sha_converging_storms); RegisterSpellScriptWithArgs(spell_sha_delayed_stormstrike_mod_charge_drop_proc, "spell_sha_converging_storms_buff"); |
