diff --git a/.gitignore b/.gitignore index 2b6a4af..ef9d882 100644 --- a/.gitignore +++ b/.gitignore @@ -397,4 +397,7 @@ FodyWeavers.xsd *.msp # JetBrains Rider -*.sln.iml \ No newline at end of file +*.sln.iml + +# Qodo +.qodo \ No newline at end of file diff --git a/Config/forced_loose.yaml b/Config/forced_loose.yaml deleted file mode 100644 index 5f89a33..0000000 --- a/Config/forced_loose.yaml +++ /dev/null @@ -1,171 +0,0 @@ ---- -bigmap: -- 5938188786f77474f723e87f # Case 0031 -- 5c12301c86f77419522ba7e4 # Flash drive with fake info -- 593965cf86f774087a77e1b6 # Case 0048 -- 591092ef86f7747bb8703422 # Secure folder 0022 in big red offices -- 590c62a386f77412b0130255 # Sliderkey Secure Flash drive in Dorms 2-way room 220 -- 5939e9b286f77462a709572c # Sealed letter (Terragroup) -- 5ac620eb86f7743a8e6e0da0 # Package of graphics cards in big red offices -- 590dde5786f77405e71908b2 # Bank case -- 5910922b86f7747d96753483 # Carbon case -- 5937fd0086f7742bf33fc198 # Bronze pocket watch on a chain -- 5939a00786f7742fe8132936 # Golden Zibbo lighter -- 5939e5a786f77461f11c0098 # Secure Folder 0013 -- 64e74a3d4d49d23b2c39d319 # item_quest_clock_07 (Out of Time) -- 6614230055afee107f05e998 # The Unheard's phone -- 664fce7a90294949fe2d81cb # Item_barter_info_host_quest -- 66b22630a6b4e5ec7c02cdb7 # item_quest_instruments -#- 64bd1abff3a668f08805ce4f # Secure Flash drive V4 REMOVED BY BSG -- 675f7acc4076a741a3061566 # TerraGroup shipment report -- 675f80d4fe1b59cf490d3527 # Box with upgraded tools -- 675f7f224076a741a3061568 # Skier's wallet -- 675f7b168d28a25ec7007dbb # Delivery crew report -- 67499d0eeca8acb2d2061639 # Incriminating letter - -woods: -- 5938878586f7741b797c562f # Case 0052 -- 5d3ec50586f774183a607442 # Jaeger's message Underneath the wooden lookout post. -- 5af04e0a86f7743a532b79e2 # Single-axis Fiber Optic Gyroscope: item_barter_electr_gyroscope -- 5a687e7886f7740c4a5133fb # Blood sample -- 5af04c0b86f774138708f78e # Motor Controller: item_barter_electr_controller -- 664a5775f3d3570fba06be64 # quest_flyers -- 664b69c5a082271bc46c4e11 # quest_flyers2 -- 664b69e8e1238e506d3630af # quest_flyers3 -#- 64bde2248f3a947a990aa4a5 # Sliderkey Secure Flash drive #1 REMOVED BY BSG -#- 64bde265807321a9b905f076 # Sliderkey Secure Flash drive #2 REMOVED BY BSG - -shoreline: -- 5a294d7c86f7740651337cf9 # Drone 1 SAS disk -- 5a294d8486f774068638cd93 # Drone 2 SAS disk: ambiguous with itemTpl 5a294f1686f774340c7b7e4a -- 5efdafc1e70b5e33f86de058 # Sanitar's Surgery kit marked with a blue symbol -- 5939e5a786f77461f11c0098 # Secure folder 0013 -- 5a6860d886f77411cd3a9e47 # Secure folder 0060 -- 5a29357286f77409c705e025 # Sliderkey Flash drive -- 5efdaf6de6a30218ed211a48 # Sanitar's Ophthalmoscope In potted plant on dining room table. -- 5d357d6b86f7745b606e3508 # Photo album in west wing room 303 -- 5b4c72b386f7745b453af9c0 # Motor Controller: item_barter_electr_controller2 -- 5a0448bc86f774736f14efa8 # Key to the closed premises of the Health Resort -- 5a29276886f77435ed1b117c # Working hard drive -- 5b4c72fb86f7745cef1cffc5 # Single-axis Fiber Optic Gyroscope: item_barter_electr_gyroscope2 -- 5b4c72c686f77462ac37e907 # Motor Controller: item_barter_electr_controller3 -- 5b43237186f7742f3a4ab252 # Chemical container: item_quest_chem_container -- 5a29284f86f77463ef3db363 # Toughbook reinforced laptop -- 64e74a534d49d23b2c39d31b # item_quest_clock_10 (Out of Time) -- 6614238e0d240a5f5d0f679d # Skier and Peacekeeper correspondence -- 661421c7c1f2f548c50ee649 # The Unheard's laptop -- 6614217b6d9d5abcad0ff098 # The Unheard's phone -- 661423200d240a5f5d0f679b # The Unheard's laptop -- 666073159916667083033cb9 # Item_quest_tattered_diary -- 66760b3deb51b08bd40c2b08 # item_barter_electr_hdd_NosQuests_quest -- 6707d1f9571b50abc703b651 # True vaccine recipe (Halloween 2024) -- 67499adbeca8acb2d2061634 # Cargo for Prapor -- 67586bee39b1b82b0d0f9d06 # Special 40-degree fuel - -interchange: -- 5ae9a18586f7746e381e16a3 # OLI cargo manifests -- 5ae9a0dd86f7742e5f454a05 # Goshan cargo manifests -- 5ae9a1b886f77404c8537c62 # Idea cargo manifests -- 5ae9a25386f7746dd946e6d9 # OLI cargo route documents (locked) -- 5ae9a3f586f7740aab00e4e6 # Clothes design handbook - Part 1 -- 5ae9a4fc86f7746e381e1753 # Clothes design handbook - Part 2 -- 5b4c81a086f77417d26be63f # Chemical container item_quest_chem_container2 -- 5b4c81bd86f77418a75ae159 # Chemical container item_quest_chem_container3 -- 64e74a5ac2b4f829615ec336 # item_quest_clock_11 (Out of Time) -- 667a8ef464eea5fdef0db135 # item_quest_gamemagazine -- 671a406a6d315b526708f103 # Stolen weapon case -- 67586bee39b1b82b0d0f9d06 # Special 40-degree fuel - -factory4_day: -- 591093bb86f7747caa7bb2ee # On the neck of the dead scav in the bunker (Postman Pat Part 2) -- 593a87af86f774122f54a951 # Syringe with a chemical -- 66a0e523e749756c920d02d0 # item_quest_chem_container_nf2024 -- 669fac549b0ce3feae01a137 # item_quest_chimicalsample -- 66c0b90c8398582e4b0c2e27 # item_quest_factoryflight_journal -- 66c0b39ca1f68fcc1d0c0cc3 # item_quest_factorylab_journal -- 66a0f0926fee20fa70036da6 # Blood sample (Halloween2024) - -factory4_night: -- 591093bb86f7747caa7bb2ee # On the neck of the dead scav in the bunker (Postman Pat Part 2) -- 593a87af86f774122f54a951 # Syringe with a chemical -- 66a0f0926fee20fa70036da6 # Blood sample (Halloween2024) -- 66a0e523e749756c920d02d0 # item_quest_chem_container_nf2024 -- 669fac549b0ce3feae01a137 # item_quest_chimicalsample -- 66c0b90c8398582e4b0c2e27 # item_quest_factoryflight_journal -- 66c0b39ca1f68fcc1d0c0cc3 # item_quest_factorylab_journal - -lighthouse: -- 61904c9df62c89219a56e034 # The message is tucked under the bottom of the door to the cabin. -- 619268ad78f4fa33f173dbe5 # Water pump operation data On the desk between other documents in the upper office. -- 619268de2be33f2604340159 # Pumping Station Operation Data In the upper floor office on the shelf. -- 61a00bcb177fb945751bbe6a # Stolen military documents On the back corner of the dining room table on the third floor at Chalet. -- 619252352be33f26043400a7 # Laptop with information -- 628393620d8524273e7eb028 # Working hard drive -- 6331bb0d1aa9f42b804997a6 # V3 Flash Drive -- 6398a0861c712b1e1d4dadf1 # Forged Lightkeeper intelligence (Snatch) -- 6399f54b0a36db13c823ad21 # Radio transmitter body (Key to the Tower) -- 64e74a64aac4cd0a7264ecdf # item_quest_clock_12 (Out of Time) -- 661666458c2aa9cb1602503b # Hard drive -# - 64b91627dd13d43b9d01d6d1 # Toughbook reinforced laptop (Event quest) REMOVED BY BSG -- 67586bee39b1b82b0d0f9d06 # Special 40-degree fuel - -rezervbase: -- 60915994c49cf53e4772cc38 # Military documents 1 on the table inside bunker control room (Documents) -- 60a3b6359c427533db36cf84 # Military documents 2 On the bottom shelf of the cupboard near the corner. -- 60a3b65c27adf161da7b6e14 # Military documents 3 Inside the cupboard next to the 4x4 Weapon Box. -- 608c22a003292f4ba43f8a1a # Medical record 1 (locked by RB-KSM key) (Disease history) -- 60a3b5b05f84d429b732e934 # Medical record 2 (locked by RB-SMP key) Disease history) -- 609267a2bb3f46069c3e6c7d # T-90M Commander Control Panel -- 60c080eb991ac167ad1c3ad4 # MBT Integrated Navigation System -- 6398a072e301557ae24cec92 # Original Lightkeeper Intelligence (Snatch) -- 64e74a4baac4cd0a7264ecdd # item_quest_clock_09 (Out of Time) -- 67499b3eeca8acb2d2061636 # Lightkeeper's case -- 67586bee39b1b82b0d0f9d06 # Special 40-degree fuel -- 67499b9b909d2013670a5029 # KOSA UAV electronic jamming device - -laboratory: -- 5eff135be0d3331e9d282b7b # Flash drive marked with blue tape (TerraGroup employee) -- 6398a4cfb5992f573c6562b3 # Secured tape -- 64e74a44c2b4f829615ec334 # Picture 8 -- 666879d498b97e3a8f09f1ae # Item_barter_medical_transilluminator_quest -- 6707cef3571b50abc703b64f # Infected blood sample (Halloween 2024) -- 6707cf827d279daad80fa95f # Vaccine sample IV (Halloween 2024) -- 6707cd70aab679420007e018 # TG-Vi-24 sample (Halloween 2024) -- 6707cc67cc1667e49e0f7232 # Infected blood sample (Halloween 2024) -#- 64e74a44c2b4f829615ec334 # item_quest_clock_08 (Out of Time) #1 REMOVED BY BSG -#- 64bdcfed8f3a947a990aa49a # Hermetic container for storing various chemicals #1 REMOVED BY BSG -#- 64bdd008b0bf3baa6702f35f # Hermetic container for storing various chemicals #2 REMOVED BY BSG -#- 64bdd014f3a668f08805ce64 # Hermetic container for storing various chemicals #3 REMOVED BY BSG - -tarkovstreets: -- 63a943cead5cc12f22161ff7 # Accountant's notes (Audit) -- 638cbc68a63f1b49be6a3010 # Registered letter (Youve Got Mail) -- 638df4cc7b560b03794a18d2 # AG guitar pick (Audiophile) -- 638e0057ab150a5f56238960 # Housing office journal (Population Census) -- 63927b29c115f907b14700b9 # Chemical container with samples (Urban Medicine) -- 638dfc803083a019d447768e # Working hard drive (Surveillance) -- 638e9d5536b3b72c944e2fc7 # Flash drive with recordings (Watching You) -- 6393262086e646067c176aa2 # Medical observation record (?) -- 63989ced706b793c7d60cfef # Informant's journal (Missing Informant) -- 638cbb3ba63f1b49be6a300e # Secure Flash drive (Your Car Needs a Service) -- 63a39e1d234195315d4020bd # Primorsky 46-48 skybridge key -- 64e73909cd54ef0580746af3 # item_quest_clock_01 (Out of Time) -- 64e74a186393886f74114a96 # item_quest_clock_02 (Out of Time) -- 64e74a1faac4cd0a7264ecd9 # item_quest_clock_03 (Out of Time) -- 64e74a274d49d23b2c39d317 # item_quest_clock_04 (Out of Time) -- 64e74a2fc2b4f829615ec332 # item_quest_clock_05 (Out of Time) -- 64e74a35aac4cd0a7264ecdb # item_quest_clock_06 (Out of Time) -- 64f09c02b63b74469b6c149f # Paramedic's GPhone X (Ambulances Again) -- 64f07f7726cfa02c506f8ac0 # Journal item_quest_kpss2 (Glory To CPSU P2) -- 64f69b4267e11a7c6206e010 # Chef's diary (Beyond the Red Meat - Part 1) -- 64f5b4f71a5f313cb144c06c # Secret component (Beyond the Red Meat - Part 2) -- 657acb2ac900be5902191ac9 # Cadastral registry records -- 66687bc89111279d600b5062 # keyFromCity_quest - -sandbox: -- 6582bd252b50c61c565828e2 # Bottle of Le Jean wine -- 6575a6ca8778e96ded05a802 # TerraGroup scientist's hard drive - -sandbox_high: -- 6582bd252b50c61c565828e2 # Bottle of Le Jean wine -- 6575a6ca8778e96ded05a802 # TerraGroup scientist's hard drive \ No newline at end of file diff --git a/Config/forced_static.yaml b/Config/forced_static.yaml deleted file mode 100644 index 884ed10..0000000 --- a/Config/forced_static.yaml +++ /dev/null @@ -1,26 +0,0 @@ ---- -static_weapon_ids: - # ids for static weapons - - 5d52cc5ba4b9367408500062 - - 5cdeb229d7f00c000e7ce174 - -forced_items: - bigmap: - - containerId: container_custom_DesignStuff_00060 # unknown key - itemTpl: 593962ca86f774068014d9af - - tarkovstreets: - - containerId: container_City_SE_02_DesignStuff_00091 # Backup hideout key - itemTpl: 6398fd8ad3de3849057f5128 - - sandbox: - - containerId: container_Test_for_export_00002 # Lab technician body - itemTpl: 658199aa38c79576a2569e13 # TerraGroup science office key - - containerId: container_Sandbox_Design_Stuff_00008 # dead body of scav near exit - itemTpl: 6217726288ed9f0845317459 # RSP-30 reactive signal cartridge (Green) - - sandbox_high: - - containerId: container_Test_for_export_00002 # Lab technician body - itemTpl: 658199aa38c79576a2569e13 # TerraGroup science office key - - containerId: container_Sandbox_Design_Stuff_00008 # dead body of scav near exit - itemTpl: 6217726288ed9f0845317459 # RSP-30 reactive signal cartridge (Green) diff --git a/Logger/ILogger.cs b/Logger/ILogger.cs deleted file mode 100644 index e19a74b..0000000 --- a/Logger/ILogger.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace LootDumpProcessor.Logger; - -public interface ILogger -{ - void Setup(); - void Log(string message, LogLevel level); - bool CanBeLogged(LogLevel level); - void Stop(); -} \ No newline at end of file diff --git a/Logger/LogLevel.cs b/Logger/LogLevel.cs deleted file mode 100644 index cb28877..0000000 --- a/Logger/LogLevel.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace LootDumpProcessor.Logger; - -public enum LogLevel -{ - Error, - Warning, - Info, - Debug -} \ No newline at end of file diff --git a/Logger/LoggerFactory.cs b/Logger/LoggerFactory.cs deleted file mode 100644 index 71b9650..0000000 --- a/Logger/LoggerFactory.cs +++ /dev/null @@ -1,14 +0,0 @@ -namespace LootDumpProcessor.Logger; - -public static class LoggerFactory -{ - private static ILogger? _logger; - - public static ILogger GetInstance() - { - if (_logger == null) - _logger = new QueueLogger(); - // TODO: implement factory - return _logger; - } -} \ No newline at end of file diff --git a/Logger/QueueLogger.cs b/Logger/QueueLogger.cs deleted file mode 100644 index 62fad18..0000000 --- a/Logger/QueueLogger.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System.Collections.Concurrent; - -namespace LootDumpProcessor.Logger; - -public class QueueLogger : ILogger -{ - private readonly BlockingCollection queuedMessages = new(); - private Task? loggerThread; - private bool isRunning; - private int logLevel; - private const int LogTerminationTimeoutMs = 1000; - private const int LogTerminationRetryCount = 3; - - public void Setup() - { - SetLogLevel(); - isRunning = true; - loggerThread = Task.Factory.StartNew(() => - { - while (isRunning) - { - while (queuedMessages.TryTake(out var value)) - { - Console.ResetColor(); - switch (value.LogLevel) - { - case LogLevel.Error: - Console.BackgroundColor = ConsoleColor.Red; - Console.ForegroundColor = ConsoleColor.Black; - break; - case LogLevel.Warning: - Console.BackgroundColor = ConsoleColor.Yellow; - Console.ForegroundColor = ConsoleColor.Black; - break; - case LogLevel.Debug: - Console.ForegroundColor = ConsoleColor.DarkCyan; - break; - case LogLevel.Info: - default: - break; - } - - Console.WriteLine(value.Message); - } - - Thread.Sleep( - TimeSpan.FromMilliseconds(LootDumpProcessorContext.GetConfig().LoggerConfig.QueueLoggerPoolingTimeoutMs)); - } - }, TaskCreationOptions.LongRunning); - } - - private void SetLogLevel() - { - logLevel = GetLogLevel(LootDumpProcessorContext.GetConfig().LoggerConfig.LogLevel); - } - - private int GetLogLevel(LogLevel level) - { - return level switch - { - LogLevel.Error => 1, - LogLevel.Warning => 2, - LogLevel.Info => 3, - LogLevel.Debug => 4, - _ => throw new ArgumentOutOfRangeException() - }; - } - - public void Log(string message, LogLevel level) - { - if (GetLogLevel(level) <= logLevel) - queuedMessages.Add(new LoggedMessage { Message = message, LogLevel = level }); - } - - public bool CanBeLogged(LogLevel level) - { - return GetLogLevel(level) <= logLevel; - } - - // Wait for graceful termination of the logging thread - public void Stop() - { - isRunning = false; - if (loggerThread != null) - { - Console.ResetColor(); - var retryCount = 0; - while (!loggerThread.IsCompleted) - { - if (retryCount == LogTerminationRetryCount) - { - Console.WriteLine( - $"Logger thread did not terminate by itself after {retryCount} retries. Some log messages may be lost."); - break; - } - - Console.WriteLine($"Waiting {LogTerminationTimeoutMs}ms for logger termination"); - Thread.Sleep(LogTerminationTimeoutMs); - retryCount++; - } - } - } - - private class LoggedMessage - { - public string Message { get; init; } - public LogLevel LogLevel { get; init; } - } -} \ No newline at end of file diff --git a/LootDumpProcessor.csproj b/LootDumpProcessor.csproj deleted file mode 100644 index 13a5a2c..0000000 --- a/LootDumpProcessor.csproj +++ /dev/null @@ -1,34 +0,0 @@ - - - - Exe - net8.0 - enable - enable - true - 1 - true - - - - - - - - - - - - - - Always - - - Always - - - Always - - - - diff --git a/LootDumpProcessor.sln b/LootDumpProcessor.sln index 0b2eb53..d698b12 100644 --- a/LootDumpProcessor.sln +++ b/LootDumpProcessor.sln @@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.4.33213.308 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LootDumpProcessor", "LootDumpProcessor.csproj", "{887819E1-72BF-4F10-9246-77D8088AC7D2}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LootDumpProcessor", "source/LootDumpProcessor/LootDumpProcessor.csproj", "{887819E1-72BF-4F10-9246-77D8088AC7D2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "source", "source", "{2B18E894-D839-4002-8B9A-6CF8A331596F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -22,4 +24,7 @@ Global GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {39C0A9FF-B0F5-4C3F-AAA7-F9E9225AE70F} EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {887819E1-72BF-4F10-9246-77D8088AC7D2} = {2B18E894-D839-4002-8B9A-6CF8A331596F} + EndGlobalSection EndGlobal diff --git a/Model/ComposedKey.cs b/Model/ComposedKey.cs deleted file mode 100644 index cbe1d5b..0000000 --- a/Model/ComposedKey.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Text.Json.Serialization; -using LootDumpProcessor.Model.Processing; -using LootDumpProcessor.Utils; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model; - -public class ComposedKey -{ - [JsonProperty("key")] - [JsonPropertyName("key")] - public string Key { get; init; } - - [Newtonsoft.Json.JsonIgnore] - [System.Text.Json.Serialization.JsonIgnore] - public Item? FirstItem { get; } - - public ComposedKey(Template template) : this(template.Items) - { - } - - public ComposedKey(List? items) - { - Key = items?.Select(i => i.Tpl) - .Where(i => !string.IsNullOrEmpty(i) && - !LootDumpProcessorContext.GetTarkovItems().IsBaseClass(i, BaseClasses.Ammo)) - .Cast() - .Select(i => (double)i.GetHashCode()) - .Sum() - .ToString() ?? KeyGenerator.GetNextKey(); - FirstItem = items?[0]; - } - - public override bool Equals(object? obj) - { - if (obj is not ComposedKey key) - return false; - return Key == key.Key; - } - - public override int GetHashCode() => Key.GetHashCode(); -} \ No newline at end of file diff --git a/Model/Config/CollectorConfig.cs b/Model/Config/CollectorConfig.cs deleted file mode 100644 index 0e47aff..0000000 --- a/Model/Config/CollectorConfig.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Text.Json.Serialization; -using LootDumpProcessor.Process.Collector; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Config; - -public class CollectorConfig -{ - [JsonProperty("collectorType")] - [JsonPropertyName("collectorType")] - public CollectorType CollectorType { get; set; } - - [JsonProperty("maxEntitiesBeforeDumping")] - [JsonPropertyName("maxEntitiesBeforeDumping")] - public int MaxEntitiesBeforeDumping { get; set; } - - [JsonProperty("dumpLocation")] - [JsonPropertyName("dumpLocation")] - public string DumpLocation { get; set; } -} \ No newline at end of file diff --git a/Model/Config/Config.cs b/Model/Config/Config.cs deleted file mode 100644 index 1fb1345..0000000 --- a/Model/Config/Config.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System.Text.Json.Serialization; -using LootDumpProcessor.Serializers.Json; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Config; - -public class Config -{ - [JsonProperty("serverLocation")] - [JsonPropertyName("serverLocation")] - public string? ServerLocation { get; set; } - - [JsonProperty("threads")] - [JsonPropertyName("threads")] - public int Threads { get; set; } = 6; - - [JsonProperty("threadPoolingTimeoutMs")] - [JsonPropertyName("threadPoolingTimeoutMs")] - public int ThreadPoolingTimeoutMs { get; set; } = 1000; - - [JsonProperty("jsonSerializer")] - [JsonPropertyName("jsonSerializer")] - public JsonSerializerTypes JsonSerializer { get; set; } = JsonSerializerTypes.DotNet; - - [JsonProperty("manualGarbageCollectionCalls")] - [JsonPropertyName("manualGarbageCollectionCalls")] - public bool ManualGarbageCollectionCalls { get; set; } - - [JsonProperty("dataStorageConfig")] - [JsonPropertyName("dataStorageConfig")] - public DataStorageConfig DataStorageConfig { get; set; } - - [JsonProperty("loggerConfig")] - [JsonPropertyName("loggerConfig")] - public LoggerConfig LoggerConfig { get; set; } - - [JsonProperty("readerConfig")] - [JsonPropertyName("readerConfig")] - public ReaderConfig ReaderConfig { get; set; } - - [JsonProperty("processorConfig")] - [JsonPropertyName("processorConfig")] - public ProcessorConfig ProcessorConfig { get; set; } - - [JsonProperty("dumpProcessorConfig")] - [JsonPropertyName("dumpProcessorConfig")] - public DumpProcessorConfig DumpProcessorConfig { get; set; } - - [JsonProperty("writerConfig")] - [JsonPropertyName("writerConfig")] - public WriterConfig WriterConfig { get; set; } - - [JsonProperty("collectorConfig")] - [JsonPropertyName("collectorConfig")] - public CollectorConfig CollectorConfig { get; set; } - - [JsonProperty("containerIgnoreList")] - [JsonPropertyName("containerIgnoreList")] - public Dictionary ContainerIgnoreList { get; set; } - - [JsonProperty("mapsToProcess")] - [JsonPropertyName("mapsToProcess")] - public List MapsToProcess { get; set; } -} \ No newline at end of file diff --git a/Model/Config/DumpProcessorConfig.cs b/Model/Config/DumpProcessorConfig.cs deleted file mode 100644 index b7f7630..0000000 --- a/Model/Config/DumpProcessorConfig.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Text.Json.Serialization; -using LootDumpProcessor.Serializers.Json.Converters; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Config; - -public class DumpProcessorConfig -{ - [JsonProperty("spawnContainerChanceIncludeAfterDate")] - [JsonPropertyName("spawnContainerChanceIncludeAfterDate")] - [Newtonsoft.Json.JsonConverter(typeof(NewtonsoftDateTimeConverter))] - [System.Text.Json.Serialization.JsonConverter(typeof(NetDateTimeConverter))] - public DateTime SpawnContainerChanceIncludeAfterDate { get; set; } -} \ No newline at end of file diff --git a/Model/Config/IntakeReaderConfig.cs b/Model/Config/IntakeReaderConfig.cs deleted file mode 100644 index f0226f6..0000000 --- a/Model/Config/IntakeReaderConfig.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Text.Json.Serialization; -using LootDumpProcessor.Process.Reader; -using LootDumpProcessor.Process.Reader.Intake; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Config; - -public class IntakeReaderConfig -{ - [JsonProperty("readerType")] - [JsonPropertyName("readerType")] - public IntakeReaderTypes IntakeReaderType { get; set; } = IntakeReaderTypes.Json; - - [JsonProperty("maxDumpsPerMap")] - [JsonPropertyName("maxDumpsPerMap")] - public int MaxDumpsPerMap { get; set; } = 1500; - - - [JsonProperty("ignoredDumpLocations")] - [JsonPropertyName("ignoredDumpLocations")] - public List IgnoredDumpLocations { get; set; } = new(); -} \ No newline at end of file diff --git a/Model/Config/LoggerConfig.cs b/Model/Config/LoggerConfig.cs deleted file mode 100644 index 01e1035..0000000 --- a/Model/Config/LoggerConfig.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Text.Json.Serialization; -using LootDumpProcessor.Logger; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Config; - -public class LoggerConfig -{ - [JsonProperty("logLevel")] - [JsonPropertyName("logLevel")] - public LogLevel LogLevel { get; set; } = LogLevel.Info; - - [JsonProperty("queueLoggerPoolingTimeoutMs")] - [JsonPropertyName("queueLoggerPoolingTimeoutMs")] - public int QueueLoggerPoolingTimeoutMs { get; set; } = 1000; -} \ No newline at end of file diff --git a/Model/Config/MapDirectoryMapping.cs b/Model/Config/MapDirectoryMapping.cs deleted file mode 100644 index 9c9794d..0000000 --- a/Model/Config/MapDirectoryMapping.cs +++ /dev/null @@ -1,11 +0,0 @@ -using YamlDotNet.Serialization; - -namespace LootDumpProcessor.Model.Config; - -public class MapDirectoryMapping -{ - [YamlMember(Alias = "name")] - public List Name { get; set; } - [YamlMember(Alias = "threshold_date")] - public string ThresholdDate { get; set; } -} \ No newline at end of file diff --git a/Model/Config/PreProcessorConfig.cs b/Model/Config/PreProcessorConfig.cs deleted file mode 100644 index 1fd2bf3..0000000 --- a/Model/Config/PreProcessorConfig.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Text.Json.Serialization; -using LootDumpProcessor.Process.Reader.PreProcess; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Config; - -public class PreProcessorConfig -{ - [JsonProperty("preProcessors")] - [JsonPropertyName("preProcessors")] - public List? PreProcessors { get; set; } - - [JsonProperty("preProcessorTempFolder")] - [JsonPropertyName("preProcessorTempFolder")] - public string? PreProcessorTempFolder { get; set; } - - [JsonProperty("cleanupTempFolderAfterProcess")] - [JsonPropertyName("cleanupTempFolderAfterProcess")] - public bool CleanupTempFolderAfterProcess { get; set; } = true; -} \ No newline at end of file diff --git a/Model/Config/ProcessorConfig.cs b/Model/Config/ProcessorConfig.cs deleted file mode 100644 index 92cd826..0000000 --- a/Model/Config/ProcessorConfig.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Config; - -public class ProcessorConfig -{ - [JsonProperty("spawnPointToleranceForForced")] - [JsonPropertyName("spawnPointToleranceForForced")] - public double SpawnPointToleranceForForced { get; set; } = 99D; - - [JsonProperty("looseLootCountTolerancePercentage")] - [JsonPropertyName("looseLootCountTolerancePercentage")] - public double LooseLootCountTolerancePercentage { get; set; } = 75D; -} \ No newline at end of file diff --git a/Model/Config/ReaderConfig.cs b/Model/Config/ReaderConfig.cs deleted file mode 100644 index 87f0a9e..0000000 --- a/Model/Config/ReaderConfig.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Text.Json.Serialization; -using LootDumpProcessor.Process.Reader.Filters; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Config; - -public class ReaderConfig -{ - [JsonProperty("intakeReaderConfig")] - [JsonPropertyName("intakeReaderConfig")] - public IntakeReaderConfig? IntakeReaderConfig { get; set; } - - [JsonProperty("preProcessorConfig")] - [JsonPropertyName("preProcessorConfig")] - public PreProcessorConfig? PreProcessorConfig { get; set; } - - [JsonProperty("dumpFilesLocation")] - [JsonPropertyName("dumpFilesLocation")] - public List? DumpFilesLocation { get; set; } - - [JsonProperty("thresholdDate")] - [JsonPropertyName("thresholdDate")] - public string? ThresholdDate { get; set; } - - [JsonProperty("acceptedFileExtensions")] - [JsonPropertyName("acceptedFileExtensions")] - public List AcceptedFileExtensions { get; set; } = new(); - - [JsonProperty("processSubFolders")] - [JsonPropertyName("processSubFolders")] - public bool ProcessSubFolders { get; set; } - - [JsonProperty("fileFilters")] - [JsonPropertyName("fileFilters")] - public List? FileFilters { get; set; } -} \ No newline at end of file diff --git a/Model/Config/WriterConfig.cs b/Model/Config/WriterConfig.cs deleted file mode 100644 index 3a4dc30..0000000 --- a/Model/Config/WriterConfig.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Config; - -public class WriterConfig -{ - [JsonProperty("outputLocation")] - [JsonPropertyName("outputLocation")] - public string? OutputLocation { get; set; } -} \ No newline at end of file diff --git a/Model/FireMode.cs b/Model/FireMode.cs deleted file mode 100644 index 6a2e291..0000000 --- a/Model/FireMode.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model -{ - public class FireMode : ICloneable - { - [JsonProperty("FireMode", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("FireMode")] - public string? FireModeType { get; set; } - - public object Clone() - { - return new FireMode - { - FireModeType = FireModeType - }; - } - } -} \ No newline at end of file diff --git a/Model/Foldable.cs b/Model/Foldable.cs deleted file mode 100644 index 71db1cc..0000000 --- a/Model/Foldable.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model -{ - public class Foldable : ICloneable - { - [JsonProperty("Folded", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Folded")] - public bool? Folded { get; set; } - - public object Clone() - { - return new Foldable - { - Folded = Folded - }; - } - } -} \ No newline at end of file diff --git a/Model/GroupPosition.cs b/Model/GroupPosition.cs deleted file mode 100644 index b45053a..0000000 --- a/Model/GroupPosition.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Text.Json.Serialization; -using LootDumpProcessor.Utils; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model -{ - public class GroupPosition : ICloneable - { - [JsonProperty("Name", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Name")] - public string? Name { get; set; } - - [JsonProperty("Weight", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Weight")] - public int? Weight { get; set; } - - [JsonProperty("Position", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Position")] - public Vector3? Position { get; set; } - - [JsonProperty("Rotation", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Rotation")] - public Vector3? Rotation { get; set; } - - public object Clone() - { - return new GroupPosition - { - Name = Name, - Weight = Weight, - Position = ProcessorUtil.Copy(Position), - Rotation = ProcessorUtil.Copy(Rotation) - }; - } - } -} \ No newline at end of file diff --git a/Model/Input/AdditionalHostilitySetting.cs b/Model/Input/AdditionalHostilitySetting.cs deleted file mode 100644 index 66805b9..0000000 --- a/Model/Input/AdditionalHostilitySetting.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Input -{ - public class AdditionalHostilitySetting - { - [JsonProperty("BotRole", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotRole")] - public string? BotRole { get; set; } - - [JsonProperty("AlwaysEnemies", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("AlwaysEnemies")] - public List? AlwaysEnemies { get; set; } - - [JsonProperty("ChancedEnemies", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("ChancedEnemies")] - public List? ChancedEnemies { get; set; } - - [JsonProperty("Warn", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Warn")] - public List? Warn { get; set; } - - [JsonProperty("Neutral", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Neutral")] - public List? Neutral { get; set; } - - [JsonProperty("AlwaysFriends", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("AlwaysFriends")] - public List? AlwaysFriends { get; set; } - - [JsonProperty("SavagePlayerBehaviour", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("SavagePlayerBehaviour")] - public string? SavagePlayerBehaviour { get; set; } - - [JsonProperty("BearPlayerBehaviour", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BearPlayerBehaviour")] - public string? BearPlayerBehaviour { get; set; } - - [JsonProperty("BearEnemyChance", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BearEnemyChance")] - public int? BearEnemyChance { get; set; } - - [JsonProperty("UsecPlayerBehaviour", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("UsecPlayerBehaviour")] - public string? UsecPlayerBehaviour { get; set; } - - [JsonProperty("UsecEnemyChance", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("UsecEnemyChance")] - public int? UsecEnemyChance { get; set; } - } -} \ No newline at end of file diff --git a/Model/Input/AirdropParameter.cs b/Model/Input/AirdropParameter.cs deleted file mode 100644 index e688e95..0000000 --- a/Model/Input/AirdropParameter.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Input -{ - public class AirdropParameter - { - [JsonProperty("PlaneAirdropStartMin", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("PlaneAirdropStartMin")] - public int? PlaneAirdropStartMin { get; set; } - - [JsonProperty("PlaneAirdropStartMax", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("PlaneAirdropStartMax")] - public int? PlaneAirdropStartMax { get; set; } - - [JsonProperty("PlaneAirdropEnd", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("PlaneAirdropEnd")] - public int? PlaneAirdropEnd { get; set; } - - [JsonProperty("PlaneAirdropChance", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("PlaneAirdropChance")] - public float? PlaneAirdropChance { get; set; } - - [JsonProperty("PlaneAirdropMax", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("PlaneAirdropMax")] - public int? PlaneAirdropMax { get; set; } - - [JsonProperty("PlaneAirdropCooldownMin", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("PlaneAirdropCooldownMin")] - public int? PlaneAirdropCooldownMin { get; set; } - - [JsonProperty("PlaneAirdropCooldownMax", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("PlaneAirdropCooldownMax")] - public int? PlaneAirdropCooldownMax { get; set; } - - [JsonProperty("AirdropPointDeactivateDistance", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("AirdropPointDeactivateDistance")] - public int? AirdropPointDeactivateDistance { get; set; } - - [JsonProperty("MinPlayersCountToSpawnAirdrop", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MinPlayersCountToSpawnAirdrop")] - public int? MinPlayersCountToSpawnAirdrop { get; set; } - - [JsonProperty("UnsuccessfulTryPenalty", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("UnsuccessfulTryPenalty")] - public int? UnsuccessfulTryPenalty { get; set; } - } -} \ No newline at end of file diff --git a/Model/Input/BTRServerSettings.cs b/Model/Input/BTRServerSettings.cs deleted file mode 100644 index 2d58ef8..0000000 --- a/Model/Input/BTRServerSettings.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Input -{ - public class BTRServerSettings - { - [JsonProperty("ChanceSpawn", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("ChanceSpawn")] - public float? ChanceSpawn { get; set; } - - [JsonProperty("SpawnPeriod", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("SpawnPeriod")] - public Vector3? SpawnPeriod { get; set; } - - [JsonProperty("MoveSpeed", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MoveSpeed")] - public float? MoveSpeed { get; set; } - - [JsonProperty("ReadyToDepartureTime", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("ReadyToDepartureTime")] - public float? ReadyToDepartureTime { get; set; } - - [JsonProperty("CheckTurnDistanceTime", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("CheckTurnDistanceTime")] - public float? CheckTurnDistanceTime { get; set; } - - [JsonProperty("TurnCheckSensitivity", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("TurnCheckSensitivity")] - public float? TurnCheckSensitivity { get; set; } - - [JsonProperty("DecreaseSpeedOnTurnLimit", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("DecreaseSpeedOnTurnLimit")] - public float? DecreaseSpeedOnTurnLimit { get; set; } - - [JsonProperty("EndSplineDecelerationDistance", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("EndSplineDecelerationDistance")] - public float? EndSplineDecelerationDistance { get; set; } - - [JsonProperty("AccelerationSpeed", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("AccelerationSpeed")] - public float? AccelerationSpeed { get; set; } - - [JsonProperty("DecelerationSpeed", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("DecelerationSpeed")] - public float? DecelerationSpeed { get; set; } - - [JsonProperty("PauseDurationRange", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("PauseDurationRange")] - public Vector3? PauseDurationRange { get; set; } - - [JsonProperty("BodySwingReturnSpeed", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BodySwingReturnSpeed")] - public float? BodySwingReturnSpeed { get; set; } - - [JsonProperty("BodySwingDamping", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BodySwingDamping")] - public float? BodySwingDamping { get; set; } - - [JsonProperty("BodySwingIntensity", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BodySwingIntensity")] - public float? BodySwingIntensity { get; set; } - - [JsonProperty("ServerMapBTRSettings", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("ServerMapBTRSettings")] - public ServerMapBTRSettings? ServerMapBTRSettings { get; set; } - } -} \ No newline at end of file diff --git a/Model/Input/Banner.cs b/Model/Input/Banner.cs deleted file mode 100644 index 0b41dbb..0000000 --- a/Model/Input/Banner.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Input -{ - public class Banner - { - [JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("id")] - public string? Id { get; set; } - - [JsonProperty("pic", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("pic")] - public Pic? Pic { get; set; } - } -} \ No newline at end of file diff --git a/Model/Input/BotLocationModifier.cs b/Model/Input/BotLocationModifier.cs deleted file mode 100644 index dea60dc..0000000 --- a/Model/Input/BotLocationModifier.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Input -{ - public class BotLocationModifier - { - [JsonProperty("AccuracySpeed", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("AccuracySpeed")] - public float? AccuracySpeed { get; set; } - - [JsonProperty("Scattering", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Scattering")] - public float? Scattering { get; set; } - - [JsonProperty("GainSight", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("GainSight")] - public float? GainSight { get; set; } - - [JsonProperty("MarksmanAccuratyCoef", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MarksmanAccuratyCoef")] - public float? MarksmanAccuratyCoef { get; set; } - - [JsonProperty("VisibleDistance", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("VisibleDistance")] - public float? VisibleDistance { get; set; } - - [JsonProperty("DistToPersueAxemanCoef", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("DistToPersueAxemanCoef")] - public float? DistToPersueAxemanCoef { get; set; } - - [JsonProperty("KhorovodChance", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("KhorovodChance")] - public int? KhorovodChance { get; set; } - - [JsonProperty("MinExfiltrationTime", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MinExfiltrationTime")] - public float? MinExfiltrationTime { get; set; } - - [JsonProperty("MaxExfiltrationTime", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MaxExfiltrationTime")] - public float? MaxExfiltrationTime { get; set; } - - [JsonProperty("DistToActivatePvE", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("DistToActivatePvE")] - public float? DistToActivatePvE { get; set; } - - [JsonProperty("DistToSleepPvE", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("DistToSleepPvE")] - public float? DistToSleepPvE { get; set; } - - [JsonProperty("DistToActivate", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("DistToActivate")] - public float? DistToActivate { get; set; } - - [JsonProperty("DistToSleep", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("DistToSleep")] - public float? DistToSleep { get; set; } - - [JsonProperty("AdditionalHostilitySettings", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("AdditionalHostilitySettings")] - public List? AdditionalHostilitySettings { get; set; } - } -} \ No newline at end of file diff --git a/Model/Input/ChancedEnemy.cs b/Model/Input/ChancedEnemy.cs deleted file mode 100644 index 5548936..0000000 --- a/Model/Input/ChancedEnemy.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Input -{ - public class ChancedEnemy - { - [JsonProperty("EnemyChance", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("EnemyChance")] - public int? EnemyChance { get; set; } - - [JsonProperty("Role", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Role")] - public string? Role { get; set; } - } -} \ No newline at end of file diff --git a/Model/Input/ColliderParams.cs b/Model/Input/ColliderParams.cs deleted file mode 100644 index aee12c6..0000000 --- a/Model/Input/ColliderParams.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Text.Json.Serialization; -using LootDumpProcessor.Model.Tarkov; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Input -{ - public class ColliderParams - { - [JsonProperty("Parent", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Parent")] - public string? Parent { get; set; } - - [JsonProperty("_props", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("_props")] - public Props? Props { get; set; } - } -} \ No newline at end of file diff --git a/Model/Input/CompletedQuest.cs b/Model/Input/CompletedQuest.cs deleted file mode 100644 index 10ec0d4..0000000 --- a/Model/Input/CompletedQuest.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Input -{ - public class CompletedQuest - { - [JsonProperty("QuestId", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("QuestId")] - public string? QuestID { get; set; } - } -} \ No newline at end of file diff --git a/Model/Input/Data.cs b/Model/Input/Data.cs deleted file mode 100644 index 39c6dce..0000000 --- a/Model/Input/Data.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Input -{ - public class Data - { - [JsonProperty("serverId", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("serverId")] - public string? ServerID { get; set; } - - [JsonProperty("serverSettings", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("serverSettings")] - public ServerSettings? ServerSettings { get; set; } - - [JsonProperty("profile", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("profile")] - public object? Profile { get; set; } - - [JsonProperty("locationLoot", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("locationLoot")] - public required LocationLoot LocationLoot { get; set; } - } -} \ No newline at end of file diff --git a/Model/Input/Exit.cs b/Model/Input/Exit.cs deleted file mode 100644 index 9a89d94..0000000 --- a/Model/Input/Exit.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Input -{ - public class Exit - { - [JsonProperty("Name", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Name")] - public string? Name { get; set; } - - [JsonProperty("EntryPoints", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("EntryPoints")] - public string? EntryPoints { get; set; } - - [JsonProperty("Chance", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Chance")] - public float? Chance { get; set; } - - [JsonProperty("MinTime", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MinTime")] - public int? MinTime { get; set; } - - [JsonProperty("MaxTime", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MaxTime")] - public int? MaxTime { get; set; } - - [JsonProperty("PlayersCount", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("PlayersCount")] - public int? PlayersCount { get; set; } - - [JsonProperty("ExfiltrationTime", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("ExfiltrationTime")] - public float? ExfiltrationTime { get; set; } - - [JsonProperty("PassageRequirement", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("PassageRequirement")] - public string? PassageRequirement { get; set; } - - [JsonProperty("ExfiltrationType", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("ExfiltrationType")] - public string? ExfiltrationType { get; set; } - - [JsonProperty("RequiredSlot", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("RequiredSlot")] - public string? RequiredSlot { get; set; } - - [JsonProperty("Id", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Id")] - public string? Id { get; set; } - - [JsonProperty("RequirementTip", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("RequirementTip")] - public string? RequirementTip { get; set; } - - [JsonProperty("Count", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Count")] - public int? Count { get; set; } - - [JsonProperty("EventAvailable", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("EventAvailable")] - public bool? EventAvailable { get; set; } - - [JsonProperty("MinTimePVE", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MinTimePVE")] - public int? MinTimePVE { get; set; } - - [JsonProperty("MaxTimePVE", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MaxTimePVE")] - public int? MaxTimePVE { get; set; } - - [JsonProperty("ChancePVE", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("ChancePVE")] - public float? ChancePVE { get; set; } - - [JsonProperty("CountPVE", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("CountPVE")] - public int? CountPVE { get; set; } - - [JsonProperty("ExfiltrationTimePVE", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("ExfiltrationTimePVE")] - public float? ExfiltrationTimePVE { get; set; } - - [JsonProperty("PlayersCountPVE", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("PlayersCountPVE")] - public int? PlayersCountPVE { get; set; } - } -} \ No newline at end of file diff --git a/Model/Input/ItemCost.cs b/Model/Input/ItemCost.cs deleted file mode 100644 index 972c2a6..0000000 --- a/Model/Input/ItemCost.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Input -{ - public class ItemCost - { - [JsonProperty("Count", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Count")] - public int? Count { get; set; } - } -} \ No newline at end of file diff --git a/Model/Input/LocationLoot.cs b/Model/Input/LocationLoot.cs deleted file mode 100644 index b4b8dc4..0000000 --- a/Model/Input/LocationLoot.cs +++ /dev/null @@ -1,384 +0,0 @@ -using System.Text.Json.Serialization; -using Newtonsoft.Json; - -namespace LootDumpProcessor.Model.Input -{ - public class LocationLoot - { - [JsonProperty("Enabled", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Enabled")] - public bool? Enabled { get; set; } - - [JsonProperty("EnableCoop", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("EnableCoop")] - public bool? EnableCoop { get; set; } - - [JsonProperty("ForceOnlineRaidInPVE", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("ForceOnlineRaidInPVE")] - public bool? ForceOnlineRaidInPVE { get; set; } - - [JsonProperty("Locked", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Locked")] - public bool? Locked { get; set; } - - [JsonProperty("Insurance", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Insurance")] - public bool? Insurance { get; set; } - - [JsonProperty("SafeLocation", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("SafeLocation")] - public bool? SafeLocation { get; set; } - - [JsonProperty("Name", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Name")] - public string? Name { get; set; } - - [JsonProperty("Description", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Description")] - public string? Description { get; set; } - - [JsonProperty("Scene", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Scene")] - public Scene? Scene { get; set; } - - [JsonProperty("Area", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Area")] - public float? Area { get; set; } - - [JsonProperty("RequiredPlayerLevelMin", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("RequiredPlayerLevelMin")] - public int? RequiredPlayerLevelMin { get; set; } - - [JsonProperty("RequiredPlayerLevelMax", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("RequiredPlayerLevelMax")] - public int? RequiredPlayerLevelMax { get; set; } - - [JsonProperty("PmcMaxPlayersInGroup", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("PmcMaxPlayersInGroup")] - public int? PmcMaxPlayersInGroup { get; set; } - - [JsonProperty("ScavMaxPlayersInGroup", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("ScavMaxPlayersInGroup")] - public int? ScavMaxPlayersInGroup { get; set; } - - [JsonProperty("MinPlayers", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MinPlayers")] - public int? MinPlayers { get; set; } - - [JsonProperty("MaxPlayers", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MaxPlayers")] - public int? MaxPlayers { get; set; } - - [JsonProperty("MaxCoopGroup", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MaxCoopGroup")] - public int? MaxCoopGroup { get; set; } - - [JsonProperty("exit_count", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("exit_count")] - public int? ExitCount { get; set; } - - [JsonProperty("exit_access_time", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("exit_access_time")] - public int? ExitAccessTime { get; set; } - - [JsonProperty("exit_time", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("exit_time")] - public int? ExitTime { get; set; } - - [JsonProperty("Preview", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Preview")] - public Preview? Preview { get; set; } - - [JsonProperty("IconX", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("IconX")] - public int? IconX { get; set; } - - [JsonProperty("IconY", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("IconY")] - public int? IconY { get; set; } - - [JsonProperty("filter_ex", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("filter_ex")] - public List? FilterEx { get; set; } - - [JsonProperty("waves", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("waves")] - public List? Waves { get; set; } - - [JsonProperty("limits", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("limits")] - public List? Limits { get; set; } - - [JsonProperty("AveragePlayTime", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("AveragePlayTime")] - public int? AveragePlayTime { get; set; } - - [JsonProperty("AveragePlayerLevel", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("AveragePlayerLevel")] - public int? AveragePlayerLevel { get; set; } - - [JsonProperty("EscapeTimeLimit", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("EscapeTimeLimit")] - public int? EscapeTimeLimit { get; set; } - - [JsonProperty("EscapeTimeLimitPVE", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("EscapeTimeLimitPVE")] - public int? EscapeTimeLimitPVE { get; set; } - - [JsonProperty("EscapeTimeLimitCoop", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("EscapeTimeLimitCoop")] - public int? EscapeTimeLimitCoop { get; set; } - - [JsonProperty("Rules", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Rules")] - public string? Rules { get; set; } - - [JsonProperty("IsSecret", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("IsSecret")] - public bool? IsSecret { get; set; } - - [JsonProperty("doors", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("doors")] - public List? Doors { get; set; } - - [JsonProperty("tmp_location_field_remove_me", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("tmp_location_field_remove_me")] - public int? TmpLocationFieldRemoveMe { get; set; } - - [JsonProperty("MinDistToExitPoint", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MinDistToExitPoint")] - public int? MinDistToExitPoint { get; set; } - - [JsonProperty("MaxDistToFreePoint", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MaxDistToFreePoint")] - public int? MaxDistToFreePoint { get; set; } - - [JsonProperty("MinDistToFreePoint", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MinDistToFreePoint")] - public int? MinDistToFreePoint { get; set; } - - [JsonProperty("MaxBotPerZone", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MaxBotPerZone")] - public int? MaxBotPerZone { get; set; } - - [JsonProperty("OpenZones", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("OpenZones")] - public string? OpenZones { get; set; } - - [JsonProperty("OcculsionCullingEnabled", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("OcculsionCullingEnabled")] - public bool? OcculsionCullingEnabled { get; set; } - - [JsonProperty("GlobalLootChanceModifier", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("GlobalLootChanceModifier")] - public float? GlobalLootChanceModifier { get; set; } - - [JsonProperty("GlobalLootChanceModifierPvE", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("GlobalLootChanceModifierPvE")] - public float? GlobalLootChanceModifierPvE { get; set; } - - [JsonProperty("OldSpawn", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("OldSpawn")] - public bool? OldSpawn { get; set; } - - [JsonProperty("OfflineOldSpawn", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("OfflineOldSpawn")] - public bool? OfflineOldSpawn { get; set; } - - [JsonProperty("NewSpawn", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("NewSpawn")] - public bool? NewSpawn { get; set; } - - [JsonProperty("OfflineNewSpawn", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("OfflineNewSpawn")] - public bool? OfflineNewSpawn { get; set; } - - [JsonProperty("BotMax", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotMax")] - public int? BotMax { get; set; } - - [JsonProperty("BotMaxPvE", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotMaxPvE")] - public int? BotMaxPvE { get; set; } - - [JsonProperty("BotStart", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotStart")] - public int? BotStart { get; set; } - - [JsonProperty("BotStartPlayer", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotStartPlayer")] - public int? BotStartPlayer { get; set; } - - [JsonProperty("BotStop", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotStop")] - public int? BotStop { get; set; } - - [JsonProperty("BotMaxTimePlayer", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotMaxTimePlayer")] - public int? BotMaxTimePlayer { get; set; } - - [JsonProperty("BotSpawnTimeOnMin", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotSpawnTimeOnMin")] - public int? BotSpawnTimeOnMin { get; set; } - - [JsonProperty("BotSpawnTimeOnMax", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotSpawnTimeOnMax")] - public int? BotSpawnTimeOnMax { get; set; } - - [JsonProperty("BotSpawnTimeOffMin", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotSpawnTimeOffMin")] - public int? BotSpawnTimeOffMin { get; set; } - - [JsonProperty("BotSpawnTimeOffMax", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotSpawnTimeOffMax")] - public int? BotSpawnTimeOffMax { get; set; } - - [JsonProperty("BotMaxPlayer", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotMaxPlayer")] - public int? BotMaxPlayer { get; set; } - - [JsonProperty("BotEasy", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotEasy")] - public int? BotEasy { get; set; } - - [JsonProperty("BotNormal", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotNormal")] - public int? BotNormal { get; set; } - - [JsonProperty("BotHard", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotHard")] - public int? BotHard { get; set; } - - [JsonProperty("BotImpossible", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotImpossible")] - public int? BotImpossible { get; set; } - - [JsonProperty("BotAssault", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotAssault")] - public int? BotAssault { get; set; } - - [JsonProperty("BotMarksman", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotMarksman")] - public int? BotMarksman { get; set; } - - [JsonProperty("DisabledScavExits", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("DisabledScavExits")] - public string? DisabledScavExits { get; set; } - - [JsonProperty("MinPlayerLvlAccessKeys", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MinPlayerLvlAccessKeys")] - public int? MinPlayerLvlAccessKeys { get; set; } - - [JsonProperty("AccessKeys", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("AccessKeys")] - public List? AccessKeys { get; set; } - - [JsonProperty("UnixDateTime", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("UnixDateTime")] - public int? UnixDateTime { get; set; } - - [JsonProperty("users_gather_seconds", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("users_gather_seconds")] - public int? UsersGatherSeconds { get; set; } - - [JsonProperty("users_spawn_seconds_n", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("users_spawn_seconds_n")] - public int? UsersSpawnSecondsN { get; set; } - - [JsonProperty("users_spawn_seconds_n2", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("users_spawn_seconds_n2")] - public int? UsersSpawnSecondsN2 { get; set; } - - [JsonProperty("users_summon_seconds", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("users_summon_seconds")] - public int? UsersSummonSeconds { get; set; } - - [JsonProperty("sav_summon_seconds", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("sav_summon_seconds")] - public int? SavSummonSeconds { get; set; } - - [JsonProperty("matching_min_seconds", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("matching_min_seconds")] - public int? MatchingMinSeconds { get; set; } - - [JsonProperty("GenerateLocalLootCache", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("GenerateLocalLootCache")] - public bool? GenerateLocalLootCache { get; set; } - - [JsonProperty("PlayersRequestCount", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("PlayersRequestCount")] - public int? PlayersRequestCount { get; set; } - - [JsonProperty("NonWaveGroupScenario", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("NonWaveGroupScenario")] - public NonWaveGroupScenario? NonWaveGroupScenario { get; set; } - - [JsonProperty("BotSpawnCountStep", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotSpawnCountStep")] - public int? BotSpawnCountStep { get; set; } - - [JsonProperty("BotSpawnPeriodCheck", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotSpawnPeriodCheck")] - public int? BotSpawnPeriodCheck { get; set; } - - [JsonProperty("GlobalContainerChanceModifier", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("GlobalContainerChanceModifier")] - public float? GlobalContainerChanceModifier { get; set; } - - [JsonProperty("MinMaxBots", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MinMaxBots")] - public List? MinMaxBots { get; set; } - - [JsonProperty("BotLocationModifier", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BotLocationModifier")] - public BotLocationModifier? BotLocationModifier { get; set; } - - [JsonProperty("Exits", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Exits")] - public List? Exits { get; set; } - - [JsonProperty("DisabledForScav", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("DisabledForScav")] - public bool? DisabledForScav { get; set; } - - [JsonProperty("BossLocationSpawn", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("BossLocationSpawn")] - public List? BossLocationSpawn { get; set; } - - [JsonProperty("SpawnPointParams", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("SpawnPointParams")] - public List? SpawnPointParams { get; set; } - - [JsonProperty("MaxItemCountInLocation", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MaxItemCountInLocation")] - public List? MaxItemCountInLocation { get; set; } - - [JsonProperty("AirdropParameters", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("AirdropParameters")] - public List? AirdropParameters { get; set; } - - [JsonProperty("MatchMakerMinPlayersByWaitTime", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("MatchMakerMinPlayersByWaitTime")] - public List? MatchMakerMinPlayersByWaitTime { get; set; } - - [JsonProperty("Transits", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Transits")] - public List? Transits { get; set; } - - [JsonProperty("Id", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("Id")] - public required string Id { get; set; } - - [JsonProperty("_Id", NullValueHandling = NullValueHandling.Ignore)] - [JsonPropertyName("_Id")] - public string? Id0 { get; set; } - - [JsonProperty("Loot")] - [JsonPropertyName("Loot")] - public required List