diff --git a/ArchiSteamFarm/ArchiWebHandler.cs b/ArchiSteamFarm/ArchiWebHandler.cs index 35247a49e..d63948a38 100644 --- a/ArchiSteamFarm/ArchiWebHandler.cs +++ b/ArchiSteamFarm/ArchiWebHandler.cs @@ -230,7 +230,10 @@ namespace ArchiSteamFarm { asset.RealAppID = description.RealAppID; asset.Type = description.Type; asset.Rarity = description.Rarity; - asset.AdditionalProperties = description.AdditionalProperties; + + if (description.AdditionalProperties != null) { + asset.AdditionalProperties = description.AdditionalProperties.ToImmutableDictionary(); + } assetIDs.Add(asset.AssetID); diff --git a/ArchiSteamFarm/BotConfig.cs b/ArchiSteamFarm/BotConfig.cs index d9473727a..e353d27bc 100644 --- a/ArchiSteamFarm/BotConfig.cs +++ b/ArchiSteamFarm/BotConfig.cs @@ -151,7 +151,12 @@ namespace ArchiSteamFarm { public ulong SteamMasterClanID { get; private set; } = DefaultSteamMasterClanID; [JsonExtensionData] - internal Dictionary AdditionalProperties { get; set; } + internal Dictionary AdditionalProperties { + get; + + [UsedImplicitly] + set; + } internal string DecryptedSteamPassword { get { diff --git a/ArchiSteamFarm/GlobalConfig.cs b/ArchiSteamFarm/GlobalConfig.cs index e1e7214c8..73f4e28ac 100644 --- a/ArchiSteamFarm/GlobalConfig.cs +++ b/ArchiSteamFarm/GlobalConfig.cs @@ -197,7 +197,12 @@ namespace ArchiSteamFarm { public ProtocolTypes SteamProtocols { get; private set; } = DefaultSteamProtocols; [JsonExtensionData] - internal Dictionary AdditionalProperties { get; set; } + internal Dictionary AdditionalProperties { + get; + + [UsedImplicitly] + set; + } internal bool IsWebProxyPasswordSet { get; private set; } internal bool ShouldSerializeEverything { private get; set; } = true; diff --git a/ArchiSteamFarm/Json/Steam.cs b/ArchiSteamFarm/Json/Steam.cs index 680113852..a6b686120 100644 --- a/ArchiSteamFarm/Json/Steam.cs +++ b/ArchiSteamFarm/Json/Steam.cs @@ -72,7 +72,7 @@ namespace ArchiSteamFarm.Json { public uint RealAppID { get; internal set; } [PublicAPI] - public ImmutableHashSet Tags { get; internal set; } = ImmutableHashSet.Empty; + public ImmutableHashSet Tags { get; internal set; } [PublicAPI] public bool Tradable { get; internal set; } @@ -511,13 +511,20 @@ namespace ArchiSteamFarm.Json { private InventoryResponse() { } internal sealed class Description { -#pragma warning disable 649 [JsonExtensionData] - internal readonly ImmutableDictionary AdditionalProperties; -#pragma warning restore 649 + internal Dictionary AdditionalProperties { + get; + + [UsedImplicitly] + set; + } internal Asset.ERarity Rarity { get { + if (Tags == null) { + return Asset.ERarity.Unknown; + } + foreach (Asset.Tag tag in Tags) { switch (tag.Identifier) { case "droprate": @@ -544,6 +551,10 @@ namespace ArchiSteamFarm.Json { internal uint RealAppID { get { + if (Tags == null) { + return 0; + } + foreach (Asset.Tag tag in Tags) { switch (tag.Identifier) { case "Game": @@ -571,6 +582,10 @@ namespace ArchiSteamFarm.Json { internal Asset.EType Type { get { + if (Tags == null) { + return Asset.EType.Unknown; + } + Asset.EType type = Asset.EType.Unknown; foreach (Asset.Tag tag in Tags) { @@ -584,10 +599,8 @@ namespace ArchiSteamFarm.Json { default: ASF.ArchiLogger.LogGenericError(string.Format(Strings.WarningUnknownValuePleaseReport, nameof(tag.Value), tag.Value)); - break; + return Asset.EType.Unknown; } - - break; case "item_class": switch (tag.Value) { case "item_class_2": @@ -596,7 +609,7 @@ namespace ArchiSteamFarm.Json { type = Asset.EType.TradingCard; } - break; + continue; case "item_class_3": return Asset.EType.ProfileBackground; case "item_class_4": @@ -620,10 +633,8 @@ namespace ArchiSteamFarm.Json { default: ASF.ArchiLogger.LogGenericError(string.Format(Strings.WarningUnknownValuePleaseReport, nameof(tag.Value), tag.Value)); - break; + return Asset.EType.Unknown; } - - break; } } @@ -639,7 +650,7 @@ namespace ArchiSteamFarm.Json { internal bool Marketable { get; set; } [JsonProperty(PropertyName = "tags", Required = Required.DisallowNull)] - internal ImmutableHashSet Tags { get; set; } = ImmutableHashSet.Empty; + internal ImmutableHashSet Tags { get; set; } internal bool Tradable { get; set; }