diff --git a/spec/System/TestDefence_spec.lua b/spec/System/TestDefence_spec.lua index ea79c4f747..74f05d0786 100644 --- a/spec/System/TestDefence_spec.lua +++ b/spec/System/TestDefence_spec.lua @@ -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 @@ -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) @@ -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 @@ -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) @@ -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() diff --git a/src/Modules/CalcDefence.lua b/src/Modules/CalcDefence.lua index cfb1699e22..82447977db 100644 --- a/src/Modules/CalcDefence.lua +++ b/src/Modules/CalcDefence.lua @@ -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)