diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index b02d0c8c6..db78d33fa 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -3809,9 +3809,9 @@ namespace Game.Entities 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; uint creatureTypeMask = victim.GetCreatureTypeMask(); @@ -3898,23 +3898,20 @@ namespace Game.Entities if (spellProto != null) MathFunctions.AddPct(ref DoneTotalMod, GetTotalAuraModifierByMiscValue(AuraType.ModDamageDoneForMechanic, (int)spellProto.Mechanic)); - float tmpDamage = (pdamage + DoneFlatBenefit) * DoneTotalMod; + float damageF = damage; // apply spellmod to Done damage if (spellProto != null) { Player modOwner = GetSpellModOwner(); if (modOwner != null) - { - if (damagetype == DamageEffectType.DOT) - modOwner.ApplySpellMod(spellProto, SpellModOp.PeriodicHealingAndDamage, ref tmpDamage); - else - modOwner.ApplySpellMod(spellProto, SpellModOp.HealingAndDamage, ref tmpDamage); - } + modOwner.ApplySpellMod(spellProto, damagetype == DamageEffectType.DOT ? SpellModOp.PeriodicHealingAndDamage : SpellModOp.HealingAndDamage, ref damageF); } + damageF = (damageF + DoneFlatBenefit) * DoneTotalMod; + // 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) diff --git a/Source/Game/Spells/SpellEffects.cs b/Source/Game/Spells/SpellEffects.cs index f2c8d1de3..ab5de827a 100644 --- a/Source/Game/Spells/SpellEffects.cs +++ b/Source/Game/Spells/SpellEffects.cs @@ -2441,9 +2441,8 @@ namespace Game.Spells // multiple weapon dmg effect workaround // execute only the last weapon damage // 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) continue; @@ -2631,12 +2630,11 @@ namespace Game.Spells weaponDamage = (uint)(weaponDamage * totalDamagePercentMod); // prevent negative damage - uint eff_damage = Math.Max(weaponDamage, 0); + weaponDamage = Math.Max(weaponDamage, 0); // Add melee damage bonuses (also check for negative) - uint damage = m_caster.MeleeDamageBonusDone(unitTarget, eff_damage, m_attackType, DamageEffectType.Direct, m_spellInfo); - - m_damage += (int)unitTarget.MeleeDamageBonusTaken(m_caster, damage, m_attackType, DamageEffectType.SpellDirect, 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); } [SpellEffectHandler(SpellEffectName.Threat)]