aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2024_09_06_03_world.sql7
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp27
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);