From 1c01d8f59f380ebe69090dc9a41cbb3b82b85cfa Mon Sep 17 00:00:00 2001 From: Archi Date: Sun, 17 Mar 2024 22:06:30 +0100 Subject: [PATCH] Fix tradableOnly/marketableOnly not working properly --- ArchiSteamFarm/Steam/Integration/ArchiHandler.cs | 16 +++++++++++++++- .../Steam/Integration/ArchiWebHandler.cs | 11 ++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs b/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs index a7f97dca1..863b1eb25 100644 --- a/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs +++ b/ArchiSteamFarm/Steam/Integration/ArchiHandler.cs @@ -231,7 +231,21 @@ public sealed class ArchiHandler : ClientMsgHandler { } foreach (CEcon_Asset? asset in response.assets) { - if (!descriptions.TryGetValue((asset.classid, asset.instanceid), out InventoryDescription? description) || !assetIDs.Add(asset.assetid)) { + if (!assetIDs.Add(asset.assetid)) { + continue; + } + + (ulong ClassID, ulong InstanceID) key = (asset.classid, asset.instanceid); + + if (!descriptions.TryGetValue(key, out InventoryDescription? description)) { + // Best effort only + description = new InventoryDescription(appID, asset.classid, asset.instanceid); + + descriptions.Add(key, description); + } + + // Extra bulletproofing against Steam showing us middle finger + if ((tradableOnly && !description.Tradable) || (marketableOnly && !description.Marketable)) { continue; } diff --git a/ArchiSteamFarm/Steam/Integration/ArchiWebHandler.cs b/ArchiSteamFarm/Steam/Integration/ArchiWebHandler.cs index 6e91ebd13..0ebe0f04b 100644 --- a/ArchiSteamFarm/Steam/Integration/ArchiWebHandler.cs +++ b/ArchiSteamFarm/Steam/Integration/ArchiWebHandler.cs @@ -363,10 +363,19 @@ public sealed class ArchiWebHandler : IDisposable { } foreach (Asset asset in response.Content.Assets) { - if (!descriptions.TryGetValue((asset.ClassID, asset.InstanceID), out InventoryDescription? description) || !assetIDs.Add(asset.AssetID)) { + if (!assetIDs.Add(asset.AssetID)) { continue; } + (ulong ClassID, ulong InstanceID) key = (asset.ClassID, asset.InstanceID); + + if (!descriptions.TryGetValue(key, out InventoryDescription? description)) { + // Best effort only + description = new InventoryDescription(appID, asset.ClassID, asset.InstanceID); + + descriptions.Add(key, description); + } + asset.Description = description; yield return asset;