diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2018-01-20 21:00:53 -0300 |
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2018-01-20 21:09:22 -0300 |
| commit | 9f5d1e2b10013e5fecf35fdd5af70921c96d07d1 (patch) | |
| tree | 4c932a91ff0b5d512121b4cbc65b7d4983232ef6 /src/server/scripts/Northrend | |
| parent | cb75105434f5002ae53aef2c9c2e6417eaf8f5f0 (diff) | |
Core/Scripts: fix wrong uses of SetHitDamage hook.
This hook modifies damage AFTER it has been reduced by target auras/armor/resistances etc, it's useful if you want to scale damage by a factor, but not to add flat bonuses.
We're fixing those by moving calculation to Launch phase, where target taken bonuses haven't been used yet.
- Bronjahm: Magic's Bane
- BPC: Shadow Prison
- Oculus: Shock Lance
- Ymiron: Dark Slash (extra fix, it was wrongly damaging half of total health, it's supposed to be half of CURRENT health!)
- DK: Raise Ally Thrash spell (also extra fix: corrected formula)
- Warrior: Bloodthirst (shouldn't matter much as it's damage class none and those don't get bonuses by default)
- Warrior: Concussion Blow
- Warlock: extra fix for Haunt, healing part shouldn't scale with spell power
Closes #9560
Diffstat (limited to 'src/server/scripts/Northrend')
5 files changed, 33 insertions, 14 deletions
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp index d97d31b1c25..3acc27563e1 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp @@ -899,7 +899,7 @@ class spell_impale : public SpellScriptLoader // make sure Impale doesnt do damage if we are standing on permafrost if (target && target->HasAura(permafrost)) - SetHitDamage(0); + PreventHitDamage(); } void Register() override diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp index 6abb8337202..d5045c82bfd 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp @@ -269,20 +269,19 @@ class spell_bronjahm_magic_bane : public SpellScriptLoader { PrepareSpellScript(spell_bronjahm_magic_bane_SpellScript); - void RecalculateDamage() + void RecalculateDamage(SpellEffIndex /*effIndex*/) { if (GetHitUnit()->getPowerType() != POWER_MANA) return; int32 const maxDamage = GetCaster()->GetMap()->IsHeroic() ? 15000 : 10000; - int32 newDamage = GetHitDamage() + (GetHitUnit()->GetMaxPower(POWER_MANA) / 2); - - SetHitDamage(std::min<int32>(maxDamage, newDamage)); + int32 newDamage = GetEffectValue() + (GetHitUnit()->GetMaxPower(POWER_MANA) / 2); + SetEffectValue(std::min<int32>(maxDamage, newDamage)); } void Register() override { - OnHit += SpellHitFn(spell_bronjahm_magic_bane_SpellScript::RecalculateDamage); + OnEffectLaunchTarget += SpellEffectFn(spell_bronjahm_magic_bane_SpellScript::RecalculateDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); } }; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index c49b61b3014..9190216e2a5 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -1496,16 +1496,16 @@ class spell_blood_council_shadow_prison_damage : public SpellScriptLoader { PrepareSpellScript(spell_blood_council_shadow_prison_SpellScript); - void AddExtraDamage() + void AddExtraDamage(SpellEffIndex /*effIndex*/) { if (Aura* aur = GetHitUnit()->GetAura(GetSpellInfo()->Id)) if (AuraEffect const* eff = aur->GetEffect(EFFECT_1)) - SetHitDamage(GetHitDamage() + eff->GetAmount()); + SetEffectValue(GetEffectValue() + eff->GetAmount()); } void Register() override { - OnHit += SpellHitFn(spell_blood_council_shadow_prison_SpellScript::AddExtraDamage); + OnEffectLaunchTarget += SpellEffectFn(spell_blood_council_shadow_prison_SpellScript::AddExtraDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); } }; diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp index 98539f68e6d..befd9bcefdf 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp @@ -519,22 +519,24 @@ class spell_oculus_shock_lance : public SpellScriptLoader return ValidateSpellInfo({ SPELL_AMBER_SHOCK_CHARGE }); } - void CalcDamage() + void CalcDamage(SpellEffIndex /*effIndex*/) { - int32 damage = GetHitDamage(); + int32 damage = GetEffectValue(); if (Unit* target = GetHitUnit()) + { if (AuraEffect const* shockCharges = target->GetAuraEffect(SPELL_AMBER_SHOCK_CHARGE, EFFECT_0, GetCaster()->GetGUID())) { damage += shockCharges->GetAmount(); - shockCharges->GetBase()->Remove(); + shockCharges->GetBase()->Remove(AURA_REMOVE_BY_ENEMY_SPELL); } + } - SetHitDamage(damage); + SetEffectValue(damage); } void Register() override { - OnHit += SpellHitFn(spell_oculus_shock_lance_SpellScript::CalcDamage); + OnEffectLaunchTarget += SpellEffectFn(spell_oculus_shock_lance_SpellScript::CalcDamage, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); } }; diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp index 55c66b1b8ff..b5b73cca89f 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp @@ -311,6 +311,23 @@ public: } }; +// 48292 - Dark Slash +class spell_dark_slash : public SpellScript +{ + PrepareSpellScript(spell_dark_slash); + + void CalculateDamage() + { + // Slashes the target with darkness, dealing damage equal to half the target's current health. + SetHitDamage(int32(ceil(GetHitUnit()->GetHealth() / 2.f))); + } + + void Register() override + { + OnHit += SpellHitFn(spell_dark_slash::CalculateDamage); + } +}; + class achievement_kings_bane : public AchievementCriteriaScript { public: @@ -332,5 +349,6 @@ class achievement_kings_bane : public AchievementCriteriaScript void AddSC_boss_ymiron() { new boss_ymiron(); + RegisterSpellScript(spell_dark_slash); new achievement_kings_bane(); } |
