From 16cac81e5aaac13bbe6aab8b8c892c7693d4475f Mon Sep 17 00:00:00 2001 From: UltraNix <80540499+UltraNix@users.noreply.github.com> Date: Sun, 5 Dec 2021 23:53:14 +0100 Subject: [PATCH] fix(Scripts/Spells): Drain Soul generates Soul Shard only from targets that yields experience or honor on death. (#9417) Fixes #9083 --- src/server/scripts/Spells/spell_warlock.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index f6ec50767..a5fba203c 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -1123,6 +1123,16 @@ class spell_warl_drain_soul : public AuraScript }); } + void RemoveEffect(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + Unit* caster = GetCaster(); + Unit* target = GetTarget(); + if (!(GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_DEATH && caster && target && caster->IsPlayer() && caster->ToPlayer()->isHonorOrXPTarget(target))) + { + PreventDefaultAction(); + } + } + bool CheckProc(ProcEventInfo& eventInfo) { // Drain Soul's proc tries to happen each time the warlock lands a killing blow on a unit while channeling. @@ -1178,6 +1188,7 @@ class spell_warl_drain_soul : public AuraScript void Register() override { + OnEffectRemove += AuraEffectRemoveFn(spell_warl_drain_soul::RemoveEffect, EFFECT_0, SPELL_AURA_CHANNEL_DEATH_ITEM, AURA_EFFECT_HANDLE_REAL); DoCheckProc += AuraCheckProcFn(spell_warl_drain_soul::CheckProc); OnEffectPeriodic += AuraEffectPeriodicFn(spell_warl_drain_soul::HandleTick, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE); OnEffectProc += AuraEffectProcFn(spell_warl_drain_soul::HandleProc, EFFECT_2, SPELL_AURA_PROC_TRIGGER_SPELL);