From 94eea137ae6ee4d75bf4eb048a5c7cb2717cbd61 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 9 May 2022 13:11:27 -0400 Subject: [PATCH] Core/Auras: Fix SPELL_AURA_MOD_DAMAGE_DONE_FOR_MECHANIC for effects mechanics Port From (https://github.com/TrinityCore/TrinityCore/commit/64e8e11377c9b0bf92e81afb38e0668ba3fdf3f4) --- Source/Game/Entities/Unit/Unit.Combat.cs | 2 +- Source/Game/Entities/Unit/Unit.Spells.cs | 11 +++++++---- Source/Game/Entities/Unit/Unit.cs | 6 ++++-- Source/Game/Spells/SpellEffects.cs | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Source/Game/Entities/Unit/Unit.Combat.cs b/Source/Game/Entities/Unit/Unit.Combat.cs index afc1671a3..66b8172be 100644 --- a/Source/Game/Entities/Unit/Unit.Combat.cs +++ b/Source/Game/Entities/Unit/Unit.Combat.cs @@ -1079,7 +1079,7 @@ namespace Game.Entities uint damage = 0; damage += CalculateDamage(damageInfo.AttackType, false, true); // Add melee damage bonus - damage = MeleeDamageBonusDone(damageInfo.Target, damage, damageInfo.AttackType, DamageEffectType.Direct, null, (SpellSchoolMask)damageInfo.DamageSchoolMask); + damage = MeleeDamageBonusDone(damageInfo.Target, damage, damageInfo.AttackType, DamageEffectType.Direct, null, null, (SpellSchoolMask)damageInfo.DamageSchoolMask); damage = damageInfo.Target.MeleeDamageBonusTaken(this, damage, damageInfo.AttackType, DamageEffectType.Direct, null, (SpellSchoolMask)damageInfo.DamageSchoolMask); // Script Hook For CalculateMeleeDamage -- Allow scripts to change the Damage pre class mitigation calculations diff --git a/Source/Game/Entities/Unit/Unit.Spells.cs b/Source/Game/Entities/Unit/Unit.Spells.cs index 83d636547..ab39a766e 100644 --- a/Source/Game/Entities/Unit/Unit.Spells.cs +++ b/Source/Game/Entities/Unit/Unit.Spells.cs @@ -89,7 +89,7 @@ namespace Game.Entities } int DoneTotal = 0; - float DoneTotalMod = SpellDamagePctDone(victim, spellProto, damagetype); + float DoneTotalMod = SpellDamagePctDone(victim, spellProto, damagetype, spellEffectInfo); // Done fixed damage bonus auras int DoneAdvertisedBenefit = SpellBaseDamageBonusDone(spellProto.GetSchoolMask()); @@ -154,7 +154,7 @@ namespace Game.Entities return (uint)Math.Max(tmpDamage, 0.0f); } - public float SpellDamagePctDone(Unit victim, SpellInfo spellProto, DamageEffectType damagetype) + public float SpellDamagePctDone(Unit victim, SpellInfo spellProto, DamageEffectType damagetype, SpellEffectInfo spellEffectInfo) { if (spellProto == null || !victim || damagetype == DamageEffectType.Direct) return 1.0f; @@ -172,7 +172,7 @@ namespace Game.Entities { Unit owner = GetOwner(); if (owner != null) - return owner.SpellDamagePctDone(victim, spellProto, damagetype); + return owner.SpellDamagePctDone(victim, spellProto, damagetype, spellEffectInfo); } // Done total percent damage auras @@ -215,7 +215,10 @@ namespace Game.Entities }); // Add SPELL_AURA_MOD_DAMAGE_DONE_FOR_MECHANIC percent bonus - MathFunctions.AddPct(ref DoneTotalMod, GetTotalAuraModifierByMiscValue(AuraType.ModDamageDoneForMechanic, (int)spellProto.Mechanic)); + if (spellEffectInfo.Mechanic != 0) + MathFunctions.AddPct(ref DoneTotalMod, GetTotalAuraModifierByMiscValue(AuraType.ModDamageDoneForMechanic, (int)spellEffectInfo.Mechanic)); + else if (spellProto.Mechanic != 0) + MathFunctions.AddPct(ref DoneTotalMod, GetTotalAuraModifierByMiscValue(AuraType.ModDamageDoneForMechanic, (int)spellProto.Mechanic)); // Custom scripted damage switch (spellProto.SpellFamilyName) diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index 3e6f63031..b7bc6d984 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -3655,7 +3655,7 @@ namespace Game.Entities return (uint)Math.Max(damage * (1.0f - mitigation), 0.0f); } - public uint MeleeDamageBonusDone(Unit victim, uint damage, 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, SpellEffectInfo spellEffectInfo = null, SpellSchoolMask damageSchoolMask = SpellSchoolMask.Normal) { if (victim == null || damage == 0) return 0; @@ -3741,7 +3741,9 @@ namespace Game.Entities }); // Add SPELL_AURA_MOD_DAMAGE_DONE_FOR_MECHANIC percent bonus - if (spellProto != null) + if (spellEffectInfo != null && spellEffectInfo.Mechanic != 0) + MathFunctions.AddPct(ref DoneTotalMod, GetTotalAuraModifierByMiscValue(AuraType.ModDamageDoneForMechanic, (int)spellEffectInfo.Mechanic)); + else if (spellProto != null && spellProto.Mechanic != 0) MathFunctions.AddPct(ref DoneTotalMod, GetTotalAuraModifierByMiscValue(AuraType.ModDamageDoneForMechanic, (int)spellProto.Mechanic)); float damageF = damage; diff --git a/Source/Game/Spells/SpellEffects.cs b/Source/Game/Spells/SpellEffects.cs index 55c3b95eb..93cd63d7a 100644 --- a/Source/Game/Spells/SpellEffects.cs +++ b/Source/Game/Spells/SpellEffects.cs @@ -2550,7 +2550,7 @@ namespace Game.Spells weaponDamage = Math.Max(weaponDamage, 0); // Add melee damage bonuses (also check for negative) - weaponDamage = unitCaster.MeleeDamageBonusDone(unitTarget, weaponDamage, m_attackType, DamageEffectType.SpellDirect, m_spellInfo); + weaponDamage = unitCaster.MeleeDamageBonusDone(unitTarget, weaponDamage, m_attackType, DamageEffectType.SpellDirect, m_spellInfo, effectInfo); m_damage += (int)unitTarget.MeleeDamageBonusTaken(unitCaster, weaponDamage, m_attackType, DamageEffectType.SpellDirect, m_spellInfo); }