From d5802eeefeda982a10ac73436a464e374f513973 Mon Sep 17 00:00:00 2001 From: vaisest <4550061+vaisest@users.noreply.github.com> Date: Fri, 14 Aug 2026 20:51:46 +0300 Subject: [PATCH] Fix options being combined in buy similar --- spec/System/TestCompareBuySimilar_spec.lua | 16 ++++++++++++++++ src/Classes/CompareBuySimilar.lua | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/spec/System/TestCompareBuySimilar_spec.lua b/spec/System/TestCompareBuySimilar_spec.lua index 0145120a05..fc38217f6e 100644 --- a/spec/System/TestCompareBuySimilar_spec.lua +++ b/spec/System/TestCompareBuySimilar_spec.lua @@ -105,6 +105,22 @@ Implicits: 1 assert.equal(-100, entries[1].value) assert.equal(50, entries[2].value) end) + it("does not combine options", function() + local lifelessDiamond = new("Item"):Item([[ +Test Subject +Onyx Amulet +Implicits: 2 +Allocates Adamant (enchant) +Allocates Admonisher (enchant) +Can have 3 additional Enchantment Modifiers]]) + local entries = bs.addModEntries(lifelessDiamond, + { { list = lifelessDiamond.enchantModLines, type = "enchant" }, { list = lifelessDiamond.explicitModLines, type = "explicit" } }) + assert.equal(3, #entries) + assert.equal("enchant.stat_2954116742", entries[1].tradeIds[1]) + assert.equal(49416, entries[1].value) + assert.equal("enchant.stat_2954116742", entries[2].tradeIds[1]) + assert.equal(50858, entries[2].value) + end) end) describe("popup URL controls", function() local originalCopy diff --git a/src/Classes/CompareBuySimilar.lua b/src/Classes/CompareBuySimilar.lua index 6b0424d8ac..5454d52b14 100644 --- a/src/Classes/CompareBuySimilar.lua +++ b/src/Classes/CompareBuySimilar.lua @@ -214,7 +214,7 @@ function M.addModEntries(item, modTypeSources) for _, existingFilter in ipairs(modEntries) do -- check if all result trade ids are equal local sameHashes = #entry.tradeIds > 0 and tableDeepEquals(entry.tradeIds, existingFilter.tradeIds) - if sameHashes and existingFilter.type == entry.type then + if sameHashes and existingFilter.type == entry.type and not entry.isOption then if entry.value then local value = (entry.invert ~= existingFilter.invert) and -entry.value or entry.value or 0 existingFilter.value = (existingFilter.value or 0) + value