diff --git a/utils/mods/legacy_combat.lua b/utils/mods/legacy_combat.lua index 151cc4e90..34663efb5 100644 --- a/utils/mods/legacy_combat.lua +++ b/utils/mods/legacy_combat.lua @@ -689,6 +689,14 @@ function MobGetMeleeMitDmg(defender, attacker, damage, min_damage, mitigation_ra local mit_roll = Random.Real(0, mitigation_rating); local atk_roll = Random.Real(0, attack_rating); + eq.debug( + string.format("[%s] [Mob::GetMeleeMitDmg] MitigationRoll [%02f] AtkRoll [%02f]", + e.self:GetCleanName(), + mit_roll, + atk_roll + ) + ); + if (atk_roll > mit_roll) then local a_diff = atk_roll - mit_roll; local thac0 = attack_rating * ACthac0Factor; @@ -716,9 +724,46 @@ function MobGetMeleeMitDmg(defender, attacker, damage, min_damage, mitigation_ra end local interval = (damage - min_damage) / 20.0; + + eq.debug( + string.format("[%s] [Mob::GetMeleeMitDmg] Interval [%02f] d [%02f]", + e.self:GetCleanName(), + interval, + d + ) + ); + damage = damage - (math.floor(d) * interval); + + eq.debug( + string.format("[%s] [Mob::GetMeleeMitDmg] Damage [%02f] Post Interval", + e.self:GetCleanName(), + damage + ) + ); + damage = damage - (min_damage * defender:GetItemBonuses():MeleeMitigation() / 100); - damage = damage + (damage * (defender:GetSpellBonuses():MeleeMitigationEffect() + defender:GetItemBonuses():MeleeMitigationEffect() + defender:GetAABonuses():MeleeMitigationEffect()) / 100); + + eq.debug( + string.format("[%s] [Mob::GetMeleeMitDmg] Damage [%02f] Mitigation [%i] Post Mitigation MinDmg", + e.self:GetCleanName(), + damage, + defender:GetItemBonuses():MeleeMitigation() + ) + ); + + -- Changed from positive to negative per original + damage = damage - (damage * (defender:GetSpellBonuses():MeleeMitigationEffect() + defender:GetItemBonuses():MeleeMitigationEffect() + defender:GetAABonuses():MeleeMitigationEffect()) / 100); + + eq.debug( + string.format("[%s] [Mob::GetMeleeMitDmg] Damage [%02f] SpellMit [%i] ItemMit [%i] AAMit [%i] Post All Mit Bonuses", + e.self:GetCleanName(), + damage, + defender:GetSpellBonuses():MeleeMitigationEffect(), + defender:GetItemBonuses():MeleeMitigationEffect(), + defender:GetAABonuses():MeleeMitigationEffect() + ) + ); return damage; end diff --git a/zone/attack.cpp b/zone/attack.cpp index 97ddc773d..be3317603 100644 --- a/zone/attack.cpp +++ b/zone/attack.cpp @@ -736,6 +736,15 @@ int32 Mob::GetMeleeMitDmg(Mob *attacker, int32 damage, int32 minhit, float mit_roll = zone->random.Real(0, mit_rating); float atk_roll = zone->random.Real(0, atk_rating); + Log.Out( + Logs::General, + Logs::Combat, + "[%s] [Mob::GetMeleeMitDmg] MitigationRoll [%.2f] AtkRoll [%.2f]", + GetCleanName(), + mit_roll, + atk_roll + ); + if (atk_roll > mit_roll) { float a_diff = atk_roll - mit_roll; float thac0 = atk_rating * RuleR(Combat, ACthac0Factor); @@ -760,10 +769,50 @@ int32 Mob::GetMeleeMitDmg(Mob *attacker, int32 damage, int32 minhit, d = 20.0; float interval = (damage - minhit) / 20.0; + + Log.Out( + Logs::General, + Logs::Combat, + "[%s] [Mob::GetMeleeMitDmg] Interval [%.2f] d [%.2f]", + GetCleanName(), + interval, + d + ); + damage -= ((int)d * interval); + Log.Out( + Logs::General, + Logs::Combat, + "[%s] [Mob::GetMeleeMitDmg] Damage [%.2f] Post Interval", + GetCleanName(), + damage + ); + damage -= (minhit * itembonuses.MeleeMitigation / 100); - damage -= (damage * (spellbonuses.MeleeMitigationEffect + itembonuses.MeleeMitigationEffect + aabonuses.MeleeMitigationEffect) / 100); + + Log.Out( + Logs::General, + Logs::Combat, + "[%s] [Mob::GetMeleeMitDmg] Damage [%.2f] Mitigation [%i] Post Mitigation MinDmg", + GetCleanName(), + damage, + itembonuses.MeleeMitigation + ); + + damage -= (damage * (spellbonuses.MeleeMitigationEffect + itembonuses.MeleeMitigationEffect + aabonuses.MeleeMitigationEffect) / 100); + + Log.Out( + Logs::General, + Logs::Combat, + "[%s] [Mob::GetMeleeMitDmg] Damage [%.2f] SpellMit [%i] ItemMit [%i] AAMit [%i] Post All Mit Bonuses", + GetCleanName(), + damage, + spellbonuses.MeleeMitigationEffect, + itembonuses.MeleeMitigationEffect, + aabonuses.MeleeMitigationEffect + ); + return damage; }