Compare commits

...

6 Commits

Author SHA1 Message Date
0719a7bfdd
Resolves ArgumentException when processing 0.15.5 loot
Resolves the following exception:

System.ArgumentException: .NET number values such as positive and negative infinity cannot be written as valid JSON. To make it work when using 'JsonSerializer', consider specifying 'JsonNumberHandling.AllowNamedFloatingPointLiterals'
2024-10-31 22:42:26 -04:00
f6f2acd842
Updated Unknown Key Static Container ID 2024-09-16 11:21:44 -04:00
1821756680
Forced Static Loot Update
- Updates streets 'backup hideout key' container ID.
- Adds sandbox_high to the forced static loot config with the same static spawns as sandbox.
2024-09-10 10:52:30 -04:00
235249599e
Updates Sandbox-Scav-Near-Exit Container ID in Static Loot 2024-09-08 20:39:51 -04:00
c011c2dc58
Updates Unknown Key Container ID in Static Loot 2024-09-08 15:26:26 -04:00
a320d24ee4
Changes for 3.10 (32160)
- Updates the Model/Input classes to match the new export JSON structure
- Updates references to model structure
- Updates SevenZipSharp package
- Adds a few null checks
2024-08-22 15:33:27 -04:00
45 changed files with 1117 additions and 468 deletions

View File

@ -14,6 +14,8 @@ bigmap:
- 5939e5a786f77461f11c0098 # Secure Folder 0013 - 5939e5a786f77461f11c0098 # Secure Folder 0013
- 64e74a3d4d49d23b2c39d319 # item_quest_clock_07 (Out of Time) - 64e74a3d4d49d23b2c39d319 # item_quest_clock_07 (Out of Time)
- 6614230055afee107f05e998 # The Unheard's phone - 6614230055afee107f05e998 # The Unheard's phone
- 664fce7a90294949fe2d81cb # Item_barter_info_host_quest
- 66b22630a6b4e5ec7c02cdb7 # item_quest_instruments
#- 64bd1abff3a668f08805ce4f # Secure Flash drive V4 REMOVED BY BSG #- 64bd1abff3a668f08805ce4f # Secure Flash drive V4 REMOVED BY BSG
woods: woods:
@ -22,6 +24,9 @@ woods:
- 5af04e0a86f7743a532b79e2 # Single-axis Fiber Optic Gyroscope: item_barter_electr_gyroscope - 5af04e0a86f7743a532b79e2 # Single-axis Fiber Optic Gyroscope: item_barter_electr_gyroscope
- 5a687e7886f7740c4a5133fb # Blood sample - 5a687e7886f7740c4a5133fb # Blood sample
- 5af04c0b86f774138708f78e # Motor Controller: item_barter_electr_controller - 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 #- 64bde2248f3a947a990aa4a5 # Sliderkey Secure Flash drive #1 REMOVED BY BSG
#- 64bde265807321a9b905f076 # Sliderkey Secure Flash drive #2 REMOVED BY BSG #- 64bde265807321a9b905f076 # Sliderkey Secure Flash drive #2 REMOVED BY BSG
@ -46,6 +51,8 @@ shoreline:
- 661421c7c1f2f548c50ee649 # The Unheard's laptop - 661421c7c1f2f548c50ee649 # The Unheard's laptop
- 6614217b6d9d5abcad0ff098 # The Unheard's phone - 6614217b6d9d5abcad0ff098 # The Unheard's phone
- 661423200d240a5f5d0f679b # The Unheard's laptop - 661423200d240a5f5d0f679b # The Unheard's laptop
- 666073159916667083033cb9 # Item_quest_tattered_diary
- 66760b3deb51b08bd40c2b08 # item_barter_electr_hdd_NosQuests_quest
interchange: interchange:
- 5ae9a18586f7746e381e16a3 # OLI cargo manifests - 5ae9a18586f7746e381e16a3 # OLI cargo manifests
@ -57,10 +64,16 @@ interchange:
- 5b4c81a086f77417d26be63f # Chemical container item_quest_chem_container2 - 5b4c81a086f77417d26be63f # Chemical container item_quest_chem_container2
- 5b4c81bd86f77418a75ae159 # Chemical container item_quest_chem_container3 - 5b4c81bd86f77418a75ae159 # Chemical container item_quest_chem_container3
- 64e74a5ac2b4f829615ec336 # item_quest_clock_11 (Out of Time) - 64e74a5ac2b4f829615ec336 # item_quest_clock_11 (Out of Time)
- 667a8ef464eea5fdef0db135 # item_quest_gamemagazine
factory4_day: factory4_day:
- 591093bb86f7747caa7bb2ee # On the neck of the dead scav in the bunker (Postman Pat Part 2) - 591093bb86f7747caa7bb2ee # On the neck of the dead scav in the bunker (Postman Pat Part 2)
- 593a87af86f774122f54a951 # Syringe with a chemical - 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 # item_barter_quest_blood_nf2024
factory4_night: factory4_night:
- 591093bb86f7747caa7bb2ee # On the neck of the dead scav in the bunker (Postman Pat Part 2) - 591093bb86f7747caa7bb2ee # On the neck of the dead scav in the bunker (Postman Pat Part 2)
@ -77,7 +90,6 @@ lighthouse:
- 6398a0861c712b1e1d4dadf1 # Forged Lightkeeper intelligence (Snatch) - 6398a0861c712b1e1d4dadf1 # Forged Lightkeeper intelligence (Snatch)
- 6399f54b0a36db13c823ad21 # Radio transmitter body (Key to the Tower) - 6399f54b0a36db13c823ad21 # Radio transmitter body (Key to the Tower)
- 64e74a64aac4cd0a7264ecdf # item_quest_clock_12 (Out of Time) - 64e74a64aac4cd0a7264ecdf # item_quest_clock_12 (Out of Time)
- 578f87a3245977356274f2cb #
- 661666458c2aa9cb1602503b # Hard drive - 661666458c2aa9cb1602503b # Hard drive
# - 64b91627dd13d43b9d01d6d1 # Toughbook reinforced laptop (Event quest) REMOVED BY BSG # - 64b91627dd13d43b9d01d6d1 # Toughbook reinforced laptop (Event quest) REMOVED BY BSG
@ -96,6 +108,7 @@ laboratory:
- 5eff135be0d3331e9d282b7b # Flash drive marked with blue tape (TerraGroup employee) - 5eff135be0d3331e9d282b7b # Flash drive marked with blue tape (TerraGroup employee)
- 6398a4cfb5992f573c6562b3 # Secured tape - 6398a4cfb5992f573c6562b3 # Secured tape
- 64e74a44c2b4f829615ec334 # Picture 8 - 64e74a44c2b4f829615ec334 # Picture 8
- 666879d498b97e3a8f09f1ae # Item_barter_medical_transilluminator_quest
#- 64e74a44c2b4f829615ec334 # item_quest_clock_08 (Out of Time) #1 REMOVED BY BSG #- 64e74a44c2b4f829615ec334 # item_quest_clock_08 (Out of Time) #1 REMOVED BY BSG
#- 64bdcfed8f3a947a990aa49a # Hermetic container for storing various chemicals #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 #- 64bdd008b0bf3baa6702f35f # Hermetic container for storing various chemicals #2 REMOVED BY BSG
@ -124,6 +137,7 @@ tarkovstreets:
- 64f69b4267e11a7c6206e010 # Chef's diary (Beyond the Red Meat - Part 1) - 64f69b4267e11a7c6206e010 # Chef's diary (Beyond the Red Meat - Part 1)
- 64f5b4f71a5f313cb144c06c # Secret component (Beyond the Red Meat - Part 2) - 64f5b4f71a5f313cb144c06c # Secret component (Beyond the Red Meat - Part 2)
- 657acb2ac900be5902191ac9 # Cadastral registry records - 657acb2ac900be5902191ac9 # Cadastral registry records
- 66687bc89111279d600b5062 # keyFromCity_quest
sandbox: sandbox:
- 6582bd252b50c61c565828e2 # Bottle of Le Jean wine - 6582bd252b50c61c565828e2 # Bottle of Le Jean wine

