diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/PmcData.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/PmcData.cs index ee22fd8e..282b8f3b 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/PmcData.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/PmcData.cs @@ -1,4 +1,5 @@ -using System.Text.Json.Serialization; +using System.ComponentModel; +using System.Text.Json.Serialization; using SPTarkov.Server.Core.Models.Eft.Common.Tables; using SPTarkov.Server.Core.Utils.Json.Converters; @@ -20,7 +21,10 @@ public record PmcData : BotBase set; } - public object CheckedChambers + /// + /// Returns the list of IDs of the weapons, which the player has checked the chamber of in the last raid. + /// + public List CheckedChambers { get; set; diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Item.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Item.cs index 19a04dce..438b70c8 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Item.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Item.cs @@ -169,11 +169,11 @@ public record ItemLocation } [JsonPropertyName("r")] - public object? R + public int R { get; set; - } // TODO: Can be string or number + } [JsonPropertyName("isSearched")] public bool? IsSearched @@ -186,11 +186,11 @@ public record ItemLocation /// SPT property? /// [JsonPropertyName("rotation")] - public object? Rotation + public bool? Rotation { get; set; - } // TODO: Can be string or boolean + } } public record Upd @@ -668,7 +668,8 @@ public record UpdDogtag } [JsonPropertyName("Side")] - public object? Side + [JsonConverter(typeof(DogtagSideConverter))] + public DogtagSide? Side { get; set; diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Quest.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Quest.cs index 6ccbbc4e..6244b47b 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Quest.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Common/Tables/Quest.cs @@ -179,11 +179,11 @@ public record Quest /// Becomes 'AppearStatus' inside client /// [JsonPropertyName("status")] - public object? Status + public int? Status { get; set; - } // TODO: string | number + } [JsonPropertyName("KeyQuest")] public bool? KeyQuest @@ -447,11 +447,11 @@ public record QuestCondition } [JsonPropertyName("type")] - public object? Type + public string? Type { get; set; - } // TODO: boolean | string + } [JsonPropertyName("status")] public List? Status diff --git a/Libraries/SPTarkov.Server.Core/Models/Enums/DogtagSide.cs b/Libraries/SPTarkov.Server.Core/Models/Enums/DogtagSide.cs new file mode 100644 index 00000000..d94e0717 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Enums/DogtagSide.cs @@ -0,0 +1,12 @@ +namespace SPTarkov.Server.Core.Models.Enums; + +public enum DogtagSide +{ + /// + /// This is for the dogtag equipped by the player, which shows up as 0 (integer) on the profile json. + /// + NotApplicable, + + Usec, + Bear +} diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DogtagSideConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DogtagSideConverter.cs new file mode 100644 index 00000000..b7b2b4ae --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/DogtagSideConverter.cs @@ -0,0 +1,33 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using SPTarkov.Server.Core.Models.Enums; + +namespace SPTarkov.Server.Core.Utils.Json.Converters; + +public class DogtagSideConverter : JsonConverter +{ + public override DogtagSide Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) + { + if (reader.TokenType == JsonTokenType.Number) + { + return DogtagSide.NotApplicable; + } + + var value = reader.GetString(); + return value != null ? Enum.Parse(value) : DogtagSide.NotApplicable; + } + + public override void Write(Utf8JsonWriter writer, DogtagSide value, JsonSerializerOptions options) + { + switch (value) + { + case DogtagSide.NotApplicable: + writer.WriteNumberValue(0); + break; + case DogtagSide.Usec: + case DogtagSide.Bear: + writer.WriteStringValue(value.ToString()); + break; + } + } +}