diff options
| -rw-r--r-- | src/server/scripts/Spells/spell_warlock.cpp | 21 |
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 |
