Skip to content

Commit d8c0b1d

Browse files
authored
Fix max charge override being set during charge pre-pass (#9442)
* FIX: Charge max override being set during charge pre-pass After #7186 doActorCharges is ran early to supply charge data to other logic in CalcPerform.lua #7328 added an extra override to improve max charge count display causing the pre pass to set the override which is then not overwritten during the main charge calculation pass. This means that conditional maximum charge mods such as "+1 to Maximum Frenzy Charges while affected by Grace" which rely on conditions set after the charge pre-pass were not accounted for in the main pass. This pr simply uses the ReplaceMod function to replace the max charges override mod during the last/main pass. Signed-off-by: Paliak <91493239+Paliak@users.noreply.github.com> * CHORE: add test * FIX: duplicate function end in test Signed-off-by: Paliak <91493239+Paliak@users.noreply.github.com> --------- Signed-off-by: Paliak <91493239+Paliak@users.noreply.github.com>
1 parent 2825e29 commit d8c0b1d

2 files changed

Lines changed: 29 additions & 6 deletions

File tree

spec/System/TestItemMods_spec.lua

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,4 +585,31 @@ describe("TetsItemMods", function()
585585

586586
assert.are.equals(0.86, build.calcsTab.calcsOutput.LightningEffMult)
587587
end)
588+
589+
it("Max charges with conditional mod", function() -- see #9442
590+
build.skillsTab:PasteSocketGroup("Grace 20/20 Default 1\n")
591+
runCallback("OnFrame")
592+
593+
local baseFrenzyChargesMax = build.calcsTab.calcsOutput.FrenzyChargesMax
594+
local baseEnduranceChargesMax = build.calcsTab.calcsOutput.EnduranceChargesMax
595+
596+
build.configTab.input.customMods = [[
597+
+1 to Maximum Frenzy Charges while affected by Grace
598+
]]
599+
build.configTab:BuildModList()
600+
runCallback("OnFrame")
601+
602+
assert.are.equals(baseFrenzyChargesMax + 1, build.calcsTab.calcsOutput.FrenzyChargesMax)
603+
assert.are.equals(baseEnduranceChargesMax, build.calcsTab.calcsOutput.EnduranceChargesMax)
604+
605+
build.configTab.input.customMods = [[
606+
Your Maximum Endurance Charges is equal to your Maximum Frenzy Charges
607+
+1 to Maximum Frenzy Charges while affected by Grace
608+
]]
609+
build.configTab:BuildModList()
610+
runCallback("OnFrame")
611+
612+
assert.are.equals(baseFrenzyChargesMax + 1, build.calcsTab.calcsOutput.FrenzyChargesMax)
613+
assert.are.equals(baseEnduranceChargesMax + 1, build.calcsTab.calcsOutput.EnduranceChargesMax)
614+
end)
588615
end)

src/Modules/CalcPerform.lua

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -897,18 +897,14 @@ local function doActorCharges(env, actor)
897897
output.PowerChargesDuration = m_floor(modDB:Sum("BASE", nil, "ChargeDuration") * calcLib.mod(modDB, nil, "PowerChargesDuration", "ChargeDuration"))
898898
if modDB:Flag(nil, "MaximumFrenzyChargesIsMaximumPowerCharges") then
899899
local source = modDB.mods["MaximumFrenzyChargesIsMaximumPowerCharges"][1].source
900-
if not modDB:HasMod("OVERRIDE", {source = source:match("[^:]+")}, "FrenzyChargesMax") then
901-
modDB:NewMod("FrenzyChargesMax", "OVERRIDE", output.PowerChargesMax, source)
902-
end
900+
modDB:ReplaceMod("FrenzyChargesMax", "OVERRIDE", output.PowerChargesMax, source)
903901
end
904902
output.FrenzyChargesMin = m_max(modDB:Sum("BASE", nil, "FrenzyChargesMin"), 0)
905903
output.FrenzyChargesMax = modDB:Override(nil, "FrenzyChargesMax") or m_max(modDB:Flag(nil, "MaximumFrenzyChargesIsMaximumPowerCharges") and output.PowerChargesMax or modDB:Sum("BASE", nil, "FrenzyChargesMax"), 0)
906904
output.FrenzyChargesDuration = m_floor(modDB:Sum("BASE", nil, "ChargeDuration") * calcLib.mod(modDB, nil, "FrenzyChargesDuration", "ChargeDuration"))
907905
if modDB:Flag(nil, "MaximumEnduranceChargesIsMaximumFrenzyCharges") then
908906
local source = modDB.mods["MaximumEnduranceChargesIsMaximumFrenzyCharges"][1].source
909-
if not modDB:HasMod("OVERRIDE", {source = source:match("[^:]+")}, "EnduranceChargesMax") then
910-
modDB:NewMod("EnduranceChargesMax", "OVERRIDE", output.FrenzyChargesMax, source)
911-
end
907+
modDB:ReplaceMod("EnduranceChargesMax", "OVERRIDE", output.FrenzyChargesMax, source)
912908
end
913909
output.EnduranceChargesMin = m_max(modDB:Sum("BASE", nil, "EnduranceChargesMin"), 0)
914910
output.EnduranceChargesMax = modDB:Override(nil, "EnduranceChargesMax") or m_max(env.partyMembers.modDB:Flag(nil, "PartyMemberMaximumEnduranceChargesEqualToYours") and env.partyMembers.output.EnduranceChargesMax or (modDB:Flag(nil, "MaximumEnduranceChargesIsMaximumFrenzyCharges") and output.FrenzyChargesMax or modDB:Sum("BASE", nil, "EnduranceChargesMax")), 0)

0 commit comments

Comments
 (0)