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
33 changes: 23 additions & 10 deletions src/Modules/CalcOffence.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3370,6 +3370,22 @@ function calcs.offence(env, actor, activeSkill)
breakdown.PoisonFire = { damageTypes = { } }
breakdown.PoisonChaos = { damageTypes = { } }
end
local rateMod = calcLib.mod(skillModList, cfg, "PoisonFaster") + enemyDB:Sum("INC", nil, "SelfPoisonFaster") / 100
local durationBase
if skillData.poisonDurationIsSkillDuration then
durationBase = skillData.duration
else
durationBase = data.misc.PoisonDurationBase
end
local durationMod = calcLib.mod(skillModList, dotCfg, "EnemyPoisonDuration", "EnemyAilmentDuration", "SkillAndDamagingAilmentDuration", skillData.poisonIsSkillEffect and "Duration" or nil) * calcLib.mod(enemyDB, nil, "SelfPoisonDuration", "SelfAilmentDuration")
globalOutput.PoisonDuration = durationBase * durationMod / rateMod * debuffDurationMult
local PoisonStacks = globalOutput.PoisonDuration * (globalOutput.HitSpeed or globalOutput.Speed) * (skillData.dpsMultiplier or 1) * (skillData.stackMultiplier or 1) * quantityMultiplier
if PoisonStacks < 1 and (env.configInput.multiplierPoisonOnEnemy or 0) <= 1 then
skillModList:NewMod("Condition:SinglePoison", "FLAG", true, "poison")
end
if skillModList:Flag(nil, "Condition:SinglePoison") then
PoisonStacks = m_min(PoisonStacks, 1)
end
for sub_pass = 1, 2 do
if skillModList:Flag(dotCfg, "AilmentsAreNeverFromCrit") or sub_pass == 1 then
dotCfg.skillCond["CriticalStrike"] = false
Expand Down Expand Up @@ -3449,7 +3465,6 @@ function calcs.offence(env, actor, activeSkill)
end
end
local effectMod = calcLib.mod(skillModList, dotCfg, "AilmentEffect")
local rateMod = calcLib.mod(skillModList, cfg, "PoisonFaster") + enemyDB:Sum("INC", nil, "SelfPoisonFaster") / 100
local PoisonDPSUncapped = baseVal * effectMod * rateMod * effMult
local PoisonDPSCapped = m_min(PoisonDPSUncapped, data.misc.DotDpsCap)
output.PoisonDPS = PoisonDPSCapped
Expand All @@ -3468,20 +3483,15 @@ function calcs.offence(env, actor, activeSkill)
}
end
end
local durationBase
if skillData.poisonDurationIsSkillDuration then
durationBase = skillData.duration
else
durationBase = data.misc.PoisonDurationBase
end
local durationMod = calcLib.mod(skillModList, dotCfg, "EnemyPoisonDuration", "EnemyAilmentDuration", "SkillAndDamagingAilmentDuration", skillData.poisonIsSkillEffect and "Duration" or nil) * calcLib.mod(enemyDB, nil, "SelfPoisonDuration", "SelfAilmentDuration")
globalOutput.PoisonDuration = durationBase * durationMod / rateMod * debuffDurationMult
output.PoisonDamage = output.PoisonDPS * globalOutput.PoisonDuration
if skillData.showAverage then
output.TotalPoisonAverageDamage = output.HitChance / 100 * output.PoisonChance / 100 * output.PoisonDamage
output.TotalPoisonDPS = output.PoisonDPS
else
output.TotalPoisonStacks = output.HitChance / 100 * output.PoisonChance / 100 * globalOutput.PoisonDuration * (globalOutput.HitSpeed or globalOutput.Speed) * (skillData.dpsMultiplier or 1) * (skillData.stackMultiplier or 1) * quantityMultiplier
output.TotalPoisonStacks = output.HitChance / 100 * output.PoisonChance / 100 * PoisonStacks
if skillModList:Flag(nil, "Condition:SinglePoison") and (PoisonStacks >= 1) then
output.TotalPoisonStacks = 1
end
output.TotalPoisonDPS = m_min(PoisonDPSCapped * output.TotalPoisonStacks, data.misc.DotDpsCap)
end
if breakdown then
Expand Down Expand Up @@ -3555,6 +3565,9 @@ function calcs.offence(env, actor, activeSkill)
{ "%g ^8(quantity multiplier for this skill)", quantityMultiplier },
total = s_format("= %.1f", output.TotalPoisonStacks),
})
if skillModList:Flag(nil, "Condition:SinglePoison") then
t_insert(breakdown.TotalPoisonStacks, "Capped to 1")
end
end
end
end
Expand Down
1 change: 1 addition & 0 deletions src/Modules/CalcSections.lua
Original file line number Diff line number Diff line change
Expand Up @@ -856,6 +856,7 @@ return {
{ breakdown = "MainHand.TotalPoisonStacks" },
{ breakdown = "OffHand.TotalPoisonStacks" },
{ breakdown = "TotalPoisonStacks" },
{ label = "Capped to 1 poison", modName = "Condition:SinglePoison" },
}, },
} }
} },
Expand Down
3 changes: 3 additions & 0 deletions src/Modules/ConfigOptions.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1262,6 +1262,9 @@ Huge sets the radius to 11.
{ var = "multiplierPoisonOnEnemy", type = "count", label = "# of Poison on enemy:", implyCond = "Poisoned", apply = function(val, modList, enemyModList)
enemyModList:NewMod("Multiplier:PoisonStack", "BASE", val, "Config", { type = "Condition", var = "Effective" })
end },
{ var = "conditionSinglePoison", type = "check", label = "Cap to Single Poison on enemy?", ifCond = "SinglePoison", tooltip = "This is for low tolerance, but will limit you to only applying a single poison on the enemy", apply = function(val, modList, enemyModList)
modList:NewMod("Condition:SinglePoison", "FLAG", true, "Config", { type = "Condition", var = "Effective" })
end },
{ var = "multiplierCurseExpiredOnEnemy", type = "count", label = "#% of Curse Expired on enemy:", ifEnemyMult = "CurseExpired", apply = function(val, modList, enemyModList)
enemyModList:NewMod("Multiplier:CurseExpired", "BASE", val, "Config", { type = "Condition", var = "Effective" })
end },
Expand Down
3 changes: 3 additions & 0 deletions src/Modules/ModParser.lua
Original file line number Diff line number Diff line change
Expand Up @@ -2636,6 +2636,9 @@ local specialModList = {
["(%d+)%% chance for poisons inflicted with this weapon to deal (%d+)%% more damage"] = function(num, _, more) return {
mod("Damage", "MORE", tonumber(more) * num / 100, nil, 0, KeywordFlag.Poison, { type = "Condition", var = "{Hand}Attack" }, { type = "SkillType", skillType = SkillType.Attack }),
} end,
["poisons you inflict on non%-poisoned enemies deal (%d+)%% increased damage"] = function(num) return {
mod("Damage", "INC", num, nil, 0, KeywordFlag.Poison, { type = "Condition", var = "SinglePoison" })
} end,
["poisons on you expire (%d+)%% slower"] = function(num) return { mod("SelfPoisonDebuffExpirationRate", "BASE", -num)} end,
-- Suppression
["your chance to suppressed spell damage is lucky"] = { flag("SpellSuppressionChanceIsLucky") },
Expand Down