From 9473da468008345f6f79d8af599e4dadd7fa7293 Mon Sep 17 00:00:00 2001 From: Mickael Cagnion Date: Sun, 9 Aug 2026 13:18:35 +0200 Subject: [PATCH] Preserve influences on fetched trade items Trader reconstructs fetched item text instead of decoding the supplied raw string. Restore historical and eldritch influence markers during that reconstruction so imported search results retain their influence. Addresses the regression introduced by PR 10073. --- spec/System/TestTradeQueryRequests_spec.lua | 43 +++++++++++++++++++++ src/Classes/TradeQueryRequests.lua | 17 ++++++++ 2 files changed, 60 insertions(+) diff --git a/spec/System/TestTradeQueryRequests_spec.lua b/spec/System/TestTradeQueryRequests_spec.lua index a872f1ecf9..f05068d8fa 100644 --- a/spec/System/TestTradeQueryRequests_spec.lua +++ b/spec/System/TestTradeQueryRequests_spec.lua @@ -194,6 +194,49 @@ Strict-Transport-Security: max-age=63115200; includeSubDomains; preload]] end) describe("FetchResultBlock", function() + it("preserves item influences in reconstructed item strings", function() + local response = dkjson.encode({ + result = { + { + id = "influenced", + listing = { + price = { amount = 1, currency = "chaos", type = "~price" }, + whisper = "hi", + account = { name = "seller" }, + }, + item = { + rarity = "Rare", + name = "Test Subject", + typeLine = "Astral Plate", + influences = { + shaper = true, + elder = true, + warlord = true, + hunter = true, + crusader = true, + redeemer = true, + }, + searing = true, + tangled = true, + }, + }, + }, + }) + local fetchedItems + requests.requestQueue.fetch = { } + requests:FetchResultBlock("test", function(items) + fetchedItems = items + end) + + local request = table.remove(requests.requestQueue.fetch, 1) + request.callback(response) + + local item = new("Item"):Item(fetchedItems[1].item_string) + for _, influenceInfo in ipairs(itemLib.influenceInfo.all) do + assert.is_true(item[influenceInfo.key], influenceInfo.display) + end + end) + it("reads weighted sums from current and legacy pseudo mods", function() local function makeTradeEntry(id, pseudoMods) return { diff --git a/src/Classes/TradeQueryRequests.lua b/src/Classes/TradeQueryRequests.lua index b006712380..01e2f3666e 100644 --- a/src/Classes/TradeQueryRequests.lua +++ b/src/Classes/TradeQueryRequests.lua @@ -7,6 +7,17 @@ local dkjson = require "dkjson" local utils = LoadModule("Modules/Utils") +local tradeInfluenceApiKeys = { + shaper = "shaper", + elder = "elder", + adjudicator = "warlord", + basilisk = "hunter", + crusader = "crusader", + eyrie = "redeemer", + cleansing = "searing", + tangle = "tangled", +} + ---@class TradeQueryRequests local TradeQueryRequestsClass = newClass("TradeQueryRequests") @@ -359,6 +370,12 @@ function TradeQueryRequestsClass:FetchResultBlock(url, callback) for _, modLine in ipairs(item.explicitMods) do t_insert(rawLines, processLine(modLine)) end + for _, influenceInfo in ipairs(itemLib.influenceInfo.all) do + local apiKey = tradeInfluenceApiKeys[influenceInfo.key] + if apiKey and ((item.influences and item.influences[apiKey]) or item[apiKey]) then + t_insert(rawLines, influenceInfo.display .. " Item") + end + end if item.duplicated then t_insert(rawLines, "Mirrored") end