Core/Spells: fix damage bonus calculations for sanctified wrath talent.
This commit is contained in:
@@ -10676,6 +10676,15 @@ uint32 Unit::SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, ui
|
||||
|
||||
int32 TakenTotal = 0;
|
||||
float TakenTotalMod = 1.0f;
|
||||
float TakenTotalCasterMod = 0.0f;
|
||||
|
||||
// get all auras from caster that allow the spell to ignore resistance (sanctified wrath)
|
||||
AuraEffectList const& IgnoreResistAuras = caster->GetAuraEffectsByType(SPELL_AURA_MOD_IGNORE_TARGET_RESIST);
|
||||
for (AuraEffectList::const_iterator i = IgnoreResistAuras.begin(); i != IgnoreResistAuras.end(); ++i)
|
||||
{
|
||||
if ((*i)->GetMiscValue() & spellProto->GetSchoolMask())
|
||||
TakenTotalCasterMod += ((*i)->GetBaseAmount()/100);
|
||||
}
|
||||
|
||||
// from positive and negative SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN
|
||||
// multiplicative bonus, for example Dispersion + Shadowform (0.10*0.85=0.085)
|
||||
@@ -10740,7 +10749,21 @@ uint32 Unit::SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, ui
|
||||
TakenTotal+= int32(TakenAdvertisedBenefit * coeff * factorMod);
|
||||
}
|
||||
|
||||
float tmpDamage = (float(pdamage) + TakenTotal) * TakenTotalMod;
|
||||
float tmpDamage = 0.0f;
|
||||
|
||||
if (TakenTotalCasterMod)
|
||||
{
|
||||
if (TakenTotal < 0)
|
||||
if (TakenTotalMod < 1)
|
||||
tmpDamage = ((float(CalculatePctF(pdamage, TakenTotalCasterMod) + TakenTotal) * TakenTotalMod) + CalculatePctF(pdamage, TakenTotalCasterMod));
|
||||
else
|
||||
tmpDamage = ((float(CalculatePctF(pdamage, TakenTotalCasterMod) + TakenTotal) + CalculatePctF(pdamage, TakenTotalCasterMod)) * TakenTotalMod);
|
||||
else
|
||||
if (TakenTotalMod < 1)
|
||||
tmpDamage = ((CalculatePctF(float(pdamage) + TakenTotal, TakenTotalCasterMod) * TakenTotalMod) + CalculatePctF(float(pdamage) + TakenTotal, TakenTotalCasterMod));
|
||||
}
|
||||
if (!tmpDamage)
|
||||
tmpDamage = (float(pdamage) + TakenTotal) * TakenTotalMod;
|
||||
|
||||
return uint32(std::max(tmpDamage, 0.0f));
|
||||
}
|
||||
@@ -11692,6 +11715,15 @@ uint32 Unit::MeleeDamageBonusTaken(Unit* attacker, uint32 pdamage, WeaponAttackT
|
||||
return 0;
|
||||
|
||||
int32 TakenFlatBenefit = 0;
|
||||
float TakenTotalCasterMod = 0.0f;
|
||||
|
||||
// get all auras from caster that allow the spell to ignore resistance (sanctified wrath)
|
||||
AuraEffectList const& IgnoreResistAuras = attacker->GetAuraEffectsByType(SPELL_AURA_MOD_IGNORE_TARGET_RESIST);
|
||||
for (AuraEffectList::const_iterator i = IgnoreResistAuras.begin(); i != IgnoreResistAuras.end(); ++i)
|
||||
{
|
||||
if ((*i)->GetMiscValue() & spellProto->GetSchoolMask())
|
||||
TakenTotalCasterMod += ((*i)->GetBaseAmount()/100);
|
||||
}
|
||||
|
||||
// ..taken
|
||||
AuraEffectList const& mDamageTaken = GetAuraEffectsByType(SPELL_AURA_MOD_DAMAGE_TAKEN);
|
||||
@@ -11776,7 +11808,21 @@ uint32 Unit::MeleeDamageBonusTaken(Unit* attacker, uint32 pdamage, WeaponAttackT
|
||||
AddPctN(TakenTotalMod, (*i)->GetAmount());
|
||||
}
|
||||
|
||||
float tmpDamage = (float(pdamage) + TakenFlatBenefit) * TakenTotalMod;
|
||||
float tmpDamage = 0.0f;
|
||||
|
||||
if (TakenTotalCasterMod)
|
||||
{
|
||||
if (TakenFlatBenefit < 0)
|
||||
if (TakenTotalMod < 1)
|
||||
tmpDamage = ((float(CalculatePctF(pdamage, TakenTotalCasterMod) + TakenFlatBenefit) * TakenTotalMod) + CalculatePctF(pdamage, TakenTotalCasterMod));
|
||||
else
|
||||
tmpDamage = ((float(CalculatePctF(pdamage, TakenTotalCasterMod) + TakenFlatBenefit) + CalculatePctF(pdamage, TakenTotalCasterMod)) * TakenTotalMod);
|
||||
else
|
||||
if (TakenTotalMod < 1)
|
||||
tmpDamage = ((CalculatePctF(float(pdamage) + TakenFlatBenefit, TakenTotalCasterMod) * TakenTotalMod) + CalculatePctF(float(pdamage) + TakenFlatBenefit, TakenTotalCasterMod));
|
||||
}
|
||||
if (!tmpDamage)
|
||||
tmpDamage = (float(pdamage) + TakenFlatBenefit) * TakenTotalMod;
|
||||
|
||||
// bonus result can be negative
|
||||
return uint32(std::max(tmpDamage, 0.0f));
|
||||
|
||||
Reference in New Issue
Block a user