From 013ec8c28f417cd956cad85b1276658a0efdc43c Mon Sep 17 00:00:00 2001 From: unrealdreamz <132005717+unrealdreamz@users.noreply.github.com> Date: Mon, 18 May 2026 17:18:12 -0400 Subject: [PATCH 1/3] Fix negative stat item sorting --- spec/System/TestItemMods_spec.lua | 34 +++++++++++++++++++++++++++++++ src/Classes/ItemDBControl.lua | 7 ++++--- 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/spec/System/TestItemMods_spec.lua b/spec/System/TestItemMods_spec.lua index b15074c415..d60817d94f 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 9de768ef69..04ed96e1c9 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 From 4531f74d6048a25140ca6df280c56ceca0387080 Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 22 May 2026 20:52:49 +1000 Subject: [PATCH 2/3] Reduce diff + fix quiver issue --- spec/System/TestItemMods_spec.lua | 31 ++++++++----------------------- src/Classes/ItemDBControl.lua | 2 +- 2 files changed, 9 insertions(+), 24 deletions(-) diff --git a/spec/System/TestItemMods_spec.lua b/spec/System/TestItemMods_spec.lua index d60817d94f..e269698ddd 100644 --- a/spec/System/TestItemMods_spec.lua +++ b/spec/System/TestItemMods_spec.lua @@ -12,33 +12,18 @@ describe("TetsItemMods", function() 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.db = { list = { + new("Item", "New Item\nRing"), + new("Item", "New Item\nRing\n+50% to Fire Resistance"), + new("Item", "New Item\nBroadhead Quiver"), + } } + itemDB:SetSortMode("FireTakenHit") itemDB:ListBuilder() - assert.are.equals(saferRing, itemDB.list[1]) - assert.is_true(saferRing.measuredPower < 0) + assert.is_true(itemDB.list[1].measuredPower < 0) + assert.are.equals(-math.huge, itemDB.list[#itemDB.list].measuredPower) end) it("Both slots mod (evasion and es mastery)", function() diff --git a/src/Classes/ItemDBControl.lua b/src/Classes/ItemDBControl.lua index 04ed96e1c9..3e48f00ed1 100644 --- a/src/Classes/ItemDBControl.lua +++ b/src/Classes/ItemDBControl.lua @@ -250,7 +250,7 @@ function ItemDBClass:ListBuilder() item.measuredPower = item.measuredPower and m_max(item.measuredPower, measuredPower) or measuredPower end end - item.measuredPower = item.measuredPower or 0 + item.measuredPower = item.measuredPower or -math.huge local now = GetTime() if now - start > 50 then self.defaultText = "^7Sorting... ("..m_floor(itemIndex/#list*100).."%)" From 9100030e1316fe053f541892d5b9d40c06cac1ac Mon Sep 17 00:00:00 2001 From: LocalIdentity Date: Fri, 22 May 2026 20:54:08 +1000 Subject: [PATCH 3/3] Line ending --- src/Classes/ItemDBControl.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Classes/ItemDBControl.lua b/src/Classes/ItemDBControl.lua index 3e48f00ed1..cbe015240f 100644 --- a/src/Classes/ItemDBControl.lua +++ b/src/Classes/ItemDBControl.lua @@ -376,4 +376,4 @@ function ItemDBClass:OnHoverKeyUp(key) itemLib.wiki.openItem(item) end end -end +end \ No newline at end of file