diff options
author | Kaelima <kaelima@live.se> | 2012-08-01 22:56:30 -0700 |
---|---|---|
committer | Kaelima <kaelima@live.se> | 2012-08-01 22:56:30 -0700 |
commit | 99d3918d34e098087a072d5990d40e0aa9ba56ca (patch) | |
tree | b9816dc3ed915ada1472d254e9d36cf65cbb1075 /src | |
parent | f5231929e04748d25cadf234be4c12843b7c1909 (diff) | |
parent | c6dd149f1bbbdb66fdbe50515c5901da1d37d274 (diff) |
Merge pull request #6800 from Vincent-Michael/cod
Core/Spells: Fix Curse of Doom (thx to Warpten / joschiwald for helping)
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Spells/Auras/SpellAuras.cpp | 11 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_warlock.cpp | 48 |
2 files changed, 49 insertions, 10 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 9456a219274..a1ac69826c4 100755 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1373,17 +1373,8 @@ void Aura::HandleAuraSpecificMods(AuraApplication const* aurApp, Unit* caster, b case SPELLFAMILY_WARLOCK: if (!caster) break; - // Curse of Doom - if (GetSpellInfo()->SpellFamilyFlags[1] & 0x02) - { - if (removeMode == AURA_REMOVE_BY_DEATH) - { - if (caster->GetTypeId() == TYPEID_PLAYER && caster->ToPlayer()->isHonorOrXPTarget(target)) - caster->CastSpell(target, 18662, true, NULL, GetEffect(0)); - } - } // Improved Fear - else if (GetSpellInfo()->SpellFamilyFlags[1] & 0x00000400) + if (GetSpellInfo()->SpellFamilyFlags[1] & 0x00000400) { if (AuraEffect* aurEff = caster->GetAuraEffect(SPELL_AURA_DUMMY, SPELLFAMILY_WARLOCK, 98, 0)) { diff --git a/src/server/scripts/Spells/spell_warlock.cpp b/src/server/scripts/Spells/spell_warlock.cpp index 9701418e02e..fec30bbdd96 100644 --- a/src/server/scripts/Spells/spell_warlock.cpp +++ b/src/server/scripts/Spells/spell_warlock.cpp @@ -40,6 +40,7 @@ enum WarlockSpells WARLOCK_HAUNT = 48181, WARLOCK_HAUNT_HEAL = 48210, WARLOCK_UNSTABLE_AFFLICTION_DISPEL = 31117, + WARLOCK_CURSE_OF_DOOM_EFFECT = 18662, }; class spell_warl_banish : public SpellScriptLoader @@ -624,6 +625,52 @@ class spell_warl_unstable_affliction : public SpellScriptLoader } }; +class spell_warl_curse_of_doom : public SpellScriptLoader +{ + public: + spell_warl_curse_of_doom() : SpellScriptLoader("spell_warl_curse_of_doom") { } + + class spell_warl_curse_of_doom_AuraScript : public AuraScript + { + PrepareAuraScript(spell_warl_curse_of_doom_AuraScript); + + bool Validate(SpellInfo const* /*spell*/) + { + if (!sSpellMgr->GetSpellInfo(WARLOCK_CURSE_OF_DOOM_EFFECT)) + return false; + return true; + } + + bool Load() + { + return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER; + } + + void OnRemove(AuraEffect const* aurEff, AuraEffectHandleModes /*mode*/) + { + if (!GetCaster()) + return; + + AuraRemoveMode removeMode = GetTargetApplication()->GetRemoveMode(); + if (removeMode != AURA_REMOVE_BY_DEATH || !IsExpired()) + return; + + if (GetCaster()->ToPlayer()->isHonorOrXPTarget(GetTarget())) + GetCaster()->CastSpell(GetTarget(), WARLOCK_CURSE_OF_DOOM_EFFECT, true, NULL, aurEff); + } + + void Register() + { + AfterEffectRemove += AuraEffectRemoveFn(spell_warl_curse_of_doom_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_PERIODIC_DAMAGE, AURA_EFFECT_HANDLE_REAL); + } + }; + + AuraScript* GetAuraScript() const + { + return new spell_warl_curse_of_doom_AuraScript(); + } +}; + void AddSC_warlock_spell_scripts() { new spell_warl_banish(); @@ -638,4 +685,5 @@ void AddSC_warlock_spell_scripts() new spell_warl_demonic_circle_teleport(); new spell_warl_haunt(); new spell_warl_unstable_affliction(); + new spell_warl_curse_of_doom(); } |