Skip to content

Commit cc3d574

Browse files
LocalIdentityLocalIdentity
andauthored
Fix Brand attachment duration not being scaled by Temporal Chains (#8796)
The Brand attachment time is affected by temportal chains so this affects the maximum number of ticks a brand can do. More relevant for Wintertide Brand as we uses the attachment duration for DPS calcs Co-authored-by: LocalIdentity <localidentity2@gmail.com>
1 parent 02b4d31 commit cc3d574

File tree

3 files changed

+27
-5
lines changed

3 files changed

+27
-5
lines changed

src/Data/Skills/act_int.lua

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,9 @@ skills["BrandSupport"] = {
570570
duration = true,
571571
brand = true,
572572
},
573+
baseMods = {
574+
skill("debuff", true),
575+
},
573576
qualityStats = {
574577
Default = {
575578
{ "sigil_repeat_frequency_+%", 0.5 },
@@ -832,6 +835,7 @@ skills["ArmageddonBrand"] = {
832835
},
833836
baseMods = {
834837
skill("radiusSecondary", 8),
838+
skill("debuff", true),
835839
},
836840
qualityStats = {
837841
Default = {
@@ -1013,6 +1017,9 @@ skills["ArmageddonBrandAltY"] = {
10131017
duration = true,
10141018
brand = true,
10151019
},
1020+
baseMods = {
1021+
skill("debuff", true),
1022+
},
10161023
qualityStats = {
10171024
Default = {
10181025
{ "active_skill_base_area_of_effect_radius", 0.1 },
@@ -13258,6 +13265,7 @@ skills["PenanceBrandAltX"] = {
1325813265
baseMods = {
1325913266
skill("radius", 28),
1326013267
mod("Multiplier:PenanceBrandofDissipationMaxStages", "BASE", 20, 0, 0, { type = "SkillPart", skillPart = 1 }),
13268+
skill("debuff", true),
1326113269
},
1326213270
qualityStats = {
1326313271
Default = {
@@ -13352,6 +13360,7 @@ skills["PenanceBrandAltY"] = {
1335213360
baseMods = {
1335313361
skill("radius", 28),
1335413362
skill("showAverage", true),
13363+
skill("debuff", true),
1335513364
},
1335613365
qualityStats = {
1335713366
Default = {
@@ -16550,6 +16559,7 @@ skills["StormBrand"] = {
1655016559
},
1655116560
baseMods = {
1655216561
skill("radius", 9),
16562+
skill("debuff", true),
1655316563
},
1655416564
qualityStats = {
1655516565
Default = {
@@ -16648,6 +16658,7 @@ skills["StormBrandAltX"] = {
1664816658
},
1664916659
baseMods = {
1665016660
skill("radius", 9),
16661+
skill("debuff", true),
1665116662
},
1665216663
qualityStats = {
1665316664
Default = {
@@ -20162,13 +20173,14 @@ skills["WintertideBrand"] = {
2016220173
activeSkill.skillData.hitTimeOverride = activeSkill.skillData.repeatFrequency / (1 + activeSkill.skillModList:Sum("INC", activeSkill.skillCfg, "Speed", "BrandActivationFrequency") / 100) / activeSkill.skillModList:More(activeSkill.skillCfg, "BrandActivationFrequency")
2016320174
if activeSkill.skillPart == 2 then
2016420175
local skillMaxStages = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:WintertideBrandMaxStages")
20165-
local duration = calcSkillDuration(activeSkill.skillModList, activeSkill.skillCfg, activeSkill.skillData, {})
20176+
local debuffDurationMult = 1 / math.max(data.misc.BuffExpirationSlowCap, calcLib.mod(activeSkill.actor.enemy.modDB, activeSkill.skillCfg, "BuffExpireFaster"))
20177+
local duration = calcSkillDuration(activeSkill.skillModList, activeSkill.skillCfg, activeSkill.skillData, {}) * debuffDurationMult
2016620178
local maxStages = math.min(duration / activeSkill.skillData.hitTimeOverride + 1, skillMaxStages)
2016720179
local timeToReachMaxStages = (maxStages - 1) * activeSkill.skillData.hitTimeOverride
2016820180
local timeAtMaxStages = duration - timeToReachMaxStages
2016920181
local damagePerStage = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:WintertideBrandDamagePerStage")
2017020182
-- Get the average damage before reaching max stages and then damage at max stages
20171-
local dpsMultiplier = ((2 + damagePerStage + maxStages * damagePerStage)/2*timeToReachMaxStages+timeAtMaxStages*(1+maxStages*damagePerStage))/duration
20183+
local dpsMultiplier = ((2 + damagePerStage + maxStages * damagePerStage) / 2 * timeToReachMaxStages + timeAtMaxStages * (1 + maxStages * damagePerStage)) / duration
2017220184
activeSkill.skillModList:NewMod("Damage", "MORE", dpsMultiplier, "Wintertide Brand Average Multiplier")
2017320185
end
2017420186
end,
@@ -20204,6 +20216,7 @@ skills["WintertideBrand"] = {
2020420216
},
2020520217
baseMods = {
2020620218
skill("radius", 20),
20219+
skill("debuff", true),
2020720220
skill("debuffTertiary", true),
2020820221
},
2020920222
qualityStats = {

src/Export/Skills/act_int.txt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ local skills, mod, flag, skill = ...
7373
preDamageFunc = function(activeSkill, output)
7474
activeSkill.skillData.hitTimeOverride = activeSkill.skillData.repeatFrequency / (1 + activeSkill.skillModList:Sum("INC", activeSkill.skillCfg, "Speed", "BrandActivationFrequency") / 100) / activeSkill.skillModList:More(activeSkill.skillCfg, "BrandActivationFrequency")
7575
end,
76+
#baseMod skill("debuff", true)
7677
#mods
7778

7879
#skill SupportBrandSupport
@@ -110,6 +111,7 @@ local skills, mod, flag, skill = ...
110111
},
111112
},
112113
#baseMod skill("radiusSecondary", 8)
114+
#baseMod skill("debuff", true)
113115
#mods
114116

115117
#skill ArmageddonBrandAltX
@@ -129,6 +131,7 @@ local skills, mod, flag, skill = ...
129131
["base_skill_show_average_damage_instead_of_dps"] = {
130132
},
131133
},
134+
#baseMod skill("debuff", true)
132135
#mods
133136

134137
#skill AssassinsMark
@@ -2939,6 +2942,7 @@ local skills, mod, flag, skill = ...
29392942
},
29402943
#baseMod skill("radius", 28)
29412944
#baseMod mod("Multiplier:PenanceBrandofDissipationMaxStages", "BASE", 20, 0, 0, { type = "SkillPart", skillPart = 1 })
2945+
#baseMod skill("debuff", true)
29422946
#mods
29432947

29442948
#skill PenanceBrandAltY
@@ -2948,6 +2952,7 @@ local skills, mod, flag, skill = ...
29482952
end,
29492953
#baseMod skill("radius", 28)
29502954
#baseMod skill("showAverage", true)
2955+
#baseMod skill("debuff", true)
29512956
#mods
29522957

29532958
#skill PowerSiphon
@@ -3553,6 +3558,7 @@ local skills, mod, flag, skill = ...
35533558
},
35543559
},
35553560
#baseMod skill("radius", 9)
3561+
#baseMod skill("debuff", true)
35563562
#mods
35573563

35583564
#skill StormBrandAltX
@@ -3565,6 +3571,7 @@ local skills, mod, flag, skill = ...
35653571
},
35663572
},
35673573
#baseMod skill("radius", 9)
3574+
#baseMod skill("debuff", true)
35683575
#mods
35693576

35703577
#skill StormblastMine
@@ -4168,13 +4175,14 @@ local skills, mod, flag, skill = ...
41684175
activeSkill.skillData.hitTimeOverride = activeSkill.skillData.repeatFrequency / (1 + activeSkill.skillModList:Sum("INC", activeSkill.skillCfg, "Speed", "BrandActivationFrequency") / 100) / activeSkill.skillModList:More(activeSkill.skillCfg, "BrandActivationFrequency")
41694176
if activeSkill.skillPart == 2 then
41704177
local skillMaxStages = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:WintertideBrandMaxStages")
4171-
local duration = calcSkillDuration(activeSkill.skillModList, activeSkill.skillCfg, activeSkill.skillData, {})
4178+
local debuffDurationMult = 1 / math.max(data.misc.BuffExpirationSlowCap, calcLib.mod(activeSkill.actor.enemy.modDB, activeSkill.skillCfg, "BuffExpireFaster"))
4179+
local duration = calcSkillDuration(activeSkill.skillModList, activeSkill.skillCfg, activeSkill.skillData, {}) * debuffDurationMult
41724180
local maxStages = math.min(duration / activeSkill.skillData.hitTimeOverride + 1, skillMaxStages)
41734181
local timeToReachMaxStages = (maxStages - 1) * activeSkill.skillData.hitTimeOverride
41744182
local timeAtMaxStages = duration - timeToReachMaxStages
41754183
local damagePerStage = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:WintertideBrandDamagePerStage")
41764184
-- Get the average damage before reaching max stages and then damage at max stages
4177-
local dpsMultiplier = ((2 + damagePerStage + maxStages * damagePerStage)/2*timeToReachMaxStages+timeAtMaxStages*(1+maxStages*damagePerStage))/duration
4185+
local dpsMultiplier = ((2 + damagePerStage + maxStages * damagePerStage) / 2 * timeToReachMaxStages + timeAtMaxStages * (1 + maxStages * damagePerStage)) / duration
41784186
activeSkill.skillModList:NewMod("Damage", "MORE", dpsMultiplier, "Wintertide Brand Average Multiplier")
41794187
end
41804188
end,
@@ -4203,6 +4211,7 @@ local skills, mod, flag, skill = ...
42034211
},
42044212
},
42054213
#baseMod skill("radius", 20)
4214+
#baseMod skill("debuff", true)
42064215
#baseMod skill("debuffTertiary", true)
42074216
#mods
42084217

src/Modules/CalcOffence.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2297,7 +2297,7 @@ function calcs.offence(env, actor, activeSkill)
22972297
output.HitSpeed = 1 / output.HitTime
22982298
--Brands always have hitTimeOverride
22992299
if activeSkill.skillTypes[SkillType.Brand] and not skillModList:Flag(nil, "UnlimitedBrandDuration") then
2300-
output.BrandTicks = m_floor(output.Duration * output.HitSpeed)
2300+
output.BrandTicks = m_floor(output.Duration * output.HitSpeed * debuffDurationMult)
23012301
end
23022302
elseif skillData.hitTimeMultiplier and output.Time and not skillData.triggeredOnDeath then
23032303
output.HitTime = output.Time * skillData.hitTimeMultiplier

0 commit comments

Comments
 (0)