aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2024_11_24_01_world.sql3
-rw-r--r--src/server/game/Spells/SpellMgr.cpp10
-rw-r--r--src/server/scripts/Spells/spell_dk.cpp52
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);