aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2016-10-17 03:30:45 -0300
committerariel- <ariel-@users.noreply.github.com>2016-10-17 03:30:45 -0300
commitd9743c984f11069bddab9d7f006293c18a400765 (patch)
treec61ae4c38d252cc5166134835c1c842c87286c1c
parentc6d77e02860073e40a09cd1c847c73c02299eb29 (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.sql4
-rw-r--r--src/server/scripts/Spells/spell_warlock.cpp85
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();