diff --git a/src/Modules/BuildDisplayStats.lua b/src/Modules/BuildDisplayStats.lua index 1b4061e5dc..b8463431fd 100644 --- a/src/Modules/BuildDisplayStats.lua +++ b/src/Modules/BuildDisplayStats.lua @@ -245,4 +245,4 @@ local extraSaveStats = { "ActiveMinionLimit", } -return displayStats, minionDisplayStats, extraSaveStats \ No newline at end of file +return displayStats, minionDisplayStats, extraSaveStats 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 },