Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 65 additions & 0 deletions spec/System/TestDefence_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,71 @@ describe("TestDefence", function()
return build.calcsTab.calcs.reducePoolsByDamage(nil, takenDamages, build.calcsTab.calcsEnv.player)
end

it("attributes resistances inherited by minions to Bonemeld after loading a build", function()
build.skillsTab:PasteSocketGroup("Raise Zombie 20/0 1")
build.itemsTab:CreateDisplayItemFromRaw("Rarity: UNIQUE\nBonemeld\nMarble Amulet\nImplicits: 0\nMinions gain added Resistances equal to 50% of your Resistances")
build.itemsTab:AddDisplayItem()
build.configTab.input.customMods = "+135% to Fire Resistance\n+111% to Cold Resistance\n+59% to Lightning Resistance\n+39% to Chaos Resistance"
build.configTab:BuildModList()
runCallback("OnFrame")
loadBuildFromXML(build:SaveDB("code"))

local env = build.calcsTab.calcsEnv
local source = env.player.modDB:Tabulate("BASE", nil, "ResistanceAddedToMinions")[1].mod.source
local breakdown = build.calcsTab.controls.breakdown
build.calcsTab.input.showMinion = true
for _, case in ipairs({
{ "Fire", 75, 37, 77 },
{ "Cold", 51, 25, 65 },
{ "Lightning", -1, -1, 39 },
{ "Chaos", -21, -11, 9 },
}) do
local elem, playerResist, addedResist, minionResist = unpack(case)
local mods = env.minion.modDB:Tabulate("BASE", { source = "Item" }, elem.."Resist")
assert.are.equal(1, #mods)
assert.are.equal(source, mods[1].mod.source)
assert.are.equal(addedResist, mods[1].value)
assert.are.equal(playerResist, env.player.output[elem.."Resist"])
assert.are.equal(minionResist, env.minion.output[elem.."ResistTotal"])
breakdown.sectionList = { }
breakdown:AddModSection({ modName = elem.."Resist", modSource = "Item" })
local row = breakdown.sectionList[1].rowList[1]
assert.are.equal("Item", row.source)
assert.is_truthy(row.sourceName:find("Bonemeld", 1, true))
assert.are.equal("function", type(row.sourceNameTooltip))
end
end)

it("lists each source of inherited minion resistances and rounds each contribution", function()
build.skillsTab:PasteSocketGroup("Raise Zombie 20/0 1")
build.itemsTab:CreateDisplayItemFromRaw("Rarity: UNIQUE\nBonemeld\nMarble Amulet\nImplicits: 0\nMinions gain added Resistances equal to 50% of your Resistances")
build.itemsTab:AddDisplayItem()
build.configTab.input.customMods = "+135% to Fire Resistance\n+59% to Lightning Resistance\nMinions gain added Resistances equal to 50% of your Resistances"
build.configTab:BuildModList()
runCallback("OnFrame")
loadBuildFromXML(build:SaveDB("code"))

local env = build.calcsTab.calcsEnv
local sources = env.player.modDB:Tabulate("BASE", nil, "ResistanceAddedToMinions")
assert.are.equal(2, #sources)
for _, case in ipairs({ { "Fire", 37, 114 }, { "Lightning", -1, 38 } }) do
local elem, contribution, total = unpack(case)
local mods = env.minion.modDB:Tabulate("BASE", nil, elem.."Resist")
for _, source in ipairs(sources) do
local matches = 0
for _, entry in ipairs(mods) do
if entry.mod.source == source.mod.source then
matches = matches + 1
assert.are.equal(contribution, entry.value)
end
end
assert.are.equal(1, matches)
end
assert.are.equal(total, env.minion.output[elem.."ResistTotal"])
assert.are.equal(0, #env.minion.modDB:Tabulate("BASE", { source = "Player" }, elem.."Resist"))
end
end)

it("applies Consecrated Ground curse reduction to the player and minion", function()
build.skillsTab:PasteSocketGroup("Raise Zombie 20/0 1")
build.configTab.input.conditionOnConsecratedGround = true
Expand Down
8 changes: 5 additions & 3 deletions src/Modules/CalcDefence.lua
Original file line number Diff line number Diff line change
Expand Up @@ -664,9 +664,11 @@ function calcs.defence(env, actor)

calcs.resistances(actor)
if env.minion and modDB:Sum("BASE", nil, "ResistanceAddedToMinions") > 0 then
for _, elem in ipairs(resistTypeList) do
local final = output[elem.."Resist"]
env.minion.modDB:NewMod(elem.."Resist", "BASE", m_floor(final * modDB:Sum("BASE", nil, "ResistanceAddedToMinions") / 100), "Player")
for _, value in ipairs(modDB:Tabulate("BASE", nil, "ResistanceAddedToMinions")) do
for _, elem in ipairs(resistTypeList) do
local final = output[elem.."Resist"]
env.minion.modDB:NewMod(elem.."Resist", "BASE", m_floor(final * value.value / 100), value.mod.source)
end
end
end
-- Formless Inferno
Expand Down
Loading