Skip to content

Commit 732a6f3

Browse files
committed
Add support for Wintertide Brand average DOT calculation
1 parent 78cd786 commit 732a6f3

2 files changed

Lines changed: 48 additions & 4 deletions

File tree

src/Data/Skills/act_int.lua

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12032,12 +12032,34 @@ skills["ImmolationSigil"] = {
1203212032
castTime = 0.7,
1203312033
preDamageFunc = function(activeSkill, output)
1203412034
activeSkill.skillData.hitTimeOverride = activeSkill.skillData.repeatFrequency / (1 + activeSkill.skillModList:Sum("INC", activeSkill.skillCfg, "Speed", "BrandActivationFrequency") / 100) / activeSkill.skillModList:More(activeSkill.skillCfg, "BrandActivationFrequency")
12035+
if activeSkill.skillPart == 2 then
12036+
local skillMaxStages = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:WintertideBrandMaxStages")
12037+
local duration = calcSkillDuration(activeSkill.skillModList, activeSkill.skillCfg, activeSkill.skillData, {})
12038+
local maxStages = math.min(duration / activeSkill.skillData.hitTimeOverride + 1, skillMaxStages)
12039+
local timeToReachMaxStages = (maxStages - 1) * activeSkill.skillData.hitTimeOverride
12040+
local timeAtMaxStages = duration - timeToReachMaxStages
12041+
local damagePerStage = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:WintertideBrandDamagePerStage")
12042+
-- Get the average damage before reaching max stages and then damage at max stages
12043+
local dpsMultiplier = ((2 + damagePerStage + maxStages * damagePerStage)/2*timeToReachMaxStages+timeAtMaxStages*(1+maxStages*damagePerStage))/duration
12044+
activeSkill.skillModList:NewMod("Damage", "MORE", dpsMultiplier, "Wintertide Brand Average Multiplier")
12045+
end
1203512046
end,
12047+
parts = {
12048+
{
12049+
name = "Manual Stages",
12050+
stages = true
12051+
},
12052+
{
12053+
name = "Average Damage",
12054+
}
12055+
},
1203612056
statMap = {
1203712057
["base_skill_show_average_damage_instead_of_dps"] = {
1203812058
},
1203912059
["immolation_brand_burn_damage_+%_final_per_stage"] = {
12040-
mod("Damage", "MORE", nil, 0, 0, { type = "Multiplier", var = "WintertideBrandStage", limitVar = "WintertideBrandMaxStages" }),
12060+
-- Only apply to Manual Stages part
12061+
mod("Damage", "MORE", nil, 0, 0, { type = "Multiplier", var = "WintertideBrandStage", limitVar = "WintertideBrandMaxStages" }, { type = "SkillPart", skillPart = 1 }),
12062+
mod("Multiplier:WintertideBrandDamagePerStage", "BASE", nil),
1204112063
},
1204212064
["winter_brand_max_number_of_stages"] = {
1204312065
mod("Multiplier:WintertideBrandMaxStages", "BASE", nil),
@@ -12572,4 +12594,4 @@ skills["DestructiveLink"] = {
1257212594
[39] = { 63, 11400, levelRequirement = 99, statInterpolation = { 1, 1, }, cost = { ManaPerMinute = 2830, }, },
1257312595
[40] = { 64, 11450, levelRequirement = 100, statInterpolation = { 1, 1, }, cost = { ManaPerMinute = 2850, }, },
1257412596
},
12575-
}
12597+
}

src/Export/Skills/act_int.txt

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2549,12 +2549,34 @@ local skills, mod, flag, skill = ...
25492549
#flags spell area duration brand
25502550
preDamageFunc = function(activeSkill, output)
25512551
activeSkill.skillData.hitTimeOverride = activeSkill.skillData.repeatFrequency / (1 + activeSkill.skillModList:Sum("INC", activeSkill.skillCfg, "Speed", "BrandActivationFrequency") / 100) / activeSkill.skillModList:More(activeSkill.skillCfg, "BrandActivationFrequency")
2552+
if activeSkill.skillPart == 2 then
2553+
local skillMaxStages = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:WintertideBrandMaxStages")
2554+
local duration = calcSkillDuration(activeSkill.skillModList, activeSkill.skillCfg, activeSkill.skillData, {})
2555+
local maxStages = math.min(duration / activeSkill.skillData.hitTimeOverride + 1, skillMaxStages)
2556+
local timeToReachMaxStages = (maxStages - 1) * activeSkill.skillData.hitTimeOverride
2557+
local timeAtMaxStages = duration - timeToReachMaxStages
2558+
local damagePerStage = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:WintertideBrandDamagePerStage")
2559+
-- Get the average damage before reaching max stages and then damage at max stages
2560+
local dpsMultiplier = ((2 + damagePerStage + maxStages * damagePerStage)/2*timeToReachMaxStages+timeAtMaxStages*(1+maxStages*damagePerStage))/duration
2561+
activeSkill.skillModList:NewMod("Damage", "MORE", dpsMultiplier, "Wintertide Brand Average Multiplier")
2562+
end
25522563
end,
2564+
parts = {
2565+
{
2566+
name = "Manual Stages",
2567+
stages = true
2568+
},
2569+
{
2570+
name = "Average Damage",
2571+
}
2572+
},
25532573
statMap = {
25542574
["base_skill_show_average_damage_instead_of_dps"] = {
25552575
},
25562576
["immolation_brand_burn_damage_+%_final_per_stage"] = {
2557-
mod("Damage", "MORE", nil, 0, 0, { type = "Multiplier", var = "WintertideBrandStage", limitVar = "WintertideBrandMaxStages" }),
2577+
-- Only apply to Manual Stages part
2578+
mod("Damage", "MORE", nil, 0, 0, { type = "Multiplier", var = "WintertideBrandStage", limitVar = "WintertideBrandMaxStages" }, { type = "SkillPart", skillPart = 1 }),
2579+
mod("Multiplier:WintertideBrandDamagePerStage", "BASE", nil),
25582580
},
25592581
["winter_brand_max_number_of_stages"] = {
25602582
mod("Multiplier:WintertideBrandMaxStages", "BASE", nil),
@@ -2650,4 +2672,4 @@ local skills, mod, flag, skill = ...
26502672
flag("MainHandCritIsEqualToParent", { type = "GlobalEffect", effectType = "Link" }, { type = "Condition", var = "MainHandAttack" }),
26512673
},
26522674
},
2653-
#mods
2675+
#mods

0 commit comments

Comments
 (0)