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
57 changes: 48 additions & 9 deletions spec/System/TestDefence_spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -945,8 +945,19 @@ describe("TestDefence", function()

-- Get the base + Shabby Jerkin to make this test more adaptable to changes
local ironReflexesArmour = build.calcsTab.mainOutput.Armour - baseArmour - baseEvasion
assert.are.equals(ironReflexesArmour + baseArmour + baseEvasion, build.calcsTab.mainOutput.Armour)

print("build.calcsTab.mainOutput.Armour:" .. build.calcsTab.mainOutput.Armour)
build.configTab.input.customMods = [[
Converts all Evasion Rating to Armour. Dexterity provides no bonus to Evasion Rating
you have no dexterity
Gain no armour from equipped body armour
]]
build.configTab:BuildModList()
runCallback("OnFrame")
-- Iron Reflexes and Prospero's Protection
assert.are.equals(baseArmour + baseEvasion, build.calcsTab.mainOutput.Armour)

--print("build.calcsTab.mainOutput.Armour:" .. build.calcsTab.mainOutput.Armour)

build.configTab.input.customMods = [[
Armour from Equipped Body Armour is doubled
Expand All @@ -955,7 +966,6 @@ describe("TestDefence", function()
]]
build.configTab:BuildModList()
runCallback("OnFrame")

-- Evasion from Body Armour is converted to Armour before being doubled
assert.are.equals(2*ironReflexesArmour + baseArmour + baseEvasion, build.calcsTab.mainOutput.Armour)

Expand All @@ -967,25 +977,21 @@ describe("TestDefence", function()
]]
build.configTab:BuildModList()
runCallback("OnFrame")

-- Only the base armour from the chest is affected.
-- Armour converted with Iron Reflexes still applies
assert.are.equals(2*ironReflexesArmour + baseArmour + baseEvasion, build.calcsTab.mainOutput.Armour)
assert.are.equals(baseArmour + baseEvasion, build.calcsTab.mainOutput.Armour)

build.configTab.input.customMods = [[
Armour from Equipped Body Armour is doubled
Converts all Evasion Rating to Armour. Dexterity provides no bonus to Evasion Rating
Gain no armour from equipped body armour
defences from equipped body armour are doubled if it has no socketed gems
you have no dexterity
]]
build.configTab:BuildModList()
runCallback("OnFrame")

-- Oath Of Maji double defences stack with Unbreakable
assert.are.equals(2*2*ironReflexesArmour + baseArmour + baseEvasion, build.calcsTab.mainOutput.Armour)

build.configTab.input.customMods = [[
Armour from Equipped Body Armour is doubled
Armour from Equipped Body Armour is doubled
Converts all Evasion Rating to Armour. Dexterity provides no bonus to Evasion Rating
Gain no armour from equipped body armour
Expand All @@ -994,7 +1000,17 @@ describe("TestDefence", function()
]]
build.configTab:BuildModList()
runCallback("OnFrame")
assert.are.equals(baseArmour + baseEvasion, build.calcsTab.mainOutput.Armour)

build.configTab.input.customMods = [[
Armour from Equipped Body Armour is doubled
Armour from Equipped Body Armour is doubled
Converts all Evasion Rating to Armour. Dexterity provides no bonus to Evasion Rating
defences from equipped body armour are doubled if it has no socketed gems
you have no dexterity
]]
build.configTab:BuildModList()
runCallback("OnFrame")
-- Mod form unbreakable should apply only once
assert.are.equals(2*2*ironReflexesArmour + baseArmour + baseEvasion, build.calcsTab.mainOutput.Armour)

Expand All @@ -1004,14 +1020,37 @@ describe("TestDefence", function()
Converts all Evasion Rating to Armour. Dexterity provides no bonus to Evasion Rating
Gain no armour from equipped body armour
defences from equipped body armour are doubled if it has no socketed gems
defences from equipped body armour are doubled if it has no socketed gems
you have no dexterity
]]
build.configTab:BuildModList()
runCallback("OnFrame")
assert.are.equals(baseArmour + baseEvasion, build.calcsTab.mainOutput.Armour)

build.configTab.input.customMods = [[
Armour from Equipped Body Armour is doubled
Armour from Equipped Body Armour is doubled
Converts all Evasion Rating to Armour. Dexterity provides no bonus to Evasion Rating
defences from equipped body armour are doubled if it has no socketed gems
defences from equipped body armour are doubled if it has no socketed gems
you have no dexterity
]]
build.configTab:BuildModList()
runCallback("OnFrame")
-- Oath Of Maji should apply only once
assert.are.equals(2*2*ironReflexesArmour + baseArmour + baseEvasion, build.calcsTab.mainOutput.Armour)

build.configTab.input.customMods = [[
Armour from Equipped Body Armour is doubled
Armour from Equipped Body Armour is doubled
Converts all Evasion Rating to Armour. Dexterity provides no bonus to Evasion Rating
Gain no armour from equipped body armour
defences from equipped body armour are doubled if it has no socketed gems
defences from equipped body armour are doubled if it has no socketed gems
you have no dexterity
]]
build.configTab:BuildModList()
runCallback("OnFrame")
assert.are.equals(baseArmour + baseEvasion, build.calcsTab.mainOutput.Armour)
end)

it("MoM + EB", function()
Expand Down
6 changes: 3 additions & 3 deletions src/Modules/CalcDefence.lua
Original file line number Diff line number Diff line change
Expand Up @@ -846,12 +846,12 @@ function calcs.defence(env, actor)
slotCfg.slotName = slot
energyShieldBase = not modDB:Flag(nil, "GainNoEnergyShieldFrom" .. slot) and armourData.EnergyShield or 0
armourBase = not modDB:Flag(nil, "GainNoArmourFrom" .. slot) and armourData.Armour or 0
evasionBase = not modDB:Flag(nil, "GainNoEvasionFrom" .. slot) and armourData.Evasion or 0
evasionBase = not (modDB:Flag(nil, "GainNoEvasionFrom" .. slot) or (modDB:Flag(nil, "GainNoArmourFrom" .. slot) and ironReflexes)) and armourData.Evasion or 0
wardBase = not modDB:Flag(nil, "GainNoWardFrom" .. slot) and armourData.Ward or 0
if slot == "Body Armour" and modDB:Flag(nil, "ConvertBodyArmourArmourEvasionToWard") then
local conversion = m_min(modDB:Sum("BASE", nil, "BodyArmourArmourEvasionToWardPercent") / 100, 1)
local convertedArmour = armourBase * conversion
local convertedEvasion = evasionBase * conversion
local convertedArmour = armourBase * conversion
local convertedEvasion = evasionBase * conversion
armourBase = armourBase - convertedArmour
evasionBase = evasionBase - convertedEvasion
wardBase = wardBase + (convertedEvasion + convertedArmour)
Expand Down
Loading