Skip to content

Commit 3f84e2b

Browse files
author
LocalIdentity
committed
1 parent a22a781 commit 3f84e2b

5 files changed

Lines changed: 27 additions & 21 deletions

File tree

src/Classes/Item.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1164,7 +1164,8 @@ function ItemClass:BuildRaw()
11641164
for varId in pairs(modLine.variantList) do
11651165
varSpec = (varSpec and varSpec .. "," or "") .. varId
11661166
end
1167-
line = "{variant:" .. varSpec .. "}" .. line
1167+
local var = "{variant:" .. varSpec .. "}"
1168+
line = var .. line:gsub("\n", "\n" .. var) -- Variants that go over 1 line need to have the gsub to fix there being no "variant:" at the start
11681169
end
11691170
if modLine.modTags and #modLine.modTags > 0 then
11701171
line = "{tags:" .. table.concat(modLine.modTags, ",") .. "}" .. line

src/Classes/ModList.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ function ModListClass:ReplaceModInternal(mod)
4646
end
4747

4848
function ModListClass:MergeMod(mod)
49-
if mod.type == "BASE" or mod.type == "INC" then
49+
if mod.type == "BASE" or mod.type == "INC" or mod.type == "MORE" then
5050
for i = 1, #self do
5151
if modLib.compareModParams(self[i], mod) then
5252
self[i] = copyTable(self[i], true)

