Core/Spells: Bonuses from SPELL_AURA_MOD_CRIT_DAMAGE_BONUS should be multiplicative
This commit is contained in:
@@ -1069,20 +1069,20 @@ void Unit::CalculateSpellDamageTaken(SpellNonMeleeDamage *damageInfo, int32 dama
|
|||||||
damage += crit_bonus;
|
damage += crit_bonus;
|
||||||
|
|
||||||
// Apply SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE or SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE
|
// Apply SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE or SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE
|
||||||
int32 critPctDamageMod = 0;
|
float critPctDamageMod = 0.0f;
|
||||||
if (attackType == RANGED_ATTACK)
|
if (attackType == RANGED_ATTACK)
|
||||||
critPctDamageMod += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE);
|
critPctDamageMod += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE);
|
||||||
else
|
else
|
||||||
critPctDamageMod += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE);
|
critPctDamageMod += victim->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE);
|
||||||
|
|
||||||
// Increase crit damage from SPELL_AURA_MOD_CRIT_DAMAGE_BONUS
|
// Increase crit damage from SPELL_AURA_MOD_CRIT_DAMAGE_BONUS
|
||||||
critPctDamageMod += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, GetSpellSchoolMask(spellInfo));
|
critPctDamageMod += (GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, GetSpellSchoolMask(spellInfo)) - 1.0f) * 100;
|
||||||
|
|
||||||
// Increase crit damage from SPELL_AURA_MOD_CRIT_PERCENT_VERSUS
|
// Increase crit damage from SPELL_AURA_MOD_CRIT_PERCENT_VERSUS
|
||||||
critPctDamageMod += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, crTypeMask);
|
critPctDamageMod += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, crTypeMask);
|
||||||
|
|
||||||
if (critPctDamageMod != 0)
|
if (critPctDamageMod != 0)
|
||||||
AddPctN(damage, critPctDamageMod);
|
AddPctF(damage, critPctDamageMod);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Spell weapon based damage CAN BE crit & blocked at same time
|
// Spell weapon based damage CAN BE crit & blocked at same time
|
||||||
@@ -1255,7 +1255,7 @@ void Unit::CalculateMeleeDamage(Unit* victim, uint32 damage, CalcDamageInfo *dam
|
|||||||
damageInfo->procEx |= PROC_EX_CRITICAL_HIT;
|
damageInfo->procEx |= PROC_EX_CRITICAL_HIT;
|
||||||
// Crit bonus calc
|
// Crit bonus calc
|
||||||
damageInfo->damage += damageInfo->damage;
|
damageInfo->damage += damageInfo->damage;
|
||||||
int32 mod = 0;
|
float mod = 0.0f;
|
||||||
// Apply SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE or SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE
|
// Apply SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE or SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE
|
||||||
if (damageInfo->attackType == RANGED_ATTACK)
|
if (damageInfo->attackType == RANGED_ATTACK)
|
||||||
mod += damageInfo->target->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE);
|
mod += damageInfo->target->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE);
|
||||||
@@ -1263,14 +1263,14 @@ void Unit::CalculateMeleeDamage(Unit* victim, uint32 damage, CalcDamageInfo *dam
|
|||||||
mod += damageInfo->target->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE);
|
mod += damageInfo->target->GetTotalAuraModifier(SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE);
|
||||||
|
|
||||||
// Increase crit damage from SPELL_AURA_MOD_CRIT_DAMAGE_BONUS
|
// Increase crit damage from SPELL_AURA_MOD_CRIT_DAMAGE_BONUS
|
||||||
mod += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, damageInfo->damageSchoolMask);
|
mod += (GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, damageInfo->damageSchoolMask) - 1.0f) * 100;
|
||||||
|
|
||||||
uint32 crTypeMask = damageInfo->target->GetCreatureTypeMask();
|
uint32 crTypeMask = damageInfo->target->GetCreatureTypeMask();
|
||||||
|
|
||||||
// Increase crit damage from SPELL_AURA_MOD_CRIT_PERCENT_VERSUS
|
// Increase crit damage from SPELL_AURA_MOD_CRIT_PERCENT_VERSUS
|
||||||
mod += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, crTypeMask);
|
mod += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, crTypeMask);
|
||||||
if (mod != 0)
|
if (mod != 0)
|
||||||
AddPctN(damageInfo->damage, mod);
|
AddPctF(damageInfo->damage, mod);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MELEE_HIT_PARRY:
|
case MELEE_HIT_PARRY:
|
||||||
@@ -11187,7 +11187,7 @@ uint32 Unit::SpellCriticalDamageBonus(SpellEntry const* spellProto, uint32 damag
|
|||||||
{
|
{
|
||||||
// Calculate critical bonus
|
// Calculate critical bonus
|
||||||
int32 crit_bonus = damage;
|
int32 crit_bonus = damage;
|
||||||
int32 crit_mod = 0;
|
float crit_mod = 0.0f;
|
||||||
|
|
||||||
switch(spellProto->DmgClass)
|
switch(spellProto->DmgClass)
|
||||||
{
|
{
|
||||||
@@ -11201,13 +11201,13 @@ uint32 Unit::SpellCriticalDamageBonus(SpellEntry const* spellProto, uint32 damag
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
crit_mod += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, GetSpellSchoolMask(spellProto));
|
crit_mod += (GetTotalAuraMultiplierByMiscMask(SPELL_AURA_MOD_CRIT_DAMAGE_BONUS, GetSpellSchoolMask(spellProto)) - 1.0f) * 100;
|
||||||
|
|
||||||
if (victim)
|
if (victim)
|
||||||
crit_mod += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, victim->GetCreatureTypeMask());
|
crit_mod += GetTotalAuraModifierByMiscMask(SPELL_AURA_MOD_CRIT_PERCENT_VERSUS, victim->GetCreatureTypeMask());
|
||||||
|
|
||||||
if (crit_bonus != 0)
|
if (crit_bonus != 0)
|
||||||
AddPctN(crit_bonus, crit_mod);
|
AddPctF(crit_bonus, crit_mod);
|
||||||
|
|
||||||
crit_bonus -= damage;
|
crit_bonus -= damage;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user