aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Northrend
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2018-01-20 21:00:53 -0300
committerariel- <ariel-@users.noreply.github.com>2018-01-20 21:09:22 -0300
commit9f5d1e2b10013e5fecf35fdd5af70921c96d07d1 (patch)
tree4c932a91ff0b5d512121b4cbc65b7d4983232ef6 /src/server/scripts/Northrend
parentcb75105434f5002ae53aef2c9c2e6417eaf8f5f0 (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')
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp2
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp9
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp6
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp12
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp18
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();
}