From e480aca8b2353644f7de30cb8ae5fd0b6903634b Mon Sep 17 00:00:00 2001 From: Archi Date: Fri, 22 Dec 2023 00:18:52 +0100 Subject: [PATCH] Use inventories items deduplication logic aligned with ASFB --- .../RemoteCommunication.cs | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/ArchiSteamFarm.OfficialPlugins.ItemsMatcher/RemoteCommunication.cs b/ArchiSteamFarm.OfficialPlugins.ItemsMatcher/RemoteCommunication.cs index d0c6d7a97..859953bcd 100644 --- a/ArchiSteamFarm.OfficialPlugins.ItemsMatcher/RemoteCommunication.cs +++ b/ArchiSteamFarm.OfficialPlugins.ItemsMatcher/RemoteCommunication.cs @@ -1016,6 +1016,26 @@ internal sealed class RemoteCommunication : IAsyncDisposable, IDisposable { HashSet<(ulong ClassID, uint Amount)> setCopy = []; foreach (((uint RealAppID, Asset.EType Type, Asset.ERarity Rarity) key, Dictionary set) in setsState) { + uint minimumAmount = uint.MaxValue; + uint maximumAmount = uint.MinValue; + + foreach (uint amount in set.Values) { + if (amount < minimumAmount) { + minimumAmount = amount; + } + + if (amount > maximumAmount) { + maximumAmount = amount; + } + } + + if (maximumAmount < 2) { + // We don't have anything to swap with, remove all entries from this set + set.Clear(); + + continue; + } + if (!databaseSets.TryGetValue(key, out HashSet? databaseSet)) { // We have no clue about this set, we can't do any optimization continue; @@ -1026,16 +1046,17 @@ internal sealed class RemoteCommunication : IAsyncDisposable, IDisposable { continue; } + if (maximumAmount - minimumAmount < 2) { + // We don't have anything to swap with, remove all entries from this set + set.Clear(); + + continue; + } + // User has all classIDs we know about, we can deduplicate his items based on lowest count setCopy.Clear(); - uint minimumAmount = uint.MaxValue; - foreach ((ulong classID, uint amount) in set) { - if (amount < minimumAmount) { - minimumAmount = amount; - } - setCopy.Add((classID, amount)); }