Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/Data/Skills/act_dex.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1684,6 +1684,7 @@ skills["PoisonArrow"] = {
skill("radius", 20),
skill("radiusSecondary", 12),
skill("dotIsArea", true),
flag("dotIsCausticGround"),
},
qualityStats = {
Default = {
Expand Down Expand Up @@ -3657,6 +3658,7 @@ skills["FireTrap"] = {
},
baseMods = {
skill("dotIsArea", true),
flag("dotIsBurningGround"),
skill("radius", 15),
},
qualityStats = {
Expand Down
1 change: 1 addition & 0 deletions src/Data/Skills/act_int.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3675,6 +3675,7 @@ skills["FlameDash"] = {
},
baseMods = {
skill("dotIsArea", true),
flag("dotIsBurningGround"),
},
qualityStats = {
Default = {
Expand Down
2 changes: 2 additions & 0 deletions src/Data/Skills/minion.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1240,6 +1240,7 @@ skills["SiegebreakerCausticGround"] = {
baseMods = {
skill("ChaosDot", 1, { type = "PerStat", stat = "Life", div = 5 }),
skill("dotIsArea", true),
flag("dotIsCausticGround"),
},
qualityStats = {
},
Expand All @@ -1262,6 +1263,7 @@ skills["ReplicaSiegebreakerBurningGround"] = {
baseMods = {
skill("FireDot", 1, { type = "PerStat", stat = "Life", div = 5 }),
skill("dotIsArea", true),
flag("dotIsBurningGround"),
},
qualityStats = {
},
Expand Down
2 changes: 2 additions & 0 deletions src/Export/Skills/act_dex.txt
Original file line number Diff line number Diff line change
Expand Up @@ -315,6 +315,7 @@ local skills, mod, flag, skill = ...
#baseMod skill("radius", 20)
#baseMod skill("radiusSecondary", 12)
#baseMod skill("dotIsArea", true)
#baseMod flag("dotIsCausticGround")
#mods

#skill ImpactingSteelReload
Expand Down Expand Up @@ -716,6 +717,7 @@ local skills, mod, flag, skill = ...
#skill FireTrap
#flags spell trap area duration
#baseMod skill("dotIsArea", true)
#baseMod flag("dotIsBurningGround")
#baseMod skill("radius", 15)
#mods

Expand Down
1 change: 1 addition & 0 deletions src/Export/Skills/act_int.txt
Original file line number Diff line number Diff line change
Expand Up @@ -804,6 +804,7 @@ local skills, mod, flag, skill = ...
}
},
#baseMod skill("dotIsArea", true)
#baseMod flag("dotIsBurningGround")
#mods

#skill Firewall
Expand Down
2 changes: 2 additions & 0 deletions src/Export/Skills/minion.txt
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,7 @@ skills["SiegebreakerCausticGround"] = {
baseMods = {
skill("ChaosDot", 1, { type = "PerStat", stat = "Life", div = 5 }),
skill("dotIsArea", true),
flag("dotIsCausticGround"),
},
qualityStats = {
},
Expand All @@ -252,6 +253,7 @@ skills["ReplicaSiegebreakerBurningGround"] = {
baseMods = {
skill("FireDot", 1, { type = "PerStat", stat = "Life", div = 5 }),
skill("dotIsArea", true),
flag("dotIsBurningGround"),
},
qualityStats = {
},
Expand Down
6 changes: 3 additions & 3 deletions src/Modules/Build.lua
Original file line number Diff line number Diff line change
Expand Up @@ -294,15 +294,15 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild)
{ stat = "WithBleedDPS", label = "Total DPS inc. Bleed", 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.IgniteDPS or 0) == 0 end },
{ stat = "IgniteDPS", label = "Ignite DPS", fmt = ".1f", compPercent = true, warnFunc = function(v) return v >= data.misc.DotDpsCap and "Ignite DPS exceeds in game limit" end },
{ stat = "IgniteDamage", label = "Total Damage per Ignite", fmt = ".1f", compPercent = true, flag = "showAverage" },
{ stat = "BurningGroundDPS", label = "Burning Ground DPS", fmt = ".1f", compPercent = true, warnFunc = function(v,o) return v + o.IgniteDPS >= data.misc.DotDpsCap and "Ignite + Burning Ground DPS exceeds in game limit" end },
{ stat = "BurningGroundDPS", label = "Burning Ground DPS", fmt = ".1f", compPercent = true, warnFunc = function(v,o) return v >= data.misc.DotDpsCap and "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 = "CausticGroundDPS", label = "Caustic Ground DPS", fmt = ".1f", compPercent = true, warnFunc = function(v,o) return v + o.PoisonDPS >= data.misc.DotDpsCap and "Poison + Caustic Ground 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 = "PoisonDamage", label = "Total Damage per Poison", fmt = ".1f", compPercent = true },
{ stat = "WithPoisonDPS", label = "Total DPS inc. Poison", fmt = ".1f", compPercent = true, flag = "poison", flag = "notAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.ImpaleDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end },
{ stat = "DecayDPS", label = "Decay DPS", fmt = ".1f", compPercent = true },
{ stat = "TotalDotDPS", label = "Total DoT DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return o.showTotalDotDPS or ( v ~= o.TotalDot and v ~= o.TotalPoisonDPS and v ~= (o.TotalIgniteDPS or o.IgniteDPS) and v ~= o.BleedDPS ) end, warnFunc = function(v) return v >= data.misc.DotDpsCap and "DoT DPS exceeds in game limit" end },
{ stat = "TotalDotDPS", label = "Total DoT DPS", fmt = ".1f", compPercent = true, condFunc = function(v,o) return o.showTotalDotDPS or ( v ~= o.TotalDot and v ~= o.TotalPoisonDPS and v ~= o.CausticGroundDPS and v ~= (o.TotalIgniteDPS or o.IgniteDPS) and v ~= o.BurningGroundDPS and v ~= o.BleedDPS ) end, warnFunc = function(v) return v >= data.misc.DotDpsCap and "DoT DPS exceeds in game limit" end },
{ stat = "ImpaleDPS", label = "Impale Damage", fmt = ".1f", compPercent = true, flag = "impale", flag = "showAverage" },
{ stat = "WithImpaleDPS", label = "Damage inc. Impale", fmt = ".1f", compPercent = true, flag = "impale", flag = "showAverage", condFunc = function(v,o) return v ~= o.TotalDPS and (o.TotalDot or 0) == 0 and (o.IgniteDPS or 0) == 0 and (o.PoisonDPS or 0) == 0 and (o.BleedDPS or 0) == 0 end },
{ stat = "ImpaleDPS", label = "Impale DPS", fmt = ".1f", compPercent = true, flag = "impale", flag = "notAverage" },
Expand Down
24 changes: 21 additions & 3 deletions src/Modules/CalcOffence.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3289,6 +3289,7 @@ function calcs.offence(env, actor, activeSkill)
CausticGroundDPSCapped = data.misc.DotDpsCap - CausticGroundDPSCapped
end
globalOutput.CausticGroundDPS = CausticGroundDPSCapped
globalOutput.CausticGroundFromPoison = true
end
local durationBase
if skillData.poisonDurationIsSkillDuration then
Expand Down Expand Up @@ -3558,6 +3559,7 @@ function calcs.offence(env, actor, activeSkill)
BurningGroundDPSCapped = data.misc.DotDpsCap - IgniteDPSCapped
end
globalOutput.BurningGroundDPS = BurningGroundDPSCapped
globalOutput.BurningGroundFromIgnite = true
end
globalOutput.IgniteDamage = output.IgniteDPS * globalOutput.IgniteDuration
if skillFlags.igniteCanStack then
Expand Down Expand Up @@ -4050,9 +4052,9 @@ function calcs.offence(env, actor, activeSkill)
local total = baseVal * (1 + inc/100) * more * (1 + mult/100) * (aura or 1) * effMult
if output[damageType.."Dot"] == 0 or output[damageType.."Dot"] == nil then
output[damageType.."Dot"] = total
output.TotalDotInstance = output.TotalDotInstance + total
output.TotalDotInstance = m_min(output.TotalDotInstance + total, data.misc.DotDpsCap)
else
output.TotalDotInstance = output.TotalDotInstance + total + (output[damageType.."Dot"] or 0)
output.TotalDotInstance = m_min(output.TotalDotInstance + total + (output[damageType.."Dot"] or 0), data.misc.DotDpsCap)
end
if breakdown then
breakdown[damageType.."Dot"] = { }
Expand All @@ -4070,7 +4072,8 @@ function calcs.offence(env, actor, activeSkill)
elseif band(dotCfg.keywordFlags, KeywordFlag.Trap) ~= 0 then
speed = output.TrapThrowingSpeed
end
output.TotalDot = output.TotalDotInstance * speed * output.Duration * (skillData.dpsMultiplier or 1) * quantityMultiplier
output.TotalDot = m_min(output.TotalDotInstance * speed * output.Duration * (skillData.dpsMultiplier or 1) * quantityMultiplier, data.misc.DotDpsCap)
output.TotalDotCalcSection = output.TotalDot
if breakdown then
breakdown.TotalDot = {
s_format("%.1f ^8(Damage per Instance)", output.TotalDotInstance),
Expand All @@ -4085,8 +4088,23 @@ function calcs.offence(env, actor, activeSkill)
end
t_insert(breakdown.TotalDot, s_format("= %.1f", output.TotalDot))
end
elseif skillModList:Flag(nil, "dotIsBurningGround") then
output.TotalDot = 0
output.TotalDotCalcSection = output.TotalDotInstance
if not output.BurningGroundDPS or output.BurningGroundDPS < output.TotalDotInstance then
output.BurningGroundDPS = m_max(output.BurningGroundDPS or 0, output.TotalDotInstance)
output.BurningGroundFromIgnite = false
end
elseif skillModList:Flag(nil, "dotIsCausticGround") then
output.TotalDot = 0
output.TotalDotCalcSection = output.TotalDotInstance
if not output.CausticGroundDPS or output.CausticGroundDPS < output.TotalDotInstance then
output.CausticGroundDPS = m_max(output.CausticGroundDPS or 0, output.TotalDotInstance)
output.CausticGroundFromPoison = false
end
else
output.TotalDot = output.TotalDotInstance
output.TotalDotCalcSection = output.TotalDotInstance
end

-- The Saviour
Expand Down
8 changes: 4 additions & 4 deletions src/Modules/CalcSections.lua
Original file line number Diff line number Diff line change
Expand Up @@ -397,7 +397,7 @@ return {
} }
} },
{ 3, "Dot", 1, colorCodes.OFFENCE, {{ defaultCollapsed = false, label = "Skill Damage over Time", data = {
extra = "{1:output:TotalDot} total DoT",
extra = "{1:output:TotalDotCalcSection} total DoT",
flag = "dot",
colWidth = 95,
{ { format = "All Types:", }, { format = "Physical:" }, { format = colorCodes.LIGHTNING.."Lightning:" }, { format = colorCodes.COLD.."Cold:" }, { format = colorCodes.FIRE.."Fire:" }, { format = colorCodes.CHAOS.."Chaos:" }, },
Expand Down Expand Up @@ -456,7 +456,7 @@ return {
{ format = "{1:output:FireDot}", { breakdown = "FireDot" }, },
{ format = "{1:output:ChaosDot}", { breakdown = "ChaosDot" }, },
},
{ label = "Skill DoT DPS", { format = "{1:output:TotalDot}", { breakdown = "TotalDot" }, }, },
{ label = "Skill DoT DPS", { format = "{1:output:TotalDotCalcSection}", { breakdown = "TotalDot" }, }, },
} }
} },
{ 1, "Speed", 1, colorCodes.OFFENCE, {{ defaultCollapsed = false, label = "Attack/Cast Rate", data = {
Expand Down Expand Up @@ -813,7 +813,7 @@ return {
{ breakdown = "MainHand.PoisonDPS" },
{ breakdown = "OffHand.PoisonDPS" },
}, },
{ label = "Caustic Ground DPS", haveOutput = "CausticGroundDPS", { format = "{0:output:CausticGroundDPS}", { breakdown = "CausticGroundDPS" } } },
{ label = "Caustic Ground DPS", haveOutput = "CausticGroundFromPoison", { format = "{0:output:CausticGroundDPS}", { breakdown = "CausticGroundDPS" } } },
{ label = "Poison Duration", { format = "{2:output:PoisonDuration}s",
{ breakdown = "PoisonDuration" },
{ label = "Player modifiers", modName = { "EnemyPoisonDuration", "SkillAndDamagingAilmentDuration", "PoisonFaster" }, cfg = "poison" },
Expand Down Expand Up @@ -877,7 +877,7 @@ return {
{ breakdown = "OffHand.IgniteDPS" },
{ modName = { "IgniteBurnRate" }, cfg = "skill" },
}, },
{ label = "Burning Ground DPS", haveOutput = "BurningGroundDPS", { format = "{0:output:BurningGroundDPS}", { breakdown = "BurningGroundDPS" } } },
{ label = "Burning Ground DPS", haveOutput = "BurningGroundFromIgnite", { format = "{0:output:BurningGroundDPS}", { breakdown = "BurningGroundDPS" } } },
{ label = "Ignite Duration", { format = "{2:output:IgniteDuration}s",
{ breakdown = "IgniteDuration" },
{ label = "Player modifiers", modName = { "EnemyIgniteDuration", "SkillAndDamagingAilmentDuration", "IgniteBurnFaster", "IgniteBurnSlower" }, cfg = "skill" },
Expand Down
34 changes: 18 additions & 16 deletions src/Modules/Calcs.lua
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,8 @@ function calcs.calcFullDPS(build, mode, override, specEnv)

local bleedSource = ""
local igniteSource = ""
local poisonSource = ""
local burningGroundSource = ""
local causticGroundSource = ""
GlobalCache.numActiveSkillInFullDPS = 0
for _, activeSkill in ipairs(fullEnv.player.activeSkillList) do
if activeSkill.socketGroup and activeSkill.socketGroup.includeInFullDPS and not isExcludedFromFullDps(activeSkill) then
Expand Down Expand Up @@ -293,18 +294,19 @@ function calcs.calcFullDPS(build, mode, override, specEnv)
end
if usedEnv.player.output.IgniteDPS and usedEnv.player.output.IgniteDPS > fullDPS.igniteDPS then
fullDPS.igniteDPS = usedEnv.player.output.IgniteDPS
if usedEnv.player.output.BurningGroundDPS then
fullDPS.burningGroundDPS = usedEnv.player.output.BurningGroundDPS
end
igniteSource = activeSkill.activeEffect.grantedEffect.name
end
if usedEnv.player.output.BurningGroundDPS and usedEnv.player.output.BurningGroundDPS > fullDPS.burningGroundDPS then
fullDPS.burningGroundDPS = usedEnv.player.output.BurningGroundDPS
burningGroundSource = activeSkill.activeEffect.grantedEffect.name
end
if usedEnv.player.output.PoisonDPS and usedEnv.player.output.PoisonDPS > 0 then
if usedEnv.player.output.CausticGroundDPS and usedEnv.player.output.PoisonDPS > fullDPS.poisonDPS then
fullDPS.causticGroundDPS = usedEnv.player.output.CausticGroundDPS
poisonSource = activeSkill.activeEffect.grantedEffect.name
end
fullDPS.poisonDPS = fullDPS.poisonDPS + usedEnv.player.output.PoisonDPS * (usedEnv.player.output.TotalPoisonStacks or 1) * activeSkillCount
end
if usedEnv.player.output.CausticGroundDPS and usedEnv.player.output.CausticGroundDPS > fullDPS.causticGroundDPS then
fullDPS.causticGroundDPS = usedEnv.player.output.CausticGroundDPS
causticGroundSource = activeSkill.activeEffect.grantedEffect.name
end
if usedEnv.player.output.ImpaleDPS and usedEnv.player.output.ImpaleDPS > 0 then
fullDPS.impaleDPS = fullDPS.impaleDPS + usedEnv.player.output.ImpaleDPS * activeSkillCount
end
Expand Down Expand Up @@ -340,19 +342,19 @@ function calcs.calcFullDPS(build, mode, override, specEnv)
if fullDPS.igniteDPS > 0 then
t_insert(fullDPS.skills, { name = "Best Ignite DPS", dps = fullDPS.igniteDPS, count = 1, source = igniteSource })
fullDPS.TotalDotDPS = fullDPS.TotalDotDPS + fullDPS.igniteDPS
if fullDPS.burningGroundDPS > 0 then
t_insert(fullDPS.skills, { name = "Best Burning Ground DPS", dps = fullDPS.burningGroundDPS, count = 1, source = igniteSource })
fullDPS.TotalDotDPS = fullDPS.TotalDotDPS + fullDPS.burningGroundDPS
end
end
if fullDPS.burningGroundDPS > 0 then
t_insert(fullDPS.skills, { name = "Best Burning Ground DPS", dps = fullDPS.burningGroundDPS, count = 1, source = burningGroundSource })
fullDPS.TotalDotDPS = fullDPS.TotalDotDPS + fullDPS.burningGroundDPS
end
if fullDPS.poisonDPS > 0 then
fullDPS.poisonDPS = m_min(fullDPS.poisonDPS, data.misc.DotDpsCap)
t_insert(fullDPS.skills, { name = "Full Poison DPS", dps = fullDPS.poisonDPS, count = 1 })
fullDPS.TotalDotDPS = fullDPS.TotalDotDPS + fullDPS.poisonDPS
if fullDPS.causticGroundDPS > 0 then
t_insert(fullDPS.skills, { name = "Best Caustic Ground DPS", dps = fullDPS.causticGroundDPS, count = 1, source = poisonSource })
fullDPS.TotalDotDPS = fullDPS.TotalDotDPS + fullDPS.causticGroundDPS
end
end
if fullDPS.causticGroundDPS > 0 then
t_insert(fullDPS.skills, { name = "Best Caustic Ground DPS", dps = fullDPS.causticGroundDPS, count = 1, source = causticGroundSource })
fullDPS.TotalDotDPS = fullDPS.TotalDotDPS + fullDPS.causticGroundDPS
end
if fullDPS.impaleDPS > 0 then
t_insert(fullDPS.skills, { name = "Full Impale DPS", dps = fullDPS.impaleDPS, count = 1 })
Expand Down