diff options
-rw-r--r-- | sql/updates/world/master/2024_09_06_03_world.sql | 7 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_warlock.cpp | 27 |
2 files changed, 34 insertions, 0 deletions
diff --git a/sql/updates/world/master/2024_09_06_03_world.sql b/sql/updates/world/master/2024_09_06_03_world.sql new file mode 100644 index 00000000000..a7c3517f380 --- /dev/null +++ b/sql/updates/world/master/2024_09_06_03_world.sql @@ -0,0 +1,7 @@ +DELETE FROM `spell_proc` WHERE `SpellId` IN (452999); +INSERT INTO `spell_proc` (`SpellId`,`SchoolMask`,`SpellFamilyName`,`SpellFamilyMask0`,`SpellFamilyMask1`,`SpellFamilyMask2`,`SpellFamilyMask3`,`ProcFlags`,`ProcFlags2`,`SpellTypeMask`,`SpellPhaseMask`,`HitMask`,`AttributesMask`,`DisableEffectsMask`,`ProcsPerMinute`,`Chance`,`Cooldown`,`Charges`) VALUES +(452999,0x0,5,0x00000002,0x00000000,0x00000000,0x00000000,0x0,0x0,0x1,0x2,0x0,0x0,0x0,0,0,0,0); -- Siphon Life + +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_warl_siphon_life'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(452999, 'spell_warl_siphon_life'); diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index f896c73a7a0..78be4204ee0 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -63,6 +63,7 @@ enum WarlockSpells SPELL_WARLOCK_SEED_OF_CORRUPTION_DAMAGE = 27285, SPELL_WARLOCK_SEED_OF_CORRUPTION_GENERIC = 32865, SPELL_WARLOCK_SHADOW_BOLT_ENERGIZE = 194192, + SPELL_WARLOCK_SIPHON_LIFE_HEAL = 453000, SPELL_WARLOCK_SOULSHATTER_EFFECT = 32835, SPELL_WARLOCK_SOUL_SWAP_CD_MARKER = 94229, SPELL_WARLOCK_SOUL_SWAP_OVERRIDE = 86211, @@ -824,6 +825,31 @@ class spell_warl_shadow_bolt : public SpellScript } }; +// 452999 - Siphon Life +class spell_warl_siphon_life : public AuraScript +{ + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_WARLOCK_SIPHON_LIFE_HEAL }); + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo const& eventInfo) const + { + DamageInfo const* damageInfo = eventInfo.GetDamageInfo(); + if (!damageInfo || !damageInfo->GetDamage()) + return; + + Unit* caster = GetTarget(); + caster->CastSpell(caster, SPELL_WARLOCK_SIPHON_LIFE_HEAL, CastSpellExtraArgs(aurEff) + .AddSpellMod(SPELLVALUE_BASE_POINT0, CalculatePct(damageInfo->GetDamage(), aurEff->GetAmount()))); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_warl_siphon_life::HandleProc, EFFECT_1, SPELL_AURA_DUMMY); + } +}; + // 86121 - Soul Swap class spell_warl_soul_swap : public SpellScript { @@ -1180,6 +1206,7 @@ void AddSC_warlock_spell_scripts() RegisterSpellAndAuraScriptPair(spell_warl_seed_of_corruption_dummy, spell_warl_seed_of_corruption_dummy_aura); RegisterSpellScript(spell_warl_seed_of_corruption_generic); RegisterSpellScript(spell_warl_shadow_bolt); + RegisterSpellScript(spell_warl_siphon_life); RegisterSpellScript(spell_warl_soul_swap); RegisterSpellScript(spell_warl_soul_swap_dot_marker); RegisterSpellScript(spell_warl_soul_swap_exhale); |