diff options
| author | Keader <keader.android@gmail.com> | 2020-06-03 22:05:08 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-03 22:05:08 -0300 |
| commit | d81a9e5bc3b3e13b47332b3e7817bd0a0b228cbc (patch) | |
| tree | 7688755d29bd020663211cc4a2152c87833dbbb8 /src/server/scripts/Northrend | |
| parent | adc7cd3ceec969488cd8d8fa93edc281f0169102 (diff) | |
Core/Misc: Fixed resistance calculate for Mutated Transformation and Twilight Bloodbolt (#24717)
Ref: 9f7b464a6aa5b64bf5ec5c0f586853fbc71029c6
- Implemented a new SpellScript hook that allow control Resistance/Absorb amount of a damage spell.
Diffstat (limited to 'src/server/scripts/Northrend')
| -rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp | 22 | ||||
| -rw-r--r-- | src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp | 18 |
2 files changed, 30 insertions, 10 deletions
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index d686ca8ba38..d215a21cf40 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -862,6 +862,27 @@ class spell_blood_queen_pact_of_the_darkfallen_dmg_target : public SpellScriptLo } }; +// 71446, 71478, 71479, 71480 - Twilight Bloodbolt +class spell_blood_queen_twilight_bloodbolt : public SpellScript +{ + PrepareSpellScript(spell_blood_queen_twilight_bloodbolt); + + void HandleResistance(DamageInfo const& damageInfo, uint32& resistAmount, int32& /*absorbAmount*/) + { + Unit* caster = damageInfo.GetAttacker();; + Unit* target = damageInfo.GetVictim(); + uint32 damage = damageInfo.GetDamage(); + uint32 resistedDamage = Unit::CalcSpellResistedDamage(caster, target, damage, SPELL_SCHOOL_MASK_SHADOW, nullptr); + resistedDamage += Unit::CalcSpellResistedDamage(caster, target, damage, SPELL_SCHOOL_MASK_ARCANE, nullptr); + resistAmount = resistedDamage; + } + + void Register() override + { + OnCalculateResistAbsorb += SpellOnResistAbsorbCalculateFn(spell_blood_queen_twilight_bloodbolt::HandleResistance); + } +}; + class achievement_once_bitten_twice_shy_n : public AchievementCriteriaScript { public: @@ -904,6 +925,7 @@ void AddSC_boss_blood_queen_lana_thel() new spell_blood_queen_pact_of_the_darkfallen(); new spell_blood_queen_pact_of_the_darkfallen_dmg(); new spell_blood_queen_pact_of_the_darkfallen_dmg_target(); + RegisterSpellScript(spell_blood_queen_twilight_bloodbolt); new achievement_once_bitten_twice_shy_n(); new achievement_once_bitten_twice_shy_v(); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 364a4dbb6c9..8c7d8527012 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -1669,21 +1669,19 @@ class spell_abomination_mutated_transformation : public SpellScript { PrepareSpellScript(spell_abomination_mutated_transformation); - /* Resist system always pick the min resist value for spells with multiple schools. - But following some combat logs of retail, this spell is a exception and need get the sum of both schools. */ - void HandleResistance(SpellEffIndex /*effIndex*/) + void HandleResistance(DamageInfo const& damageInfo, uint32& resistAmount, int32& /*absorbAmount*/) { - Unit* caster = GetCaster(); - uint32 damage = GetHitDamage(); - Unit* target = GetHitUnit(); - damage -= Unit::CalcSpellResistedDamage(caster, target, GetHitDamage(), SPELL_SCHOOL_MASK_SHADOW, nullptr); - damage -= Unit::CalcSpellResistedDamage(caster, target, GetHitDamage(), SPELL_SCHOOL_MASK_NATURE, nullptr); - SetHitDamage(damage); + Unit* caster = damageInfo.GetAttacker();; + Unit* target = damageInfo.GetVictim(); + uint32 damage = damageInfo.GetDamage(); + uint32 resistedDamage = Unit::CalcSpellResistedDamage(caster, target, damage, SPELL_SCHOOL_MASK_SHADOW, nullptr); + resistedDamage += Unit::CalcSpellResistedDamage(caster, target, damage, SPELL_SCHOOL_MASK_NATURE, nullptr); + resistAmount = resistedDamage; } void Register() override { - OnEffectHitTarget += SpellEffectFn(spell_abomination_mutated_transformation::HandleResistance, EFFECT_0, SPELL_EFFECT_SCHOOL_DAMAGE); + OnCalculateResistAbsorb += SpellOnResistAbsorbCalculateFn(spell_abomination_mutated_transformation::HandleResistance); } }; |