src/Data/SkillStatMap.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,8 @@ return {
673673
mod("FortifyDuration", "INC", nil),
674674
},
675675
["support_swift_affliction_skill_effect_and_damaging_ailment_duration_+%_final"] = {
676-
mod("SkillAndDamagingAilmentDuration", "MORE", nil),
676+
mod("Duration", "MORE", nil),
677+
mod("DamagingAilmentDuration", "MORE", nil),
677678
},
678679
["base_bleed_duration_+%"] = {
679680
mod("EnemyBleedDuration", "INC", nil),

src/Modules/CalcOffence.lua

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ local function calcWarcryCastTime(skillModList, skillCfg, skillData, actor)
345345
end
346346

347347
function calcSkillDuration(skillModList, skillCfg, skillData, env, enemyDB)
348-
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "PrimaryDuration", "SkillAndDamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
348+
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "PrimaryDuration", "DamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
349349
durationMod = m_max(durationMod, 0)
350350
local durationBase = (skillData.duration or 0) + skillModList:Sum("BASE", skillCfg, "Duration", "PrimaryDuration")
351351
local duration = durationBase * durationMod
@@ -1608,10 +1608,10 @@ function calcs.offence(env, actor, activeSkill)
16081608
debuffDurationMult = 1 / m_max(data.misc.BuffExpirationSlowCap, calcLib.mod(enemyDB, skillCfg, "BuffExpireFaster"))
16091609
end
16101610
do
1611-
output.DurationMod = calcLib.mod(skillModList, skillCfg, "Duration", "PrimaryDuration", "SkillAndDamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
1611+
output.DurationMod = calcLib.mod(skillModList, skillCfg, "Duration", "PrimaryDuration", "DamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
16121612
output.DurationMod = m_max(output.DurationMod, 0)
16131613
if breakdown then
1614-
breakdown.DurationMod = breakdown.mod(skillModList, skillCfg, "Duration", "PrimaryDuration", "SkillAndDamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
1614+
breakdown.DurationMod = breakdown.mod(skillModList, skillCfg, "Duration", "PrimaryDuration", "DamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
16151615
if breakdown.DurationMod and skillData.durationSecondary then
16161616
t_insert(breakdown.DurationMod, 1, "Primary duration:")
16171617
end
@@ -1639,15 +1639,15 @@ function calcs.offence(env, actor, activeSkill)
16391639
end
16401640
durationBase = (skillData.durationSecondary or 0) + skillModList:Sum("BASE", skillCfg, "Duration", "SecondaryDuration")
16411641
if durationBase > 0 then
1642-
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "SecondaryDuration", "SkillAndDamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
1642+
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "SecondaryDuration", "DamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
16431643
durationMod = m_max(durationMod, 0)
16441644
output.DurationSecondary = durationBase * durationMod
16451645
if skillData.debuffSecondary then
16461646
output.DurationSecondary = output.DurationSecondary * debuffDurationMult
16471647
end
16481648
output.DurationSecondary = m_ceil(output.DurationSecondary * data.misc.ServerTickRate) / data.misc.ServerTickRate
16491649
if breakdown and output.DurationSecondary ~= durationBase then
1650-
breakdown.SecondaryDurationMod = breakdown.mod(skillModList, skillCfg, "Duration", "SecondaryDuration", "SkillAndDamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
1650+
breakdown.SecondaryDurationMod = breakdown.mod(skillModList, skillCfg, "Duration", "SecondaryDuration", "DamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
16511651
if breakdown.SecondaryDurationMod then
16521652
t_insert(breakdown.SecondaryDurationMod, 1, "Secondary duration:")
16531653
end
@@ -1666,15 +1666,15 @@ function calcs.offence(env, actor, activeSkill)
16661666
end
16671667
durationBase = (skillData.durationTertiary or 0) + skillModList:Sum("BASE", skillCfg, "Duration", "TertiaryDuration")
16681668
if durationBase > 0 then
1669-
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "TertiaryDuration", "SkillAndDamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
1669+
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "TertiaryDuration", "DamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
16701670
durationMod = m_max(durationMod, 0)
16711671
output.DurationTertiary = durationBase * durationMod
16721672
if skillData.debuffTertiary then
16731673
output.DurationTertiary = output.DurationTertiary * debuffDurationMult
16741674
end
16751675
output.DurationTertiary = m_ceil(output.DurationTertiary * data.misc.ServerTickRate) / data.misc.ServerTickRate
16761676
if breakdown and output.DurationTertiary ~= durationBase then
1677-
breakdown.TertiaryDurationMod = breakdown.mod(skillModList, skillCfg, "Duration", "TertiaryDuration", "SkillAndDamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
1677+
breakdown.TertiaryDurationMod = breakdown.mod(skillModList, skillCfg, "Duration", "TertiaryDuration", "DamagingAilmentDuration", skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
16781678
if breakdown.TertiaryDurationMod then
16791679
t_insert(breakdown.TertiaryDurationMod, 1, "Tertiary duration:")
16801680
end
@@ -1693,7 +1693,7 @@ function calcs.offence(env, actor, activeSkill)
16931693
end
16941694
durationBase = (skillData.auraDuration or 0)
16951695
if durationBase > 0 then
1696-
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "SkillAndDamagingAilmentDuration")
1696+
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "DamagingAilmentDuration")
16971697
durationMod = m_max(durationMod, 0)
16981698
output.AuraDuration = durationBase * durationMod
16991699
output.AuraDuration = m_ceil(output.AuraDuration * data.misc.ServerTickRate) / data.misc.ServerTickRate
@@ -1708,7 +1708,7 @@ function calcs.offence(env, actor, activeSkill)
17081708
end
17091709
durationBase = (skillData.reserveDuration or 0)
17101710
if durationBase > 0 then
1711-
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "SkillAndDamagingAilmentDuration")
1711+
local durationMod = calcLib.mod(skillModList, skillCfg, "Duration", "DamagingAilmentDuration")
17121712
durationMod = m_max(durationMod, 0)
17131713
output.ReserveDuration = durationBase * durationMod
17141714
output.ReserveDuration = m_ceil(output.ReserveDuration * data.misc.ServerTickRate) / data.misc.ServerTickRate
@@ -1723,7 +1723,7 @@ function calcs.offence(env, actor, activeSkill)
17231723
end
17241724
durationBase = (skillData.soulPreventionDuration or 0)
17251725
if durationBase > 0 then
1726-
local durationMod = calcLib.mod(skillModList, skillCfg, "SoulGainPreventionDuration", skillData.skillEffectAppliesToSoulGainPrevention and "Duration" or "SkillAndDamagingAilmentDuration" or nil, skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
1726+
local durationMod = calcLib.mod(skillModList, skillCfg, "SoulGainPreventionDuration", skillData.skillEffectAppliesToSoulGainPrevention and "Duration" or "DamagingAilmentDuration" or nil, skillData.mineDurationAppliesToSkill and "MineDuration" or nil)
17271727
durationMod = m_max(durationMod, 0)
17281728
output.SoulGainPreventionDuration = durationBase * durationMod
17291729
output.SoulGainPreventionDuration = m_max(m_ceil(output.SoulGainPreventionDuration * data.misc.ServerTickRate), 1) / data.misc.ServerTickRate
@@ -2469,7 +2469,7 @@ function calcs.offence(env, actor, activeSkill)
24692469
--Calculates the max number of trauma stacks you can sustain
24702470
if skillModList:Flag(nil, "HasTrauma") then
24712471
local effectiveAttackRateCap = data.misc.ServerTickRate * output.Repeats
2472-
local duration = skillModList:Sum("BASE", cfg, "TraumaDuration") * calcLib.mod(skillModList, skillCfg, "Duration", "SkillAndDamagingAilmentDuration")
2472+
local duration = skillModList:Sum("BASE", cfg, "TraumaDuration") * calcLib.mod(skillModList, skillCfg, "Duration", "DamagingAilmentDuration")
24732473
local traumaPerAttack = 1 + m_min(skillModList:Sum("BASE", cfg, "ExtraTrauma"), 100) / 100
24742474
local incAttackSpeedPerTrauma = skillModList:Sum("INC", skillCfg, "SpeedPerTrauma")
24752475
-- compute trauma using an exact form.
@@ -3335,6 +3335,10 @@ function calcs.offence(env, actor, activeSkill)
33353335
end
33363336

33373337
output.ScaledDamageEffect = 1
3338+
3339+
if output.CritChance ~= 0 then
3340+
skillModList.conditions["CritInPast8Sec"] = true
3341+
end
33383342

33393343
-- Calculate chance and multiplier for dealing triple damage on Normal and Crit
33403344
output.TripleDamageChanceOnCrit = m_min(skillModList:Sum("BASE", cfg, "TripleDamageChanceOnCrit"), 100)
@@ -4415,7 +4419,7 @@ function calcs.offence(env, actor, activeSkill)
44154419
end
44164420
local rateMod = (calcLib.mod(skillModList, cfg, ailment .. "Faster") + enemyDB:Sum("INC", nil, "Self" .. ailment .. "Faster") / 100) / calcLib.mod(skillModList, cfg, ailment .. "Slower")
44174421
local durationBase = skillData[ailment:lower() .. "DurationIsSkillDuration"] and skillData.duration or env.modDB:Override(nil, ailment .. "DurationBase") or data.misc[ailment .. "DurationBase"]
4418-
local durationMod = m_max(calcLib.mod(skillModList, dotCfg, "Enemy" .. ailment .. "Duration", "EnemyAilmentDuration", "Enemy" .. ailmentTypeMod .. "AilmentDuration", "SkillAndDamagingAilmentDuration", skillData[ailment:lower() .. "DurationIsSkillDuration"] and
4422+
local durationMod = m_max(calcLib.mod(skillModList, dotCfg, "Enemy" .. ailment .. "Duration", "EnemyAilmentDuration", "Enemy" .. ailmentTypeMod .. "AilmentDuration", "DamagingAilmentDuration", skillData[ailment:lower() .. "DurationIsSkillDuration"] and
44194423
"Duration" or nil) * calcLib.mod(enemyDB, nil, "Self" .. ailment .. "Duration", "SelfAilmentDuration", "Self" .. ailmentTypeMod .. "AilmentDuration"), 0)
44204424
durationMod = m_max(durationMod, 0)
44214425
globalOutput[ailment .. "Duration"] = durationBase * durationMod / rateMod * debuffDurationMult

src/Modules/CalcSections.lua

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -658,7 +658,7 @@ return {
658658
{ breakdown = "DurationMod" },
659659
{ breakdown = "SecondaryDurationMod" },
660660
{ breakdown = "TertiaryDurationMod" },
661-
{ modName = { "Duration", "PrimaryDuration", "SecondaryDuration", "TertiaryDuration", "SkillAndDamagingAilmentDuration" }, cfg = "skill" },
661+
{ modName = { "Duration", "PrimaryDuration", "SecondaryDuration", "TertiaryDuration", "DamagingAilmentDuration" }, cfg = "skill" },
662662
}, },
663663
{ label = "Skill Duration", flag = "duration", haveOutput = "Duration", { format = "{3:output:Duration}s", { breakdown = "Duration" }, }, },
664664
{ label = "Secondary Duration", flag = "duration", haveOutput = "DurationSecondary", { format = "{3:output:DurationSecondary}s", { breakdown = "DurationSecondary" }, }, },
@@ -672,7 +672,7 @@ return {
672672
{ label = "Tertiary Uptime", haveOutput = "DurationTertiaryUptime", { format = "{2:output:DurationTertiaryUptime}%", { breakdown = "DurationTertiaryUptime" }, }, },
673673
{ label = "Aura Uptime", haveOutput = "AuraDurationUptime", { format = "{2:output:AuraDurationUptime}%", { breakdown = "AuraDurationUptime" }, }, },
674674
{ label = "Reserve Uptime", haveOutput = "ReserveDurationUptime", { format = "{2:output:ReserveDurationUptime}%", { breakdown = "ReserveDurationUptime" }, }, },
675-
{ label = "Sustainable Trauma", haveOutput = "SustainableTrauma", { format = "{0:output:SustainableTrauma}", { breakdown = "SustainableTrauma" }, { modName = { "ExtraTrauma", "RepeatCount", "Duration", "PrimaryDuration", "SecondaryDuration", "SkillAndDamagingAilmentDuration"}, cfg = "skill" }, }, },
675+
{ label = "Sustainable Trauma", haveOutput = "SustainableTrauma", { format = "{0:output:SustainableTrauma}", { breakdown = "SustainableTrauma" }, { modName = { "ExtraTrauma", "RepeatCount", "Duration", "PrimaryDuration", "SecondaryDuration", "DamagingAilmentDuration"}, cfg = "skill" }, }, },
676676
{ label = "Repeat Count", haveOutput = "RepeatCount", { format = "{output:Repeats}", { modName = { "RepeatCount" }, cfg = "skill" }, }, },
677677
{ label = "Projectile Count", flag = "projectile", { format = "{output:ProjectileCount}", { modName = { "NoAdditionalProjectiles" , "ProjectileCount" }, cfg = "skill" }, }, },
678678
{ label = "2 Add. Proj. Chance", haveOutput = "TwoAdditionalProjectiles", { format = "{output:TwoAdditionalProjectiles}%", { modName = { "TwoAdditionalProjectilesChance", "NoAdditionalProjectiles" }, cfg = "skill" }, }, },
@@ -947,7 +947,7 @@ return {
947947
}, },
948948
{ label = "Bleed Duration", { format = "{2:output:BleedDuration}s",
949949
{ breakdown = "BleedDuration" },
950-
{ label = "Player modifiers", modName = { "EnemyBleedDuration", "EnemyAilmentDuration", "SkillAndDamagingAilmentDuration", "BleedFaster" }, cfg = "bleed" },
950+
{ label = "Player modifiers", modName = { "EnemyBleedDuration", "EnemyAilmentDuration", "DamagingAilmentDuration", "BleedFaster" }, cfg = "bleed" },
951951
{ label = "Enemy modifiers", modName = { "SelfBleedDuration", "SelfAilmentDuration", "SelfBleedFaster", "BleedExpireRate" }, enemy = true },
952952
}, },
953953
{ label = "Dmg. of all Bleeds", { format = "{1:output:BleedDamage}",
@@ -1004,8 +1004,8 @@ return {
10041004
{ label = "Caustic Ground", haveOutput = "CausticGroundFromPoison", { format = "{0:output:CausticGroundDPS}", { breakdown = "CausticGroundDPS" } } },
10051005
{ label = "Poison Duration", { format = "{2:output:PoisonDuration}s",
10061006
{ breakdown = "PoisonDuration" },
1007-
{ label = "Player modifiers", notSkillData = "poisonDurationIsSkillDuration", modName = { "EnemyPoisonDuration", "EnemyAilmentDuration", "SkillAndDamagingAilmentDuration", "PoisonFaster" }, cfg = "poison" },
1008-
{ label = "Player modifiers", skillData = "poisonDurationIsSkillDuration", modName = { "EnemyPoisonDuration", "EnemyAilmentDuration", "SkillAndDamagingAilmentDuration", "PoisonFaster", "Duration" }, cfg = "poison" },
1007+
{ label = "Player modifiers", notSkillData = "poisonDurationIsSkillDuration", modName = { "EnemyPoisonDuration", "EnemyAilmentDuration", "DamagingAilmentDuration", "PoisonFaster" }, cfg = "poison" },
1008+
{ label = "Player modifiers", skillData = "poisonDurationIsSkillDuration", modName = { "EnemyPoisonDuration", "EnemyAilmentDuration", "DamagingAilmentDuration", "PoisonFaster", "Duration" }, cfg = "poison" },
10091009
{ label = "Enemy modifiers", modName = { "SelfPoisonDuration", "SelfAilmentDuration", "SelfPoisonFaster" }, enemy = true },
10101010
}, },
10111011
{ label = "Dmg. of all Poisons", { format = "{1:output:PoisonDamage}",
@@ -1062,7 +1062,7 @@ return {
10621062
{ label = "Burning Ground", haveOutput = "BurningGroundFromIgnite", { format = "{0:output:BurningGroundDPS}", { breakdown = "BurningGroundDPS" } } },
10631063
{ label = "Ignite Duration", { format = "{2:output:IgniteDuration}s",
10641064
{ breakdown = "IgniteDuration" },
1065-
{ label = "Player modifiers", modName = { "EnemyIgniteDuration", "EnemyAilmentDuration", "EnemyElementalAilmentDuration", "SkillAndDamagingAilmentDuration", "IgniteFaster", "IgniteSlower" }, cfg = "skill" },
1065+
{ label = "Player modifiers", modName = { "EnemyIgniteDuration", "EnemyAilmentDuration", "EnemyElementalAilmentDuration", "DamagingAilmentDuration", "IgniteFaster", "IgniteSlower" }, cfg = "skill" },
10661066
{ label = "Enemy modifiers", modName = {"SelfIgniteDuration", "SelfAilmentDuration", "SelfElementalAilmentDuration", "SelfIgniteFaster"}, enemy = true },
10671067
}, },
10681068
{ label = "Dmg. of all Ignites", { format = "{1:output:IgniteDamage}",

0 commit comments

Comments
 (0)