diff --git a/sql/updates/world/custom/custom_2019_07_28_00_world.sql b/sql/updates/world/custom/custom_2019_07_28_00_world.sql new file mode 100644 index 0000000000..0c7ad7e7a0 --- /dev/null +++ b/sql/updates/world/custom/custom_2019_07_28_00_world.sql @@ -0,0 +1,2 @@ +UPDATE `spell_bonus_data` SET `ap_bonus`= 0 WHERE `entry` IN (47632, 47633); +UPDATE `spell_bonus_data` SET `comments`= 'Death Knight - Death Coil (Damage)' WHERE `entry`= 47632; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 3f51e83437..0709badfd2 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -5436,6 +5436,12 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; }); + // Death Coil + ApplySpellFix({ 47541 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; + }); + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { SpellInfo* spellInfo = mSpellInfoMap[i]; diff --git a/src/server/scripts/Spells/spell_dk.cpp b/src/server/scripts/Spells/spell_dk.cpp index bf97e7acbe..e6e2f7c6c1 100644 --- a/src/server/scripts/Spells/spell_dk.cpp +++ b/src/server/scripts/Spells/spell_dk.cpp @@ -293,39 +293,24 @@ class spell_dk_death_and_decay : public AuraScript } }; +// 47541 - Death Coil class spell_dk_death_coil : public SpellScript { PrepareSpellScript(spell_dk_death_coil); bool Validate(SpellInfo const* /*spell*/) override { - return ValidateSpellInfo({ SPELL_DK_DEATH_COIL_DAMAGE, SPELL_DK_DEATH_COIL_HEAL }); - } - - void HandleDummy(SpellEffIndex /*effIndex*/) - { - int32 damage = GetEffectValue(); - Unit* caster = GetCaster(); - if (Unit* target = GetHitUnit()) - { - if (caster->IsFriendlyTo(target)) + return ValidateSpellInfo( { - int32 bp = int32(damage * 1.5f); - caster->CastCustomSpell(target, SPELL_DK_DEATH_COIL_HEAL, &bp, nullptr, nullptr, true); - } - else - { - if (AuraEffect const* auraEffect = caster->GetAuraEffect(SPELL_DK_ITEM_SIGIL_VENGEFUL_HEART, EFFECT_1)) - damage += auraEffect->GetBaseAmount(); - caster->CastCustomSpell(target, SPELL_DK_DEATH_COIL_DAMAGE, &damage, nullptr, nullptr, true); - } - } + SPELL_DK_DEATH_COIL_DAMAGE, + SPELL_DK_DEATH_COIL_HEAL + }); } SpellCastResult CheckCast() { Unit* caster = GetCaster(); - if (Unit* target = GetExplTargetUnit()) + if (Unit * target = GetExplTargetUnit()) { if (!caster->IsFriendlyTo(target) && !caster->isInFront(target)) return SPELL_FAILED_UNIT_NOT_INFRONT; @@ -339,6 +324,30 @@ class spell_dk_death_coil : public SpellScript return SPELL_CAST_OK; } + void HandleDummy(SpellEffIndex /*effIndex*/) + { + Unit* caster = GetCaster(); + if (!caster) + return; + + Unit* target = GetHitUnit(); + int32 bp = GetEffectValue(); + bp += CalculatePct(caster->GetTotalAttackPowerValue(BASE_ATTACK), 23); + + if (caster->IsFriendlyTo(target)) + { + bp *= 3.5f; + caster->CastCustomSpell(SPELL_DK_DEATH_COIL_HEAL, SPELLVALUE_BASE_POINT0, bp, target, true); + } + else + { + if (AuraEffect const* auraEffect = caster->GetAuraEffect(SPELL_DK_ITEM_SIGIL_VENGEFUL_HEART, EFFECT_1)) + bp += auraEffect->GetBaseAmount(); + + caster->CastCustomSpell(SPELL_DK_DEATH_COIL_DAMAGE, SPELLVALUE_BASE_POINT0, bp, target, true); + } + } + void Register() override { OnCheckCast += SpellCheckCastFn(spell_dk_death_coil::CheckCast);