2010-07-24 22:41:42 +02:00
/*
2016-01-01 00:34:25 +01:00
* Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
2010-07-24 22:41:42 +02:00
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Scripts for spells with SPELLFAMILY_DEATHKNIGHT and SPELLFAMILY_GENERIC spells used by deathknight players.
* Ordered alphabetically using scriptname.
* Scriptnames of files in this file should be prefixed with "spell_dk_".
*/
2012-11-17 05:18:37 +01:00
#include "Player.h"
2012-02-19 16:57:07 +01:00
#include "ScriptMgr.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
2015-02-17 01:01:44 +01:00
#include "SpellHistory.h"
2014-01-30 02:40:12 +01:00
#include "Containers.h"
2010-07-24 22:41:42 +02:00
2010-08-18 00:20:23 +06:00
enum DeathKnightSpells
{
2015-01-12 23:49:19 +00:00
SPELL_DK_ARMY_FLESH_BEAST_TRANSFORM = 127533 ,
SPELL_DK_ARMY_GEIST_TRANSFORM = 127534 ,
SPELL_DK_ARMY_NORTHREND_SKELETON_TRANSFORM = 127528 ,
SPELL_DK_ARMY_SKELETON_TRANSFORM = 127527 ,
SPELL_DK_ARMY_SPIKED_GHOUL_TRANSFORM = 127525 ,
SPELL_DK_ARMY_SUPER_ZOMBIE_TRANSFORM = 127526 ,
2014-06-15 19:36:30 +02:00
SPELL_DK_BLOOD_PLAGUE = 55078 ,
2013-07-26 14:07:57 +02:00
SPELL_DK_BLOOD_PRESENCE = 48263 ,
2013-07-23 16:28:23 +02:00
SPELL_DK_BLOOD_SHIELD_MASTERY = 77513 ,
SPELL_DK_BLOOD_SHIELD_ABSORB = 77535 ,
2015-01-12 23:49:19 +00:00
SPELL_DK_CHAINS_OF_ICE = 45524 ,
2013-01-11 04:18:02 +01:00
SPELL_DK_CORPSE_EXPLOSION_TRIGGERED = 43999 ,
2014-07-24 16:14:25 +02:00
SPELL_DK_DEATH_AND_DECAY_DAMAGE = 52212 ,
2015-01-12 23:49:19 +00:00
SPELL_DK_DEATH_AND_DECAY_SLOW = 143375 ,
SPELL_DK_DEATH_COIL_BARRIER = 115635 ,
2013-01-11 04:18:02 +01:00
SPELL_DK_DEATH_COIL_DAMAGE = 47632 ,
SPELL_DK_DEATH_COIL_HEAL = 47633 ,
2015-02-02 02:06:48 +00:00
SPELL_DK_DEATH_GRIP = 49560 ,
2013-01-11 04:18:02 +01:00
SPELL_DK_DEATH_STRIKE_HEAL = 45470 ,
2015-01-12 23:49:19 +00:00
SPELL_DK_ENHANCED_DEATH_COIL = 157343 ,
2014-06-11 19:59:50 +02:00
SPELL_DK_FROST_FEVER = 55095 ,
2013-01-11 04:18:02 +01:00
SPELL_DK_GHOUL_EXPLODE = 47496 ,
2015-01-12 23:49:19 +00:00
SPELL_DK_GLYPH_OF_ABSORB_MAGIC = 159415 ,
SPELL_DK_GLYPH_OF_ANTI_MAGIC_SHELL = 58623 ,
SPELL_DK_GLYPH_OF_ARMY_OF_THE_DEAD = 58669 ,
SPELL_DK_GLYPH_OF_DEATH_COIL = 63333 ,
SPELL_DK_GLYPH_OF_DEATH_AND_DECAY = 58629 ,
SPELL_DK_GLYPH_OF_FOUL_MENAGERIE = 58642 ,
SPELL_DK_GLYPH_OF_REGENERATIVE_MAGIC = 146648 ,
SPELL_DK_GLYPH_OF_RUNIC_POWER_TRIGGERED = 159430 ,
SPELL_DK_GLYPH_OF_SWIFT_DEATH = 146645 ,
SPELL_DK_GLYPH_OF_THE_GEIST = 58640 ,
SPELL_DK_GLYPH_OF_THE_SKELETON = 146652 ,
SPELL_DK_IMPROVED_BLOOD_PRESENCE = 50371 ,
SPELL_DK_IMPROVED_SOUL_REAPER = 157342 ,
2013-01-11 04:18:02 +01:00
SPELL_DK_RUNIC_POWER_ENERGIZE = 49088 ,
2015-01-12 23:49:19 +00:00
SPELL_DK_SCENT_OF_BLOOD = 49509 ,
SPELL_DK_SCENT_OF_BLOOD_TRIGGERED = 50421 ,
2013-01-11 04:18:02 +01:00
SPELL_DK_SCOURGE_STRIKE_TRIGGERED = 70890 ,
2015-01-12 23:49:19 +00:00
SPELL_DK_SHADOW_OF_DEATH = 164047 ,
SPELL_DK_SOUL_REAPER_DAMAGE = 114867 ,
SPELL_DK_SOUL_REAPER_HASTE = 114868 ,
SPELL_DK_T15_DPS_4P_BONUS = 138347 ,
2013-07-22 22:15:22 +02:00
SPELL_DK_UNHOLY_PRESENCE = 48265 ,
2015-01-12 23:49:19 +00:00
SPELL_DK_WILL_OF_THE_NECROPOLIS = 157335
2013-01-11 04:18:02 +01:00
};
2015-01-12 23:49:19 +00:00
// 48707 - Anti-Magic Shell
/// 6.x
class spell_dk_anti_magic_shell : public SpellScriptLoader
2010-12-30 02:03:46 +01:00
{
2011-01-22 17:21:24 +01:00
public :
2015-01-12 23:49:19 +00:00
spell_dk_anti_magic_shell () : SpellScriptLoader ( "spell_dk_anti_magic_shell" ) { }
2010-12-30 02:03:46 +01:00
2015-01-12 23:49:19 +00:00
class spell_dk_anti_magic_shell_AuraScript : public AuraScript
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
PrepareAuraScript ( spell_dk_anti_magic_shell_AuraScript );
2010-12-30 02:03:46 +01:00
2014-09-25 21:10:00 +02:00
public :
2015-01-19 00:06:15 +00:00
spell_dk_anti_magic_shell_AuraScript ()
2014-09-25 21:10:00 +02:00
{
absorbPct = 0 ;
2015-01-12 23:49:19 +00:00
maxHealth = 0 ;
absorbedAmount = 0 ;
2014-09-25 21:10:00 +02:00
}
2015-01-12 23:49:19 +00:00
bool Validate ( SpellInfo const * /*spellInfo*/ ) override
{
if ( ! sSpellMgr -> GetSpellInfo ( SPELL_DK_RUNIC_POWER_ENERGIZE ))
return false ;
if ( ! sSpellMgr -> GetSpellInfo ( SPELL_DK_GLYPH_OF_ABSORB_MAGIC ))
return false ;
if ( ! sSpellMgr -> GetSpellInfo ( SPELL_DK_GLYPH_OF_REGENERATIVE_MAGIC ))
return false ;
return true ;
}
2010-12-30 02:03:46 +01:00
2014-04-29 16:35:11 +02:00
bool Load () override
2011-01-22 17:21:24 +01:00
{
2014-11-24 18:57:49 +01:00
absorbPct = GetSpellInfo () -> GetEffect ( EFFECT_0 ) -> CalcValue ( GetCaster ());
2015-01-12 23:49:19 +00:00
maxHealth = GetCaster () -> GetMaxHealth ();
absorbedAmount = 0 ;
2011-01-22 17:21:24 +01:00
return true ;
}
2010-12-30 02:03:46 +01:00
2015-01-12 23:49:19 +00:00
void CalculateAmount ( AuraEffect const * /*aurEff*/ , int32 & amount , bool & /*canBeRecalculated*/ )
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
amount = maxHealth ;
/// todo, check if AMS has basepoints for EFFECT_2. in that case, this function should be rewritten.
if ( ! GetUnitOwner () -> HasAura ( SPELL_DK_GLYPH_OF_ABSORB_MAGIC ))
amount /= 2 ;
2011-01-22 17:21:24 +01:00
}
2010-12-30 02:03:46 +01:00
2015-01-12 23:49:19 +00:00
void Absorb ( AuraEffect * /*aurEff*/ , DamageInfo & dmgInfo , uint32 & absorbAmount )
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
// we may only absorb a certain percentage of incoming damage.
absorbAmount = dmgInfo . GetDamage () * uint32 ( absorbPct ) / 100 ;
}
void Trigger ( AuraEffect * aurEff , DamageInfo & /*dmgInfo*/ , uint32 & absorbAmount )
{
absorbedAmount += absorbAmount ;
if ( ! GetTarget () -> HasAura ( SPELL_DK_GLYPH_OF_ABSORB_MAGIC ))
{
// Patch 6.0.2 (October 14, 2014): Anti-Magic Shell now restores 2 Runic Power per 1% of max health absorbed.
int32 bp = 2 * absorbAmount * 100 / maxHealth ;
GetTarget () -> CastCustomSpell ( SPELL_DK_RUNIC_POWER_ENERGIZE , SPELLVALUE_BASE_POINT0 , bp , GetTarget (), true , nullptr , aurEff );
}
}
void HandleEffectRemove ( AuraEffect const * /*aurEff*/ , AuraEffectHandleModes /*mode*/ )
{
if ( Player * player = GetTarget () -> ToPlayer ())
if ( AuraEffect const * glyph = player -> GetAuraEffect ( SPELL_DK_GLYPH_OF_REGENERATIVE_MAGIC , EFFECT_0 )) // reduce cooldown of AMS if player has glyph
{
// Cannot reduce cooldown by more than 50%
int32 val = std :: min ( glyph -> GetAmount (), int32 ( absorbedAmount ) * 100 / maxHealth );
2015-09-10 19:39:30 +02:00
player -> GetSpellHistory () -> ModifyCooldown ( GetId (), - int32 ( player -> GetSpellHistory () -> GetRemainingCooldown ( GetSpellInfo ()) * val / 100 ));
2015-01-12 23:49:19 +00:00
}
2011-01-22 17:21:24 +01:00
}
2014-04-29 16:35:11 +02:00
void Register () override
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
DoEffectCalcAmount += AuraEffectCalcAmountFn ( spell_dk_anti_magic_shell_AuraScript :: CalculateAmount , EFFECT_0 , SPELL_AURA_SCHOOL_ABSORB );
OnEffectAbsorb += AuraEffectAbsorbFn ( spell_dk_anti_magic_shell_AuraScript :: Absorb , EFFECT_0 );
AfterEffectAbsorb += AuraEffectAbsorbFn ( spell_dk_anti_magic_shell_AuraScript :: Trigger , EFFECT_0 );
AfterEffectRemove += AuraEffectRemoveFn ( spell_dk_anti_magic_shell_AuraScript :: HandleEffectRemove , EFFECT_0 , SPELL_AURA_SCHOOL_ABSORB , AURA_EFFECT_HANDLE_REAL );
2011-01-22 17:21:24 +01:00
}
2015-01-12 23:49:19 +00:00
private :
int32 absorbPct ;
int32 maxHealth ;
uint32 absorbedAmount ;
2011-01-22 17:21:24 +01:00
};
2010-12-30 02:03:46 +01:00
2014-04-29 16:35:11 +02:00
AuraScript * GetAuraScript () const override
2010-12-30 02:03:46 +01:00
{
2015-01-12 23:49:19 +00:00
return new spell_dk_anti_magic_shell_AuraScript ();
2010-12-30 02:03:46 +01:00
}
};
2015-01-12 23:49:19 +00:00
// 43264 - Periodic Taunt
/// 6.x, does this belong here or in spell_generic? apply this in creature_template_addon? sniffs say this is always cast army of the dead ghouls.
class spell_dk_army_periodic_taunt : public SpellScriptLoader
2010-12-30 02:03:46 +01:00
{
2011-01-22 17:21:24 +01:00
public :
2015-01-12 23:49:19 +00:00
spell_dk_army_periodic_taunt () : SpellScriptLoader ( "spell_dk_army_periodic_taunt" ) { }
2010-12-30 02:03:46 +01:00
2015-01-12 23:49:19 +00:00
class spell_dk_army_periodic_taunt_SpellScript : public SpellScript
2010-12-30 02:03:46 +01:00
{
2015-01-12 23:49:19 +00:00
PrepareSpellScript ( spell_dk_army_periodic_taunt_SpellScript );
2010-12-30 02:03:46 +01:00
2014-04-29 16:35:11 +02:00
bool Load () override
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
return GetCaster () -> IsGuardian ();
2011-01-22 17:21:24 +01:00
}
2010-12-30 02:03:46 +01:00
2015-01-12 23:49:19 +00:00
SpellCastResult CheckCast ()
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
if ( Unit * owner = GetCaster () -> GetOwner ())
if ( ! owner -> HasAura ( SPELL_DK_GLYPH_OF_ARMY_OF_THE_DEAD ))
return SPELL_CAST_OK ;
2010-12-30 02:03:46 +01:00
2015-01-12 23:49:19 +00:00
return SPELL_FAILED_SPELL_UNAVAILABLE ;
2011-01-22 17:21:24 +01:00
}
2014-04-29 16:35:11 +02:00
void Register () override
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
OnCheckCast += SpellCheckCastFn ( spell_dk_army_periodic_taunt_SpellScript :: CheckCast );
2011-01-22 17:21:24 +01:00
}
};
2010-12-30 02:03:46 +01:00
2015-01-12 23:49:19 +00:00
SpellScript * GetSpellScript () const override
2010-12-30 02:03:46 +01:00
{
2015-01-12 23:49:19 +00:00
return new spell_dk_army_periodic_taunt_SpellScript ();
2010-12-30 02:03:46 +01:00
}
};
2015-01-12 23:49:19 +00:00
static const uint32 ArmyTransforms [ 6 ]
{
SPELL_DK_ARMY_FLESH_BEAST_TRANSFORM ,
SPELL_DK_ARMY_GEIST_TRANSFORM ,
SPELL_DK_ARMY_NORTHREND_SKELETON_TRANSFORM ,
SPELL_DK_ARMY_SKELETON_TRANSFORM ,
SPELL_DK_ARMY_SPIKED_GHOUL_TRANSFORM ,
SPELL_DK_ARMY_SUPER_ZOMBIE_TRANSFORM
};
// 127517 - Army Transform
/// 6.x, does this belong here or in spell_generic? where do we cast this? sniffs say this is only cast when caster has glyph of foul menagerie.
class spell_dk_army_transform : public SpellScriptLoader
2010-12-30 02:03:46 +01:00
{
2011-01-22 17:21:24 +01:00
public :
2015-01-12 23:49:19 +00:00
spell_dk_army_transform () : SpellScriptLoader ( "spell_dk_army_transform" ) { }
2010-12-30 02:03:46 +01:00
2015-01-12 23:49:19 +00:00
class spell_dk_army_transform_SpellScript : public SpellScript
2010-12-30 02:03:46 +01:00
{
2015-01-12 23:49:19 +00:00
PrepareSpellScript ( spell_dk_army_transform_SpellScript );
2010-12-30 02:03:46 +01:00
2014-04-29 16:35:11 +02:00
bool Load () override
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
return GetCaster () -> IsGuardian ();
2011-01-22 17:21:24 +01:00
}
2010-12-30 02:03:46 +01:00
2015-01-12 23:49:19 +00:00
SpellCastResult CheckCast ()
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
if ( Unit * owner = GetCaster () -> GetOwner ())
if ( owner -> HasAura ( SPELL_DK_GLYPH_OF_FOUL_MENAGERIE ))
return SPELL_CAST_OK ;
2010-12-30 02:03:46 +01:00
2015-01-12 23:49:19 +00:00
return SPELL_FAILED_SPELL_UNAVAILABLE ;
2011-01-22 17:21:24 +01:00
}
2010-12-30 02:03:46 +01:00
2015-01-12 23:49:19 +00:00
void HandleDummy ( SpellEffIndex /*effIndex*/ )
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
GetCaster () -> CastSpell ( GetCaster (), ArmyTransforms [ urand ( 0 , 5 )], true );
2011-01-22 17:21:24 +01:00
}
2014-04-29 16:35:11 +02:00
void Register () override
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
OnCheckCast += SpellCheckCastFn ( spell_dk_army_transform_SpellScript :: CheckCast );
OnEffectHitTarget += SpellEffectFn ( spell_dk_army_transform_SpellScript :: HandleDummy , EFFECT_0 , SPELL_EFFECT_DUMMY );
2011-01-22 17:21:24 +01:00
}
};
2010-12-30 02:03:46 +01:00
2015-01-12 23:49:19 +00:00
SpellScript * GetSpellScript () const override
2010-12-30 02:03:46 +01:00
{
2015-01-12 23:49:19 +00:00
return new spell_dk_army_transform_SpellScript ();
2010-12-30 02:03:46 +01:00
}
};
2015-01-12 23:49:19 +00:00
// 50842 - Blood Boil
/// 6.x
2013-01-11 04:18:02 +01:00
class spell_dk_blood_boil : public SpellScriptLoader
{
public :
spell_dk_blood_boil () : SpellScriptLoader ( "spell_dk_blood_boil" ) { }
class spell_dk_blood_boil_SpellScript : public SpellScript
{
PrepareSpellScript ( spell_dk_blood_boil_SpellScript );
2014-09-25 21:10:00 +02:00
public :
spell_dk_blood_boil_SpellScript ()
{
2015-01-12 23:49:19 +00:00
bpDuration = 0 ;
ffDuration = 0 ;
2014-09-25 21:10:00 +02:00
}
2014-04-29 16:35:11 +02:00
bool Validate ( SpellInfo const * /*spellInfo*/ ) override
2013-01-11 04:18:02 +01:00
{
2015-01-12 23:49:19 +00:00
if ( ! sSpellMgr -> GetSpellInfo ( SPELL_DK_SCENT_OF_BLOOD_TRIGGERED ))
return false ;
if ( ! sSpellMgr -> GetSpellInfo ( SPELL_DK_SCENT_OF_BLOOD ))
return false ;
if ( ! sSpellMgr -> GetSpellInfo ( SPELL_DK_BLOOD_PLAGUE ))
return false ;
if ( ! sSpellMgr -> GetSpellInfo ( SPELL_DK_FROST_FEVER ))
2013-01-11 04:18:02 +01:00
return false ;
return true ;
}
2015-01-12 23:49:19 +00:00
void FilterTargets ( std :: list < WorldObject *>& targets )
2013-01-11 04:18:02 +01:00
{
2015-01-12 23:49:19 +00:00
if ( targets . empty ())
2013-01-11 04:18:02 +01:00
return ;
2015-01-12 23:49:19 +00:00
Unit * caster = GetCaster ();
2013-01-11 04:18:02 +01:00
2015-01-12 23:49:19 +00:00
if ( caster -> HasAura ( SPELL_DK_SCENT_OF_BLOOD ))
return ;
2013-01-22 00:20:16 +01:00
2015-01-12 23:49:19 +00:00
for ( auto target : targets )
{
if ( bpDuration && ffDuration )
break ;
2013-01-22 00:20:16 +01:00
2015-01-12 23:49:19 +00:00
if ( Unit * unit = target -> ToUnit ())
{
if ( Aura const * bp = unit -> GetAura ( SPELL_DK_BLOOD_PLAGUE , caster -> GetGUID ()))
bpDuration = bp -> GetDuration ();
if ( Aura const * ff = unit -> GetAura ( SPELL_DK_FROST_FEVER , caster -> GetGUID ()))
ffDuration = ff -> GetDuration ();
}
}
2013-01-22 00:20:16 +01:00
}
2015-01-12 23:49:19 +00:00
void HandleDummy ( SpellEffIndex /*effIndex*/ )
2013-01-22 00:20:16 +01:00
{
2015-01-12 23:49:19 +00:00
Unit * caster = GetCaster ();
Unit * target = GetHitUnit ();
2013-01-22 00:20:16 +01:00
2015-01-12 23:49:19 +00:00
if ( ffDuration )
caster -> CastSpell ( target , SPELL_DK_FROST_FEVER , true );
if ( bpDuration )
caster -> CastSpell ( target , SPELL_DK_BLOOD_PLAGUE , true );
if ( ! caster -> HasAura ( SPELL_DK_SCENT_OF_BLOOD ))
{
if ( Aura * bp = target -> GetAura ( SPELL_DK_BLOOD_PLAGUE , caster -> GetGUID ()))
{
bp -> SetDuration ( bpDuration );
bp -> SetMaxDuration ( bpDuration );
}
if ( Aura * ff = target -> GetAura ( SPELL_DK_FROST_FEVER , caster -> GetGUID ()))
{
ff -> SetDuration ( ffDuration );
ff -> SetMaxDuration ( ffDuration );
}
}
2013-01-22 00:20:16 +01:00
}
2015-01-12 23:49:19 +00:00
void HandleEnergize ( SpellEffIndex /*effIndex*/ )
2013-01-22 00:20:16 +01:00
{
2015-01-12 23:49:19 +00:00
Unit * caster = GetCaster ();
if ( caster -> HasAura ( SPELL_DK_SCENT_OF_BLOOD ))
caster -> CastSpell ( caster , SPELL_DK_SCENT_OF_BLOOD_TRIGGERED , true );
2013-01-22 00:20:16 +01:00
}
2014-04-29 16:35:11 +02:00
void Register () override
2013-01-22 00:20:16 +01:00
{
2015-01-12 23:49:19 +00:00
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn ( spell_dk_blood_boil_SpellScript :: FilterTargets , EFFECT_0 , TARGET_UNIT_DEST_AREA_ENEMY );
OnEffectHitTarget += SpellEffectFn ( spell_dk_blood_boil_SpellScript :: HandleDummy , EFFECT_0 , SPELL_EFFECT_DUMMY );
OnEffectHitTarget += SpellEffectFn ( spell_dk_blood_boil_SpellScript :: HandleEnergize , EFFECT_1 , SPELL_EFFECT_ENERGIZE );
2013-01-22 00:20:16 +01:00
}
private :
2015-01-12 23:49:19 +00:00
int32 bpDuration ;
int32 ffDuration ;
2013-01-22 00:20:16 +01:00
};
2015-01-12 23:49:19 +00:00
SpellScript * GetSpellScript () const override
2013-01-22 00:20:16 +01:00
{
2015-01-12 23:49:19 +00:00
return new spell_dk_blood_boil_SpellScript ();
2013-01-22 00:20:16 +01:00
}
};
2015-01-12 23:49:19 +00:00
// 43265 - Death and Decay
/// 6.x
class spell_dk_death_and_decay : public SpellScriptLoader
2013-07-20 01:18:42 +02:00
{
public :
2015-01-12 23:49:19 +00:00
spell_dk_death_and_decay () : SpellScriptLoader ( "spell_dk_death_and_decay" ) { }
2013-07-20 01:18:42 +02:00
2015-01-12 23:49:19 +00:00
class spell_dk_death_and_decay_SpellScript : public SpellScript
2013-07-20 01:18:42 +02:00
{
2015-01-12 23:49:19 +00:00
PrepareSpellScript ( spell_dk_death_and_decay_SpellScript );
2013-07-20 01:18:42 +02:00
2015-01-12 23:49:19 +00:00
void HandleDummy ( SpellEffIndex /*effIndex*/ )
2013-07-20 01:18:42 +02:00
{
2015-01-12 23:49:19 +00:00
if ( GetCaster () -> HasAura ( SPELL_DK_GLYPH_OF_DEATH_AND_DECAY ))
if ( WorldLocation const * pos = GetExplTargetDest ())
GetCaster () -> CastSpell ( pos -> GetPositionX (), pos -> GetPositionY (), pos -> GetPositionZ (), SPELL_DK_DEATH_AND_DECAY_SLOW , true );
2013-07-20 01:18:42 +02:00
}
2014-04-29 16:35:11 +02:00
void Register () override
2013-07-20 01:18:42 +02:00
{
2015-01-12 23:49:19 +00:00
OnEffectHitTarget += SpellEffectFn ( spell_dk_death_and_decay_SpellScript :: HandleDummy , EFFECT_0 , SPELL_EFFECT_DUMMY );
2013-07-20 01:18:42 +02:00
}
};
2015-01-12 23:49:19 +00:00
SpellScript * GetSpellScript () const override
2013-07-20 01:18:42 +02:00
{
2015-01-12 23:49:19 +00:00
return new spell_dk_death_and_decay_SpellScript ();
2013-07-20 01:18:42 +02:00
}
2014-07-24 16:14:25 +02:00
class spell_dk_death_and_decay_AuraScript : public AuraScript
{
PrepareAuraScript ( spell_dk_death_and_decay_AuraScript );
void HandleDummyTick ( AuraEffect const * aurEff )
{
if ( Unit * caster = GetCaster ())
caster -> CastCustomSpell ( SPELL_DK_DEATH_AND_DECAY_DAMAGE , SPELLVALUE_BASE_POINT0 , aurEff -> GetAmount (), GetTarget (), true , NULL , aurEff );
}
void Register () override
{
2015-01-12 23:49:19 +00:00
OnEffectPeriodic += AuraEffectPeriodicFn ( spell_dk_death_and_decay_AuraScript :: HandleDummyTick , EFFECT_2 , SPELL_AURA_PERIODIC_DUMMY );
2014-07-24 16:14:25 +02:00
}
};
AuraScript * GetAuraScript () const override
{
return new spell_dk_death_and_decay_AuraScript ();
}
};
2015-01-12 23:49:19 +00:00
// 47541 - Death Coil
/// 6.x
2013-01-11 04:18:02 +01:00
class spell_dk_death_coil : public SpellScriptLoader
2011-05-06 22:08:43 -03:00
{
public :
2013-01-11 04:18:02 +01:00
spell_dk_death_coil () : SpellScriptLoader ( "spell_dk_death_coil" ) { }
2011-05-06 22:08:43 -03:00
2013-01-11 04:18:02 +01:00
class spell_dk_death_coil_SpellScript : public SpellScript
2011-05-06 22:08:43 -03:00
{
2013-01-11 04:18:02 +01:00
PrepareSpellScript ( spell_dk_death_coil_SpellScript );
2011-05-06 22:08:43 -03:00
2014-04-29 16:35:11 +02:00
bool Validate ( SpellInfo const * /*spell*/ ) override
2012-02-18 12:12:49 +01:00
{
2015-01-12 23:49:19 +00:00
if ( ! sSpellMgr -> GetSpellInfo ( SPELL_DK_DEATH_COIL_DAMAGE ) || ! sSpellMgr -> GetSpellInfo ( SPELL_DK_DEATH_COIL_HEAL ) || ! sSpellMgr -> GetSpellInfo ( SPELL_DK_GLYPH_OF_DEATH_COIL ))
2012-02-18 12:12:49 +01:00
return false ;
return true ;
}
2013-01-11 04:18:02 +01:00
void HandleDummy ( SpellEffIndex /*effIndex*/ )
2011-05-06 22:08:43 -03:00
{
2013-01-11 04:18:02 +01:00
Unit * caster = GetCaster ();
if ( Unit * target = GetHitUnit ())
2011-05-06 22:08:43 -03:00
{
2013-01-11 04:18:02 +01:00
if ( caster -> IsFriendlyTo ( target ))
{
2015-01-12 23:49:19 +00:00
if ( target -> GetCreatureType () == CREATURE_TYPE_UNDEAD ) // Any undead ally, including caster if he has lichborne.
{
caster -> CastSpell ( target , SPELL_DK_DEATH_COIL_HEAL , true );
}
else if ( target != caster ) // Any non undead ally except caster and only if caster has glyph of death coil.
{
2015-02-08 19:40:03 +01:00
SpellInfo const * DCD = sSpellMgr -> AssertSpellInfo ( SPELL_DK_DEATH_COIL_DAMAGE );
2015-01-12 23:49:19 +00:00
SpellEffectInfo const * eff = DCD -> GetEffect ( EFFECT_0 );
2015-01-28 21:58:08 +01:00
int32 bp = caster -> SpellDamageBonusDone ( target , DCD , eff -> CalcValue ( caster ), SPELL_DIRECT_DAMAGE , eff );
2015-01-12 23:49:19 +00:00
caster -> CastCustomSpell ( target , SPELL_DK_DEATH_COIL_BARRIER , & bp , nullptr , nullptr , true );
}
2013-01-11 04:18:02 +01:00
}
2015-01-12 23:49:19 +00:00
else // Any enemy target.
2013-01-11 04:18:02 +01:00
{
2015-01-12 23:49:19 +00:00
caster -> CastSpell ( target , SPELL_DK_DEATH_COIL_DAMAGE , true );
2013-01-11 04:18:02 +01:00
}
}
2015-01-12 23:49:19 +00:00
if ( caster -> HasAura ( SPELL_DK_ENHANCED_DEATH_COIL ))
caster -> CastSpell ( caster , SPELL_DK_SHADOW_OF_DEATH , true );
2013-01-11 04:18:02 +01:00
}
SpellCastResult CheckCast ()
{
Unit * caster = GetCaster ();
if ( Unit * target = GetExplTargetUnit ())
{
if ( ! caster -> IsFriendlyTo ( target ) && ! caster -> isInFront ( target ))
return SPELL_FAILED_UNIT_NOT_INFRONT ;
2015-01-12 23:49:19 +00:00
if ( target -> IsFriendlyTo ( caster ) && target -> GetCreatureType () != CREATURE_TYPE_UNDEAD && ! caster -> HasAura ( SPELL_DK_GLYPH_OF_DEATH_COIL ))
2013-01-11 04:18:02 +01:00
return SPELL_FAILED_BAD_TARGETS ;
2011-01-22 17:21:24 +01:00
}
2013-01-11 04:18:02 +01:00
else
return SPELL_FAILED_BAD_TARGETS ;
return SPELL_CAST_OK ;
2011-01-22 17:21:24 +01:00
}
2014-04-29 16:35:11 +02:00
void Register () override
2011-01-22 17:21:24 +01:00
{
2013-01-11 04:18:02 +01:00
OnCheckCast += SpellCheckCastFn ( spell_dk_death_coil_SpellScript :: CheckCast );
OnEffectHitTarget += SpellEffectFn ( spell_dk_death_coil_SpellScript :: HandleDummy , EFFECT_0 , SPELL_EFFECT_DUMMY );
2011-01-22 17:21:24 +01:00
}
};
2014-04-29 16:35:11 +02:00
SpellScript * GetSpellScript () const override
2011-01-22 17:21:24 +01:00
{
2013-01-11 04:18:02 +01:00
return new spell_dk_death_coil_SpellScript ();
2010-08-18 00:20:23 +06:00
}
2011-01-22 17:21:24 +01:00
};
2013-01-11 04:18:02 +01:00
// 52751 - Death Gate
2011-03-04 23:53:11 +01:00
class spell_dk_death_gate : public SpellScriptLoader
{
public :
2013-10-22 20:23:07 +02:00
spell_dk_death_gate () : SpellScriptLoader ( "spell_dk_death_gate" ) { }
2011-03-04 23:53:11 +01:00
class spell_dk_death_gate_SpellScript : public SpellScript
{
PrepareSpellScript ( spell_dk_death_gate_SpellScript );
SpellCastResult CheckClass ()
{
if ( GetCaster () -> getClass () != CLASS_DEATH_KNIGHT )
{
SetCustomCastResultMessage ( SPELL_CUSTOM_ERROR_MUST_BE_DEATH_KNIGHT );
return SPELL_FAILED_CUSTOM_ERROR ;
}
return SPELL_CAST_OK ;
}
void HandleScript ( SpellEffIndex effIndex )
{
PreventHitDefaultEffect ( effIndex );
2012-02-18 12:12:49 +01:00
if ( Unit * target = GetHitUnit ())
target -> CastSpell ( target , GetEffectValue (), false );
2011-03-04 23:53:11 +01:00
}
2014-04-29 16:35:11 +02:00
void Register () override
2011-03-04 23:53:11 +01:00
{
OnCheckCast += SpellCheckCastFn ( spell_dk_death_gate_SpellScript :: CheckClass );
2011-09-25 13:29:17 +02:00
OnEffectHitTarget += SpellEffectFn ( spell_dk_death_gate_SpellScript :: HandleScript , EFFECT_0 , SPELL_EFFECT_SCRIPT_EFFECT );
2011-03-04 23:53:11 +01:00
}
};
2014-04-29 16:35:11 +02:00
SpellScript * GetSpellScript () const override
2011-03-04 23:53:11 +01:00
{
return new spell_dk_death_gate_SpellScript ();
}
};
2013-01-11 04:18:02 +01:00
// 49560 - Death Grip
class spell_dk_death_grip : public SpellScriptLoader
{
public :
spell_dk_death_grip () : SpellScriptLoader ( "spell_dk_death_grip" ) { }
class spell_dk_death_grip_SpellScript : public SpellScript
{
PrepareSpellScript ( spell_dk_death_grip_SpellScript );
void HandleDummy ( SpellEffIndex /*effIndex*/ )
{
int32 damage = GetEffectValue ();
Position const * pos = GetExplTargetDest ();
if ( Unit * target = GetHitUnit ())
{
if ( ! target -> HasAuraType ( SPELL_AURA_DEFLECT_SPELLS )) // Deterrence
target -> CastSpell ( pos -> GetPositionX (), pos -> GetPositionY (), pos -> GetPositionZ (), damage , true );
}
}
2014-04-29 16:35:11 +02:00
void Register () override
2013-01-11 04:18:02 +01:00
{
OnEffectHitTarget += SpellEffectFn ( spell_dk_death_grip_SpellScript :: HandleDummy , EFFECT_0 , SPELL_EFFECT_DUMMY );
}
};
2014-04-29 16:35:11 +02:00
SpellScript * GetSpellScript () const override
2013-01-11 04:18:02 +01:00
{
return new spell_dk_death_grip_SpellScript ();
}
};
// 48743 - Death Pact
2015-01-12 23:49:19 +00:00
/// 6.x
2011-01-22 17:21:24 +01:00
class spell_dk_death_pact : public SpellScriptLoader
{
public :
spell_dk_death_pact () : SpellScriptLoader ( "spell_dk_death_pact" ) { }
2010-08-18 00:20:23 +06:00
2015-01-12 23:49:19 +00:00
class spell_dk_death_pact_AuraScript : public AuraScript
2010-08-18 00:20:23 +06:00
{
2015-01-12 23:49:19 +00:00
PrepareAuraScript ( spell_dk_death_pact_AuraScript );
2012-06-29 18:45:18 +02:00
2015-01-12 23:49:19 +00:00
void HandleCalcAmount ( AuraEffect const * /*aurEff*/ , int32 & amount , bool & /*canBeRecalculated*/ )
2010-08-18 00:20:23 +06:00
{
2015-01-12 23:49:19 +00:00
if ( Unit * caster = GetCaster ())
amount = int32 ( caster -> CountPctFromMaxHealth ( amount ));
2010-08-18 00:20:23 +06:00
}
2014-04-29 16:35:11 +02:00
void Register () override
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
DoEffectCalcAmount += AuraEffectCalcAmountFn ( spell_dk_death_pact_AuraScript :: HandleCalcAmount , EFFECT_1 , SPELL_AURA_SCHOOL_HEAL_ABSORB );
2011-01-22 17:21:24 +01:00
}
};
2015-01-12 23:49:19 +00:00
AuraScript * GetAuraScript () const override
2010-08-18 00:20:23 +06:00
{
2015-01-12 23:49:19 +00:00
return new spell_dk_death_pact_AuraScript ();
2010-08-18 00:20:23 +06:00
}
};
2013-07-25 15:34:36 +02:00
// 49998 - Death Strike
2015-01-12 23:49:19 +00:00
/// 6.x
2013-01-11 04:18:02 +01:00
class spell_dk_death_strike : public SpellScriptLoader
2010-08-18 00:20:23 +06:00
{
2011-01-22 17:21:24 +01:00
public :
2013-01-11 04:18:02 +01:00
spell_dk_death_strike () : SpellScriptLoader ( "spell_dk_death_strike" ) { }
2010-08-18 00:20:23 +06:00
2013-01-11 04:18:02 +01:00
class spell_dk_death_strike_SpellScript : public SpellScript
2010-08-18 00:20:23 +06:00
{
2013-01-11 04:18:02 +01:00
PrepareSpellScript ( spell_dk_death_strike_SpellScript );
2012-06-08 11:01:27 -04:00
2014-04-29 16:35:11 +02:00
bool Validate ( SpellInfo const * /*spellInfo*/ ) override
2010-08-18 00:20:23 +06:00
{
2015-01-12 23:49:19 +00:00
if ( ! sSpellMgr -> GetSpellInfo ( SPELL_DK_DEATH_STRIKE_HEAL ) ||
2013-07-23 16:28:23 +02:00
! sSpellMgr -> GetSpellInfo ( SPELL_DK_BLOOD_SHIELD_MASTERY ) ||
! sSpellMgr -> GetSpellInfo ( SPELL_DK_BLOOD_SHIELD_ABSORB ))
2011-01-22 17:21:24 +01:00
return false ;
return true ;
}
2015-01-12 23:49:19 +00:00
void HandleHeal ( SpellEffIndex /*effIndex*/ )
2012-06-08 10:08:02 -04:00
{
2015-01-12 23:49:19 +00:00
Unit * caster = GetCaster ();
int32 heal = caster -> GetTotalAttackPowerValue ( BASE_ATTACK ) * 4 ; /// todo, add versatality bonus as it will probably not apply to the heal due to its damageclass SPELL_DAMAGE_CLASS_NONE.
caster -> CastCustomSpell ( SPELL_DK_DEATH_STRIKE_HEAL , SPELLVALUE_BASE_POINT0 , heal , caster , true );
2013-07-23 14:55:05 +02:00
2015-01-12 23:49:19 +00:00
if ( ! caster -> HasAura ( SPELL_DK_BLOOD_PRESENCE ) || ! caster -> HasAura ( SPELL_DK_IMPROVED_BLOOD_PRESENCE ))
2013-07-23 14:55:05 +02:00
return ;
2015-01-12 23:49:19 +00:00
/// todo, if SPELL_AURA_MOD_ABSORB_PERCENTAGE will not apply to SPELL_DAMAGE_CLASS_NONE, resolve must be applied here.
if ( AuraEffect const * aurEff = caster -> GetAuraEffect ( SPELL_DK_BLOOD_SHIELD_MASTERY , EFFECT_0 ))
caster -> CastCustomSpell ( SPELL_DK_BLOOD_SHIELD_ABSORB , SPELLVALUE_BASE_POINT0 , CalculatePct ( heal , aurEff -> GetAmount ()), caster );
2010-08-18 00:20:23 +06:00
}
2014-04-29 16:35:11 +02:00
void Register () override
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
OnEffectHitTarget += SpellEffectFn ( spell_dk_death_strike_SpellScript :: HandleHeal , EFFECT_1 , SPELL_EFFECT_WEAPON_PERCENT_DAMAGE );
2011-01-22 17:21:24 +01:00
}
};
2014-04-29 16:35:11 +02:00
SpellScript * GetSpellScript () const override
2010-08-18 00:20:23 +06:00
{
2013-01-11 04:18:02 +01:00
return new spell_dk_death_strike_SpellScript ();
2010-08-18 00:20:23 +06:00
}
};
2015-01-12 23:49:19 +00:00
// 85948 - Festering Strike
/// 6.x
class spell_dk_festering_strike : public SpellScriptLoader
2013-07-23 14:55:05 +02:00
{
2013-07-23 16:28:23 +02:00
public :
2015-01-12 23:49:19 +00:00
spell_dk_festering_strike () : SpellScriptLoader ( "spell_dk_festering_strike" ) { }
2013-07-23 14:55:05 +02:00
2015-01-12 23:49:19 +00:00
class spell_dk_festering_strike_SpellScript : public SpellScript
2013-07-23 14:55:05 +02:00
{
2015-01-12 23:49:19 +00:00
PrepareSpellScript ( spell_dk_festering_strike_SpellScript );
2013-07-23 14:55:05 +02:00
2015-01-26 23:33:51 +01:00
bool Validate ( SpellInfo const * /*spellInfo*/ ) override
2013-07-23 16:28:23 +02:00
{
2015-01-12 23:49:19 +00:00
if ( ! sSpellMgr -> GetSpellInfo ( SPELL_DK_FROST_FEVER ) || ! sSpellMgr -> GetSpellInfo ( SPELL_DK_BLOOD_PLAGUE ) || ! sSpellMgr -> GetSpellInfo ( SPELL_DK_CHAINS_OF_ICE ))
return false ;
2015-02-08 21:04:20 +01:00
return true ;
2013-07-23 16:28:23 +02:00
}
2013-07-23 14:55:05 +02:00
2015-01-12 23:49:19 +00:00
void HandleScriptEffect ( SpellEffIndex /*effIndex*/ )
2013-07-23 16:28:23 +02:00
{
2015-01-28 21:58:08 +01:00
int32 extraDuration = GetEffectValue ();
2015-01-12 23:49:19 +00:00
Unit * target = GetHitUnit ();
ObjectGuid casterGUID = GetCaster () -> GetGUID ();
if ( Aura * ff = target -> GetAura ( SPELL_DK_FROST_FEVER , casterGUID ))
2013-07-23 16:28:23 +02:00
{
2015-01-12 23:49:19 +00:00
int32 newDuration = std :: min ( ff -> GetDuration () + extraDuration , 2 * MINUTE * IN_MILLISECONDS ); // caps at 2min.
ff -> SetDuration ( newDuration );
ff -> SetMaxDuration ( newDuration );
2013-07-23 16:28:23 +02:00
}
2013-07-23 14:55:05 +02:00
2015-01-12 23:49:19 +00:00
if ( Aura * bp = target -> GetAura ( SPELL_DK_BLOOD_PLAGUE , casterGUID ))
{
int32 newDuration = std :: min ( bp -> GetDuration () + extraDuration , 2 * MINUTE * IN_MILLISECONDS ); // caps at 2min.
bp -> SetDuration ( newDuration );
bp -> SetMaxDuration ( newDuration );
}
2013-07-23 14:55:05 +02:00
2015-01-12 23:49:19 +00:00
if ( Aura * coi = target -> GetAura ( SPELL_DK_CHAINS_OF_ICE , casterGUID ))
{
int32 newDuration = std :: min ( coi -> GetDuration () + extraDuration , 20 * IN_MILLISECONDS ); // is 20sec cap? couldnt manage to get runes up to pass 20.
coi -> SetDuration ( newDuration );
coi -> SetMaxDuration ( newDuration );
}
2013-07-23 16:28:23 +02:00
}
2013-07-23 14:55:05 +02:00
2014-04-29 20:14:42 +02:00
void Register () override
2013-07-23 16:28:23 +02:00
{
2015-01-12 23:49:19 +00:00
OnEffectHitTarget += SpellEffectFn ( spell_dk_festering_strike_SpellScript :: HandleScriptEffect , EFFECT_2 , SPELL_EFFECT_SCRIPT_EFFECT );
2013-07-23 16:28:23 +02:00
}
};
2015-01-12 23:49:19 +00:00
SpellScript * GetSpellScript () const override
2013-07-23 16:28:23 +02:00
{
2015-01-12 23:49:19 +00:00
return new spell_dk_festering_strike_SpellScript ();
2013-07-23 16:28:23 +02:00
}
2013-07-23 14:55:05 +02:00
};
2013-01-11 04:18:02 +01:00
// 47496 - Explode, Ghoul spell for Corpse Explosion
class spell_dk_ghoul_explode : public SpellScriptLoader
2010-12-27 20:14:54 +01:00
{
2011-01-22 17:21:24 +01:00
public :
2013-01-11 04:18:02 +01:00
spell_dk_ghoul_explode () : SpellScriptLoader ( "spell_dk_ghoul_explode" ) { }
2010-12-27 20:14:54 +01:00
2013-01-11 04:18:02 +01:00
class spell_dk_ghoul_explode_SpellScript : public SpellScript
2011-01-22 17:21:24 +01:00
{
2013-01-11 04:18:02 +01:00
PrepareSpellScript ( spell_dk_ghoul_explode_SpellScript );
2010-12-30 02:03:46 +01:00
2014-04-29 20:14:42 +02:00
bool Validate ( SpellInfo const * /*spellInfo*/ ) override
2011-01-22 17:21:24 +01:00
{
2013-01-11 04:18:02 +01:00
if ( ! sSpellMgr -> GetSpellInfo ( SPELL_DK_CORPSE_EXPLOSION_TRIGGERED ))
return false ;
2011-01-22 17:21:24 +01:00
return true ;
}
2010-12-30 02:03:46 +01:00
2015-01-28 21:58:08 +01:00
void HandleDamage ( SpellEffIndex /*effIndex*/ )
{
SetHitDamage ( GetCaster () -> CountPctFromMaxHealth ( GetEffectInfo ( EFFECT_2 ) -> CalcValue ( GetCaster ())));
}
2013-01-11 04:18:02 +01:00
void Suicide ( SpellEffIndex /*effIndex*/ )
2011-01-22 17:21:24 +01:00
{
2013-01-11 04:18:02 +01:00
if ( Unit * unitTarget = GetHitUnit ())
{
// Corpse Explosion (Suicide)
unitTarget -> CastSpell ( unitTarget , SPELL_DK_CORPSE_EXPLOSION_TRIGGERED , true );
}
2011-01-22 17:21:24 +01:00
}
2010-12-27 20:14:54 +01:00
2014-04-29 16:35:11 +02:00
void Register () override
2011-01-22 17:21:24 +01:00
{
2015-01-28 21:58:08 +01:00
OnEffectHitTarget += SpellEffectFn ( spell_dk_ghoul_explode_SpellScript :: HandleDamage , EFFECT_0 , SPELL_EFFECT_SCHOOL_DAMAGE );
2013-01-11 04:18:02 +01:00
OnEffectHitTarget += SpellEffectFn ( spell_dk_ghoul_explode_SpellScript :: Suicide , EFFECT_1 , SPELL_EFFECT_SCHOOL_DAMAGE );
2011-01-22 17:21:24 +01:00
}
};
2014-04-29 16:35:11 +02:00
SpellScript * GetSpellScript () const override
2010-12-27 20:14:54 +01:00
{
2013-01-11 04:18:02 +01:00
return new spell_dk_ghoul_explode_SpellScript ();
2010-12-27 20:14:54 +01:00
}
};
2015-01-12 23:49:19 +00:00
// 58677 - Glyph of Death's Embrace
/// 6.x
class spell_dk_glyph_of_deaths_embrace : public SpellScriptLoader
2011-05-28 03:12:41 +07:00
{
public :
2015-01-12 23:49:19 +00:00
spell_dk_glyph_of_deaths_embrace () : SpellScriptLoader ( "spell_dk_glyph_of_deaths_embrace" ) { }
2011-05-28 03:12:41 +07:00
2015-01-12 23:49:19 +00:00
class spell_dk_glyph_of_deaths_embrace_AuraScript : public AuraScript
2011-05-28 03:12:41 +07:00
{
2015-01-12 23:49:19 +00:00
PrepareAuraScript ( spell_dk_glyph_of_deaths_embrace_AuraScript );
2011-05-28 03:12:41 +07:00
2015-01-12 23:49:19 +00:00
bool CheckProc ( ProcEventInfo & eventInfo )
2013-07-25 18:06:21 +02:00
{
2015-01-26 23:33:51 +01:00
Unit * actionTarget = eventInfo . GetActionTarget ();
return actionTarget && actionTarget -> GetCreatureType () == CREATURE_TYPE_UNDEAD && actionTarget -> GetOwner ();
2013-07-25 18:06:21 +02:00
}
2014-04-29 16:35:11 +02:00
void Register () override
2013-07-25 18:06:21 +02:00
{
2015-01-12 23:49:19 +00:00
DoCheckProc += AuraCheckProcFn ( spell_dk_glyph_of_deaths_embrace_AuraScript :: CheckProc );
2013-07-25 18:06:21 +02:00
}
};
2014-04-29 16:35:11 +02:00
AuraScript * GetAuraScript () const override
2013-07-25 18:06:21 +02:00
{
2015-01-12 23:49:19 +00:00
return new spell_dk_glyph_of_deaths_embrace_AuraScript ();
2013-07-25 18:06:21 +02:00
}
};
2015-01-12 23:49:19 +00:00
// 159429 - Glyph of Runic Power
/// 6.x
class spell_dk_glyph_of_runic_power : public SpellScriptLoader
2010-12-30 02:03:46 +01:00
{
2011-01-22 17:21:24 +01:00
public :
2015-01-12 23:49:19 +00:00
spell_dk_glyph_of_runic_power () : SpellScriptLoader ( "spell_dk_glyph_of_runic_power" ) { }
2010-12-30 02:03:46 +01:00
2015-01-12 23:49:19 +00:00
class spell_dk_glyph_of_runic_power_AuraScript : public AuraScript
2010-12-30 02:03:46 +01:00
{
2015-01-12 23:49:19 +00:00
PrepareAuraScript ( spell_dk_glyph_of_runic_power_AuraScript );
2010-12-30 02:03:46 +01:00
2014-04-29 16:35:11 +02:00
bool Validate ( SpellInfo const * /*spellInfo*/ ) override
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
if ( ! sSpellMgr -> GetSpellInfo ( SPELL_DK_GLYPH_OF_RUNIC_POWER_TRIGGERED ))
2011-01-22 17:21:24 +01:00
return false ;
return true ;
}
2010-12-30 02:03:46 +01:00
2015-01-26 23:33:51 +01:00
bool Load () override
{
return GetUnitOwner () -> getClass () == CLASS_DEATH_KNIGHT ;
}
2015-01-12 23:49:19 +00:00
bool CheckProc ( ProcEventInfo & eventInfo )
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
return eventInfo . GetSpellInfo () && ( eventInfo . GetSpellInfo () -> GetAllEffectsMechanicMask () & ( 1 << MECHANIC_SNARE | 1 << MECHANIC_ROOT | 1 << MECHANIC_FREEZE ));
2011-01-22 17:21:24 +01:00
}
2010-12-30 02:03:46 +01:00
2015-01-12 23:49:19 +00:00
void HandleProc ( ProcEventInfo & eventInfo )
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
if ( Unit * target = eventInfo . GetProcTarget ())
2015-01-26 23:33:51 +01:00
target -> CastSpell ( target , SPELL_DK_GLYPH_OF_RUNIC_POWER_TRIGGERED , true );
2011-01-22 17:21:24 +01:00
}
2010-12-30 02:03:46 +01:00
2014-04-29 16:35:11 +02:00
void Register () override
2011-01-22 17:21:24 +01:00
{
2015-01-12 23:49:19 +00:00
DoCheckProc += AuraCheckProcFn ( spell_dk_glyph_of_runic_power_AuraScript :: CheckProc );
OnProc += AuraProcFn ( spell_dk_glyph_of_runic_power_AuraScript :: HandleProc );
2011-01-22 17:21:24 +01:00
}
};
2014-04-29 16:35:11 +02:00
AuraScript * GetAuraScript () const override
2010-12-30 02:03:46 +01:00
{
2015-01-12 23:49:19 +00:00
return new spell_dk_glyph_of_runic_power_AuraScript ();
2010-12-30 02:03:46 +01:00
}
};
2010-12-27 20:14:54 +01:00
2015-01-12 23:49:19 +00:00
// 48792 - Icebound Fortitude
/// 6.x
class spell_dk_icebound_fortitude : public SpellScriptLoader
2013-07-28 14:16:17 +02:00
{
public :
2015-01-12 23:49:19 +00:00
spell_dk_icebound_fortitude () : SpellScriptLoader ( "spell_dk_icebound_fortitude" ) { }
2013-07-28 14:16:17 +02:00
2015-01-12 23:49:19 +00:00
class spell_dk_icebound_fortitude_AuraScript : public AuraScript
2013-07-28 14:16:17 +02:00
{
2015-01-12 23:49:19 +00:00
PrepareAuraScript ( spell_dk_icebound_fortitude_AuraScript );
2013-07-28 14:16:17 +02:00
2015-01-12 23:49:19 +00:00
void CalculateAmount ( AuraEffect const * /*aurEff*/ , int32 & amount , bool & /*canBeRecalculated*/ )
2013-07-28 14:16:17 +02:00
{
2015-01-12 23:49:19 +00:00
if ( GetUnitOwner () -> HasAura ( SPELL_DK_IMPROVED_BLOOD_PRESENCE ))
amount += 30 ; /// todo, figure out how tooltip is updated
2013-07-28 14:16:17 +02:00
}
2014-04-29 20:14:42 +02:00
void Register () override
2013-07-28 14:16:17 +02:00
{
2015-01-12 23:49:19 +00:00
DoEffectCalcAmount += AuraEffectCalcAmountFn ( spell_dk_icebound_fortitude_AuraScript :: CalculateAmount , EFFECT_2 , SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN );
2013-07-28 14:16:17 +02:00
}
};
2014-04-29 20:14:42 +02:00
AuraScript * GetAuraScript () const override
2013-07-28 14:16:17 +02:00
{
2015-01-12 23:49:19 +00:00
return new spell_dk_icebound_fortitude_AuraScript ();
2013-07-28 14:16:17 +02:00
}
};
2015-01-12 23:49:19 +00:00
// 121916 - Glyph of the Geist (Unholy)
/// 6.x, does this belong here or in spell_generic? apply this in creature_template_addon? sniffs say this is always cast on raise dead.
class spell_dk_pet_geist_transform : public SpellScriptLoader
2014-06-11 19:59:50 +02:00
{
public :
2015-01-12 23:49:19 +00:00
spell_dk_pet_geist_transform () : SpellScriptLoader ( "spell_dk_pet_geist_transform" ) { }
2014-06-11 19:59:50 +02:00
2015-01-12 23:49:19 +00:00
class spell_dk_pet_geist_transform_SpellScript : public SpellScript
2014-06-11 19:59:50 +02:00
{
2015-01-12 23:49:19 +00:00
PrepareSpellScript ( spell_dk_pet_geist_transform_SpellScript );
2014-06-11 19:59:50 +02:00
2015-01-12 23:49:19 +00:00
bool Load () override
2014-06-11 19:59:50 +02:00
{
2015-01-12 23:49:19 +00:00
return GetCaster () -> IsPet ();
2014-06-11 19:59:50 +02:00
}
2015-01-12 23:49:19 +00:00
SpellCastResult CheckCast ()
2014-06-11 19:59:50 +02:00
{
2015-01-12 23:49:19 +00:00
if ( Unit * owner = GetCaster () -> GetOwner ())
if ( owner -> HasAura ( SPELL_DK_GLYPH_OF_THE_GEIST ))
return SPELL_CAST_OK ;
2014-06-11 19:59:50 +02:00
2015-01-12 23:49:19 +00:00
return SPELL_FAILED_SPELL_UNAVAILABLE ;
2014-06-11 19:59:50 +02:00
}
void Register () override
{
2015-01-12 23:49:19 +00:00
OnCheckCast += SpellCheckCastFn ( spell_dk_pet_geist_transform_SpellScript :: CheckCast );
2014-06-11 19:59:50 +02:00
}
};
SpellScript * GetSpellScript () const override
{
2015-01-12 23:49:19 +00:00
return new spell_dk_pet_geist_transform_SpellScript ();
2014-06-11 19:59:50 +02:00
}
};
2015-01-12 23:49:19 +00:00
// 147157 Glyph of the Skeleton (Unholy)
/// 6.x, does this belong here or in spell_generic? apply this in creature_template_addon? sniffs say this is always cast on raise dead.
class spell_dk_pet_skeleton_transform : public SpellScriptLoader
2013-07-25 18:06:21 +02:00
{
public :
2015-01-12 23:49:19 +00:00
spell_dk_pet_skeleton_transform () : SpellScriptLoader ( "spell_dk_pet_skeleton_transform" ) { }
2013-07-25 18:06:21 +02:00
2015-01-12 23:49:19 +00:00
class spell_dk_pet_skeleton_transform_SpellScript : public SpellScript
2013-07-25 18:06:21 +02:00
{
2015-01-12 23:49:19 +00:00
PrepareSpellScript ( spell_dk_pet_skeleton_transform_SpellScript );
2013-07-27 17:29:19 +02:00
2015-01-12 23:49:19 +00:00
SpellCastResult CheckCast ()
2013-07-25 18:06:21 +02:00
{
2015-01-12 23:49:19 +00:00
if ( Unit * owner = GetCaster () -> GetOwner ())
if ( owner -> HasAura ( SPELL_DK_GLYPH_OF_THE_SKELETON ))
return SPELL_CAST_OK ;
2013-07-25 18:06:21 +02:00
2015-01-12 23:49:19 +00:00
return SPELL_FAILED_SPELL_UNAVAILABLE ;
2013-07-25 18:06:21 +02:00
}
2014-04-29 16:35:11 +02:00
void Register () override
2013-07-25 18:06:21 +02:00
{
2015-01-12 23:49:19 +00:00
OnCheckCast += SpellCheckCastFn ( spell_dk_pet_skeleton_transform_SpellScript :: CheckCast );
2013-07-25 18:06:21 +02:00
}
};
2015-01-12 23:49:19 +00:00
SpellScript * GetSpellScript () const override
2014-01-30 02:40:12 +01:00
{
2015-01-12 23:49:19 +00:00
return new spell_dk_pet_skeleton_transform_SpellScript ();
2014-01-30 02:40:12 +01:00
}
};
// 46584 - Raise Dead
2015-01-12 23:49:19 +00:00
/// 6.x
2014-01-30 02:40:12 +01:00
class spell_dk_raise_dead : public SpellScriptLoader
{
public :
spell_dk_raise_dead () : SpellScriptLoader ( "spell_dk_raise_dead" ) { }
class spell_dk_raise_dead_SpellScript : public SpellScript
{
PrepareSpellScript ( spell_dk_raise_dead_SpellScript );
2014-09-25 21:10:00 +02:00
public :
2015-01-12 23:49:19 +00:00
spell_dk_raise_dead_SpellScript () { }
2014-09-25 21:10:00 +02:00
private :
2014-04-29 16:35:11 +02:00
bool Validate ( SpellInfo const * spellInfo ) override
2014-01-30 02:40:12 +01:00
{
2015-01-12 23:49:19 +00:00
if ( ! spellInfo -> GetEffect ( EFFECT_0 ) || ! sSpellMgr -> GetSpellInfo ( spellInfo -> GetEffect ( EFFECT_0 ) -> CalcValue ()))
2014-12-29 01:00:16 +01:00
return false ;
2015-02-08 21:04:20 +01:00
return true ;
2014-01-30 02:40:12 +01:00
}
2014-04-29 16:35:11 +02:00
bool Load () override
2014-01-30 02:40:12 +01:00
{
return GetCaster () -> GetTypeId () == TYPEID_PLAYER ;
}
2015-01-12 23:49:19 +00:00
void HandleDummy ( SpellEffIndex /*effIndex*/ )
2014-01-30 02:40:12 +01:00
{
2015-01-28 21:58:08 +01:00
GetCaster () -> CastSpell ((( Unit * ) nullptr ), GetEffectValue (), true );
2014-01-30 02:40:12 +01:00
}
2014-04-29 16:35:11 +02:00
void Register () override
2014-01-30 02:40:12 +01:00
{
2015-01-12 23:49:19 +00:00
OnEffectHitTarget += SpellEffectFn ( spell_dk_raise_dead_SpellScript :: HandleDummy , EFFECT_0 , SPELL_EFFECT_DUMMY );
2014-01-30 02:40:12 +01:00
}
};
2014-04-29 16:35:11 +02:00
SpellScript * GetSpellScript () const override
2014-01-30 02:40:12 +01:00
{
return new spell_dk_raise_dead_SpellScript ();
}
};
2015-01-12 23:49:19 +00:00
// 114866 - Soul Reaper, 130735 - Soul Reaper, 130736 - Soul Reaper
/// 6.x
class spell_dk_soul_reaper : public SpellScriptLoader
2013-01-20 04:30:17 +01:00
{
public :
2015-01-12 23:49:19 +00:00
spell_dk_soul_reaper () : SpellScriptLoader ( "spell_dk_soul_reaper" ) { }
2013-01-20 04:30:17 +01:00
2015-01-12 23:49:19 +00:00
class spell_dk_soul_reaper_AuraScript : public AuraScript
2013-01-20 04:30:17 +01:00
{
2015-01-12 23:49:19 +00:00
PrepareAuraScript ( spell_dk_soul_reaper_AuraScript );
2013-01-20 04:30:17 +01:00
2015-01-12 23:49:19 +00:00
void HandlePeriodicDummy ( AuraEffect const * aurEff )
2013-01-20 04:30:17 +01:00
{
2015-01-12 23:49:19 +00:00
Unit * caster = GetCaster ();
Unit * target = GetUnitOwner ();
2013-01-20 04:30:17 +01:00
2015-01-12 23:49:19 +00:00
if ( ! caster || ! target )
return ;
2013-07-18 12:05:57 +02:00
2015-01-12 23:49:19 +00:00
float pct = target -> GetHealthPct ();
2013-07-18 12:05:57 +02:00
2015-01-12 23:49:19 +00:00
if ( pct < 35.f || ( pct < 45.f && ( caster -> HasAura ( SPELL_DK_IMPROVED_SOUL_REAPER ) || caster -> HasAura ( SPELL_DK_T15_DPS_4P_BONUS ))))
caster -> CastSpell ( target , SPELL_DK_SOUL_REAPER_DAMAGE , true , nullptr , aurEff );
2013-07-18 12:05:57 +02:00
}
2015-01-12 23:49:19 +00:00
void HandleRemove ( AuraEffect const * /*aurEff*/ , AuraEffectHandleModes /*mode*/ )
2013-07-18 12:05:57 +02:00
{
2015-01-12 23:49:19 +00:00
if ( GetTargetApplication () -> GetRemoveMode () != AURA_REMOVE_BY_DEATH )
return ;
if ( Unit * caster = GetCaster ())
caster -> CastSpell ( caster , SPELL_DK_SOUL_REAPER_HASTE , true );
2013-07-18 12:05:57 +02:00
}
2014-04-29 16:35:11 +02:00
void Register () override
2013-07-18 12:05:57 +02:00
{
2015-01-12 23:49:19 +00:00
OnEffectPeriodic += AuraEffectPeriodicFn ( spell_dk_soul_reaper_AuraScript :: HandlePeriodicDummy , EFFECT_1 , SPELL_AURA_PERIODIC_DUMMY );
AfterEffectRemove += AuraEffectApplyFn ( spell_dk_soul_reaper_AuraScript :: HandleRemove , EFFECT_1 , SPELL_AURA_PERIODIC_DUMMY , AURA_EFFECT_HANDLE_REAL );
2013-07-18 12:05:57 +02:00
}
};
2014-04-29 16:35:11 +02:00
AuraScript * GetAuraScript () const override
2013-07-18 12:05:57 +02:00
{
2015-01-12 23:49:19 +00:00
return new spell_dk_soul_reaper_AuraScript ();
2013-07-18 12:05:57 +02:00
}
};
2015-01-12 23:49:19 +00:00
// 115994 - Unholy Blight
/// 6.x
class spell_dk_unholy_blight : public SpellScriptLoader
2011-07-16 00:46:58 +07:00
{
2013-01-11 04:18:02 +01:00
public :
2015-01-12 23:49:19 +00:00
spell_dk_unholy_blight () : SpellScriptLoader ( "spell_dk_unholy_blight" ) { }
2012-02-18 12:12:49 +01:00
2015-01-12 23:49:19 +00:00
class spell_dk_unholy_blight_SpellScript : public SpellScript
2011-07-16 00:46:58 +07:00
{
2015-01-12 23:49:19 +00:00
PrepareSpellScript ( spell_dk_unholy_blight_SpellScript );
2012-02-18 12:12:49 +01:00
2013-01-11 04:18:02 +01:00
void HandleDummy ( SpellEffIndex /*effIndex*/ )
2012-02-18 12:12:49 +01:00
{
2015-01-12 23:49:19 +00:00
GetCaster () -> CastSpell ( GetHitUnit (), SPELL_DK_FROST_FEVER , true );
GetCaster () -> CastSpell ( GetHitUnit (), SPELL_DK_BLOOD_PLAGUE , true );
2012-02-18 12:12:49 +01:00
}
2014-04-29 16:35:11 +02:00
void Register () override
2012-02-18 12:12:49 +01:00
{
2015-01-12 23:49:19 +00:00
OnEffectHitTarget += SpellEffectFn ( spell_dk_unholy_blight_SpellScript :: HandleDummy , EFFECT_0 , SPELL_EFFECT_DUMMY );
2012-02-18 12:12:49 +01:00
}
};
2014-04-29 16:35:11 +02:00
SpellScript * GetSpellScript () const override
2012-02-18 12:12:49 +01:00
{
2015-01-12 23:49:19 +00:00
return new spell_dk_unholy_blight_SpellScript ();
2012-02-18 12:12:49 +01:00
}
};
2013-01-20 04:30:17 +01:00
// 55233 - Vampiric Blood
2015-01-12 23:49:19 +00:00
/// 6.x
2013-01-20 04:30:17 +01:00
class spell_dk_vampiric_blood : public SpellScriptLoader
{
public :
spell_dk_vampiric_blood () : SpellScriptLoader ( "spell_dk_vampiric_blood" ) { }
class spell_dk_vampiric_blood_AuraScript : public AuraScript
{
PrepareAuraScript ( spell_dk_vampiric_blood_AuraScript );
void CalculateAmount ( AuraEffect const * /*aurEff*/ , int32 & amount , bool & /*canBeRecalculated*/ )
{
amount = GetUnitOwner () -> CountPctFromMaxHealth ( amount );
}
2014-04-29 16:35:11 +02:00
void Register () override
2013-01-20 04:30:17 +01:00
{
DoEffectCalcAmount += AuraEffectCalcAmountFn ( spell_dk_vampiric_blood_AuraScript :: CalculateAmount , EFFECT_1 , SPELL_AURA_MOD_INCREASE_HEALTH );
}
};
2014-04-29 16:35:11 +02:00
AuraScript * GetAuraScript () const override
2013-01-20 04:30:17 +01:00
{
return new spell_dk_vampiric_blood_AuraScript ();
}
};
2015-01-12 23:49:19 +00:00
// 81164 - Will of the Necropolis
/// 6.x
2013-01-11 04:18:02 +01:00
class spell_dk_will_of_the_necropolis : public SpellScriptLoader
2012-02-18 12:12:49 +01:00
{
public :
2013-01-11 04:18:02 +01:00
spell_dk_will_of_the_necropolis () : SpellScriptLoader ( "spell_dk_will_of_the_necropolis" ) { }
2012-02-18 12:12:49 +01:00
2013-01-11 04:18:02 +01:00
class spell_dk_will_of_the_necropolis_AuraScript : public AuraScript
2012-02-18 12:12:49 +01:00
{
2013-01-11 04:18:02 +01:00
PrepareAuraScript ( spell_dk_will_of_the_necropolis_AuraScript );
2012-02-18 12:12:49 +01:00
2015-01-26 23:33:51 +01:00
bool Validate ( SpellInfo const * spellInfo ) override
2012-02-18 12:12:49 +01:00
{
2013-07-24 11:31:00 +02:00
if ( ! sSpellMgr -> GetSpellInfo ( SPELL_DK_WILL_OF_THE_NECROPOLIS ))
2013-07-21 13:37:34 +02:00
return false ;
2015-01-26 23:33:51 +01:00
if ( ! spellInfo -> GetEffect ( EFFECT_0 ))
return false ;
2013-01-11 04:18:02 +01:00
return true ;
2012-02-18 12:12:49 +01:00
}
2013-07-24 11:31:00 +02:00
bool CheckProc ( ProcEventInfo & eventInfo )
2012-02-18 12:12:49 +01:00
{
2015-01-26 23:33:51 +01:00
Unit * target = GetTarget ();
if ( target -> HasAura ( SPELL_DK_WILL_OF_THE_NECROPOLIS ))
2015-01-12 23:49:19 +00:00
return false ;
2013-01-11 04:18:02 +01:00
2015-01-26 23:33:51 +01:00
return target -> HealthBelowPctDamaged ( GetSpellInfo () -> GetEffect ( EFFECT_0 ) -> CalcValue ( target ), eventInfo . GetDamageInfo () -> GetDamage ());
2013-01-11 04:18:02 +01:00
}
2013-08-01 17:22:03 +02:00
void HandleProc ( AuraEffect const * aurEff , ProcEventInfo & /*eventInfo*/ )
2013-01-11 04:18:02 +01:00
{
2015-01-12 23:49:19 +00:00
GetTarget () -> CastSpell ( GetTarget (), SPELL_DK_WILL_OF_THE_NECROPOLIS , true , nullptr , aurEff );
2012-02-18 12:12:49 +01:00
}
2012-02-18 16:52:08 +01:00
2014-04-29 16:35:11 +02:00
void Register () override
2013-01-11 04:18:02 +01:00
{
2013-07-24 11:31:00 +02:00
DoCheckProc += AuraCheckProcFn ( spell_dk_will_of_the_necropolis_AuraScript :: CheckProc );
2015-01-12 23:49:19 +00:00
OnEffectProc += AuraEffectProcFn ( spell_dk_will_of_the_necropolis_AuraScript :: HandleProc , EFFECT_0 , SPELL_AURA_PROC_TRIGGER_SPELL );
2013-01-11 04:18:02 +01:00
}
2012-02-18 12:12:49 +01:00
};
2014-04-29 16:35:11 +02:00
AuraScript * GetAuraScript () const override
2012-02-18 12:12:49 +01:00
{
2013-01-11 04:18:02 +01:00
return new spell_dk_will_of_the_necropolis_AuraScript ();
2012-02-18 12:12:49 +01:00
}
};
2015-02-02 02:06:48 +00:00
// 49576 - Death Grip Initial
class spell_dk_death_grip_initial : public SpellScriptLoader
{
public :
spell_dk_death_grip_initial () : SpellScriptLoader ( "spell_dk_death_grip_initial" ) { }
class spell_dk_death_grip_initial_SpellScript : public SpellScript
{
PrepareSpellScript ( spell_dk_death_grip_initial_SpellScript );
SpellCastResult CheckCast ()
{
Unit * caster = GetCaster ();
// Death Grip should not be castable while jumping/falling
if ( caster -> HasUnitState ( UNIT_STATE_JUMPING ) || caster -> HasUnitMovementFlag ( MOVEMENTFLAG_FALLING ))
return SPELL_FAILED_MOVING ;
// Patch 3.3.3 (2010-03-23): Minimum range has been changed to 8 yards in PvP.
Unit * target = GetExplTargetUnit ();
if ( target && target -> GetTypeId () == TYPEID_PLAYER )
if ( caster -> GetDistance ( target ) < 8.f )
return SPELL_FAILED_TOO_CLOSE ;
return SPELL_CAST_OK ;
}
void HandleDummy ( SpellEffIndex /*effIndex*/ )
{
GetCaster () -> CastSpell ( GetHitUnit (), SPELL_DK_DEATH_GRIP , true );
}
void Register () override
{
OnCheckCast += SpellCheckCastFn ( spell_dk_death_grip_initial_SpellScript :: CheckCast );
OnEffectHitTarget += SpellEffectFn ( spell_dk_death_grip_initial_SpellScript :: HandleDummy , EFFECT_0 , SPELL_EFFECT_DUMMY );
}
};
SpellScript * GetSpellScript () const override
{
return new spell_dk_death_grip_initial_SpellScript ();
}
};
2010-08-18 00:20:23 +06:00
void AddSC_deathknight_spell_scripts ()
{
2015-01-12 23:49:19 +00:00
new spell_dk_anti_magic_shell ();
new spell_dk_army_periodic_taunt ();
new spell_dk_army_transform ();
2013-01-11 04:18:02 +01:00
new spell_dk_blood_boil ();
2014-07-24 16:14:25 +02:00
new spell_dk_death_and_decay ();
2013-01-11 04:18:02 +01:00
new spell_dk_death_coil ();
2011-03-04 23:53:11 +01:00
new spell_dk_death_gate ();
2013-01-11 04:18:02 +01:00
new spell_dk_death_grip ();
2011-01-22 17:21:24 +01:00
new spell_dk_death_pact ();
2013-01-11 04:18:02 +01:00
new spell_dk_death_strike ();
2015-01-12 23:49:19 +00:00
new spell_dk_festering_strike ();
2013-01-11 04:18:02 +01:00
new spell_dk_ghoul_explode ();
2015-01-12 23:49:19 +00:00
new spell_dk_glyph_of_deaths_embrace ();
new spell_dk_glyph_of_runic_power ();
2013-01-20 04:30:17 +01:00
new spell_dk_icebound_fortitude ();
2015-01-12 23:49:19 +00:00
new spell_dk_pet_geist_transform ();
new spell_dk_pet_skeleton_transform ();
2014-01-30 02:40:12 +01:00
new spell_dk_raise_dead ();
2015-01-12 23:49:19 +00:00
new spell_dk_soul_reaper ();
new spell_dk_unholy_blight ();
2013-01-20 04:30:17 +01:00
new spell_dk_vampiric_blood ();
2010-12-30 02:03:46 +01:00
new spell_dk_will_of_the_necropolis ();
2015-02-02 02:06:48 +00:00
new spell_dk_death_grip_initial ();
2010-08-06 19:46:02 +02:00
}