Skip to content

Commit

Permalink
split poison dps again and make sidebar use single poison
Browse files Browse the repository at this point in the history
  • Loading branch information
Regisle committed Aug 26, 2024
1 parent 31d6bc5 commit 560c031
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 21 deletions.
2 changes: 1 addition & 1 deletion src/Modules/Build.lua
Original file line number Diff line number Diff line change
Expand Up @@ -403,7 +403,7 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin
{ stat = "MirageBurningGroundDPS", label = "Mirage Burning Ground DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.BurningGroundDPS end, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Mirage Burning Ground DPS exceeds in game limit" end },
{ stat = "WithIgniteDPS", label = "Total DPS inc. Ignite", fmt = ".1f", compPercent = true, flag = "notAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end },
{ stat = "WithIgniteAverageDamage", label = "Average Dmg. inc. Ignite", fmt = ".1f", compPercent = true },
{ stat = "PoisonDPS", label = "Poison DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Poison DPS exceeds in game limit" end },
{ stat = "PoisonDPS", label = "Single Poison DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Poison DPS exceeds in game limit" end },
{ stat = "CausticGroundDPS", label = "Caustic Ground DPS", fmt = ".1f", compPercent = true, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Caustic Ground DPS exceeds in game limit" end },
{ stat = "MirageCausticGroundDPS", label = "Mirage Caustic Ground DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return v ~= o.CausticGroundDPS end, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "Mirage Caustic Ground DPS exceeds in game limit" end },
{ stat = "PoisonDamage", label = "Total Damage per Poison", fmt = ".1f", compPercent = true },
Expand Down
47 changes: 30 additions & 17 deletions src/Modules/CalcOffence.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4235,15 +4235,14 @@ function calcs.offence(env, actor, activeSkill)
end
globalOutput.PoisonStacks = PoisonStacks
local effectMod = calcLib.mod(skillModList, dotCfg, "AilmentEffect")
local singlePoisonDps = m_min(baseVal * effectMod * rateMod * effMult, data.misc.DotDpsCap)
local PoisonDPSUncapped = singlePoisonDps * PoisonStacks
local PoisonDPSCapped = m_min(PoisonDPSUncapped, data.misc.DotDpsCap)
output.PoisonDamage = singlePoisonDps * globalOutput.PoisonDuration
local MinPoisonDPSUncapped = baseMinVal * effectMod * rateMod * effMult * PoisonStacks
local singlePoisonDPSUncapped = m_min(baseVal * effectMod * rateMod * effMult, data.misc.DotDpsCap)
local singlePoisonDPSCapped = m_min(singlePoisonDPSUncapped, data.misc.DotDpsCap)
output.PoisonDPS = singlePoisonDPSCapped
output.PoisonDamage = singlePoisonDPSCapped * globalOutput.PoisonDuration
local MinPoisonDPSUncapped = baseMinVal * effectMod * rateMod * effMult
local MinPoisonDPSCapped = m_min(MinPoisonDPSUncapped, data.misc.DotDpsCap)
local MaxPoisonDPSUncapped = baseMaxVal * effectMod * rateMod * effMult * PoisonStacks
local MaxPoisonDPSUncapped = baseMaxVal * effectMod * rateMod * effMult
local MaxPoisonDPSCapped = m_min(MaxPoisonDPSUncapped, data.misc.DotDpsCap)
output.PoisonDPS = PoisonDPSCapped
local groundMult = m_max(skillModList:Max(nil, "PoisonDpsAsCausticGround") or 0, enemyDB:Max(nil, "PoisonDpsAsCausticGround") or 0)
if groundMult > 0 then
local CausticGroundDPSUncapped = baseVal * effectMod * rateMod * effMult * groundMult / 100
Expand All @@ -4259,11 +4258,15 @@ function calcs.offence(env, actor, activeSkill)
}
end
end
local PoisonDPSUncapped
local PoisonDPSCapped
if skillData.showAverage then
output.TotalPoisonAverageDamage = output.PoisonDamage
output.TotalPoisonDPS = output.PoisonDPS
else
output.TotalPoisonDPS = m_min(PoisonDPSCapped, data.misc.DotDpsCap)
PoisonDPSUncapped = singlePoisonDPSCapped * PoisonStacks
PoisonDPSCapped = m_min(PoisonDPSUncapped, data.misc.DotDpsCap)
output.TotalPoisonDPS = PoisonDPSCapped
end
if breakdown then
if output.CritPoisonDotMulti and (output.CritPoisonDotMulti ~= output.PoisonDotMulti) then
Expand All @@ -4281,7 +4284,7 @@ function calcs.offence(env, actor, activeSkill)
t_insert(breakdown.PoisonDPS, s_format("= %.1f", baseVal, 1))
t_insert(breakdown.PoisonDPS, "")
t_insert(breakdown.PoisonDPS, "Poison DPS:")
if baseVal ~= PoisonDPSUncapped then
if baseVal ~= singlePoisonDPSUncapped then
t_insert(breakdown.PoisonDPS, s_format("%.1f ^8(base damage per second)", baseVal))
end
if effectMod ~= 1 then
Expand All @@ -4293,13 +4296,10 @@ function calcs.offence(env, actor, activeSkill)
if effMult ~= 1 then
t_insert(breakdown.PoisonDPS, s_format("x %.3f ^8(effective DPS modifier from enemy debuffs)", effMult))
end
if PoisonStacks ~= 1 then
t_insert(breakdown.PoisonDPS, s_format("x %.2f ^8(poison stacks)", PoisonStacks))
end
if output.PoisonDPS ~= PoisonDPSUncapped then
t_insert(breakdown.PoisonDPS, s_format("= %.1f ^8(Uncapped raw Poison DPS)", PoisonDPSUncapped))
t_insert(breakdown.PoisonDPS, s_format("^8(Raw Poison DPS is "..colorCodes.NEGATIVE.."overcapped ^8by^7 %.0f ^8:^7 %.1f%%^8)", PoisonDPSUncapped - PoisonDPSCapped, (PoisonDPSUncapped - PoisonDPSCapped) / PoisonDPSCapped * 100))
t_insert(breakdown.PoisonDPS, s_format("= %d ^8(Capped Poison DPS)", PoisonDPSCapped))
if output.PoisonDPS ~= singlePoisonDPSUncapped then
t_insert(breakdown.PoisonDPS, s_format("= %.1f ^8(Uncapped raw Poison DPS)", singlePoisonDPSUncapped))
t_insert(breakdown.PoisonDPS, s_format("^8(Raw Poison DPS is "..colorCodes.NEGATIVE.."overcapped ^8by^7 %.0f ^8:^7 %.1f%%^8)", singlePoisonDPSUncapped - singlePoisonDPSCapped, (singlePoisonDPSUncapped - singlePoisonDPSCapped) / singlePoisonDPSCapped * 100))
t_insert(breakdown.PoisonDPS, s_format("= %d ^8(Capped Poison DPS)", singlePoisonDPSCapped))
else
t_insert(breakdown.PoisonDPS, s_format("= %.1f ^8per second", output.PoisonDPS))
end
Expand All @@ -4320,6 +4320,19 @@ function calcs.offence(env, actor, activeSkill)
if MaxPoisonDPSCapped ~= MaxPoisonDPSUncapped or MinPoisonDPSCapped ~= MinPoisonDPSUncapped then
t_insert(breakdown.PoisonDPS, s_format("%.0f to %.0f ^8(Capped Poison DPS Range)", MinPoisonDPSCapped, MaxPoisonDPSCapped))
end
if not skillData.showAverage and PoisonStacks ~= 1 then
breakdown.TotalPoisonDPS = {
s_format("%.1f ^8single poison damage per second", singlePoisonDPSCapped),
s_format("x %.2f ^8(poison stacks)", PoisonStacks),
}
if output.TotalPoisonDPS ~= PoisonDPSUncapped then
t_insert(breakdown.TotalPoisonDPS, s_format("= %.1f ^8(Uncapped raw Poison DPS)", PoisonDPSUncapped))
t_insert(breakdown.TotalPoisonDPS, s_format("^8(Raw Poison DPS is "..colorCodes.NEGATIVE.."overcapped ^8by^7 %.0f ^8:^7 %.1f%%^8)", PoisonDPSUncapped - PoisonDPSCapped, (PoisonDPSUncapped - PoisonDPSCapped) / PoisonDPSCapped * 100))
t_insert(breakdown.TotalPoisonDPS, s_format("= %d ^8(Capped Poison DPS)", PoisonDPSCapped))
else
t_insert(breakdown.TotalPoisonDPS, s_format("= %.1f ^8per second", PoisonDPSCapped))
end
end
if globalOutput.PoisonDuration ~= 2 then
globalBreakdown.PoisonDuration = {
s_format("%.2fs ^8(base duration)", durationBase)
Expand All @@ -4339,7 +4352,7 @@ function calcs.offence(env, actor, activeSkill)
if isAttack then
t_insert(breakdown.PoisonDamage, pass.label..":")
end
t_insert(breakdown.PoisonDamage, s_format("%.1f ^8(damage per second)", singlePoisonDps))
t_insert(breakdown.PoisonDamage, s_format("%.1f ^8(damage per second)", singlePoisonDPSCapped))
t_insert(breakdown.PoisonDamage, s_format("x %.2fs ^8(poison duration)", globalOutput.PoisonDuration))
t_insert(breakdown.PoisonDamage, s_format("= %.1f ^8damage per poison stack", output.PoisonDamage))
end
Expand Down
11 changes: 8 additions & 3 deletions src/Modules/CalcSections.lua
Original file line number Diff line number Diff line change
Expand Up @@ -929,9 +929,14 @@ return {
{ label = "Enemy modifiers", modName = { "SelfPoisonDuration", "SelfAilmentDuration", "SelfPoisonFaster" }, enemy = true },
}, },
{ label = "Dmg. per Poison", { format = "{1:output:PoisonDamage}",
{ breakdown = "MainHand.PoisonDamage" },
{ breakdown = "OffHand.PoisonDamage" },
{ breakdown = "PoisonDamage" },
{ breakdown = "MainHand.PoisonDamage" },
{ breakdown = "OffHand.PoisonDamage" },
{ breakdown = "PoisonDamage" },
}, },
{ label = "Total Poison DPS", { format = "{1:output:TotalPoisonDPS}",
{ breakdown = "MainHand.TotalPoisonDPS" },
{ breakdown = "OffHand.TotalPoisonDPS" },
{ breakdown = "TotalPoisonDPS" },
}, },
} }
} },
Expand Down

0 comments on commit 560c031

Please sign in to comment.