View File

@ -6,17 +6,21 @@ static_weapon_ids:
forced_items: forced_items:
bigmap: bigmap:
# unknown key - containerId: container_custom_DesignStuff_00060 # unknown key
- containerId: custom_multiScene_00058
itemTpl: 593962ca86f774068014d9af itemTpl: 593962ca86f774068014d9af
tarkovstreets: tarkovstreets:
# Backup hideout key - containerId: container_City_SE_02_DesignStuff_00091 # Backup hideout key
- containerId: container_City_SE_02_Primorskiy_51_indoor_00001
itemTpl: 6398fd8ad3de3849057f5128 itemTpl: 6398fd8ad3de3849057f5128
sandbox: sandbox:
- containerId: container_Test_for_export_00002 # Lab technician body - containerId: container_Test_for_export_00002 # Lab technician body
itemTpl: 658199aa38c79576a2569e13 # TerraGroup science office key itemTpl: 658199aa38c79576a2569e13 # TerraGroup science office key
- containerId: container_custom_DesignStuff_00029 # dead body of scav near exit - 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) itemTpl: 6217726288ed9f0845317459 # RSP-30 reactive signal cartridge (Green)

View File

@ -13,7 +13,7 @@
<PackageReference Include="7z.Libs" Version="21.7.0" /> <PackageReference Include="7z.Libs" Version="21.7.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" /> <PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<PackageReference Include="NumSharp" Version="0.30.0" /> <PackageReference Include="NumSharp" Version="0.30.0" />
<PackageReference Include="SevenZipSharp.Interop" Version="19.0.2" /> <PackageReference Include="SevenZipSharp.Interop" Version="19.1.0" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="7.0.0" /> <PackageReference Include="System.Configuration.ConfigurationManager" Version="7.0.0" />
<PackageReference Include="YamlDotNet" Version="13.0.0" /> <PackageReference Include="YamlDotNet" Version="13.0.0" />
</ItemGroup> </ItemGroup>

