diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Spells/spell_dh.cpp | 49 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_dk.cpp | 1134 |
2 files changed, 475 insertions, 708 deletions
diff --git a/src/server/scripts/Spells/spell_dh.cpp b/src/server/scripts/Spells/spell_dh.cpp index 41e0ba17a56..b143cc23e97 100644 --- a/src/server/scripts/Spells/spell_dh.cpp +++ b/src/server/scripts/Spells/spell_dh.cpp @@ -32,39 +32,28 @@ enum DemonHunterSpells }; // 197125 - Chaos Strike -class spell_dh_chaos_strike : public SpellScriptLoader +class spell_dh_chaos_strike : public AuraScript { - public: - spell_dh_chaos_strike() : SpellScriptLoader("spell_dh_chaos_strike") { } - - class spell_dh_chaos_strike_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dh_chaos_strike_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_CHAOS_STRIKE_ENERGIZE }); - } - - void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) - { - PreventDefaultAction(); - GetTarget()->CastCustomSpell(SPELL_CHAOS_STRIKE_ENERGIZE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff); - } - - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_dh_chaos_strike_AuraScript::HandleEffectProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); - } - }; - - AuraScript* GetAuraScript() const override - { - return new spell_dh_chaos_strike_AuraScript(); - } + PrepareAuraScript(spell_dh_chaos_strike); + + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_CHAOS_STRIKE_ENERGIZE }); + } + + void HandleEffectProc(AuraEffect* aurEff, ProcEventInfo& /*eventInfo*/) + { + PreventDefaultAction(); + GetTarget()->CastCustomSpell(SPELL_CHAOS_STRIKE_ENERGIZE, SPELLVALUE_BASE_POINT0, aurEff->GetAmount(), GetTarget(), true, nullptr, aurEff); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_dh_chaos_strike::HandleEffectProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); + } }; void AddSC_demon_hunter_spell_scripts() { - new spell_dh_chaos_strike(); + RegisterAuraScript(spell_dh_chaos_strike); } diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 837c12d749a..e52ccc6ed87 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -77,118 +77,96 @@ enum Misc }; // 70656 - Advantage (T10 4P Melee Bonus) -class spell_dk_advantage_t10_4p : public SpellScriptLoader +class spell_dk_advantage_t10_4p : public AuraScript { -public: - spell_dk_advantage_t10_4p() : SpellScriptLoader("spell_dk_advantage_t10_4p") { } + PrepareAuraScript(spell_dk_advantage_t10_4p); - class spell_dk_advantage_t10_4p_AuraScript : public AuraScript + bool CheckProc(ProcEventInfo& eventInfo) { - PrepareAuraScript(spell_dk_advantage_t10_4p_AuraScript); - - bool CheckProc(ProcEventInfo& eventInfo) + if (Unit* caster = eventInfo.GetActor()) { - if (Unit* caster = eventInfo.GetActor()) - { - Player* player = caster->ToPlayer(); - if (!player || caster->getClass() != CLASS_DEATH_KNIGHT) - return false; + Player* player = caster->ToPlayer(); + if (!player || caster->getClass() != CLASS_DEATH_KNIGHT) + return false; - for (uint8 i = 0; i < player->GetMaxPower(POWER_RUNES); ++i) - if (player->GetRuneCooldown(i) == 0) - return false; - - return true; - } + for (uint8 i = 0; i < player->GetMaxPower(POWER_RUNES); ++i) + if (player->GetRuneCooldown(i) == 0) + return false; - return false; + return true; } - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_dk_advantage_t10_4p_AuraScript::CheckProc); - } - }; + return false; + } - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dk_advantage_t10_4p_AuraScript(); + DoCheckProc += AuraCheckProcFn(spell_dk_advantage_t10_4p::CheckProc); } }; // 48707 - Anti-Magic Shell -class spell_dk_anti_magic_shell : public SpellScriptLoader +class spell_dk_anti_magic_shell : public AuraScript { - public: - spell_dk_anti_magic_shell() : SpellScriptLoader("spell_dk_anti_magic_shell") { } - - class spell_dk_anti_magic_shell_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dk_anti_magic_shell_AuraScript); - - public: - spell_dk_anti_magic_shell_AuraScript() - { - absorbPct = 0; - maxHealth = 0; - absorbedAmount = 0; - } - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_DK_RUNIC_POWER_ENERGIZE, SPELL_DK_VOLATILE_SHIELDING }); - } - - bool Load() override - { - absorbPct = GetSpellInfo()->GetEffect(EFFECT_1)->CalcValue(GetCaster()); - maxHealth = GetCaster()->GetMaxHealth(); - absorbedAmount = 0; - return true; - } + PrepareAuraScript(spell_dk_anti_magic_shell); - void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) - { - amount = CalculatePct(maxHealth, absorbPct); - } +public: + spell_dk_anti_magic_shell() + { + absorbPct = 0; + maxHealth = 0; + absorbedAmount = 0; + } - void Trigger(AuraEffect* aurEff, DamageInfo& /*dmgInfo*/, uint32& absorbAmount) - { - absorbedAmount += absorbAmount; + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DK_RUNIC_POWER_ENERGIZE, SPELL_DK_VOLATILE_SHIELDING }); + } - if (!GetTarget()->HasAura(SPELL_DK_VOLATILE_SHIELDING)) - { - int32 bp = 2 * absorbAmount * 100 / maxHealth; - GetTarget()->CastCustomSpell(SPELL_DK_RUNIC_POWER_ENERGIZE, SPELLVALUE_BASE_POINT0, bp, GetTarget(), true, nullptr, aurEff); - } - } + bool Load() override + { + absorbPct = GetSpellInfo()->GetEffect(EFFECT_1)->CalcValue(GetCaster()); + maxHealth = GetCaster()->GetMaxHealth(); + absorbedAmount = 0; + return true; + } - void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) - { - if (AuraEffect const* volatileShielding = GetTarget()->GetAuraEffect(SPELL_DK_VOLATILE_SHIELDING, EFFECT_1)) - { - int32 damage = CalculatePct(absorbedAmount, volatileShielding->GetAmount()); - GetTarget()->CastCustomSpell(SPELL_DK_VOLATILE_SHIELDING_DAMAGE, SPELLVALUE_BASE_POINT0, damage, nullptr, TRIGGERED_FULL_MASK, nullptr, volatileShielding); - } - } + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + amount = CalculatePct(maxHealth, absorbPct); + } - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_anti_magic_shell_AuraScript::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); - 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); - } + void Trigger(AuraEffect* aurEff, DamageInfo& /*dmgInfo*/, uint32& absorbAmount) + { + absorbedAmount += absorbAmount; - private: - int32 absorbPct; - int32 maxHealth; - uint32 absorbedAmount; - }; + if (!GetTarget()->HasAura(SPELL_DK_VOLATILE_SHIELDING)) + { + int32 bp = 2 * absorbAmount * 100 / maxHealth; + GetTarget()->CastCustomSpell(SPELL_DK_RUNIC_POWER_ENERGIZE, SPELLVALUE_BASE_POINT0, bp, GetTarget(), true, nullptr, aurEff); + } + } - AuraScript* GetAuraScript() const override + void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) + { + if (AuraEffect const* volatileShielding = GetTarget()->GetAuraEffect(SPELL_DK_VOLATILE_SHIELDING, EFFECT_1)) { - return new spell_dk_anti_magic_shell_AuraScript(); + int32 damage = CalculatePct(absorbedAmount, volatileShielding->GetAmount()); + GetTarget()->CastCustomSpell(SPELL_DK_VOLATILE_SHIELDING_DAMAGE, SPELLVALUE_BASE_POINT0, damage, nullptr, TRIGGERED_FULL_MASK, nullptr, volatileShielding); } + } + + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_anti_magic_shell::CalculateAmount, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB); + AfterEffectAbsorb += AuraEffectAbsorbFn(spell_dk_anti_magic_shell::Trigger, EFFECT_0); + AfterEffectRemove += AuraEffectRemoveFn(spell_dk_anti_magic_shell::HandleEffectRemove, EFFECT_0, SPELL_AURA_SCHOOL_ABSORB, AURA_EFFECT_HANDLE_REAL); + } + +private: + int32 absorbPct; + int32 maxHealth; + uint32 absorbedAmount; }; static uint32 const ArmyTransforms[] @@ -203,425 +181,319 @@ static uint32 const ArmyTransforms[] // 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 +class spell_dk_army_transform : public SpellScript { - public: - spell_dk_army_transform() : SpellScriptLoader("spell_dk_army_transform") { } - - class spell_dk_army_transform_SpellScript : public SpellScript - { - PrepareSpellScript(spell_dk_army_transform_SpellScript); + PrepareSpellScript(spell_dk_army_transform); - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_DK_GLYPH_OF_FOUL_MENAGERIE }); - } - - bool Load() override - { - return GetCaster()->IsGuardian(); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DK_GLYPH_OF_FOUL_MENAGERIE }); + } - SpellCastResult CheckCast() - { - if (Unit* owner = GetCaster()->GetOwner()) - if (owner->HasAura(SPELL_DK_GLYPH_OF_FOUL_MENAGERIE)) - return SPELL_CAST_OK; + bool Load() override + { + return GetCaster()->IsGuardian(); + } - return SPELL_FAILED_SPELL_UNAVAILABLE; - } + SpellCastResult CheckCast() + { + if (Unit* owner = GetCaster()->GetOwner()) + if (owner->HasAura(SPELL_DK_GLYPH_OF_FOUL_MENAGERIE)) + return SPELL_CAST_OK; - void HandleDummy(SpellEffIndex /*effIndex*/) - { - GetCaster()->CastSpell(GetCaster(), Trinity::Containers::SelectRandomContainerElement(ArmyTransforms), true); - } + return SPELL_FAILED_SPELL_UNAVAILABLE; + } - void Register() override - { - OnCheckCast += SpellCheckCastFn(spell_dk_army_transform_SpellScript::CheckCast); - OnEffectHitTarget += SpellEffectFn(spell_dk_army_transform_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; + void HandleDummy(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetCaster(), Trinity::Containers::SelectRandomContainerElement(ArmyTransforms), true); + } - SpellScript* GetSpellScript() const override - { - return new spell_dk_army_transform_SpellScript(); - } + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_dk_army_transform::CheckCast); + OnEffectHitTarget += SpellEffectFn(spell_dk_army_transform::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } }; // 50842 - Blood Boil -class spell_dk_blood_boil : public SpellScriptLoader +class spell_dk_blood_boil : public SpellScript { - public: - spell_dk_blood_boil() : SpellScriptLoader("spell_dk_blood_boil") { } + PrepareSpellScript(spell_dk_blood_boil); - class spell_dk_blood_boil_SpellScript : public SpellScript - { - PrepareSpellScript(spell_dk_blood_boil_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_DK_BLOOD_PLAGUE }); - } - - void HandleEffect() - { - GetCaster()->CastSpell(GetHitUnit(), SPELL_DK_BLOOD_PLAGUE, true); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DK_BLOOD_PLAGUE }); + } - void Register() override - { - OnHit += SpellHitFn(spell_dk_blood_boil_SpellScript::HandleEffect); - } - }; + void HandleEffect() + { + GetCaster()->CastSpell(GetHitUnit(), SPELL_DK_BLOOD_PLAGUE, true); + } - SpellScript* GetSpellScript() const override - { - return new spell_dk_blood_boil_SpellScript(); - } + void Register() override + { + OnHit += SpellHitFn(spell_dk_blood_boil::HandleEffect); + } }; // 49028 - Dancing Rune Weapon /// 7.1.5 -class spell_dk_dancing_rune_weapon : public SpellScriptLoader +class spell_dk_dancing_rune_weapon : public AuraScript { - public: - spell_dk_dancing_rune_weapon() : SpellScriptLoader("spell_dk_dancing_rune_weapon") { } + PrepareAuraScript(spell_dk_dancing_rune_weapon); - class spell_dk_dancing_rune_weapon_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dk_dancing_rune_weapon_AuraScript); + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sObjectMgr->GetCreatureTemplate(NPC_DK_DANCING_RUNE_WEAPON)) + return false; + return true; + } - bool Validate(SpellInfo const* /*spellInfo*/) override - { - if (!sObjectMgr->GetCreatureTemplate(NPC_DK_DANCING_RUNE_WEAPON)) - return false; - return true; - } + // This is a port of the old switch hack in Unit.cpp, it's not correct + void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + Unit* caster = GetCaster(); + if (!caster) + return; - // This is a port of the old switch hack in Unit.cpp, it's not correct - void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo) + Unit* drw = nullptr; + for (Unit* controlled : caster->m_Controlled) + { + if (controlled->GetEntry() == NPC_DK_DANCING_RUNE_WEAPON) { - PreventDefaultAction(); - Unit* caster = GetCaster(); - if (!caster) - return; - - Unit* drw = nullptr; - for (Unit* controlled : caster->m_Controlled) - { - if (controlled->GetEntry() == NPC_DK_DANCING_RUNE_WEAPON) - { - drw = controlled; - break; - } - } - - if (!drw || !drw->GetVictim()) - return; - - SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); - if (!spellInfo) - return; - - DamageInfo* damageInfo = eventInfo.GetDamageInfo(); - if (!damageInfo || !damageInfo->GetDamage()) - return; - - int32 amount = static_cast<int32>(damageInfo->GetDamage()) / 2; - SpellNonMeleeDamage log(drw, drw->GetVictim(), spellInfo, { spellInfo->GetSpellXSpellVisualId(drw), 0 }, spellInfo->GetSchoolMask()); - log.damage = amount; - drw->DealDamage(drw->GetVictim(), amount, nullptr, SPELL_DIRECT_DAMAGE, spellInfo->GetSchoolMask(), spellInfo, true); - drw->SendSpellNonMeleeDamageLog(&log); + drw = controlled; + break; } + } - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_dk_dancing_rune_weapon_AuraScript::HandleProc, EFFECT_1, SPELL_AURA_DUMMY); - } - }; + if (!drw || !drw->GetVictim()) + return; - AuraScript* GetAuraScript() const override - { - return new spell_dk_dancing_rune_weapon_AuraScript(); - } + SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); + if (!spellInfo) + return; + + DamageInfo* damageInfo = eventInfo.GetDamageInfo(); + if (!damageInfo || !damageInfo->GetDamage()) + return; + + int32 amount = static_cast<int32>(damageInfo->GetDamage()) / 2; + SpellNonMeleeDamage log(drw, drw->GetVictim(), spellInfo, { spellInfo->GetSpellXSpellVisualId(drw), 0 }, spellInfo->GetSchoolMask()); + log.damage = amount; + drw->DealDamage(drw->GetVictim(), amount, nullptr, SPELL_DIRECT_DAMAGE, spellInfo->GetSchoolMask(), spellInfo, true); + drw->SendSpellNonMeleeDamageLog(&log); + } + + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_dk_dancing_rune_weapon::HandleProc, EFFECT_1, SPELL_AURA_DUMMY); + } }; // 43265 - Death and Decay -class spell_dk_death_and_decay : public SpellScriptLoader +class spell_dk_death_and_decay : public SpellScript { - public: - spell_dk_death_and_decay() : SpellScriptLoader("spell_dk_death_and_decay") { } + PrepareSpellScript(spell_dk_death_and_decay); - class spell_dk_death_and_decay_SpellScript : public SpellScript - { - PrepareSpellScript(spell_dk_death_and_decay_SpellScript); + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DK_TIGHTENING_GRASP, SPELL_DK_TIGHTENING_GRASP_SLOW }); + } - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_DK_TIGHTENING_GRASP, SPELL_DK_TIGHTENING_GRASP_SLOW }); - } + void HandleDummy() + { + if (GetCaster()->HasAura(SPELL_DK_TIGHTENING_GRASP)) + if (WorldLocation const* pos = GetExplTargetDest()) + GetCaster()->CastSpell(pos->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ(), SPELL_DK_TIGHTENING_GRASP_SLOW, true); + } - void HandleDummy() - { - if (GetCaster()->HasAura(SPELL_DK_TIGHTENING_GRASP)) - if (WorldLocation const* pos = GetExplTargetDest()) - GetCaster()->CastSpell(pos->GetPositionX(), pos->GetPositionY(), pos->GetPositionZ(), SPELL_DK_TIGHTENING_GRASP_SLOW, true); - } + void Register() override + { + OnCast += SpellCastFn(spell_dk_death_and_decay::HandleDummy); + } +}; - void Register() override - { - OnCast += SpellCastFn(spell_dk_death_and_decay_SpellScript::HandleDummy); - } - }; +// 43265 - Death and Decay (Aura) +class spell_dk_death_and_decay_AuraScript : public AuraScript + { + PrepareAuraScript(spell_dk_death_and_decay_AuraScript); - SpellScript* GetSpellScript() const override + void HandleDummyTick(AuraEffect const* aurEff) { - return new spell_dk_death_and_decay_SpellScript(); + if (Unit* caster = GetCaster()) + caster->CastSpell(GetTarget(), SPELL_DK_DEATH_AND_DECAY_DAMAGE, true, nullptr, aurEff); } - 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->CastSpell(GetTarget(), SPELL_DK_DEATH_AND_DECAY_DAMAGE, true, nullptr, aurEff); - } - - void Register() override - { - OnEffectPeriodic += AuraEffectPeriodicFn(spell_dk_death_and_decay_AuraScript::HandleDummyTick, EFFECT_2, SPELL_AURA_PERIODIC_DUMMY); - } - }; - - AuraScript* GetAuraScript() const override + void Register() override { - return new spell_dk_death_and_decay_AuraScript(); + OnEffectPeriodic += AuraEffectPeriodicFn(spell_dk_death_and_decay_AuraScript::HandleDummyTick, EFFECT_2, SPELL_AURA_PERIODIC_DUMMY); } -}; + }; // 47541 - Death Coil -class spell_dk_death_coil : public SpellScriptLoader +class spell_dk_death_coil : public SpellScript { - public: - spell_dk_death_coil() : SpellScriptLoader("spell_dk_death_coil") { } - - class spell_dk_death_coil_SpellScript : public SpellScript - { - PrepareSpellScript(spell_dk_death_coil_SpellScript); + PrepareSpellScript(spell_dk_death_coil); - bool Validate(SpellInfo const* /*spell*/) override - { - return ValidateSpellInfo({ SPELL_DK_DEATH_COIL_DAMAGE, SPELL_DK_UNHOLY, SPELL_DK_UNHOLY_VIGOR }); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - caster->CastSpell(GetHitUnit(), SPELL_DK_DEATH_COIL_DAMAGE, true); - if (AuraEffect const* unholyAura = caster->GetAuraEffect(SPELL_DK_UNHOLY, EFFECT_6)) // can be any effect, just here to send SPELL_FAILED_DONT_REPORT on failure - caster->CastSpell(caster, SPELL_DK_UNHOLY_VIGOR, true, nullptr, unholyAura); - } + bool Validate(SpellInfo const* /*spell*/) override + { + return ValidateSpellInfo({ SPELL_DK_DEATH_COIL_DAMAGE, SPELL_DK_UNHOLY, SPELL_DK_UNHOLY_VIGOR }); + } - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_dk_death_coil_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + caster->CastSpell(GetHitUnit(), SPELL_DK_DEATH_COIL_DAMAGE, true); + if (AuraEffect const* unholyAura = caster->GetAuraEffect(SPELL_DK_UNHOLY, EFFECT_6)) // can be any effect, just here to send SPELL_FAILED_DONT_REPORT on failure + caster->CastSpell(caster, SPELL_DK_UNHOLY_VIGOR, true, nullptr, unholyAura); + } - SpellScript* GetSpellScript() const override - { - return new spell_dk_death_coil_SpellScript(); - } + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_dk_death_coil::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } }; // 52751 - Death Gate -class spell_dk_death_gate : public SpellScriptLoader +class spell_dk_death_gate : public SpellScript { - public: - spell_dk_death_gate() : SpellScriptLoader("spell_dk_death_gate") { } + PrepareSpellScript(spell_dk_death_gate); - class spell_dk_death_gate_SpellScript : public SpellScript + SpellCastResult CheckClass() + { + if (GetCaster()->getClass() != CLASS_DEATH_KNIGHT) { - 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; - } + SetCustomCastResultMessage(SPELL_CUSTOM_ERROR_MUST_BE_DEATH_KNIGHT); + return SPELL_FAILED_CUSTOM_ERROR; + } - void HandleScript(SpellEffIndex effIndex) - { - PreventHitDefaultEffect(effIndex); - if (Unit* target = GetHitUnit()) - target->CastSpell(target, GetEffectValue(), false); - } + return SPELL_CAST_OK; + } - void Register() override - { - OnCheckCast += SpellCheckCastFn(spell_dk_death_gate_SpellScript::CheckClass); - OnEffectHitTarget += SpellEffectFn(spell_dk_death_gate_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); - } - }; + void HandleScript(SpellEffIndex effIndex) + { + PreventHitDefaultEffect(effIndex); + if (Unit* target = GetHitUnit()) + target->CastSpell(target, GetEffectValue(), false); + } - SpellScript* GetSpellScript() const override - { - return new spell_dk_death_gate_SpellScript(); - } + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_dk_death_gate::CheckClass); + OnEffectHitTarget += SpellEffectFn(spell_dk_death_gate::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } }; // 49576 - Death Grip Initial -class spell_dk_death_grip_initial : public SpellScriptLoader +class spell_dk_death_grip_initial : public SpellScript { - public: - spell_dk_death_grip_initial() : SpellScriptLoader("spell_dk_death_grip_initial") { } + PrepareSpellScript(spell_dk_death_grip_initial); - class spell_dk_death_grip_initial_SpellScript : public SpellScript + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( { - PrepareSpellScript(spell_dk_death_grip_initial_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo( - { - SPELL_DK_DEATH_GRIP_DUMMY, - SPELL_DK_DEATH_GRIP_JUMP, - SPELL_DK_BLOOD, - SPELL_DK_DEATH_GRIP_TAUNT - }); - } - - 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; + SPELL_DK_DEATH_GRIP_DUMMY, + SPELL_DK_DEATH_GRIP_JUMP, + SPELL_DK_BLOOD, + SPELL_DK_DEATH_GRIP_TAUNT + }); + } - return SPELL_CAST_OK; - } + 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; - void HandleDummy(SpellEffIndex /*effIndex*/) - { - GetCaster()->CastSpell(GetHitUnit(), SPELL_DK_DEATH_GRIP_DUMMY, true); - GetHitUnit()->CastSpell(GetCaster(), SPELL_DK_DEATH_GRIP_JUMP, true); - if (GetCaster()->HasAura(SPELL_DK_BLOOD)) - GetCaster()->CastSpell(GetHitUnit(), SPELL_DK_DEATH_GRIP_TAUNT, true); - } + return SPELL_CAST_OK; + } - 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_SCRIPT_EFFECT); - } - }; + void HandleDummy(SpellEffIndex /*effIndex*/) + { + GetCaster()->CastSpell(GetHitUnit(), SPELL_DK_DEATH_GRIP_DUMMY, true); + GetHitUnit()->CastSpell(GetCaster(), SPELL_DK_DEATH_GRIP_JUMP, true); + if (GetCaster()->HasAura(SPELL_DK_BLOOD)) + GetCaster()->CastSpell(GetHitUnit(), SPELL_DK_DEATH_GRIP_TAUNT, true); + } - SpellScript* GetSpellScript() const override - { - return new spell_dk_death_grip_initial_SpellScript(); - } + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_dk_death_grip_initial::CheckCast); + OnEffectHitTarget += SpellEffectFn(spell_dk_death_grip_initial::HandleDummy, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } }; + // 48743 - Death Pact -class spell_dk_death_pact : public SpellScriptLoader +class spell_dk_death_pact : public AuraScript { - public: - spell_dk_death_pact() : SpellScriptLoader("spell_dk_death_pact") { } - - class spell_dk_death_pact_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dk_death_pact_AuraScript); - - void HandleCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) - { - if (Unit* caster = GetCaster()) - amount = int32(caster->CountPctFromMaxHealth(amount)); - } + PrepareAuraScript(spell_dk_death_pact); - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_death_pact_AuraScript::HandleCalcAmount, EFFECT_1, SPELL_AURA_SCHOOL_HEAL_ABSORB); - } - }; + void HandleCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + if (Unit* caster = GetCaster()) + amount = int32(caster->CountPctFromMaxHealth(amount)); + } - AuraScript* GetAuraScript() const override - { - return new spell_dk_death_pact_AuraScript(); - } + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_death_pact::HandleCalcAmount, EFFECT_1, SPELL_AURA_SCHOOL_HEAL_ABSORB); + } }; + // 49998 - Death Strike -class spell_dk_death_strike : public SpellScriptLoader +class spell_dk_death_strike : public SpellScript { - public: - spell_dk_death_strike() : SpellScriptLoader("spell_dk_death_strike") { } + PrepareSpellScript(spell_dk_death_strike); - class spell_dk_death_strike_SpellScript : public SpellScript - { - PrepareSpellScript(spell_dk_death_strike_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo( - { - SPELL_DK_DEATH_STRIKE_HEAL, - SPELL_DK_BLOOD_SHIELD_MASTERY, - SPELL_DK_BLOOD_SHIELD_ABSORB, - SPELL_DK_RECENTLY_USED_DEATH_STRIKE, - SPELL_DK_FROST, - SPELL_DK_DEATH_STRIKE_OFFHAND - }); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo( + { + SPELL_DK_DEATH_STRIKE_HEAL, + SPELL_DK_BLOOD_SHIELD_MASTERY, + SPELL_DK_BLOOD_SHIELD_ABSORB, + SPELL_DK_RECENTLY_USED_DEATH_STRIKE, + SPELL_DK_FROST, + SPELL_DK_DEATH_STRIKE_OFFHAND + }); + } - void HandleHeal(SpellEffIndex /*effIndex*/) - { - Unit* caster = GetCaster(); - //TODO: heal = std::min(10% health, 20% of all damage taken in last 5 seconds) - int32 heal = CalculatePct(caster->GetMaxHealth(), GetSpellInfo()->GetEffect(EFFECT_4)->CalcValue()); - caster->CastCustomSpell(SPELL_DK_DEATH_STRIKE_HEAL, SPELLVALUE_BASE_POINT0, heal, caster, true); + void HandleHeal(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + //TODO: heal = std::min(10% health, 20% of all damage taken in last 5 seconds) + int32 heal = CalculatePct(caster->GetMaxHealth(), GetSpellInfo()->GetEffect(EFFECT_4)->CalcValue()); + caster->CastCustomSpell(SPELL_DK_DEATH_STRIKE_HEAL, SPELLVALUE_BASE_POINT0, heal, caster, true); - 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); + 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); - if (caster->HasAura(SPELL_DK_FROST)) - caster->CastSpell(GetHitUnit(), SPELL_DK_DEATH_STRIKE_OFFHAND, true); - } - - void TriggerRecentlyUsedDeathStrike() - { - GetCaster()->CastSpell(GetCaster(), SPELL_DK_RECENTLY_USED_DEATH_STRIKE, true); - } + if (caster->HasAura(SPELL_DK_FROST)) + caster->CastSpell(GetHitUnit(), SPELL_DK_DEATH_STRIKE_OFFHAND, true); + } - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_dk_death_strike_SpellScript::HandleHeal, EFFECT_1, SPELL_EFFECT_WEAPON_PERCENT_DAMAGE); - AfterCast += SpellCastFn(spell_dk_death_strike_SpellScript::TriggerRecentlyUsedDeathStrike); - } - }; + void TriggerRecentlyUsedDeathStrike() + { + GetCaster()->CastSpell(GetCaster(), SPELL_DK_RECENTLY_USED_DEATH_STRIKE, true); + } - SpellScript* GetSpellScript() const override - { - return new spell_dk_death_strike_SpellScript(); - } + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_dk_death_strike::HandleHeal, EFFECT_1, SPELL_EFFECT_WEAPON_PERCENT_DAMAGE); + AfterCast += SpellCastFn(spell_dk_death_strike::TriggerRecentlyUsedDeathStrike); + } }; // 85948 - Festering Strike -class spell_dk_festering_strike : public SpellScriptLoader -{ - public: - spell_dk_festering_strike() : SpellScriptLoader("spell_dk_festering_strike") { } - - class spell_dk_festering_strike_SpellScript : public SpellScript +class spell_dk_festering_strike : public SpellScript { - PrepareSpellScript(spell_dk_festering_strike_SpellScript); + PrepareSpellScript(spell_dk_festering_strike); bool Validate(SpellInfo const* /*spellInfo*/) override { @@ -635,331 +507,237 @@ class spell_dk_festering_strike : public SpellScriptLoader void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_dk_festering_strike_SpellScript::HandleScriptEffect, EFFECT_2, SPELL_EFFECT_DUMMY); + OnEffectHitTarget += SpellEffectFn(spell_dk_festering_strike::HandleScriptEffect, EFFECT_2, SPELL_EFFECT_DUMMY); } }; - SpellScript* GetSpellScript() const override - { - return new spell_dk_festering_strike_SpellScript(); - } -}; - // 47496 - Explode, Ghoul spell for Corpse Explosion -class spell_dk_ghoul_explode : public SpellScriptLoader +class spell_dk_ghoul_explode : public SpellScript { - public: - spell_dk_ghoul_explode() : SpellScriptLoader("spell_dk_ghoul_explode") { } - - class spell_dk_ghoul_explode_SpellScript : public SpellScript - { - PrepareSpellScript(spell_dk_ghoul_explode_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_DK_CORPSE_EXPLOSION_TRIGGERED }); - } - - void HandleDamage(SpellEffIndex /*effIndex*/) - { - SetHitDamage(GetCaster()->CountPctFromMaxHealth(GetEffectInfo(EFFECT_2)->CalcValue(GetCaster()))); - } + PrepareSpellScript(spell_dk_ghoul_explode); - void Suicide(SpellEffIndex /*effIndex*/) - { - if (Unit* unitTarget = GetHitUnit()) - { - // Corpse Explosion (Suicide) - unitTarget->CastSpell(unitTarget, SPELL_DK_CORPSE_EXPLOSION_TRIGGERED, true); - } - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DK_CORPSE_EXPLOSION_TRIGGERED }); + } - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_dk_ghoul_explode_SpellScript::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); - OnEffectHitTarget += SpellEffectFn(spell_dk_ghoul_explode_SpellScript::Suicide, EFFECT_1, SPELL_EFFECT_SCHOOL_DAMAGE); - } - }; + void HandleDamage(SpellEffIndex /*effIndex*/) + { + SetHitDamage(GetCaster()->CountPctFromMaxHealth(GetEffectInfo(EFFECT_2)->CalcValue(GetCaster()))); + } - SpellScript* GetSpellScript() const override + void Suicide(SpellEffIndex /*effIndex*/) + { + if (Unit* unitTarget = GetHitUnit()) { - return new spell_dk_ghoul_explode_SpellScript(); + // Corpse Explosion (Suicide) + unitTarget->CastSpell(unitTarget, SPELL_DK_CORPSE_EXPLOSION_TRIGGERED, true); } + } + + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_dk_ghoul_explode::HandleDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + OnEffectHitTarget += SpellEffectFn(spell_dk_ghoul_explode::Suicide, EFFECT_1, SPELL_EFFECT_SCHOOL_DAMAGE); + } }; // 206940 - Mark of Blood -class spell_dk_mark_of_blood : public SpellScriptLoader +class spell_dk_mark_of_blood : public AuraScript { - public: - spell_dk_mark_of_blood() : SpellScriptLoader("spell_dk_mark_of_blood") { } - - class spell_dk_mark_of_blood_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dk_mark_of_blood_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_DK_MARK_OF_BLOOD_HEAL }); - } + PrepareAuraScript(spell_dk_mark_of_blood); - void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - if (Unit* caster = GetCaster()) - caster->CastSpell(eventInfo.GetProcTarget(), SPELL_DK_MARK_OF_BLOOD_HEAL, true); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DK_MARK_OF_BLOOD_HEAL }); + } - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_dk_mark_of_blood_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + if (Unit* caster = GetCaster()) + caster->CastSpell(eventInfo.GetProcTarget(), SPELL_DK_MARK_OF_BLOOD_HEAL, true); + } - AuraScript* GetAuraScript() const override - { - return new spell_dk_mark_of_blood_AuraScript(); - } + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_dk_mark_of_blood::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } }; // 207346 - Necrosis -class spell_dk_necrosis : public SpellScriptLoader +class spell_dk_necrosis : public AuraScript { - public: - spell_dk_necrosis() : SpellScriptLoader("spell_dk_necrosis") { } - - class spell_dk_necrosis_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dk_necrosis_AuraScript); + PrepareAuraScript(spell_dk_necrosis); - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_DK_NECROSIS_EFFECT }); - } - - void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_DK_NECROSIS_EFFECT, true); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DK_NECROSIS_EFFECT }); + } - void Register() override - { - OnEffectProc += AuraEffectProcFn(spell_dk_necrosis_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + GetTarget()->CastSpell(eventInfo.GetProcTarget(), SPELL_DK_NECROSIS_EFFECT, true); + } - AuraScript* GetAuraScript() const override - { - return new spell_dk_necrosis_AuraScript(); - } + void Register() override + { + OnEffectProc += AuraEffectProcFn(spell_dk_necrosis::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } }; // 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 +class spell_dk_pet_geist_transform : public SpellScript { - public: - spell_dk_pet_geist_transform() : SpellScriptLoader("spell_dk_pet_geist_transform") { } - - class spell_dk_pet_geist_transform_SpellScript : public SpellScript - { - PrepareSpellScript(spell_dk_pet_geist_transform_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_DK_GLYPH_OF_THE_GEIST }); - } + PrepareSpellScript(spell_dk_pet_geist_transform); - bool Load() override - { - return GetCaster()->IsPet(); - } + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DK_GLYPH_OF_THE_GEIST }); + } - SpellCastResult CheckCast() - { - if (Unit* owner = GetCaster()->GetOwner()) - if (owner->HasAura(SPELL_DK_GLYPH_OF_THE_GEIST)) - return SPELL_CAST_OK; + bool Load() override + { + return GetCaster()->IsPet(); + } - return SPELL_FAILED_SPELL_UNAVAILABLE; - } + SpellCastResult CheckCast() + { + if (Unit* owner = GetCaster()->GetOwner()) + if (owner->HasAura(SPELL_DK_GLYPH_OF_THE_GEIST)) + return SPELL_CAST_OK; - void Register() override - { - OnCheckCast += SpellCheckCastFn(spell_dk_pet_geist_transform_SpellScript::CheckCast); - } - }; + return SPELL_FAILED_SPELL_UNAVAILABLE; + } - SpellScript* GetSpellScript() const override - { - return new spell_dk_pet_geist_transform_SpellScript(); - } + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_dk_pet_geist_transform::CheckCast); + } }; // 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 +class spell_dk_pet_skeleton_transform : public SpellScript { - public: - spell_dk_pet_skeleton_transform() : SpellScriptLoader("spell_dk_pet_skeleton_transform") { } + PrepareSpellScript(spell_dk_pet_skeleton_transform); - class spell_dk_pet_skeleton_transform_SpellScript : public SpellScript - { - PrepareSpellScript(spell_dk_pet_skeleton_transform_SpellScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_DK_GLYPH_OF_THE_SKELETON }); - } - - SpellCastResult CheckCast() - { - if (Unit* owner = GetCaster()->GetOwner()) - if (owner->HasAura(SPELL_DK_GLYPH_OF_THE_SKELETON)) - return SPELL_CAST_OK; + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DK_GLYPH_OF_THE_SKELETON }); + } - return SPELL_FAILED_SPELL_UNAVAILABLE; - } + SpellCastResult CheckCast() + { + if (Unit* owner = GetCaster()->GetOwner()) + if (owner->HasAura(SPELL_DK_GLYPH_OF_THE_SKELETON)) + return SPELL_CAST_OK; - void Register() override - { - OnCheckCast += SpellCheckCastFn(spell_dk_pet_skeleton_transform_SpellScript::CheckCast); - } - }; + return SPELL_FAILED_SPELL_UNAVAILABLE; + } - SpellScript* GetSpellScript() const override - { - return new spell_dk_pet_skeleton_transform_SpellScript(); - } + void Register() override + { + OnCheckCast += SpellCheckCastFn(spell_dk_pet_skeleton_transform::CheckCast); + } }; // 61257 - Runic Power Back on Snare/Root /// 7.1.5 -class spell_dk_pvp_4p_bonus : public SpellScriptLoader +class spell_dk_pvp_4p_bonus : public AuraScript { - public: - spell_dk_pvp_4p_bonus() : SpellScriptLoader("spell_dk_pvp_4p_bonus") { } + PrepareAuraScript(spell_dk_pvp_4p_bonus); - class spell_dk_pvp_4p_bonus_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dk_pvp_4p_bonus_AuraScript); - - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_DK_RUNIC_RETURN }); - } - - bool CheckProc(ProcEventInfo& eventInfo) - { - SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); - if (!spellInfo) - return false; + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DK_RUNIC_RETURN }); + } - return (spellInfo->GetAllEffectsMechanicMask() & ((1 << MECHANIC_ROOT) | (1 << MECHANIC_SNARE))) != 0; - } + bool CheckProc(ProcEventInfo& eventInfo) + { + SpellInfo const* spellInfo = eventInfo.GetSpellInfo(); + if (!spellInfo) + return false; - void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo) - { - PreventDefaultAction(); - eventInfo.GetActionTarget()->CastSpell(nullptr, SPELL_DK_RUNIC_RETURN, true); - } + return (spellInfo->GetAllEffectsMechanicMask() & ((1 << MECHANIC_ROOT) | (1 << MECHANIC_SNARE))) != 0; + } - void Register() override - { - DoCheckProc += AuraCheckProcFn(spell_dk_pvp_4p_bonus_AuraScript::CheckProc); - OnEffectProc += AuraEffectProcFn(spell_dk_pvp_4p_bonus_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); - } - }; + void HandleProc(AuraEffect* /*aurEff*/, ProcEventInfo& eventInfo) + { + PreventDefaultAction(); + eventInfo.GetActionTarget()->CastSpell(nullptr, SPELL_DK_RUNIC_RETURN, true); + } - AuraScript* GetAuraScript() const override - { - return new spell_dk_pvp_4p_bonus_AuraScript(); - } + void Register() override + { + DoCheckProc += AuraCheckProcFn(spell_dk_pvp_4p_bonus::CheckProc); + OnEffectProc += AuraEffectProcFn(spell_dk_pvp_4p_bonus::HandleProc, EFFECT_0, SPELL_AURA_DUMMY); + } }; // 46584 - Raise Dead -class spell_dk_raise_dead : public SpellScriptLoader +class spell_dk_raise_dead : public SpellScript { - public: - spell_dk_raise_dead() : SpellScriptLoader("spell_dk_raise_dead") { } - - class spell_dk_raise_dead_SpellScript : public SpellScript - { - PrepareSpellScript(spell_dk_raise_dead_SpellScript); + PrepareSpellScript(spell_dk_raise_dead); - bool Validate(SpellInfo const* /*spellInfo*/) override - { - return ValidateSpellInfo({ SPELL_DK_RAISE_DEAD_SUMMON, SPELL_DK_SLUDGE_BELCHER, SPELL_DK_SLUDGE_BELCHER_SUMMON }); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - uint32 spellId = SPELL_DK_RAISE_DEAD_SUMMON; - if (GetCaster()->HasAura(SPELL_DK_SLUDGE_BELCHER)) - spellId = SPELL_DK_SLUDGE_BELCHER_SUMMON; + bool Validate(SpellInfo const* /*spellInfo*/) override + { + return ValidateSpellInfo({ SPELL_DK_RAISE_DEAD_SUMMON, SPELL_DK_SLUDGE_BELCHER, SPELL_DK_SLUDGE_BELCHER_SUMMON }); + } - GetCaster()->CastSpell(nullptr, spellId, true); - } + void HandleDummy(SpellEffIndex /*effIndex*/) + { + uint32 spellId = SPELL_DK_RAISE_DEAD_SUMMON; + if (GetCaster()->HasAura(SPELL_DK_SLUDGE_BELCHER)) + spellId = SPELL_DK_SLUDGE_BELCHER_SUMMON; - void Register() override - { - OnEffectHitTarget += SpellEffectFn(spell_dk_raise_dead_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); - } - }; + GetCaster()->CastSpell(nullptr, spellId, true); + } - SpellScript* GetSpellScript() const override - { - return new spell_dk_raise_dead_SpellScript(); - } + void Register() override + { + OnEffectHitTarget += SpellEffectFn(spell_dk_raise_dead::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } }; // 55233 - Vampiric Blood -class spell_dk_vampiric_blood : public SpellScriptLoader +class spell_dk_vampiric_blood : public AuraScript { - public: - spell_dk_vampiric_blood() : SpellScriptLoader("spell_dk_vampiric_blood") { } - - class spell_dk_vampiric_blood_AuraScript : public AuraScript - { - PrepareAuraScript(spell_dk_vampiric_blood_AuraScript); + PrepareAuraScript(spell_dk_vampiric_blood); - void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) - { - amount = GetUnitOwner()->CountPctFromMaxHealth(amount); - } - - void Register() override - { - DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_vampiric_blood_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_HEALTH_2); - } - }; + void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/) + { + amount = GetUnitOwner()->CountPctFromMaxHealth(amount); + } - AuraScript* GetAuraScript() const override - { - return new spell_dk_vampiric_blood_AuraScript(); - } + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dk_vampiric_blood::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_HEALTH_2); + } }; void AddSC_deathknight_spell_scripts() { - new spell_dk_advantage_t10_4p(); - new spell_dk_anti_magic_shell(); - new spell_dk_army_transform(); - new spell_dk_blood_boil(); - new spell_dk_dancing_rune_weapon(); - new spell_dk_death_and_decay(); - new spell_dk_death_coil(); - new spell_dk_death_gate(); - new spell_dk_death_grip_initial(); - new spell_dk_death_pact(); - new spell_dk_death_strike(); - new spell_dk_festering_strike(); - new spell_dk_ghoul_explode(); - new spell_dk_mark_of_blood(); - new spell_dk_necrosis(); - new spell_dk_pet_geist_transform(); - new spell_dk_pet_skeleton_transform(); - new spell_dk_pvp_4p_bonus(); - new spell_dk_raise_dead(); - new spell_dk_vampiric_blood(); + RegisterAuraScript(spell_dk_advantage_t10_4p); + RegisterAuraScript(spell_dk_anti_magic_shell); + RegisterSpellScript(spell_dk_army_transform); + RegisterSpellScript(spell_dk_blood_boil); + RegisterAuraScript(spell_dk_dancing_rune_weapon); + RegisterSpellAndAuraScriptPair(spell_dk_death_and_decay, spell_dk_death_and_decay_AuraScript); + RegisterSpellScript(spell_dk_death_coil); + RegisterSpellScript(spell_dk_death_gate); + RegisterSpellScript(spell_dk_death_grip_initial); + RegisterAuraScript(spell_dk_death_pact); + RegisterSpellScript(spell_dk_death_strike); + RegisterSpellScript(spell_dk_festering_strike); + RegisterSpellScript(spell_dk_ghoul_explode); + RegisterAuraScript(spell_dk_mark_of_blood); + RegisterAuraScript(spell_dk_necrosis); + RegisterSpellScript(spell_dk_pet_geist_transform); + RegisterSpellScript(spell_dk_pet_skeleton_transform); + RegisterAuraScript(spell_dk_pvp_4p_bonus); + RegisterSpellScript(spell_dk_raise_dead); + RegisterAuraScript(spell_dk_vampiric_blood); } |