diff options
-rw-r--r-- | sql/updates/world/master/2024_11_24_01_world.sql | 3 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 10 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_dk.cpp | 52 |
3 files changed, 55 insertions, 10 deletions
diff --git a/sql/updates/world/master/2024_11_24_01_world.sql b/sql/updates/world/master/2024_11_24_01_world.sql new file mode 100644 index 00000000000..4d429e8d730 --- /dev/null +++ b/sql/updates/world/master/2024_11_24_01_world.sql @@ -0,0 +1,3 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName`='spell_dk_death_and_decay_increase_targets'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(188290, 'spell_dk_death_and_decay_increase_targets'); diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 8da3956617d..43e561e6633 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -4019,6 +4019,16 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->RangeEntry = sSpellRangeStore.LookupEntry(6); // 100yd }); + // Death and Decay (target increase) + ApplySpellFix({ 188290 }, [](SpellInfo* spellInfo) + { + // Change SpellClassMask to exclude 49020 and only keep its triggered spells + ApplySpellEffectFix(spellInfo, EFFECT_3, [](SpellEffectInfo* spellEffectInfo) + { + spellEffectInfo->SpellClassMask.Set(0x80, 0, 0, 0x8000); + }); + }); + // Chrono Shift (enemy slow part) ApplySpellFix({ 236299 }, [](SpellInfo* spellInfo) { 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); |