View File

@ -0,0 +1,52 @@
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<string>? AlwaysEnemies { get; set; }
[JsonProperty("ChancedEnemies", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("ChancedEnemies")]
public List<ChancedEnemy>? ChancedEnemies { get; set; }
[JsonProperty("Warn", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Warn")]
public List<string>? Warn { get; set; }
[JsonProperty("Neutral", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Neutral")]
public List<string>? Neutral { get; set; }
[JsonProperty("AlwaysFriends", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("AlwaysFriends")]
public List<string>? 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; }
}
}

View File

@ -1,4 +1,4 @@
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input namespace LootDumpProcessor.Model.Input
@ -19,7 +19,7 @@ namespace LootDumpProcessor.Model.Input
[JsonProperty("PlaneAirdropChance", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("PlaneAirdropChance", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("PlaneAirdropChance")] [JsonPropertyName("PlaneAirdropChance")]
public double? PlaneAirdropChance { get; set; } public float? PlaneAirdropChance { get; set; }
[JsonProperty("PlaneAirdropMax", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("PlaneAirdropMax", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("PlaneAirdropMax")] [JsonPropertyName("PlaneAirdropMax")]

View File

@ -0,0 +1,68 @@
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; }
}
}

View File

@ -1,14 +1,16 @@
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input namespace LootDumpProcessor.Model.Input
{ {
public class Banner public class Banner
{ {
[JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)] [JsonPropertyName("id")] [JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("id")]
public string? Id { get; set; } public string? Id { get; set; }
[JsonProperty("pic")] [JsonPropertyName("pic")] [JsonProperty("pic", NullValueHandling = NullValueHandling.Ignore)]
public Preview? Pic { get; set; } [JsonPropertyName("pic")]
public Pic? Pic { get; set; }
} }
} }

View File

@ -1,4 +1,4 @@
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input namespace LootDumpProcessor.Model.Input
@ -7,22 +7,58 @@ namespace LootDumpProcessor.Model.Input
{ {
[JsonProperty("AccuracySpeed", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("AccuracySpeed", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("AccuracySpeed")] [JsonPropertyName("AccuracySpeed")]
public double? AccuracySpeed { get; set; } public float? AccuracySpeed { get; set; }
[JsonProperty("Scattering", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("Scattering", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Scattering")] [JsonPropertyName("Scattering")]
public double? Scattering { get; set; } public float? Scattering { get; set; }
[JsonProperty("GainSight", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("GainSight", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("GainSight")] [JsonPropertyName("GainSight")]
public double? GainSight { get; set; } public float? GainSight { get; set; }
[JsonProperty("MarksmanAccuratyCoef", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("MarksmanAccuratyCoef", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("MarksmanAccuratyCoef")] [JsonPropertyName("MarksmanAccuratyCoef")]
public double? MarksmanAccuratyCoef { get; set; } public float? MarksmanAccuratyCoef { get; set; }
[JsonProperty("VisibleDistance", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("VisibleDistance", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("VisibleDistance")] [JsonPropertyName("VisibleDistance")]
public double? VisibleDistance { get; set; } 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<AdditionalHostilitySetting>? AdditionalHostilitySettings { get; set; }
} }
} }

View File

@ -0,0 +1,16 @@
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; }
}
}

View File

@ -1,12 +1,13 @@
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using LootDumpProcessor.Model.Tarkov;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input namespace LootDumpProcessor.Model.Input
{ {
public class ColliderParams public class ColliderParams
{ {
[JsonProperty("_parent", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("Parent", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("_parent")] [JsonPropertyName("Parent")]
public string? Parent { get; set; } public string? Parent { get; set; }
[JsonProperty("_props", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("_props", NullValueHandling = NullValueHandling.Ignore)]

View File

@ -0,0 +1,12 @@
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; }
}
}

View File

@ -5,316 +5,20 @@ namespace LootDumpProcessor.Model.Input
{ {
public class Data public class Data
{ {
[JsonProperty("Enabled", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("serverId", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Enabled")] [JsonPropertyName("serverId")]
public bool? Enabled { get; set; } public string? ServerID { get; set; }
[JsonProperty("EnableCoop", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("serverSettings", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("EnableCoop")] [JsonPropertyName("serverSettings")]
public bool? EnableCoop { get; set; } public ServerSettings? ServerSettings { get; set; }
[JsonProperty("Locked", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("profile", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Locked")] [JsonPropertyName("profile")]
public bool? Locked { get; set; } public object? Profile { get; set; }
[JsonProperty("Insurance", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("locationLoot", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Insurance")] [JsonPropertyName("locationLoot")]
public bool? Insurance { get; set; } public required LocationLoot LocationLoot { 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 Preview? Scene { get; set; }
[JsonProperty("Area", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Area")]
public double? Area { get; set; }
[JsonProperty("RequiredPlayerLevel", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("RequiredPlayerLevel")]
public int? RequiredPlayerLevel { 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<object>? FilterEx { get; set; }
[JsonProperty("waves", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("waves")]
public List<Wave>? Waves { get; set; }
[JsonProperty("limits", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("limits")]
public List<object>? 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("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<object>? 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 double? GlobalLootChanceModifier { get; set; }
[JsonProperty("OldSpawn", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("OldSpawn")]
public bool? OldSpawn { get; set; }
[JsonProperty("NewSpawn", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("NewSpawn")]
public bool? NewSpawn { get; set; }
[JsonProperty("BotMax", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("BotMax")]
public int? BotMax { get; set; }
[JsonProperty("BotStart", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("BotStart")]
public int? BotStart { 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("AccessKeys", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("AccessKeys")]
public List<object>? 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("MinMaxBots", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("MinMaxBots")]
public List<object>? MinMaxBots { get; set; }
[JsonProperty("BotLocationModifier", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("BotLocationModifier")]
public BotLocationModifier? BotLocationModifier { get; set; }
[JsonProperty("exits", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("exits")]
public List<Exit>? Exits { get; set; }
[JsonProperty("DisabledForScav", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("DisabledForScav")]
public bool? DisabledForScav { get; set; }
[JsonProperty("ExitZones", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("ExitZones")]
public ExitZones? ExitZones { get; set; }
[JsonProperty("SpawnPointParams", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("SpawnPointParams")]
public List<SpawnPointParam>? SpawnPointParams { get; set; }
[JsonProperty("AirdropParameters", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("AirdropParameters")]
public List<AirdropParameter>? AirdropParameters { get; set; }
[JsonProperty("Id", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Id")]
public string? Id { get; set; }
[JsonProperty("_Id", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("_Id")]
public string? _Id { get; set; }
[JsonProperty("Loot", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Loot")]
public List<Template>? Loot { get; set; }
[JsonProperty("Banners", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Banners")]
public List<Banner>? Banners { get; set; }
[JsonProperty("BossLocationSpawn", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("BossLocationSpawn")]
public List<object>? BossLocationSpawn { get; set; }
} }
} }

View File

@ -1,4 +1,4 @@
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input namespace LootDumpProcessor.Model.Input
@ -15,7 +15,7 @@ namespace LootDumpProcessor.Model.Input
[JsonProperty("Chance", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("Chance", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Chance")] [JsonPropertyName("Chance")]
public int? Chance { get; set; } public float? Chance { get; set; }
[JsonProperty("MinTime", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("MinTime", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("MinTime")] [JsonPropertyName("MinTime")]
@ -31,7 +31,7 @@ namespace LootDumpProcessor.Model.Input
[JsonProperty("ExfiltrationTime", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("ExfiltrationTime", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("ExfiltrationTime")] [JsonPropertyName("ExfiltrationTime")]
public int? ExfiltrationTime { get; set; } public float? ExfiltrationTime { get; set; }
[JsonProperty("PassageRequirement", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("PassageRequirement", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("PassageRequirement")] [JsonPropertyName("PassageRequirement")]
@ -56,5 +56,33 @@ namespace LootDumpProcessor.Model.Input
[JsonProperty("Count", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("Count", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Count")] [JsonPropertyName("Count")]
public int? Count { get; set; } 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; }
} }
} }

View File

@ -1,12 +0,0 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class ExitZones
{
[JsonProperty("$oid", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("$oid")]
public string? Oid { get; set; }
}
}

12
Model/Input/ItemCost.cs Normal file
View File

@ -0,0 +1,12 @@
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; }
}
}

384
Model/Input/LocationLoot.cs Normal file
View File

@ -0,0 +1,384 @@
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<object>? FilterEx { get; set; }
[JsonProperty("waves", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("waves")]
public List<object>? Waves { get; set; }
[JsonProperty("limits", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("limits")]
public List<object>? 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<object>? 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<object>? 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<object>? MinMaxBots { get; set; }
[JsonProperty("BotLocationModifier", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("BotLocationModifier")]
public BotLocationModifier? BotLocationModifier { get; set; }
[JsonProperty("Exits", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Exits")]
public List<Exit>? Exits { get; set; }
[JsonProperty("DisabledForScav", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("DisabledForScav")]
public bool? DisabledForScav { get; set; }
[JsonProperty("BossLocationSpawn", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("BossLocationSpawn")]
public List<object>? BossLocationSpawn { get; set; }
[JsonProperty("SpawnPointParams", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("SpawnPointParams")]
public List<SpawnPointParam>? SpawnPointParams { get; set; }
[JsonProperty("MaxItemCountInLocation", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("MaxItemCountInLocation")]
public List<object>? MaxItemCountInLocation { get; set; }
[JsonProperty("AirdropParameters", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("AirdropParameters")]
public List<AirdropParameter>? AirdropParameters { get; set; }
[JsonProperty("MatchMakerMinPlayersByWaitTime", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("MatchMakerMinPlayersByWaitTime")]
public List<MatchMakerMinPlayersByWaitTime>? MatchMakerMinPlayersByWaitTime { get; set; }
[JsonProperty("Transits", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Transits")]
public List<Transit>? 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<Template> Loot { get; set; }
[JsonProperty("Banners", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Banners")]
public List<Banner>? Banners { get; set; }
}
}

View File

@ -0,0 +1,68 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class MapSettings
{
[JsonProperty("MapID", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("MapID")]
public string? MapID { get; set; }
[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; }
}
}

View File

@ -0,0 +1,16 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class MatchMakerMinPlayersByWaitTime
{
[JsonProperty("time", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("time")]
public int? Time { get; set; }
[JsonProperty("minPlayers", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("minPlayers")]
public int? MinPlayers { get; set; }
}
}

View File

@ -0,0 +1,24 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class NonWaveGroupScenario
{
[JsonProperty("MinToBeGroup", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("MinToBeGroup")]
public int? MinToBeGroup { get; set; }
[JsonProperty("MaxToBeGroup", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("MaxToBeGroup")]
public int? MaxToBeGroup { get; set; }
[JsonProperty("Chance", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Chance")]
public float? Chance { get; set; }
[JsonProperty("Enabled", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Enabled")]
public bool? Enabled { get; set; }
}
}

16
Model/Input/Pic.cs Normal file
View File

@ -0,0 +1,16 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class Pic
{
[JsonProperty("path", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("path")]
public string? Path { get; set; }
[JsonProperty("rcid", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("rcid")]
public string? Rcid { get; set; }
}
}

View File

@ -1,4 +1,4 @@
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input namespace LootDumpProcessor.Model.Input

View File

@ -1,4 +1,5 @@
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using LootDumpProcessor.Model.Tarkov;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input namespace LootDumpProcessor.Model.Input
@ -11,6 +12,6 @@ namespace LootDumpProcessor.Model.Input
[JsonProperty("Radius", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("Radius", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Radius")] [JsonPropertyName("Radius")]
public double? Radius { get; set; } public float? Radius { get; set; }
} }
} }

View File

@ -0,0 +1,16 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class Requirements
{
[JsonProperty("CompletedQuests", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("CompletedQuests")]
public List<CompletedQuest>? CompletedQuests { get; set; }
[JsonProperty("Standings", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Standings")]
public object? Standings { get; set; }
}
}

View File

@ -1,4 +1,4 @@
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input namespace LootDumpProcessor.Model.Input
@ -9,12 +9,12 @@ namespace LootDumpProcessor.Model.Input
[JsonPropertyName("err")] [JsonPropertyName("err")]
public int? Err { get; set; } public int? Err { get; set; }
[JsonProperty("errmsg")]
[JsonPropertyName("errmsg")]
public object? errmsg { get; set; }
[JsonProperty("data", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("data", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("data")] [JsonPropertyName("data")]
public Data? Data { get; set; } public required Data Data { get; set; }
[JsonProperty("errmsg", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("errmsg")]
public object? Errmsg { get; set; }
} }
} }

16
Model/Input/Scene.cs Normal file
View File

@ -0,0 +1,16 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class Scene
{
[JsonProperty("path", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("path")]
public string? Path { get; set; }
[JsonProperty("rcid", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("rcid")]
public string? Rcid { get; set; }
}
}

View File

@ -0,0 +1,20 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class ServerMapBTRSettings
{
[JsonProperty("Develop", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Develop")]
public MapSettings? Develop { get; set; }
[JsonProperty("TarkovStreets", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("TarkovStreets")]
public MapSettings? TarkovStreets { get; set; }
[JsonProperty("Woods", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Woods")]
public MapSettings? Woods { get; set; }
}
}

View File

@ -0,0 +1,16 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class ServerSettings
{
[JsonProperty("TraderServerSettings", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("TraderServerSettings")]
public TraderServerSettings? TraderServerSettings { get; set; }
[JsonProperty("BTRServerSettings", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("BTRServerSettings")]
public BTRServerSettings? BTRServerSettings { get; set; }
}
}

View File

@ -0,0 +1,11 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class ServiceItemCost
{
[JsonProperty]
public Dictionary<string, ItemCost>? Costs { get; set; }
}
}

View File

@ -1,4 +1,4 @@
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
using Newtonsoft.Json; using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input namespace LootDumpProcessor.Model.Input
@ -15,7 +15,7 @@ namespace LootDumpProcessor.Model.Input
[JsonProperty("Rotation", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("Rotation", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Rotation")] [JsonPropertyName("Rotation")]
public double? Rotation { get; set; } public float? Rotation { get; set; }
[JsonProperty("Sides", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("Sides", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Sides")] [JsonPropertyName("Sides")]
@ -31,10 +31,18 @@ namespace LootDumpProcessor.Model.Input
[JsonProperty("DelayToCanSpawnSec", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("DelayToCanSpawnSec", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("DelayToCanSpawnSec")] [JsonPropertyName("DelayToCanSpawnSec")]
public int? DelayToCanSpawnSec { get; set; } public float? DelayToCanSpawnSec { get; set; }
[JsonProperty("ColliderParams", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("ColliderParams", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("ColliderParams")] [JsonPropertyName("ColliderParams")]
public ColliderParams? ColliderParams { get; set; } public ColliderParams? ColliderParams { get; set; }
[JsonProperty("BotZoneName", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("BotZoneName")]
public string? BotZoneName { get; set; }
[JsonProperty("CorePointId", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("CorePointId")]
public int? CorePointId { get; set; }
} }
} }

12
Model/Input/Standing.cs Normal file
View File

@ -0,0 +1,12 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class Standing
{
[JsonProperty("Value", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Value")]
public float? Value { get; set; }
}
}

View File

@ -0,0 +1,12 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class TraderServerSettings
{
[JsonProperty("TraderServices", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("TraderServices")]
public TraderServices? TraderServices { get; set; }
}
}

View File

@ -0,0 +1,28 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class TraderService
{
[JsonProperty("TraderId", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("TraderId")]
public string? TraderID { get; set; }
[JsonProperty("TraderServiceType", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("TraderServiceType")]
public string? TraderServiceType { get; set; }
[JsonProperty("Requirements", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Requirements")]
public Requirements? Requirements { get; set; }
[JsonProperty("ServiceItemCost", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("ServiceItemCost")]
public object? ServiceItemCost { get; set; }
[JsonProperty("UniqueItems", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("UniqueItems")]
public List<object>? UniqueItems { get; set; }
}
}

View File

@ -0,0 +1,36 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class TraderServices
{
[JsonProperty("ExUsecLoyalty", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("ExUsecLoyalty")]
public TraderService? ExUsecLoyalty { get; set; }
[JsonProperty("ZryachiyAid", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("ZryachiyAid")]
public TraderService? ZryachiyAid { get; set; }
[JsonProperty("CultistsAid", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("CultistsAid")]
public TraderService? CultistsAid { get; set; }
[JsonProperty("PlayerTaxi", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("PlayerTaxi")]
public TraderService? PlayerTaxi { get; set; }
[JsonProperty("BtrItemsDelivery", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("BtrItemsDelivery")]
public TraderService? BtrItemsDelivery { get; set; }
[JsonProperty("BtrBotCover", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("BtrBotCover")]
public TraderService? BtrBotCover { get; set; }
[JsonProperty("TransitItemsDelivery", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("TransitItemsDelivery")]
public TraderService? TransitItemsDelivery { get; set; }
}
}

44
Model/Input/Transit.cs Normal file
View File

@ -0,0 +1,44 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class Transit
{
[JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("id")]
public int? Id { get; set; }
[JsonProperty("active", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("active")]
public bool? Active { get; set; }
[JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("name")]
public string? Name { get; set; }
[JsonProperty("location", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("location")]
public string? Location { get; set; }
[JsonProperty("description", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("description")]
public string? Description { get; set; }
[JsonProperty("activateAfterSec", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("activateAfterSec")]
public int? ActivateAfterSec { get; set; }
[JsonProperty("target", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("target")]
public string? Target { get; set; }
[JsonProperty("time", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("time")]
public int? Time { get; set; }
[JsonProperty("conditions", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("conditions")]
public string? Conditions { get; set; }
}
}

12
Model/Input/Update.cs Normal file
View File

@ -0,0 +1,12 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class Update
{
[JsonProperty("StackObjectsCount", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("StackObjectsCount")]
public int? StackObjectsCount { get; set; }
}
}

View File

@ -1,48 +0,0 @@
using System.Text.Json.Serialization;
using Newtonsoft.Json;
namespace LootDumpProcessor.Model.Input
{
public class Wave
{
[JsonProperty("number", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("number")]
public int? Number { get; set; }
[JsonProperty("time_min", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("time_min")]
public int? TimeMin { get; set; }
[JsonProperty("time_max", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("time_max")]
public int? TimeMax { get; set; }
[JsonProperty("slots_min", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("slots_min")]
public int? SlotsMin { get; set; }
[JsonProperty("slots_max", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("slots_max")]
public int? SlotsMax { get; set; }
[JsonProperty("SpawnPoints", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("SpawnPoints")]
public string? SpawnPoints { get; set; }
[JsonProperty("BotSide", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("BotSide")]
public string? BotSide { get; set; }
[JsonProperty("BotPreset", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("BotPreset")]
public string? BotPreset { get; set; }
[JsonProperty("isPlayers", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("isPlayers")]
public bool? IsPlayers { get; set; }
[JsonProperty("WildSpawnType", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("WildSpawnType")]
public string? WildSpawnType { get; set; }
}
}

View File

@ -14,6 +14,10 @@ namespace LootDumpProcessor.Model
[JsonPropertyName("_tpl")] [JsonPropertyName("_tpl")]
public string? Tpl { get; set; } public string? Tpl { get; set; }
[JsonProperty("upd", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("upd")]
public Upd? Upd { get; set; }
[JsonProperty("parentId", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("parentId", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("parentId")] [JsonPropertyName("parentId")]
public string? ParentId { get; set; } public string? ParentId { get; set; }
@ -26,10 +30,6 @@ namespace LootDumpProcessor.Model
[JsonPropertyName("location")] [JsonPropertyName("location")]
public object? Location { get; set; } public object? Location { get; set; }
[JsonProperty("upd", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("upd")]
public Upd? Upd { get; set; }
public override bool Equals(object? obj) public override bool Equals(object? obj)
{ {
if (obj is not Item parsed) if (obj is not Item parsed)

View File

@ -5,12 +5,12 @@ namespace LootDumpProcessor.Model.Processing;
public class BasicInfo public class BasicInfo
{ {
public string Map { get; set; } public required string Map { get; set; }
public string FileHash { get; set; } public required string FileHash { get; set; }
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)] [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public RootData Data { get; set; } public RootData? Data { get; set; }
public DateTime Date { get; set; } public DateTime Date { get; set; }
public string FileName { get; set; } public required string FileName { get; set; }
public override bool Equals(object? obj) public override bool Equals(object? obj)
{ {

View File

@ -51,9 +51,9 @@ namespace LootDumpProcessor.Model
[JsonPropertyName("Root")] [JsonPropertyName("Root")]
public string? Root { get; set; } public string? Root { get; set; }
[JsonProperty("Items", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("Items")]
[JsonPropertyName("Items")] [JsonPropertyName("Items")]
public List<Item>? Items { get; set; } public required List<Item> Items { get; set; }
protected bool Equals(Template other) protected bool Equals(Template other)
{ {

View File

@ -7,15 +7,15 @@ namespace LootDumpProcessor.Model
{ {
[JsonProperty("x", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("x", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("x")] [JsonPropertyName("x")]
public double? X { get; set; } public float? X { get; set; }
[JsonProperty("y", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("y", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("y")] [JsonPropertyName("y")]
public double? Y { get; set; } public float? Y { get; set; }
[JsonProperty("z", NullValueHandling = NullValueHandling.Ignore)] [JsonProperty("z", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("z")] [JsonPropertyName("z")]
public double? Z { get; set; } public float? Z { get; set; }
public object Clone() public object Clone()
{ {

View File

@ -54,9 +54,17 @@ public class MultithreadSteppedDumpProcessor : IDumpProcessor
{ {
if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Debug)) if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Debug))
LoggerFactory.GetInstance().Log($"Processing static data for file {dumped.BasicInfo.FileName}", LogLevel.Debug); LoggerFactory.GetInstance().Log($"Processing static data for file {dumped.BasicInfo.FileName}", LogLevel.Debug);
var dataDump = _jsonSerializer.Deserialize<RootData>(File.ReadAllText(dumped.BasicInfo.FileName)); var dataDump = _jsonSerializer.Deserialize<RootData>(File.ReadAllText(dumped.BasicInfo.FileName));
//var mapName = dataDump.Data.Name;
var mapId = dataDump.Data.Id.ToLower(); if (dataDump == null)
{
if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Error))
LoggerFactory.GetInstance().Log($"Failed to deserialize data from file {dumped.BasicInfo.FileName}", LogLevel.Error);
return; // Skip processing this dump
}
var mapId = dataDump.Data.LocationLoot.Id.ToLower();
// the if statement below takes care of processing "forced" or real static data for each map, only need // the if statement below takes care of processing "forced" or real static data for each map, only need
// to do this once per map, we dont care about doing it again // to do this once per map, we dont care about doing it again

View File

@ -11,10 +11,11 @@ public class FileProcessor : IFileProcessor
{ {
if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Debug)) if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Debug))
LoggerFactory.GetInstance().Log($"Processing file {parsedData.FileName}...", LogLevel.Debug); LoggerFactory.GetInstance().Log($"Processing file {parsedData.FileName}...", LogLevel.Debug);
List<Template> looseLoot = new List<Template>(); List<Template> looseLoot = new List<Template>();
List<Template> staticLoot = new List<Template>(); List<Template> staticLoot = new List<Template>();
foreach (var item in parsedData.Data.Data.Loot) foreach (var item in parsedData.Data.Data.LocationLoot.Loot)
{ {
if (item.IsContainer ?? false) if (item.IsContainer ?? false)
staticLoot.Add(item); staticLoot.Add(item);

View File

@ -33,9 +33,9 @@ public static class StaticLootProcessor
public static Tuple<string, MapStaticLoot> CreateStaticWeaponsAndStaticForcedContainers(RootData rawMapDump) public static Tuple<string, MapStaticLoot> CreateStaticWeaponsAndStaticForcedContainers(RootData rawMapDump)
{ {
var mapName = rawMapDump.Data.Name; var mapName = rawMapDump.Data.LocationLoot.Name;
var mapId = rawMapDump.Data.Id.ToLower(); var mapId = rawMapDump.Data.LocationLoot.Id.ToLower();
var staticLootPositions = (from li in rawMapDump.Data.Loot var staticLootPositions = (from li in rawMapDump.Data.LocationLoot.Loot
where li.IsContainer ?? false where li.IsContainer ?? false
select li).ToList(); select li).ToList();
var staticWeapons = new List<Template>(); var staticWeapons = new List<Template>();
@ -62,7 +62,7 @@ public static class StaticLootProcessor
public static List<Template> CreateDynamicStaticContainers(RootData rawMapDump) public static List<Template> CreateDynamicStaticContainers(RootData rawMapDump)
{ {
var data = (from li in rawMapDump.Data.Loot var data = (from li in rawMapDump.Data.LocationLoot.Loot
where (li.IsContainer ?? false) && (!LootDumpProcessorContext.GetStaticWeaponIds().Contains(li.Items[0].Tpl)) where (li.IsContainer ?? false) && (!LootDumpProcessorContext.GetStaticWeaponIds().Contains(li.Items[0].Tpl))
select li).ToList(); select li).ToList();

View File

@ -19,6 +19,16 @@ public class JsonFileIntakeReader : IIntakeReader
public bool Read(string file, out BasicInfo basicInfo) public bool Read(string file, out BasicInfo basicInfo)
{ {
var fileData = File.ReadAllText(file); var fileData = File.ReadAllText(file);
if (fileData == null)
{
if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Error))
LoggerFactory.GetInstance().Log($"Couldnt parse date from file: {file}", LogLevel.Error);
basicInfo = null;
return false;
}
// If the file format changes it may screw up this date parser // If the file format changes it may screw up this date parser
if (!FileDateParser.TryParseFileDate(file, out var date)) if (!FileDateParser.TryParseFileDate(file, out var date))
{ {
@ -27,25 +37,27 @@ public class JsonFileIntakeReader : IIntakeReader
} }
var fi = _jsonSerializer.Deserialize<RootData>(fileData); var fi = _jsonSerializer.Deserialize<RootData>(fileData);
if (fi.Data?.Name != null && (!_ignoredLocations?.Contains(fi.Data.Name) ?? true)) if (fi?.Data?.LocationLoot?.Name != null && (!_ignoredLocations?.Contains(fi.Data.LocationLoot.Name) ?? true))
{ {
if (!_totalMapDumpsCounter.TryGetValue(fi.Data.Name, out var counter)) if (!_totalMapDumpsCounter.TryGetValue(fi.Data.LocationLoot.Name, out var counter))
{ {
counter = 0; counter = 0;
_totalMapDumpsCounter[fi.Data.Name] = counter; _totalMapDumpsCounter[fi.Data.LocationLoot.Name] = counter;
} }
if (counter < (LootDumpProcessorContext.GetConfig().ReaderConfig.IntakeReaderConfig?.MaxDumpsPerMap ?? 1500)) if (counter < (LootDumpProcessorContext.GetConfig().ReaderConfig.IntakeReaderConfig?.MaxDumpsPerMap ?? 1500))
{ {
basicInfo = new BasicInfo basicInfo = new BasicInfo
{ {
Map = fi.Data.Id.ToLower(), Map = fi.Data.LocationLoot.Id.ToLower(),
FileHash = ProcessorUtil.HashFile(fileData), FileHash = ProcessorUtil.HashFile(fileData),
Data = fi, Data = fi,
Date = date.Value, Date = date ?? DateTime.MinValue,
FileName = file FileName = file
}; };
_totalMapDumpsCounter[fi.Data.Name] += 1;
_totalMapDumpsCounter[fi.Data.LocationLoot.Name] += 1;
if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Debug)) if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Debug))
LoggerFactory.GetInstance().Log($"File {file} fully read, returning data", LogLevel.Debug); LoggerFactory.GetInstance().Log($"File {file} fully read, returning data", LogLevel.Debug);
@ -54,17 +66,15 @@ public class JsonFileIntakeReader : IIntakeReader
// Map dump limit reached, exit // Map dump limit reached, exit
if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Debug)) if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Debug))
LoggerFactory.GetInstance().Log($"Ignoring file {file} as the file cap for map {fi.Data.Id} has been reached", LogLevel.Debug); LoggerFactory.GetInstance().Log($"Ignoring file {file} as the file cap for map {fi.Data.LocationLoot.Id} has been reached", LogLevel.Debug);
basicInfo = null;
basicInfo = null;
return false; return false;
} }
if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Warning)) if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Warning))
LoggerFactory.GetInstance().Log( LoggerFactory.GetInstance().Log($"File {file} was not eligible for dump data, it did not contain a location name or it was on ignored locations config", LogLevel.Warning);
$"File {file} was not eligible for dump data, it did not contain a location name or it was on ignored locations config",
LogLevel.Warning
);
basicInfo = null; basicInfo = null;
return false; return false;
} }

View File

@ -9,6 +9,7 @@ public class NetJsonSerializer : IJsonSerializer
private static JsonSerializerOptions _serializeOptions = new() private static JsonSerializerOptions _serializeOptions = new()
{ {
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
NumberHandling = JsonNumberHandling.AllowNamedFloatingPointLiterals,
Converters = Converters =
{ {
new NetJsonKeyConverter(), new NetJsonKeyConverter(),