aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp21
1 files changed, 21 insertions, 0 deletions
diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp
index edba0f24adc..e8a2f1b4a19 100644
--- a/src/server/scripts/Spells/spell_warlock.cpp
+++ b/src/server/scripts/Spells/spell_warlock.cpp
@@ -35,6 +35,7 @@
enum WarlockSpells
{
+ SPELL_WARLOCK_DRAIN_SOUL = 1120,
SPELL_WARLOCK_CREATE_SOULSHARD = 43836,
SPELL_WARLOCK_CURSE_OF_DOOM_EFFECT = 18662,
SPELL_WARLOCK_DEMONIC_CIRCLE_SUMMON = 48018,
@@ -513,6 +514,20 @@ class spell_warl_drain_soul : public SpellScriptLoader
});
}
+ bool CheckProc(ProcEventInfo& eventInfo)
+ {
+ // Drain Soul's proc tries to happen each time the warlock lands a killing blow on a unit while channeling.
+ // Make sure that dying unit is afflicted by the caster's Drain Soul debuff in order to avoid a false positive.
+
+ Unit* caster = GetCaster();
+ Unit* victim = eventInfo.GetProcTarget();
+
+ if (caster && victim)
+ return victim->GetAuraApplicationOfRankedSpell(SPELL_WARLOCK_DRAIN_SOUL, caster->GetGUID()) != 0;
+
+ return false;
+ }
+
void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo)
{
PreventDefaultAction();
@@ -548,9 +563,15 @@ class spell_warl_drain_soul : public SpellScriptLoader
void Register() override
{
+
+ // DoT Tick
OnEffectPeriodic += AuraEffectPeriodicFn(spell_warl_drain_soul_AuraScript::HandleTick, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE);
+
+ // Proc
+ DoCheckProc += AuraCheckProcFn(spell_warl_drain_soul_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_warl_drain_soul_AuraScript::HandleProc, EFFECT_2, SPELL_AURA_PROC_TRIGGER_SPELL);
}
+
};
AuraScript* GetAuraScript() const override