Core/Script: Fix improved drain soul mana return.

Ref #14859
This commit is contained in:
ariel-
2016-10-17 03:30:45 -03:00
parent c6d77e0286
commit d9743c984f
2 changed files with 50 additions and 39 deletions

View File

@@ -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');

View File

@@ -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();