From 4f49d56345e6367eeccecabc23c640fd95432313 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 f8e53ea5e7b..6f936602363 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", 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 3bda7452a4a..f0b875e6997 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", function(self, rateLimiter) self.maxFetchPerSearch = 10 @@ -357,6 +368,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