diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2016-10-17 03:30:45 -0300 |
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2016-10-17 03:30:45 -0300 |
| commit | d9743c984f11069bddab9d7f006293c18a400765 (patch) | |
| tree | c61ae4c38d252cc5166134835c1c842c87286c1c | |
| parent | c6d77e02860073e40a09cd1c847c73c02299eb29 (diff) | |
Core/Script: Fix improved drain soul mana return.
Ref #14859
| -rw-r--r-- | sql/updates/world/3.3.5/2016_10_17_04_world_335.sql | 4 | ||||
| -rw-r--r-- | src/server/scripts/Spells/spell_warlock.cpp | 85 |
2 files changed, 50 insertions, 39 deletions
diff --git a/sql/updates/world/3.3.5/2016_10_17_04_world_335.sql b/sql/updates/world/3.3.5/2016_10_17_04_world_335.sql new file mode 100644 index 00000000000..0e6b0c4717f --- /dev/null +++ b/sql/updates/world/3.3.5/2016_10_17_04_world_335.sql @@ -0,0 +1,4 @@ +DELETE FROM `spell_proc` WHERE `SpellId`=-18213; +DELETE FROM `spell_script_names` WHERE `ScriptName` IN ('spell_warl_drain_soul','spell_warl_improved_drain_soul'); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(-1120, 'spell_warl_drain_soul'); diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index 314a0f9f04e..cccebab6259 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -74,6 +74,7 @@ enum WarlockSpells SPELL_WARLOCK_SHADOWFLAME = 37378, SPELL_WARLOCK_FLAMESHADOW = 37379, SPELL_WARLOCK_GLYPH_OF_SUCCUBUS = 56250, + SPELL_WARLOCK_IMPROVED_DRAIN_SOUL_R1 = 18213, SPELL_WARLOCK_IMPROVED_DRAIN_SOUL_PROC = 18371 }; @@ -449,6 +450,50 @@ class spell_warl_demonic_empowerment : public SpellScriptLoader } }; +// -1120 - Drain Soul +class spell_warl_drain_soul : public SpellScriptLoader +{ + public: + spell_warl_drain_soul() : SpellScriptLoader("spell_warl_drain_soul") { } + + class spell_warl_drain_soul_AuraScript : public AuraScript + { + PrepareAuraScript(spell_warl_drain_soul_AuraScript); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_IMPROVED_DRAIN_SOUL_R1) || + !sSpellMgr->GetSpellInfo(SPELL_WARLOCK_IMPROVED_DRAIN_SOUL_PROC)) + return false; + return true; + } + + void HandleProc(AuraEffect const* aurEff, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + + Unit* caster = eventInfo.GetActor(); + // Improved Drain Soul + Aura const* impDrainSoul = caster->GetAuraOfRankedSpell(SPELL_WARLOCK_IMPROVED_DRAIN_SOUL_R1, caster->GetGUID()); + if (!impDrainSoul) + return; + + int32 amount = CalculatePct(caster->GetMaxPower(POWER_MANA), impDrainSoul->GetSpellInfo()->Effects[EFFECT_2].CalcValue()); + caster->CastCustomSpell(SPELL_WARLOCK_IMPROVED_DRAIN_SOUL_PROC, SPELLVALUE_BASE_POINT0, amount, (Unit*)nullptr, true, nullptr, aurEff); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_warl_drain_soul_AuraScript::HandleProc, EFFECT_2, SPELL_AURA_PROC_TRIGGER_SPELL); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_warl_drain_soul_AuraScript(); + } +}; + // 47422 - Everlasting Affliction class spell_warl_everlasting_affliction : public SpellScriptLoader { @@ -744,44 +789,6 @@ class spell_warl_health_funnel : public SpellScriptLoader } }; -// -18213 - Improved Drain Soul -class spell_warl_improved_drain_soul : public SpellScriptLoader -{ - public: - spell_warl_improved_drain_soul() : SpellScriptLoader("spell_warl_improved_drain_soul") { } - - class spell_warl_improved_drain_soul_AuraScript : public AuraScript - { - PrepareAuraScript(spell_warl_improved_drain_soul_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sSpellMgr->GetSpellInfo(SPELL_WARLOCK_IMPROVED_DRAIN_SOUL_PROC)) - return false; - return true; - } - - void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/) - { - PreventDefaultAction(); - - Unit* target = GetTarget(); - int32 bp0 = CalculatePct(target->GetMaxPower(POWER_MANA), GetSpellInfo()->Effects[EFFECT_2].BasePoints); - target->CastCustomSpell(SPELL_WARLOCK_IMPROVED_DRAIN_SOUL_PROC, SPELLVALUE_BASE_POINT0, bp0, target, true, nullptr, aurEff); - } - - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_warl_improved_drain_soul_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_warl_improved_drain_soul_AuraScript(); - } -}; - // -1454 - Life Tap class spell_warl_life_tap : public SpellScriptLoader { @@ -1484,6 +1491,7 @@ void AddSC_warlock_spell_scripts() new spell_warl_demonic_circle_teleport(); new spell_warl_demonic_empowerment(); new spell_warl_demonic_pact(); + new spell_warl_drain_soul(); new spell_warl_everlasting_affliction(); new spell_warl_fel_synergy(); new spell_warl_glyph_of_life_tap(); @@ -1491,7 +1499,6 @@ void AddSC_warlock_spell_scripts() new spell_warl_haunt(); new spell_warl_health_funnel(); new spell_warl_glyph_of_corruption_nightfall(); - new spell_warl_improved_drain_soul(); new spell_warl_life_tap(); new spell_warl_nether_protection(); new spell_warl_ritual_of_doom_effect(); |
