Core/Spells: fix SPELLMOD_DAMAGE application order for melee spells

Port From (https://github.com/TrinityCore/TrinityCore/commit/d34292534c197887cd33c15ff98ca8c96dc4fb99)
This commit is contained in:
hondacrx
2021-06-23 15:43:29 -04:00
parent b012517079
commit 619c79e7f1
2 changed files with 11 additions and 16 deletions
+7 -10
View File
@@ -3809,9 +3809,9 @@ namespace Game.Entities
return Math.Max((uint)(damage * (1.0f - mitigation)), 0); return Math.Max((uint)(damage * (1.0f - mitigation)), 0);
} }
public uint MeleeDamageBonusDone(Unit victim, uint pdamage, WeaponAttackType attType, DamageEffectType damagetype, SpellInfo spellProto = null, SpellSchoolMask damageSchoolMask = SpellSchoolMask.Normal) public uint MeleeDamageBonusDone(Unit victim, uint damage, WeaponAttackType attType, DamageEffectType damagetype, SpellInfo spellProto = null, SpellSchoolMask damageSchoolMask = SpellSchoolMask.Normal)
{ {
if (victim == null || pdamage == 0) if (victim == null || damage == 0)
return 0; return 0;
uint creatureTypeMask = victim.GetCreatureTypeMask(); uint creatureTypeMask = victim.GetCreatureTypeMask();
@@ -3898,23 +3898,20 @@ namespace Game.Entities
if (spellProto != null) if (spellProto != null)
MathFunctions.AddPct(ref DoneTotalMod, GetTotalAuraModifierByMiscValue(AuraType.ModDamageDoneForMechanic, (int)spellProto.Mechanic)); MathFunctions.AddPct(ref DoneTotalMod, GetTotalAuraModifierByMiscValue(AuraType.ModDamageDoneForMechanic, (int)spellProto.Mechanic));
float tmpDamage = (pdamage + DoneFlatBenefit) * DoneTotalMod; float damageF = damage;
// apply spellmod to Done damage // apply spellmod to Done damage
if (spellProto != null) if (spellProto != null)
{ {
Player modOwner = GetSpellModOwner(); Player modOwner = GetSpellModOwner();
if (modOwner != null) if (modOwner != null)
{ modOwner.ApplySpellMod(spellProto, damagetype == DamageEffectType.DOT ? SpellModOp.PeriodicHealingAndDamage : SpellModOp.HealingAndDamage, ref damageF);
if (damagetype == DamageEffectType.DOT)
modOwner.ApplySpellMod(spellProto, SpellModOp.PeriodicHealingAndDamage, ref tmpDamage);
else
modOwner.ApplySpellMod(spellProto, SpellModOp.HealingAndDamage, ref tmpDamage);
}
} }
damageF = (damageF + DoneFlatBenefit) * DoneTotalMod;
// bonus result can be negative // bonus result can be negative
return (uint)Math.Max(tmpDamage, 0.0f); return (uint)Math.Max(damageF, 0.0f);
} }
public uint MeleeDamageBonusTaken(Unit attacker, uint pdamage, WeaponAttackType attType, DamageEffectType damagetype, SpellInfo spellProto = null, SpellSchoolMask damageSchoolMask = SpellSchoolMask.Normal) public uint MeleeDamageBonusTaken(Unit attacker, uint pdamage, WeaponAttackType attType, DamageEffectType damagetype, SpellInfo spellProto = null, SpellSchoolMask damageSchoolMask = SpellSchoolMask.Normal)
+4 -6
View File
@@ -2441,9 +2441,8 @@ namespace Game.Spells
// multiple weapon dmg effect workaround // multiple weapon dmg effect workaround
// execute only the last weapon damage // execute only the last weapon damage
// and handle all effects at once // and handle all effects at once
for (var i = effIndex + 1; i < SpellConst.MaxEffects; ++i) foreach (SpellEffectInfo effect in m_spellInfo.GetEffects())
{ {
var effect = m_spellInfo.GetEffect(i);
if (effect == null) if (effect == null)
continue; continue;
@@ -2631,12 +2630,11 @@ namespace Game.Spells
weaponDamage = (uint)(weaponDamage * totalDamagePercentMod); weaponDamage = (uint)(weaponDamage * totalDamagePercentMod);
// prevent negative damage // prevent negative damage
uint eff_damage = Math.Max(weaponDamage, 0); weaponDamage = Math.Max(weaponDamage, 0);
// Add melee damage bonuses (also check for negative) // Add melee damage bonuses (also check for negative)
uint damage = m_caster.MeleeDamageBonusDone(unitTarget, eff_damage, m_attackType, DamageEffectType.Direct, m_spellInfo); weaponDamage = m_caster.MeleeDamageBonusDone(unitTarget, weaponDamage, m_attackType, DamageEffectType.SpellDirect, m_spellInfo);
m_damage += (int)unitTarget.MeleeDamageBonusTaken(m_caster, weaponDamage, m_attackType, DamageEffectType.SpellDirect, m_spellInfo);
m_damage += (int)unitTarget.MeleeDamageBonusTaken(m_caster, damage, m_attackType, DamageEffectType.SpellDirect, m_spellInfo);
} }
[SpellEffectHandler(SpellEffectName.Threat)] [SpellEffectHandler(SpellEffectName.Threat)]