diff --git a/spec/System/TestItemMods_spec.lua b/spec/System/TestItemMods_spec.lua index b15074c41..d60817d94 100644 --- a/spec/System/TestItemMods_spec.lua +++ b/spec/System/TestItemMods_spec.lua @@ -7,6 +7,40 @@ describe("TetsItemMods", function() -- newBuild() takes care of resetting everything in setup() end) + it("sorts defensive item stats when the best score is negative", function() + build.configTab.input.enemyFireDamage = "1000" + build.configTab:BuildModList() + runCallback("OnFrame") + + local saferRing = new("Item", [[ + New Item + Ring + +50% to Fire Resistance + ]]) + local baselineRing = new("Item", [[ + New Item + Ring + ]]) + local itemDB = build.itemsTab.controls.uniqueDB + itemDB.db = { list = { baselineRing, saferRing } } + itemDB.sortMode = "FireTakenHit" + itemDB.sortDetail = { + stat = "FireTakenHit", + transform = function(value) + return -value + end + } + itemDB.sortOrder = { + itemDB.sortControl.STAT, + itemDB.sortControl.NAME + } + + itemDB:ListBuilder() + + assert.are.equals(saferRing, itemDB.list[1]) + assert.is_true(saferRing.measuredPower < 0) + end) + it("Both slots mod (evasion and es mastery)", function() build.configTab.input.customMods = "\z diff --git a/src/Classes/ItemDBControl.lua b/src/Classes/ItemDBControl.lua index 9de768ef6..04ed96e1c 100644 --- a/src/Classes/ItemDBControl.lua +++ b/src/Classes/ItemDBControl.lua @@ -239,7 +239,7 @@ function ItemDBClass:ListBuilder() local start = GetTime() local calcFunc, calcBase = self.itemsTab.build.calcsTab:GetMiscCalculator(self.build) for itemIndex, item in ipairs(list) do - item.measuredPower = 0 + item.measuredPower = nil for slotName, slot in pairs(self.itemsTab.slots) do if self.itemsTab:IsItemValidForSlot(item, slotName) and not slot.inactive and (not slot.weaponSet or slot.weaponSet == (self.itemsTab.activeItemSet.useSecondWeaponSet and 2 or 1)) then local output = calcFunc(item.base.flask and { toggleFlask = item } or item.base.charm and { toggleCharm = item } or { repSlotName = slotName, repItem = item }, useFullDPS) @@ -247,9 +247,10 @@ function ItemDBClass:ListBuilder() if self.sortDetail.transform then measuredPower = self.sortDetail.transform(measuredPower) end - item.measuredPower = m_max(item.measuredPower, measuredPower) + item.measuredPower = item.measuredPower and m_max(item.measuredPower, measuredPower) or measuredPower end end + item.measuredPower = item.measuredPower or 0 local now = GetTime() if now - start > 50 then self.defaultText = "^7Sorting... ("..m_floor(itemIndex/#list*100).."%)" @@ -375,4 +376,4 @@ function ItemDBClass:OnHoverKeyUp(key) itemLib.wiki.openItem(item) end end -end \ No newline at end of file +end