Skip to content

Commit 2ff5e40

Browse files
czarandyWires77
andauthored
Add support for Wintertide Brand average DOT calculation (#6868)
Co-authored-by: Wires77 <Wires77@users.noreply.github.com>
1 parent e92708c commit 2ff5e40

2 files changed

Lines changed: 47 additions & 3 deletions

File tree

src/Data/Skills/act_int.lua

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19197,12 +19197,34 @@ skills["WintertideBrand"] = {
1919719197
castTime = 0.7,
1919819198
preDamageFunc = function(activeSkill, output)
1919919199
activeSkill.skillData.hitTimeOverride = activeSkill.skillData.repeatFrequency / (1 + activeSkill.skillModList:Sum("INC", activeSkill.skillCfg, "Speed", "BrandActivationFrequency") / 100) / activeSkill.skillModList:More(activeSkill.skillCfg, "BrandActivationFrequency")
19200+
if activeSkill.skillPart == 2 then
19201+
local skillMaxStages = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:WintertideBrandMaxStages")
19202+
local duration = calcSkillDuration(activeSkill.skillModList, activeSkill.skillCfg, activeSkill.skillData, {})
19203+
local maxStages = math.min(duration / activeSkill.skillData.hitTimeOverride + 1, skillMaxStages)
19204+
local timeToReachMaxStages = (maxStages - 1) * activeSkill.skillData.hitTimeOverride
19205+
local timeAtMaxStages = duration - timeToReachMaxStages
19206+
local damagePerStage = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:WintertideBrandDamagePerStage")
19207+
-- Get the average damage before reaching max stages and then damage at max stages
19208+
local dpsMultiplier = ((2 + damagePerStage + maxStages * damagePerStage)/2*timeToReachMaxStages+timeAtMaxStages*(1+maxStages*damagePerStage))/duration
19209+
activeSkill.skillModList:NewMod("Damage", "MORE", dpsMultiplier, "Wintertide Brand Average Multiplier")
19210+
end
1920019211
end,
19212+
parts = {
19213+
{
19214+
name = "Manual Stages",
19215+
stages = true
19216+
},
19217+
{
19218+
name = "Average Damage",
19219+
}
19220+
},
1920119221
statMap = {
1920219222
["base_skill_show_average_damage_instead_of_dps"] = {
1920319223
},
1920419224
["immolation_brand_burn_damage_+%_final_per_stage"] = {
19205-
mod("Damage", "MORE", nil, 0, 0, { type = "Multiplier", var = "WintertideBrandStage", limitVar = "WintertideBrandMaxStages" }),
19225+
-- Only apply to Manual Stages part
19226+
mod("Damage", "MORE", nil, 0, 0, { type = "Multiplier", var = "WintertideBrandStage", limitVar = "WintertideBrandMaxStages" }, { type = "SkillPart", skillPart = 1 }),
19227+
mod("Multiplier:WintertideBrandDamagePerStage", "BASE", nil),
1920619228
},
1920719229
["winter_brand_max_number_of_stages"] = {
1920819230
mod("Multiplier:WintertideBrandMaxStages", "BASE", nil),

src/Export/Skills/act_int.txt

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4083,12 +4083,34 @@ local skills, mod, flag, skill = ...
40834083
#flags spell area duration brand
40844084
preDamageFunc = function(activeSkill, output)
40854085
activeSkill.skillData.hitTimeOverride = activeSkill.skillData.repeatFrequency / (1 + activeSkill.skillModList:Sum("INC", activeSkill.skillCfg, "Speed", "BrandActivationFrequency") / 100) / activeSkill.skillModList:More(activeSkill.skillCfg, "BrandActivationFrequency")
4086+
if activeSkill.skillPart == 2 then
4087+
local skillMaxStages = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:WintertideBrandMaxStages")
4088+
local duration = calcSkillDuration(activeSkill.skillModList, activeSkill.skillCfg, activeSkill.skillData, {})
4089+
local maxStages = math.min(duration / activeSkill.skillData.hitTimeOverride + 1, skillMaxStages)
4090+
local timeToReachMaxStages = (maxStages - 1) * activeSkill.skillData.hitTimeOverride
4091+
local timeAtMaxStages = duration - timeToReachMaxStages
4092+
local damagePerStage = activeSkill.skillModList:Sum("BASE", activeSkill.skillCfg, "Multiplier:WintertideBrandDamagePerStage")
4093+
-- Get the average damage before reaching max stages and then damage at max stages
4094+
local dpsMultiplier = ((2 + damagePerStage + maxStages * damagePerStage)/2*timeToReachMaxStages+timeAtMaxStages*(1+maxStages*damagePerStage))/duration
4095+
activeSkill.skillModList:NewMod("Damage", "MORE", dpsMultiplier, "Wintertide Brand Average Multiplier")
4096+
end
40864097
end,
4098+
parts = {
4099+
{
4100+
name = "Manual Stages",
4101+
stages = true
4102+
},
4103+
{
4104+
name = "Average Damage",
4105+
}
4106+
},
40874107
statMap = {
40884108
["base_skill_show_average_damage_instead_of_dps"] = {
40894109
},
40904110
["immolation_brand_burn_damage_+%_final_per_stage"] = {
4091-
mod("Damage", "MORE", nil, 0, 0, { type = "Multiplier", var = "WintertideBrandStage", limitVar = "WintertideBrandMaxStages" }),
4111+
-- Only apply to Manual Stages part
4112+
mod("Damage", "MORE", nil, 0, 0, { type = "Multiplier", var = "WintertideBrandStage", limitVar = "WintertideBrandMaxStages" }, { type = "SkillPart", skillPart = 1 }),
4113+
mod("Multiplier:WintertideBrandDamagePerStage", "BASE", nil),
40924114
},
40934115
["winter_brand_max_number_of_stages"] = {
40944116
mod("Multiplier:WintertideBrandMaxStages", "BASE", nil),
@@ -4148,4 +4170,4 @@ local skills, mod, flag, skill = ...
41484170
},
41494171
},
41504172
#baseMod skill("radius", 40)
4151-
#mods
4173+
#mods

0 commit comments

Comments
 (0)