diff options
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/Spells/spell_dk.cpp | 52 | 
1 files changed, 42 insertions, 10 deletions
diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index 1d3b0a84087..70e317ee8c6 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -50,9 +50,11 @@ enum DeathKnightSpells      SPELL_DK_BLOOD_SHIELD_MASTERY               = 77513,      SPELL_DK_BONE_SHIELD                        = 195181,      SPELL_DK_BREATH_OF_SINDRAGOSA               = 152279, +    SPELL_DK_CLEAVING_STRIKES                   = 316916,      SPELL_DK_CORPSE_EXPLOSION_TRIGGERED         = 43999,      SPELL_DK_DARK_SIMULACRUM_BUFF               = 77616,      SPELL_DK_DARK_SIMULACRUM_SPELLPOWER_BUFF    = 94984, +    SPELL_DK_DEATH_AND_DECAY_INCREASE_TARGETS   = 188290,      SPELL_DK_DEATH_AND_DECAY_DAMAGE             = 52212,      SPELL_DK_DEATH_COIL_DAMAGE                  = 47632,      SPELL_DK_DEATH_GRIP_DUMMY                   = 243912, @@ -454,6 +456,25 @@ class spell_dk_death_and_decay : public AuraScript      }  }; +// 188290 - Death and Decay (triggered by 316916 - Cleaving Strikes) +class spell_dk_death_and_decay_increase_targets : public AuraScript +{ +    bool Validate(SpellInfo const* /*spell*/) override +    { +        return ValidateSpellInfo({ SPELL_DK_UNHOLY_GROUND_HASTE }); +    } + +    void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) const +    { +        GetTarget()->RemoveAurasDueToSpell(SPELL_DK_UNHOLY_GROUND_HASTE); +    } + +    void Register() override +    { +        AfterEffectRemove += AuraEffectRemoveFn(spell_dk_death_and_decay_increase_targets::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL); +    } +}; +  // 47541 - Death Coil  class spell_dk_death_coil : public SpellScript  { @@ -1234,23 +1255,33 @@ class spell_dk_vampiric_blood : public AuraScript  // 43265 - Death and Decay  struct at_dk_death_and_decay : AreaTriggerAI  { -    at_dk_death_and_decay(AreaTrigger* areatrigger) : AreaTriggerAI(areatrigger) { } +    using AreaTriggerAI::AreaTriggerAI;      void OnUnitEnter(Unit* unit) override      { -        if (Unit* caster = at->GetCaster()) -        { -            if (caster == unit) -            { -                if (caster->HasAura(SPELL_DK_UNHOLY_GROUND_TALENT)) -                    caster->CastSpell(caster, SPELL_DK_UNHOLY_GROUND_HASTE); -            } -        } +        if (unit->GetGUID() != at->GetCasterGuid()) +            return; + +        if (unit->HasAura(SPELL_DK_CLEAVING_STRIKES)) +            unit->CastSpell(unit, SPELL_DK_DEATH_AND_DECAY_INCREASE_TARGETS, TRIGGERED_DONT_REPORT_CAST_ERROR); + +        if (unit->HasAura(SPELL_DK_UNHOLY_GROUND_TALENT)) +            unit->CastSpell(unit, SPELL_DK_UNHOLY_GROUND_HASTE);      }      void OnUnitExit(Unit* unit) override      { -        unit->RemoveAurasDueToSpell(SPELL_DK_UNHOLY_GROUND_HASTE); +        if (unit->GetGUID() != at->GetCasterGuid()) +            return; + +        if (!unit->HasAura(SPELL_DK_CLEAVING_STRIKES)) +            unit->RemoveAurasDueToSpell(SPELL_DK_UNHOLY_GROUND_HASTE); + +        if (Aura* deathAndDecay = unit->GetAura(SPELL_DK_DEATH_AND_DECAY_INCREASE_TARGETS)) +        { +            if (AuraEffect* const cleavingStrikes = unit->GetAuraEffect(SPELL_DK_CLEAVING_STRIKES, EFFECT_3)) +                deathAndDecay->SetDuration(cleavingStrikes->GetAmount()); +        }      }  }; @@ -1267,6 +1298,7 @@ void AddSC_deathknight_spell_scripts()      RegisterSpellScript(spell_dk_dark_simulacrum);      RegisterSpellScript(spell_dk_dark_simulacrum_buff);      RegisterSpellScript(spell_dk_death_and_decay); +    RegisterSpellScript(spell_dk_death_and_decay_increase_targets);      RegisterSpellScript(spell_dk_death_coil);      RegisterSpellScript(spell_dk_death_gate);      RegisterSpellScript(spell_dk_death_grip_initial);  | 
