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;