diff --git a/src/Modules/BuildDisplayStats.lua b/src/Modules/BuildDisplayStats.lua index 1b4061e5dc..c9b1c21135 100644 --- a/src/Modules/BuildDisplayStats.lua +++ b/src/Modules/BuildDisplayStats.lua @@ -108,6 +108,7 @@ local displayStats = { { stat = "ColdMaximumHitTaken", label = "Cold Max Hit", fmt = ".0f", color = colorCodes.COLD, compPercent = true, condFunc = function(v,o) return o.LightningMaximumHitTaken ~= o.ColdMaximumHitTaken or o.LightningMaximumHitTaken ~= o.FireMaximumHitTaken end }, { stat = "LightningMaximumHitTaken", label = "Lightning Max Hit", fmt = ".0f", color = colorCodes.LIGHTNING, compPercent = true, condFunc = function(v,o) return o.LightningMaximumHitTaken ~= o.ColdMaximumHitTaken or o.LightningMaximumHitTaken ~= o.FireMaximumHitTaken end }, { stat = "ChaosMaximumHitTaken", label = "Chaos Max Hit", fmt = ".0f", color = colorCodes.CHAOS, compPercent = true }, + { stat = "EffectiveMaximumHitTaken", label = "Effective Max Hit", fmt = ".0f", compPercent = true }, { }, { stat = "MainHand", childStat = "Accuracy", label = "MH Accuracy", fmt = "d", condFunc = function(v,o) return o.PreciseTechnique end, warnFunc = function(v,o) return v < o.Life and "You do not have enough Accuracy for Precise Technique" end, warnColor = true }, { stat = "OffHand", childStat = "Accuracy", label = "OH Accuracy", fmt = "d", condFunc = function(v,o) return o.PreciseTechnique end, warnFunc = function(v,o) return v < o.Life and "You do not have enough Accuracy for Precise Technique" end, warnColor = true }, diff --git a/src/Modules/CalcDefence.lua b/src/Modules/CalcDefence.lua index 0c349cd1bc..7adacd0b6e 100644 --- a/src/Modules/CalcDefence.lua +++ b/src/Modules/CalcDefence.lua @@ -3246,18 +3246,13 @@ function calcs.buildDefenceEstimations(env, actor) end end - -- second minimum used for power calcs, as there are issues using average or minimum - local minimum = m_huge - local SecondMinimum = m_huge + -- harmonic mean used for power calcs (equivalent to the maximum hit when the hit is equally split between all damage types) + -- ideally there should be weights to account for the fact that damage types usually have different scales (phys hits are smaller than ele hits) + local reciprocalSum = 0 for _, damageType in ipairs(dmgTypeList) do - if output[damageType.."MaximumHitTaken"] < minimum then - SecondMinimum = minimum - minimum = output[damageType.."MaximumHitTaken"] - elseif output[damageType.."MaximumHitTaken"] < SecondMinimum then - SecondMinimum = output[damageType.."MaximumHitTaken"] - end + reciprocalSum = reciprocalSum + 1 / output[damageType .. "MaximumHitTaken"] end - output.SecondMinimalMaximumHitTaken = SecondMinimum + output.EffectiveMaximumHitTaken = 5 / reciprocalSum end -- effective health pool vs dots diff --git a/src/Modules/Data.lua b/src/Modules/Data.lua index be484e0c32..05537f2ec9 100644 --- a/src/Modules/Data.lua +++ b/src/Modules/Data.lua @@ -142,7 +142,7 @@ data.powerStatList = { { stat="SpellAvoidChance", label="Spell avoid chance" }, { stat="ProjectileAvoidChance", label="Projectile avoid chance" }, { stat="TotalEHP", label="Effective Hit Pool" }, - { stat="SecondMinimalMaximumHitTaken", label="Eff. Maximum Hit Taken" }, + { stat="EffectiveMaximumHitTaken", label="Eff. Maximum Hit Taken" }, { stat="PhysicalTakenHit", label="Taken Phys dmg", transform=function(value) return -value end }, { stat="LightningTakenHit", label="Taken Lightning dmg", transform=function(value) return -value end }, { stat="ColdTakenHit", label="Taken Cold dmg", transform=function(value) return -value end },