Skip to content

Commit 7a8ed99

Browse files
author
LocalIdentity
committed
Use temp actor instead of changing calcs
1 parent 9a1a870 commit 7a8ed99

3 files changed

Lines changed: 64 additions & 39 deletions

File tree

spec/System/TestDefence_spec.lua

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,26 @@ describe("TestDefence", function()
358358
build.skillsTab.socketGroupList = {}
359359
end)
360360

361+
it("foulborn resistance conversion remains stable across recalculation", function()
362+
build.configTab.input.enemyIsBoss = "None"
363+
build.configTab.input.customMods = "\z
364+
+300 to fire resistance\n\z
365+
modifiers to fire resistance also apply to cold and lightning resistances at 50% of their value\n\z
366+
mana is increased by 100% of overcapped lightning resistance\n\z
367+
"
368+
build.configTab:BuildModList()
369+
runCallback("OnFrame")
370+
371+
assert.are.equals(90, build.calcsTab.calcsOutput.LightningResistTotal)
372+
assert.are.equals(15, build.calcsTab.calcsOutput.LightningResistOverCap)
373+
374+
build.configTab:BuildModList()
375+
runCallback("OnFrame")
376+
377+
assert.are.equals(90, build.calcsTab.calcsOutput.LightningResistTotal)
378+
assert.are.equals(15, build.calcsTab.calcsOutput.LightningResistOverCap)
379+
end)
380+
361381
-- fun part
362382
it("armoured max hits", function()
363383
build.configTab.input.enemyIsBoss = "None"
@@ -1177,4 +1197,4 @@ describe("TestDefence", function()
11771197
assert.are.equals(0, floor(poolsRemaining.Life))
11781198
assert.are.equals(0, floor(poolsRemaining.OverkillDamage))
11791199
end)
1180-
end)
1200+
end)

src/Modules/CalcDefence.lua

Lines changed: 33 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -513,50 +513,47 @@ function calcs.resistances(actor)
513513
output["PhysicalResist"] = 0
514514

515515
-- Process Resistance conversion mods
516-
if not actor.resistConversionApplied then
517-
actor.resistConversionApplied = true
518-
for _, resFrom in ipairs(resistTypeList) do
519-
local maxRes
520-
for _, resTo in ipairs(resistTypeList) do
521-
local conversionRate = modDB:Sum("BASE", nil, resFrom.."MaxResConvertTo"..resTo) / 100
522-
if conversionRate ~= 0 then
523-
if not maxRes then
524-
maxRes = 0
525-
for _, mod in ipairs(modDB:Tabulate("BASE", nil, resFrom.."ResistMax")) do
526-
if mod.mod.source ~= "Base" then
527-
maxRes = maxRes + mod.value
528-
end
516+
for _, resFrom in ipairs(resistTypeList) do
517+
local maxRes
518+
for _, resTo in ipairs(resistTypeList) do
519+
local conversionRate = modDB:Sum("BASE", nil, resFrom.."MaxResConvertTo"..resTo) / 100
520+
if conversionRate ~= 0 then
521+
if not maxRes then
522+
maxRes = 0
523+
for _, mod in ipairs(modDB:Tabulate("BASE", nil, resFrom.."ResistMax")) do
524+
if mod.mod.source ~= "Base" then
525+
maxRes = maxRes + mod.value
529526
end
530527
end
531-
if maxRes ~= 0 then
532-
modDB:NewMod(resTo.."ResistMax", "BASE", maxRes * conversionRate, resFrom.." To "..resTo.." Max Resistance Conversion")
533-
end
528+
end
529+
if maxRes ~= 0 then
530+
modDB:NewMod(resTo.."ResistMax", "BASE", maxRes * conversionRate, resFrom.." To "..resTo.." Max Resistance Conversion")
534531
end
535532
end
536533
end
534+
end
537535

538-
for _, resFrom in ipairs(resistTypeList) do
539-
local res
540-
for _, resTo in ipairs(resistTypeList) do
541-
local conversionRate = modDB:Sum("BASE", nil, resFrom.."ResConvertTo"..resTo) / 100
542-
if conversionRate ~= 0 then
543-
if not res then
544-
res = 0
545-
for _, mod in ipairs(modDB:Tabulate("BASE", nil, resFrom.."Resist")) do
546-
if mod.mod.source ~= "Base" then
547-
res = res + mod.value
548-
end
536+
for _, resFrom in ipairs(resistTypeList) do
537+
local res
538+
for _, resTo in ipairs(resistTypeList) do
539+
local conversionRate = modDB:Sum("BASE", nil, resFrom.."ResConvertTo"..resTo) / 100
540+
if conversionRate ~= 0 then
541+
if not res then
542+
res = 0
543+
for _, mod in ipairs(modDB:Tabulate("BASE", nil, resFrom.."Resist")) do
544+
if mod.mod.source ~= "Base" then
545+
res = res + mod.value
549546
end
550547
end
551-
if res ~= 0 then
552-
modDB:NewMod(resTo.."Resist", "BASE", res * conversionRate, resFrom.." To "..resTo.." Resistance Conversion")
553-
end
554-
for _, mod in ipairs(modDB:Tabulate("INC", nil, resFrom.."Resist")) do
555-
modDB:NewMod(resTo.."Resist", "INC", mod.value * conversionRate, mod.mod.source)
556-
end
557-
for _, mod in ipairs(modDB:Tabulate("MORE", nil, resFrom.."Resist")) do
558-
modDB:NewMod(resTo.."Resist", "MORE", mod.value * conversionRate, mod.mod.source)
559-
end
548+
end
549+
if res ~= 0 then
550+
modDB:NewMod(resTo.."Resist", "BASE", res * conversionRate, resFrom.." To "..resTo.." Resistance Conversion")
551+
end
552+
for _, mod in ipairs(modDB:Tabulate("INC", nil, resFrom.."Resist")) do
553+
modDB:NewMod(resTo.."Resist", "INC", mod.value * conversionRate, mod.mod.source)
554+
end
555+
for _, mod in ipairs(modDB:Tabulate("MORE", nil, resFrom.."Resist")) do
556+
modDB:NewMod(resTo.."Resist", "MORE", mod.value * conversionRate, mod.mod.source)
560557
end
561558
end
562559
end

src/Modules/CalcPerform.lua

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3189,8 +3189,16 @@ function calcs.perform(env, skipEHP)
31893189

31903190
-- Foulborn Choir of the Storm, needs to be after main auras (incase purity of lightning/elements auras) but before extra auras (Radiant Faith)
31913191
if modDB:Flag(nil, "ManaIncreasedByOvercappedLightningRes") then
3192-
-- Calclate resistances for ManaIncreasedByOvercappedLightningRes
3193-
calcs.resistances(env.player)
3192+
-- Calculate resistances for ManaIncreasedByOvercappedLightningRes without mutating conversion mods on the player ModDB.
3193+
local tempResistActor = {
3194+
modDB = new("ModDB", modDB),
3195+
output = output,
3196+
activeSkillList = env.player.activeSkillList,
3197+
enemy = env.player.enemy,
3198+
}
3199+
tempResistActor.player = tempResistActor
3200+
tempResistActor.modDB.actor = tempResistActor
3201+
calcs.resistances(tempResistActor)
31943202
-- Set the life/mana reservations again as we now have increased mana from overcapped lightning resistance
31953203
doActorLifeMana(env.player)
31963204
doActorLifeManaReservation(env.player, true)

0 commit comments

Comments
 (0)