aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2024-12-20 19:24:30 +0100
committerOvahlord <dreadkiller@gmx.de>2024-12-20 19:24:30 +0100
commit64ed97762de311d4b457dd22f42b32d70c0e41c6 (patch)
tree05cac559da646d0e06655d2e533c00a68ad071ea
parent2087f75871989c4fa81741fa6e253ef76afd5795 (diff)
Scripts/Spells: fixed Death Coil
-rw-r--r--sql/updates/world/cata_classic/2024_12_20_01_world.sql3
-rw-r--r--src/server/scripts/Spells/spell_dk.cpp78
2 files changed, 80 insertions, 1 deletions
diff --git a/sql/updates/world/cata_classic/2024_12_20_01_world.sql b/sql/updates/world/cata_classic/2024_12_20_01_world.sql
new file mode 100644
index 00000000000..30c1e29bd4f
--- /dev/null
+++ b/sql/updates/world/cata_classic/2024_12_20_01_world.sql
@@ -0,0 +1,3 @@
+DELETE FROM `spell_script_names` WHERE `ScriptName`= 'spell_dk_death_coil';
+INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
+(47541, 'spell_dk_death_coil');
diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp
index 558e402ec7d..2383b474d3d 100644
--- a/src/server/scripts/Spells/spell_dk.cpp
+++ b/src/server/scripts/Spells/spell_dk.cpp
@@ -26,6 +26,7 @@
#include "Player.h"
#include "Spell.h"
#include "SpellAuraEffects.h"
+#include "SpellDefines.h"
#include "SpellInfo.h"
#include "SpellScript.h"
#include "Unit.h"
@@ -36,7 +37,9 @@ enum DeathKnightSpells
SPELL_DK_DARK_SIMULACRUM_SPELLPOWER_BUFF = 94984,
SPELL_DK_ENERGIZE_BLOOD_RUNE = 81166,
SPELL_DK_ENERGIZE_FROST_RUNE = 81168,
- SPELL_DK_ENERGIZE_UNHOLY_RUNE = 81169
+ SPELL_DK_ENERGIZE_UNHOLY_RUNE = 81169,
+ SPELL_DK_DEATH_COIL_DAMAGE = 47632,
+ SPELL_DK_DEATH_COIL_HEAL = 47633
};
// 77606 - Dark Simulacrum
@@ -160,9 +163,82 @@ class spell_dk_runic_empowerment : public AuraScript
}
};
+// 47541 - Death Coil
+class spell_dk_death_coil : public SpellScript
+{
+ bool Validate(SpellInfo const* /*spellInfo*/) override
+ {
+ return ValidateSpellInfo({ SPELL_DK_DEATH_COIL_DAMAGE, SPELL_DK_DEATH_COIL_HEAL });
+ }
+
+ SpellCastResult CheckCast()
+ {
+ Unit* caster = GetCaster();
+ Unit* target = GetExplTargetUnit();
+ if (!target)
+ return SPELL_FAILED_BAD_TARGETS;
+
+ if (caster->IsValidAttackTarget(target, sSpellMgr->AssertSpellInfo(SPELL_DK_DEATH_COIL_DAMAGE, DIFFICULTY_NONE)))
+ {
+ if (!caster->isInFront(target))
+ return SPELL_FAILED_UNIT_NOT_INFRONT;
+
+ return SPELL_CAST_OK;
+ }
+
+ if (caster->IsValidAssistTarget(target, sSpellMgr->AssertSpellInfo(SPELL_DK_DEATH_COIL_HEAL, DIFFICULTY_NONE)))
+ {
+ if (target->GetCreatureType() != CREATURE_TYPE_UNDEAD)
+ return SPELL_FAILED_BAD_TARGETS;
+
+ _healTarget = true;
+
+ return SPELL_CAST_OK;
+ }
+
+ return SPELL_FAILED_BAD_TARGETS;
+ }
+
+ void HandleDummy(SpellEffIndex /*effIndex*/)
+ {
+ // According to tooltip: ($m1+0.23*$AP)
+ int32 damage = GetEffectValue() + 0.23f * GetCaster()->GetTotalAttackPowerValue(BASE_ATTACK);
+ if (_healTarget)
+ damage *= 3.5f;
+
+ Unit* caster = GetCaster();
+ Unit* target = GetHitUnit();
+
+ if (_healTarget)
+ {
+ caster->CastSpell(target, SPELL_DK_DEATH_COIL_HEAL, CastSpellExtraArgsInit{
+ .TriggeringSpell = GetSpell(),
+ .SpellValueOverrides = { {SPELLVALUE_BASE_POINT0, damage} },
+ });
+ }
+ else
+ {
+ caster->CastSpell(target, SPELL_DK_DEATH_COIL_DAMAGE, CastSpellExtraArgsInit{
+ .TriggeringSpell = GetSpell(),
+ .SpellValueOverrides = { {SPELLVALUE_BASE_POINT0, damage} },
+ });
+ }
+ }
+
+ void Register() override
+ {
+ OnCheckCast += SpellCheckCastFn(spell_dk_death_coil::CheckCast);
+ OnEffectHitTarget += SpellEffectFn(spell_dk_death_coil::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY);
+ }
+
+private:
+ bool _healTarget = false;
+};
+
void AddSC_deathknight_spell_scripts()
{
RegisterSpellScript(spell_dk_dark_simulacrum);
RegisterSpellScript(spell_dk_dark_simulacrum_buff);
+ RegisterSpellScript(spell_dk_death_coil);
RegisterSpellScript(spell_dk_runic_empowerment);
}