From 0d59f7e3a047e4b166164863543eac2ad80f3f01 Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Thu, 2 Apr 2026 23:09:46 -0500 Subject: [PATCH 1/6] update Fatal Flourish parsing to ignore Travel and Retaliation skills --- src/Data/ModCache.lua | 4 ++-- src/Modules/ModParser.lua | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index e35fd09163..97c3a37df3 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -8668,7 +8668,7 @@ c["Exposure you inflict applies at least -18% to the affected Resistance"]={{[1] c["Extra Gore"]={{},nil} c["Extra gore"]={{},nil} c["Far Shot"]={{[1]={flags=0,keywordFlags=0,name="FarShot",type="FLAG",value=true}},nil} -c["Final Repeat of Attack Skills deals 60% more Damage"]={{[1]={flags=1,keywordFlags=0,name="RepeatFinalDamage",type="MORE",value=60}},nil} +c["Final Repeat of Attack Skills deals 60% more Damage"]={{[1]={[1]={neg=true,skillType=132,type="SkillType"},[2]={neg=true,skillType=90,type="SkillType"},flags=1,keywordFlags=0,name="RepeatFinalDamage",type="MORE",value=60}},nil} c["Final Repeat of Spells has 40% increased Area of Effect"]={{[1]={[1]={neg=true,type="Condition",var="CastOnFrostbolt"},[2]={type="Condition",varList={[1]="averageRepeat",[2]="alwaysFinalRepeat"}},flags=2,keywordFlags=0,name="RepeatFinalAreaOfEffect",type="INC",value=40}},nil} c["Fire Exposure you inflict applies an extra -5% to Fire Resistance"]={{[1]={flags=0,keywordFlags=0,name="ExtraFireExposure",type="BASE",value=-5}},nil} c["Fire Resistance is 75%"]={{[1]={flags=0,keywordFlags=0,name="FireResist",type="OVERRIDE",value=75}},nil} @@ -10337,7 +10337,7 @@ c["Non-Damaging Elemental Ailments you inflict have 100% more Effect"]={{[1]={fl c["Non-Damaging Elemental Ailments you inflict spread to nearby enemies within 2 metres"]={nil,"Non-Damaging Elemental Ailments you inflict spread to nearby enemies within 2 metres "} c["Non-Damaging Elemental Ailments you inflict spread to nearby enemies within 2 metres Non-Damaging Elemental Ailments you inflict have 100% more Effect"]={nil,"Non-Damaging Elemental Ailments you inflict spread to nearby enemies within 2 metres Non-Damaging Elemental Ailments you inflict have 100% more Effect "} c["Non-Exerted Attacks deal no Damage"]={nil,"Non-Exerted Attacks deal no Damage "} -c["Non-Travel Attack Skills Repeat an additional Time"]={{[1]={[1]={type="Condition",varList={[1]="averageRepeat",[2]="alwaysFinalRepeat"}},flags=1,keywordFlags=0,name="RepeatCount",type="BASE",value=1}},nil} +c["Non-Travel Attack Skills Repeat an additional Time"]={{[1]={[1]={neg=true,skillType=132,type="SkillType"},[2]={neg=true,skillType=90,type="SkillType"},[3]={type="Condition",varList={[1]="averageRepeat",[2]="alwaysFinalRepeat"}},flags=1,keywordFlags=0,name="RepeatCount",type="BASE",value=1}},nil} c["Non-Unique Jewels cause Small and Notable Passive Skills in a Large Radius to"]={nil,"Non-Unique Jewels cause Small and Notable Passive Skills in a Large Radius to "} c["Non-Unique Utility Flasks you Use apply to Linked Targets"]={{[1]={flags=0,keywordFlags=0,name="ExtraLinkEffect",type="LIST",value={mod={[1]={effectType="Global",type="GlobalEffect",unscalable=true},flags=0,keywordFlags=0,name="ParentNonUniqueFlasksAppliedToYou",type="FLAG",value=true}}}},nil} c["Non-Vaal Strike Skills target 1 additional nearby Enemy"]={{[1]={[1]={skillType=25,type="SkillType"},[2]={neg=true,skillType=42,type="SkillType"},flags=0,keywordFlags=0,name="AdditionalStrikeTarget",type="BASE",value=1}},nil} diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 49510213e8..78b3f230c9 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -2399,8 +2399,8 @@ local specialModList = { ["exerted attacks deal (%d+)%% increased damage"] = function(num) return { mod("ExertIncrease", "INC", num, nil, ModFlag.Attack, 0) } end, ["exerted attacks have (%d+)%% chance to deal double damage"] = function(num) return { mod("ExertDoubleDamageChance", "BASE", num, nil, ModFlag.Attack, 0) } end, -- Duelist (Fatal flourish) - ["final repeat of attack skills deals (%d+)%% more damage"] = function(num) return { mod("RepeatFinalDamage", "MORE", num, nil, ModFlag.Attack, 0) } end, - ["non%-travel attack skills repeat an additional time"] = { mod("RepeatCount", "BASE", 1, nil, ModFlag.Attack, 0, { type = "Condition", varList = {"averageRepeat", "alwaysFinalRepeat"} }) }, + ["final repeat of attack skills deals (%d+)%% more damage"] = function(num) return { mod("RepeatFinalDamage", "MORE", num, nil, ModFlag.Attack, 0, { type = "SkillType", skillType = SkillType.Retaliation, neg = true }, { type = "SkillType", skillType = SkillType.Travel, neg = true }) } end, + ["non%-travel attack skills repeat an additional time"] = { mod("RepeatCount", "BASE", 1, nil, ModFlag.Attack, 0, { type = "SkillType", skillType = SkillType.Retaliation, neg = true }, { type = "SkillType", skillType = SkillType.Travel, neg = true }, { type = "Condition", varList = {"averageRepeat", "alwaysFinalRepeat"} }) }, -- Ascendant ["grants (%d+) passive skill points?"] = function(num) return { mod("ExtraPoints", "BASE", num) } end, ["can allocate passives from the %a+'s starting point"] = { }, From 3d6d0a4ddc2d083286f25cdcc479182b20cc43cd Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Fri, 3 Apr 2026 09:06:19 -0500 Subject: [PATCH 2/6] update for Channel, Instant, and Triggered skills --- src/Data/ModCache.lua | 4 ++-- src/Modules/ModParser.lua | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index 97c3a37df3..df7bc0b34f 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -8668,7 +8668,7 @@ c["Exposure you inflict applies at least -18% to the affected Resistance"]={{[1] c["Extra Gore"]={{},nil} c["Extra gore"]={{},nil} c["Far Shot"]={{[1]={flags=0,keywordFlags=0,name="FarShot",type="FLAG",value=true}},nil} -c["Final Repeat of Attack Skills deals 60% more Damage"]={{[1]={[1]={neg=true,skillType=132,type="SkillType"},[2]={neg=true,skillType=90,type="SkillType"},flags=1,keywordFlags=0,name="RepeatFinalDamage",type="MORE",value=60}},nil} +c["Final Repeat of Attack Skills deals 60% more Damage"]={{[1]={[1]={neg=true,skillTypeList={[1]=132,[2]=90,[3]=57,[4]=74,[5]=41},type="SkillType"},flags=1,keywordFlags=0,name="RepeatFinalDamage",type="MORE",value=60}},nil} c["Final Repeat of Spells has 40% increased Area of Effect"]={{[1]={[1]={neg=true,type="Condition",var="CastOnFrostbolt"},[2]={type="Condition",varList={[1]="averageRepeat",[2]="alwaysFinalRepeat"}},flags=2,keywordFlags=0,name="RepeatFinalAreaOfEffect",type="INC",value=40}},nil} c["Fire Exposure you inflict applies an extra -5% to Fire Resistance"]={{[1]={flags=0,keywordFlags=0,name="ExtraFireExposure",type="BASE",value=-5}},nil} c["Fire Resistance is 75%"]={{[1]={flags=0,keywordFlags=0,name="FireResist",type="OVERRIDE",value=75}},nil} @@ -10337,7 +10337,7 @@ c["Non-Damaging Elemental Ailments you inflict have 100% more Effect"]={{[1]={fl c["Non-Damaging Elemental Ailments you inflict spread to nearby enemies within 2 metres"]={nil,"Non-Damaging Elemental Ailments you inflict spread to nearby enemies within 2 metres "} c["Non-Damaging Elemental Ailments you inflict spread to nearby enemies within 2 metres Non-Damaging Elemental Ailments you inflict have 100% more Effect"]={nil,"Non-Damaging Elemental Ailments you inflict spread to nearby enemies within 2 metres Non-Damaging Elemental Ailments you inflict have 100% more Effect "} c["Non-Exerted Attacks deal no Damage"]={nil,"Non-Exerted Attacks deal no Damage "} -c["Non-Travel Attack Skills Repeat an additional Time"]={{[1]={[1]={neg=true,skillType=132,type="SkillType"},[2]={neg=true,skillType=90,type="SkillType"},[3]={type="Condition",varList={[1]="averageRepeat",[2]="alwaysFinalRepeat"}},flags=1,keywordFlags=0,name="RepeatCount",type="BASE",value=1}},nil} +c["Non-Travel Attack Skills Repeat an additional Time"]={{[1]={[1]={neg=true,skillTypeList={[1]=132,[2]=90,[3]=57,[4]=74,[5]=41},type="SkillType"},[2]={type="Condition",varList={[1]="averageRepeat",[2]="alwaysFinalRepeat"}},flags=1,keywordFlags=0,name="RepeatCount",type="BASE",value=1}},nil} c["Non-Unique Jewels cause Small and Notable Passive Skills in a Large Radius to"]={nil,"Non-Unique Jewels cause Small and Notable Passive Skills in a Large Radius to "} c["Non-Unique Utility Flasks you Use apply to Linked Targets"]={{[1]={flags=0,keywordFlags=0,name="ExtraLinkEffect",type="LIST",value={mod={[1]={effectType="Global",type="GlobalEffect",unscalable=true},flags=0,keywordFlags=0,name="ParentNonUniqueFlasksAppliedToYou",type="FLAG",value=true}}}},nil} c["Non-Vaal Strike Skills target 1 additional nearby Enemy"]={{[1]={[1]={skillType=25,type="SkillType"},[2]={neg=true,skillType=42,type="SkillType"},flags=0,keywordFlags=0,name="AdditionalStrikeTarget",type="BASE",value=1}},nil} diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 78b3f230c9..7c96c75ca6 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -2399,8 +2399,13 @@ local specialModList = { ["exerted attacks deal (%d+)%% increased damage"] = function(num) return { mod("ExertIncrease", "INC", num, nil, ModFlag.Attack, 0) } end, ["exerted attacks have (%d+)%% chance to deal double damage"] = function(num) return { mod("ExertDoubleDamageChance", "BASE", num, nil, ModFlag.Attack, 0) } end, -- Duelist (Fatal flourish) - ["final repeat of attack skills deals (%d+)%% more damage"] = function(num) return { mod("RepeatFinalDamage", "MORE", num, nil, ModFlag.Attack, 0, { type = "SkillType", skillType = SkillType.Retaliation, neg = true }, { type = "SkillType", skillType = SkillType.Travel, neg = true }) } end, - ["non%-travel attack skills repeat an additional time"] = { mod("RepeatCount", "BASE", 1, nil, ModFlag.Attack, 0, { type = "SkillType", skillType = SkillType.Retaliation, neg = true }, { type = "SkillType", skillType = SkillType.Travel, neg = true }, { type = "Condition", varList = {"averageRepeat", "alwaysFinalRepeat"} }) }, + ["final repeat of attack skills deals (%d+)%% more damage"] = function(num) return { mod("RepeatFinalDamage", "MORE", num, nil, ModFlag.Attack, 0, + { type = "SkillType", skillTypeList = { SkillType.Retaliation, SkillType.Travel, SkillType.Channel, SkillType.Instant, SkillType.Triggered }, neg = true }), + } end, + ["non%-travel attack skills repeat an additional time"] = { mod("RepeatCount", "BASE", 1, nil, ModFlag.Attack, 0, + { type = "SkillType", skillTypeList = { SkillType.Retaliation, SkillType.Travel, SkillType.Channel, SkillType.Instant, SkillType.Triggered }, neg = true }, + { type = "Condition", varList = {"averageRepeat", "alwaysFinalRepeat"} }) + }, -- Ascendant ["grants (%d+) passive skill points?"] = function(num) return { mod("ExtraPoints", "BASE", num) } end, ["can allocate passives from the %a+'s starting point"] = { }, From 812ac616283ecfffe6bd0e5efcb5e5f2fa957fab Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Sat, 11 Apr 2026 12:33:40 -0500 Subject: [PATCH 3/6] add skillTypeCheck to repeats logic in CalcOffence --- src/Data/ModCache.lua | 4 ++-- src/Modules/CalcOffence.lua | 14 +++++++++++++- src/Modules/ModParser.lua | 4 ++-- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/Data/ModCache.lua b/src/Data/ModCache.lua index df7bc0b34f..3700164cee 100755 --- a/src/Data/ModCache.lua +++ b/src/Data/ModCache.lua @@ -8668,7 +8668,7 @@ c["Exposure you inflict applies at least -18% to the affected Resistance"]={{[1] c["Extra Gore"]={{},nil} c["Extra gore"]={{},nil} c["Far Shot"]={{[1]={flags=0,keywordFlags=0,name="FarShot",type="FLAG",value=true}},nil} -c["Final Repeat of Attack Skills deals 60% more Damage"]={{[1]={[1]={neg=true,skillTypeList={[1]=132,[2]=90,[3]=57,[4]=74,[5]=41},type="SkillType"},flags=1,keywordFlags=0,name="RepeatFinalDamage",type="MORE",value=60}},nil} +c["Final Repeat of Attack Skills deals 60% more Damage"]={{[1]={[1]={neg=true,skillTypeList={[1]=90},type="SkillType"},flags=1,keywordFlags=0,name="RepeatFinalDamage",type="MORE",value=60}},nil} c["Final Repeat of Spells has 40% increased Area of Effect"]={{[1]={[1]={neg=true,type="Condition",var="CastOnFrostbolt"},[2]={type="Condition",varList={[1]="averageRepeat",[2]="alwaysFinalRepeat"}},flags=2,keywordFlags=0,name="RepeatFinalAreaOfEffect",type="INC",value=40}},nil} c["Fire Exposure you inflict applies an extra -5% to Fire Resistance"]={{[1]={flags=0,keywordFlags=0,name="ExtraFireExposure",type="BASE",value=-5}},nil} c["Fire Resistance is 75%"]={{[1]={flags=0,keywordFlags=0,name="FireResist",type="OVERRIDE",value=75}},nil} @@ -10337,7 +10337,7 @@ c["Non-Damaging Elemental Ailments you inflict have 100% more Effect"]={{[1]={fl c["Non-Damaging Elemental Ailments you inflict spread to nearby enemies within 2 metres"]={nil,"Non-Damaging Elemental Ailments you inflict spread to nearby enemies within 2 metres "} c["Non-Damaging Elemental Ailments you inflict spread to nearby enemies within 2 metres Non-Damaging Elemental Ailments you inflict have 100% more Effect"]={nil,"Non-Damaging Elemental Ailments you inflict spread to nearby enemies within 2 metres Non-Damaging Elemental Ailments you inflict have 100% more Effect "} c["Non-Exerted Attacks deal no Damage"]={nil,"Non-Exerted Attacks deal no Damage "} -c["Non-Travel Attack Skills Repeat an additional Time"]={{[1]={[1]={neg=true,skillTypeList={[1]=132,[2]=90,[3]=57,[4]=74,[5]=41},type="SkillType"},[2]={type="Condition",varList={[1]="averageRepeat",[2]="alwaysFinalRepeat"}},flags=1,keywordFlags=0,name="RepeatCount",type="BASE",value=1}},nil} +c["Non-Travel Attack Skills Repeat an additional Time"]={{[1]={[1]={neg=true,skillTypeList={[1]=90},type="SkillType"},[2]={type="Condition",varList={[1]="averageRepeat",[2]="alwaysFinalRepeat"}},flags=1,keywordFlags=0,name="RepeatCount",type="BASE",value=1}},nil} c["Non-Unique Jewels cause Small and Notable Passive Skills in a Large Radius to"]={nil,"Non-Unique Jewels cause Small and Notable Passive Skills in a Large Radius to "} c["Non-Unique Utility Flasks you Use apply to Linked Targets"]={{[1]={flags=0,keywordFlags=0,name="ExtraLinkEffect",type="LIST",value={mod={[1]={effectType="Global",type="GlobalEffect",unscalable=true},flags=0,keywordFlags=0,name="ParentNonUniqueFlasksAppliedToYou",type="FLAG",value=true}}}},nil} c["Non-Vaal Strike Skills target 1 additional nearby Enemy"]={{[1]={[1]={skillType=25,type="SkillType"},[2]={neg=true,skillType=42,type="SkillType"},flags=0,keywordFlags=0,name="AdditionalStrikeTarget",type="BASE",value=1}},nil} diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 02ed9c3f7a..4efbe8cb15 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -759,7 +759,19 @@ function calcs.offence(env, actor, activeSkill) -- Applies DPS multiplier based on projectile count skillData.dpsMultiplier = skillModList:Sum("BASE", skillCfg, "ProjectileCount") end - output.Repeats = 1 + (skillModList:Sum("BASE", skillCfg, "RepeatCount") or 0) + + local function repeatSkillTypesCheck(activeSkillTypes) + local excludeSkillTypes = { SkillType.SummonsTotem, SkillType.Trapped, SkillType.RemoteMined, SkillType.Triggered, + SkillType.HasReservation, SkillType.Instant, SkillType.NonRepeatable, SkillType.CreatesMinion, + } + for _, type in ipairs(excludeSkillTypes) do + if activeSkillTypes[type] then + return false + end + end + return (activeSkillTypes[SkillType.Multicastable] or activeSkillTypes[SkillType.Multistrikeable]) + end + output.Repeats = 1 + (repeatSkillTypesCheck(activeSkill.skillTypes) and (skillModList:Sum("BASE", skillCfg, "RepeatCount") or 0) or 0) if output.Repeats > 1 then output.RepeatCount = output.Repeats -- handle all the multipliers from Repeats diff --git a/src/Modules/ModParser.lua b/src/Modules/ModParser.lua index 7c96c75ca6..e46a73a346 100644 --- a/src/Modules/ModParser.lua +++ b/src/Modules/ModParser.lua @@ -2400,10 +2400,10 @@ local specialModList = { ["exerted attacks have (%d+)%% chance to deal double damage"] = function(num) return { mod("ExertDoubleDamageChance", "BASE", num, nil, ModFlag.Attack, 0) } end, -- Duelist (Fatal flourish) ["final repeat of attack skills deals (%d+)%% more damage"] = function(num) return { mod("RepeatFinalDamage", "MORE", num, nil, ModFlag.Attack, 0, - { type = "SkillType", skillTypeList = { SkillType.Retaliation, SkillType.Travel, SkillType.Channel, SkillType.Instant, SkillType.Triggered }, neg = true }), + { type = "SkillType", skillTypeList = { SkillType.Travel }, neg = true }), } end, ["non%-travel attack skills repeat an additional time"] = { mod("RepeatCount", "BASE", 1, nil, ModFlag.Attack, 0, - { type = "SkillType", skillTypeList = { SkillType.Retaliation, SkillType.Travel, SkillType.Channel, SkillType.Instant, SkillType.Triggered }, neg = true }, + { type = "SkillType", skillTypeList = { SkillType.Travel }, neg = true }, { type = "Condition", varList = {"averageRepeat", "alwaysFinalRepeat"} }) }, -- Ascendant From 63801a2c215a7afd3edd8e5fb23b84bbd96a42c6 Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Sun, 12 Apr 2026 01:07:01 -0500 Subject: [PATCH 4/6] update to allow traps and mines, fix dps and cost for traps and mines --- src/Modules/CalcOffence.lua | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 4efbe8cb15..8349b1f349 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -760,16 +760,16 @@ function calcs.offence(env, actor, activeSkill) skillData.dpsMultiplier = skillModList:Sum("BASE", skillCfg, "ProjectileCount") end + -- attack traps and mines can repeat with Fatal Flourish + local fatalFlourishAttackTrapOrMine = activeSkill.skillTypes[SkillType.Attack] and (activeSkill.skillTypes[SkillType.Trapped] or activeSkill.skillTypes[SkillType.RemoteMined]) local function repeatSkillTypesCheck(activeSkillTypes) - local excludeSkillTypes = { SkillType.SummonsTotem, SkillType.Trapped, SkillType.RemoteMined, SkillType.Triggered, - SkillType.HasReservation, SkillType.Instant, SkillType.NonRepeatable, SkillType.CreatesMinion, - } + local excludeSkillTypes = { SkillType.SummonsTotem, SkillType.HasReservation, SkillType.Instant, SkillType.NonRepeatable, SkillType.CreatesMinion } for _, type in ipairs(excludeSkillTypes) do if activeSkillTypes[type] then return false end end - return (activeSkillTypes[SkillType.Multicastable] or activeSkillTypes[SkillType.Multistrikeable]) + return (fatalFlourishAttackTrapOrMine or activeSkillTypes[SkillType.Multicastable] or activeSkillTypes[SkillType.Multistrikeable]) end output.Repeats = 1 + (repeatSkillTypesCheck(activeSkill.skillTypes) and (skillModList:Sum("BASE", skillCfg, "RepeatCount") or 0) or 0) if output.Repeats > 1 then @@ -807,7 +807,7 @@ function calcs.offence(env, actor, activeSkill) local modValue = mod.value DamageFinalMoreValueTotal = DamageFinalMoreValueTotal * (1 + modValue / 100) DamageMoreValueTotal = DamageMoreValueTotal + modValue - if env.configInput.repeatMode == "AVERAGE" and not skillModList:Flag(nil, "OnlyFinalRepeat") then + if env.configInput.repeatMode == "AVERAGE" and not skillModList:Flag(nil, "OnlyFinalRepeat") and not fatalFlourishAttackTrapOrMine then modValue = modValue / output.Repeats end skillModList:NewMod("Damage", "MORE", modValue, mod.source, mod.flags, mod.keywordFlags, unpack(mod)) @@ -5636,6 +5636,10 @@ function calcs.offence(env, actor, activeSkill) local useSpeed = 1 local timeType if skillFlags.trap or skillFlags.mine then + -- the repeat from Fatal Flourish does not increase the cost of traps or mines + if fatalFlourishAttackTrapOrMine and repeats > 1 then + repeats = repeats - 1 + end local preSpeed = output.TrapThrowingSpeed or output.MineLayingSpeed local cooldown = output.TrapCooldown or output.Cooldown useSpeed = (cooldown and cooldown > 0 and 1 / cooldown or preSpeed) / repeats From 582ebaee7649f29358257ae06405ae28f0af3bab Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Sun, 12 Apr 2026 01:51:14 -0500 Subject: [PATCH 5/6] fix damage to be 160 more, fix Ranged Attacks like Ice Shot or Kinetic Blast --- src/Modules/CalcOffence.lua | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 8349b1f349..d854b23954 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -760,16 +760,19 @@ function calcs.offence(env, actor, activeSkill) skillData.dpsMultiplier = skillModList:Sum("BASE", skillCfg, "ProjectileCount") end - -- attack traps and mines can repeat with Fatal Flourish + -- attack that are traps and mines can repeat with Fatal Flourish and deal 160% more damage local fatalFlourishAttackTrapOrMine = activeSkill.skillTypes[SkillType.Attack] and (activeSkill.skillTypes[SkillType.Trapped] or activeSkill.skillTypes[SkillType.RemoteMined]) local function repeatSkillTypesCheck(activeSkillTypes) + if fatalFlourishAttackTrapOrMine or (activeSkillTypes[SkillType.RangedAttack] and (activeSkill.skillTypes[SkillType.Trappable] or activeSkill.skillTypes[SkillType.Mineable])) then + return true + end local excludeSkillTypes = { SkillType.SummonsTotem, SkillType.HasReservation, SkillType.Instant, SkillType.NonRepeatable, SkillType.CreatesMinion } for _, type in ipairs(excludeSkillTypes) do if activeSkillTypes[type] then return false end end - return (fatalFlourishAttackTrapOrMine or activeSkillTypes[SkillType.Multicastable] or activeSkillTypes[SkillType.Multistrikeable]) + return (activeSkillTypes[SkillType.Multicastable] or activeSkillTypes[SkillType.Multistrikeable]) end output.Repeats = 1 + (repeatSkillTypesCheck(activeSkill.skillTypes) and (skillModList:Sum("BASE", skillCfg, "RepeatCount") or 0) or 0) if output.Repeats > 1 then @@ -807,7 +810,9 @@ function calcs.offence(env, actor, activeSkill) local modValue = mod.value DamageFinalMoreValueTotal = DamageFinalMoreValueTotal * (1 + modValue / 100) DamageMoreValueTotal = DamageMoreValueTotal + modValue - if env.configInput.repeatMode == "AVERAGE" and not skillModList:Flag(nil, "OnlyFinalRepeat") and not fatalFlourishAttackTrapOrMine then + if fatalFlourishAttackTrapOrMine then + modValue = 100 + modValue + elseif env.configInput.repeatMode == "AVERAGE" and not skillModList:Flag(nil, "OnlyFinalRepeat") then modValue = modValue / output.Repeats end skillModList:NewMod("Damage", "MORE", modValue, mod.source, mod.flags, mod.keywordFlags, unpack(mod)) From c87d2b99c38c7299cbe344aa53ddea8270b28346 Mon Sep 17 00:00:00 2001 From: Peechey <92683202+Peechey@users.noreply.github.com> Date: Sun, 12 Apr 2026 01:55:51 -0500 Subject: [PATCH 6/6] fix var usage --- src/Modules/CalcOffence.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index d854b23954..2e64f83213 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -763,7 +763,7 @@ function calcs.offence(env, actor, activeSkill) -- attack that are traps and mines can repeat with Fatal Flourish and deal 160% more damage local fatalFlourishAttackTrapOrMine = activeSkill.skillTypes[SkillType.Attack] and (activeSkill.skillTypes[SkillType.Trapped] or activeSkill.skillTypes[SkillType.RemoteMined]) local function repeatSkillTypesCheck(activeSkillTypes) - if fatalFlourishAttackTrapOrMine or (activeSkillTypes[SkillType.RangedAttack] and (activeSkill.skillTypes[SkillType.Trappable] or activeSkill.skillTypes[SkillType.Mineable])) then + if fatalFlourishAttackTrapOrMine or (activeSkillTypes[SkillType.RangedAttack] and (activeSkillTypes[SkillType.Trappable] or activeSkillTypes[SkillType.Mineable])) then return true end local excludeSkillTypes = { SkillType.SummonsTotem, SkillType.HasReservation, SkillType.Instant, SkillType.NonRepeatable, SkillType.CreatesMinion }