diff --git a/src/Modules/CalcDefence.lua b/src/Modules/CalcDefence.lua index 72af401ae5..af0cb278fc 100644 --- a/src/Modules/CalcDefence.lua +++ b/src/Modules/CalcDefence.lua @@ -608,6 +608,7 @@ function calcs.resistances(actor) output[elem.."Resist"] = final + output[elem.."ResistMax"] = max output[elem.."ResistTotal"] = total output[elem.."ResistOverCap"] = m_max(0, total - max) output[elem.."ResistOver75"] = m_max(0, final - 75) diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index 73025efe92..7ae906bb7a 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -1574,8 +1574,11 @@ function calcs.perform(env, skipEHP) local flaskTotalRateInc = modDB:Sum("INC", nil, "FlaskRecoveryRate") local flaskDurInc = modDB:Sum("INC", nil, "FlaskDuration") - -- flask breakdown - if breakdown then + -- flask stats + -- These are plain modifier aggregates rather than per-flask outcomes, so they are calculated + -- unconditionally: node power runs the calculator without a breakdown, and would otherwise + -- read every one of them as zero. + do local chargesGenerated = modDB:Sum("BASE", nil, "FlaskChargesGenerated") local usedFlasks = 0 for i, v in pairs(env.flasks) do @@ -1591,6 +1594,12 @@ function calcs.perform(env, skipEHP) local manaChargesGenerated = modDB:Sum("BASE", nil, "ManaFlaskChargesGenerated") output.FlaskEffect = effectInc + output.FlaskDuration = flaskDurInc + output.FlaskRecoveryRate = flaskTotalRateInc + output.FlaskChargesUsed = modDB:Sum("INC", nil, "FlaskChargesUsed") + output.FlaskChargesGained = modDB:Sum("INC", nil, "FlaskChargesGained") + output.FlaskLifeRecovery = modDB:Sum("INC", nil, "FlaskLifeRecovery") + output.FlaskManaRecovery = modDB:Sum("INC", nil, "FlaskManaRecovery") output.FlaskChargeGen = totalChargesGenerated output.LifeFlaskChargeGen = totalChargesGenerated + lifeChargesGenerated output.ManaFlaskChargeGen = totalChargesGenerated + manaChargesGenerated diff --git a/src/Modules/Data.lua b/src/Modules/Data.lua index 1045958434..6002b253f7 100644 --- a/src/Modules/Data.lua +++ b/src/Modules/Data.lua @@ -128,23 +128,44 @@ data.powerStatList = { { stat="WithImpaleDPS", label="Impale + Hit DPS" }, { stat="AverageDamage", label="Average Hit" }, { stat="Speed", label="Attack/Cast Speed" }, + { stat="AreaOfEffectMod", label="Area of Effect" }, + { stat="DurationMod", label="Skill Effect Duration" }, + { stat="Cooldown", label="Cooldown Recovery", transform=function(value) return -value end }, { stat="TotalDot", label="DoT DPS" }, { stat="BleedDPS", label="Bleed DPS" }, + { stat="BleedDamage", label="Bleed Total Damage" }, + { stat="BleedDuration", label="Bleed Duration" }, { stat="IgniteDPS", label="Ignite DPS" }, + { stat="IgniteDamage", label="Ignite Total Damage" }, + { stat="IgniteDuration", label="Ignite Duration" }, { stat="PoisonDPS", label="Poison DPS" }, + { stat="PoisonDamage", label="Poison Total Damage" }, + { stat="PoisonDuration", label="Poison Duration" }, { stat="Life", label="Life" }, { stat="LifeRegen", label="Life regen" }, { stat="LifeLeechRate", label="Life leech" }, + { stat="LifeRecoupRecoveryAvg", label="Life Recoup" }, { stat="Armour", label="Armour" }, { stat="Evasion", label="Evasion" }, { stat="EnergyShield", label="Energy Shield" }, { stat="EnergyShieldRecoveryCap", label="Recoverable ES" }, { stat="EnergyShieldRegen", label="Energy Shield regen" }, { stat="EnergyShieldLeechRate", label="Energy Shield leech" }, + { stat="EnergyShieldRecoupRecoveryAvg", label="Energy Shield Recoup" }, { stat="Mana", label="Mana" }, { stat="ManaRegen", label="Mana regen" }, { stat="ManaLeechRate", label="Mana leech" }, + { stat="ManaRecoupRecoveryAvg", label="Mana Recoup" }, + { stat="ManaCost", label="Mana Cost Efficiency", transform=function(value) return -value end }, { stat="Ward", label="Ward" }, + { stat="MaximumRage", label="Maximum Rage" }, + { stat="FlaskEffect", label="Flask Effect" }, + { stat="FlaskDuration", label="Flask Effect Duration" }, + { stat="FlaskRecoveryRate", label="Flask Recovery Rate" }, + { stat="FlaskLifeRecovery", label="Flask Life Recovery" }, + { stat="FlaskManaRecovery", label="Flask Mana Recovery" }, + { stat="FlaskChargesGained", label="Flask Charges Gained" }, + { stat="FlaskChargesUsed", label="Flask Charges Used", transform=function(value) return -value end }, { stat="Str", label="Strength" }, { stat="Dex", label="Dexterity" }, { stat="Int", label="Intelligence" }, @@ -159,12 +180,36 @@ data.powerStatList = { { stat="ColdTakenHit", label="Taken Cold dmg", transform=function(value) return -value end }, { stat="FireTakenHit", label="Taken Fire dmg", transform=function(value) return -value end }, { stat="ChaosTakenHit", label="Taken Chaos dmg", transform=function(value) return -value end }, + { stat="FireResistMax", label="Maximum Fire Resistance" }, + { stat="ColdResistMax", label="Maximum Cold Resistance" }, + { stat="LightningResistMax", label="Maximum Lightning Resistance" }, + { stat="ChaosResistMax", label="Maximum Chaos Resistance" }, + { stat="CritExtraDamageReduction", label="Reduced Critical Strike Damage Taken" }, + { stat="StunThreshold", label="Stun Threshold" }, + { stat="StunDuration", label="Stun Duration", transform=function(value) return -value end }, + { stat="EnemyStunThresholdMod", label="Enemy Stun Threshold", transform=function(value) return -value end }, { stat="CritChance", label="Crit Chance" }, { stat="CritMultiplier", label="Crit Multiplier" }, + { stat="ImpaleChance", label="Impale Chance" }, + { stat="ImpaleStoredDamage", label="Impale Effect" }, { stat="BleedChance", label="Bleed Chance" }, { stat="FreezeChance", label="Freeze Chance" }, { stat="IgniteChance", label="Ignite Chance" }, { stat="ShockChance", label="Shock Chance" }, + { stat="ChillEffectMod", label="Chill Effect" }, + { stat="ChillDuration", label="Chill Duration" }, + { stat="ShockEffectMod", label="Shock Effect" }, + { stat="ShockDuration", label="Shock Duration" }, + { stat="ScorchEffectMod", label="Scorch Effect" }, + { stat="ScorchDuration", label="Scorch Duration" }, + { stat="BrittleEffectMod", label="Brittle Effect" }, + { stat="BrittleDuration", label="Brittle Duration" }, + { stat="SapEffectMod", label="Sap Effect" }, + { stat="SapDuration", label="Sap Duration" }, + { stat="CurseEffectMod", label="Curse Effect" }, + { stat="CurseEffectOnSelf", label="Curse Effect on You", transform=function(value) return -value end }, + { stat="AuraEffectMod", label="Aura Effect" }, + { stat="ElusiveEffectMod", label="Elusive Effect" }, { stat="EffectiveMovementSpeedMod", label="Move speed" }, { stat="LightRadiusMod", label="Light Radius" }, { stat="BlockChance", label="Block Chance" }, @@ -214,6 +259,14 @@ local minionNonApplicableStats = { Spirit = true, EffectiveLootRarityMod = true, LightRadiusMod = true, + -- flask stats are only ever written to the player's output + FlaskEffect = true, + FlaskDuration = true, + FlaskRecoveryRate = true, + FlaskLifeRecovery = true, + FlaskManaRecovery = true, + FlaskChargesGained = true, + FlaskChargesUsed = true, } for i = 1, #data.powerStatList do local statEntry = data.powerStatList[i]