Compare commits

...

7 Commits

Author SHA1 Message Date
DrakiaXYZ
90e0c2c4b9 Resolve missing static forced containers/weapons when using loot dumps from multiple versions
Instead of only using the static forced containers from the first dump, merge all static forced containers so we can utilize dumps from multiple versions
2024-11-04 20:41:05 -08:00
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 1136 additions and 474 deletions

View File

@ -14,6 +14,8 @@ bigmap:
- 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
woods:
@ -22,6 +24,9 @@ woods:
- 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
@ -46,6 +51,8 @@ shoreline:
- 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
interchange:
- 5ae9a18586f7746e381e16a3 # OLI cargo manifests
@ -57,10 +64,16 @@ interchange:
- 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
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 # item_barter_quest_blood_nf2024
factory4_night:
- 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)
- 6399f54b0a36db13c823ad21 # Radio transmitter body (Key to the Tower)
- 64e74a64aac4cd0a7264ecdf # item_quest_clock_12 (Out of Time)
- 578f87a3245977356274f2cb #
- 661666458c2aa9cb1602503b # Hard drive
# - 64b91627dd13d43b9d01d6d1 # Toughbook reinforced laptop (Event quest) REMOVED BY BSG
@ -96,6 +108,7 @@ laboratory:
- 5eff135be0d3331e9d282b7b # Flash drive marked with blue tape (TerraGroup employee)
- 6398a4cfb5992f573c6562b3 # Secured tape
- 64e74a44c2b4f829615ec334 # Picture 8
- 666879d498b97e3a8f09f1ae # Item_barter_medical_transilluminator_quest
#- 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
@ -124,6 +137,7 @@ tarkovstreets:
- 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

View File

@ -6,17 +6,21 @@ static_weapon_ids:
forced_items:
bigmap:
# unknown key
- containerId: custom_multiScene_00058
- containerId: container_custom_DesignStuff_00060 # unknown key
itemTpl: 593962ca86f774068014d9af
tarkovstreets:
# Backup hideout key
- containerId: container_City_SE_02_Primorskiy_51_indoor_00001
- 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_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)

View File

@ -13,7 +13,7 @@
<PackageReference Include="7z.Libs" Version="21.7.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.2" />
<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="YamlDotNet" Version="13.0.0" />
</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;
namespace LootDumpProcessor.Model.Input
@ -19,7 +19,7 @@ namespace LootDumpProcessor.Model.Input
[JsonProperty("PlaneAirdropChance", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("PlaneAirdropChance")]
public double? PlaneAirdropChance { get; set; }
public float? PlaneAirdropChance { get; set; }
[JsonProperty("PlaneAirdropMax", NullValueHandling = NullValueHandling.Ignore)]
[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;
namespace LootDumpProcessor.Model.Input
{
public class Banner
{
[JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)] [JsonPropertyName("id")]
[JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("id")]
public string? Id { get; set; }
[JsonProperty("pic")] [JsonPropertyName("pic")]
public Preview? Pic { get; set; }
[JsonProperty("pic", NullValueHandling = NullValueHandling.Ignore)]
[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;
namespace LootDumpProcessor.Model.Input
@ -7,22 +7,58 @@ namespace LootDumpProcessor.Model.Input
{
[JsonProperty("AccuracySpeed", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("AccuracySpeed")]
public double? AccuracySpeed { get; set; }
public float? AccuracySpeed { get; set; }
[JsonProperty("Scattering", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Scattering")]
public double? Scattering { get; set; }
public float? Scattering { get; set; }
[JsonProperty("GainSight", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("GainSight")]
public double? GainSight { get; set; }
public float? GainSight { get; set; }
[JsonProperty("MarksmanAccuratyCoef", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("MarksmanAccuratyCoef")]
public double? MarksmanAccuratyCoef { get; set; }
public float? MarksmanAccuratyCoef { get; set; }
[JsonProperty("VisibleDistance", NullValueHandling = NullValueHandling.Ignore)]
[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;
namespace LootDumpProcessor.Model.Input
{
public class ColliderParams
{
[JsonProperty("_parent", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("_parent")]
[JsonProperty("Parent", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Parent")]
public string? Parent { get; set; }
[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
{
[JsonProperty("Enabled", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Enabled")]
public bool? Enabled { get; set; }
[JsonProperty("serverId", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("serverId")]
public string? ServerID { get; set; }
[JsonProperty("EnableCoop", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("EnableCoop")]
public bool? EnableCoop { get; set; }
[JsonProperty("serverSettings", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("serverSettings")]
public ServerSettings? ServerSettings { get; set; }
[JsonProperty("Locked", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Locked")]
public bool? Locked { get; set; }
[JsonProperty("profile", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("profile")]
public object? Profile { 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 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; }
[JsonProperty("locationLoot", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("locationLoot")]
public required LocationLoot LocationLoot { get; set; }
}
}

View File

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

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;
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;
namespace LootDumpProcessor.Model.Input
@ -11,6 +12,6 @@ namespace LootDumpProcessor.Model.Input
[JsonProperty("Radius", NullValueHandling = NullValueHandling.Ignore)]
[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;
namespace LootDumpProcessor.Model.Input
@ -9,12 +9,12 @@ namespace LootDumpProcessor.Model.Input
[JsonPropertyName("err")]
public int? Err { get; set; }
[JsonProperty("errmsg")]
[JsonPropertyName("errmsg")]
public object? errmsg { get; set; }
[JsonProperty("data", NullValueHandling = NullValueHandling.Ignore)]
[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;
namespace LootDumpProcessor.Model.Input
@ -15,7 +15,7 @@ namespace LootDumpProcessor.Model.Input
[JsonProperty("Rotation", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Rotation")]
public double? Rotation { get; set; }
public float? Rotation { get; set; }
[JsonProperty("Sides", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("Sides")]
@ -31,10 +31,18 @@ namespace LootDumpProcessor.Model.Input
[JsonProperty("DelayToCanSpawnSec", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("DelayToCanSpawnSec")]
public int? DelayToCanSpawnSec { get; set; }
public float? DelayToCanSpawnSec { get; set; }
[JsonProperty("ColliderParams", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("ColliderParams")]
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")]
public string? Tpl { get; set; }
[JsonProperty("upd", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("upd")]
public Upd? Upd { get; set; }
[JsonProperty("parentId", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("parentId")]
public string? ParentId { get; set; }
@ -26,10 +30,6 @@ namespace LootDumpProcessor.Model
[JsonPropertyName("location")]
public object? Location { get; set; }
[JsonProperty("upd", NullValueHandling = NullValueHandling.Ignore)]
[JsonPropertyName("upd")]
public Upd? Upd { get; set; }
public override bool Equals(object? obj)
{
if (obj is not Item parsed)

View File

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

View File

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

View File

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

View File

@ -54,22 +54,43 @@ public class MultithreadSteppedDumpProcessor : IDumpProcessor
{
if (LoggerFactory.GetInstance().CanBeLogged(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 mapName = dataDump.Data.Name;
var mapId = dataDump.Data.Id.ToLower();
// 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
var dataDump = _jsonSerializer.Deserialize<RootData>(File.ReadAllText(dumped.BasicInfo.FileName));
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();
// Because we may use multiple version dumps for map data, merge the static loot between dumps
lock (staticContainersLock)
{
if (!staticContainers.ContainsKey(mapId))
if (!staticContainers.TryGetValue(mapId, out var mapStaticLoot))
{
if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Info))
LoggerFactory.GetInstance().Log($"Doing first time process for map {mapId} of real static data", LogLevel.Info);
var mapStaticContainers = StaticLootProcessor.CreateStaticWeaponsAndStaticForcedContainers(dataDump);
staticContainers[mapId] = new MapStaticLoot
{
StaticWeapons = new List<Template>(),
StaticForced = new List<StaticForced>()
};
}
else
{
// .Item1 = map name
// .Item2 = force/weapon static arrays
staticContainers[mapStaticContainers.Item1] = mapStaticContainers.Item2;
var mapStaticContainers = StaticLootProcessor.CreateStaticWeaponsAndStaticForcedContainers(dataDump);
var newStaticWeapons = mapStaticContainers.Item2.StaticWeapons.Where(x => !mapStaticLoot.StaticWeapons.Exists(y => y.Id == x.Id));
var newStaticForced = mapStaticContainers.Item2.StaticForced.Where(x => !mapStaticLoot.StaticForced.Exists(y => y.ContainerId == x.ContainerId));
mapStaticLoot.StaticWeapons.AddRange(newStaticWeapons);
mapStaticLoot.StaticForced.AddRange(newStaticForced);
}
}

View File

@ -11,10 +11,11 @@ public class FileProcessor : IFileProcessor
{
if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Debug))
LoggerFactory.GetInstance().Log($"Processing file {parsedData.FileName}...", LogLevel.Debug);
List<Template> looseLoot = 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)
staticLoot.Add(item);

View File

@ -33,9 +33,9 @@ public static class StaticLootProcessor
public static Tuple<string, MapStaticLoot> CreateStaticWeaponsAndStaticForcedContainers(RootData rawMapDump)
{
var mapName = rawMapDump.Data.Name;
var mapId = rawMapDump.Data.Id.ToLower();
var staticLootPositions = (from li in rawMapDump.Data.Loot
var mapName = rawMapDump.Data.LocationLoot.Name;
var mapId = rawMapDump.Data.LocationLoot.Id.ToLower();
var staticLootPositions = (from li in rawMapDump.Data.LocationLoot.Loot
where li.IsContainer ?? false
select li).ToList();
var staticWeapons = new List<Template>();
@ -62,7 +62,7 @@ public static class StaticLootProcessor
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))
select li).ToList();

View File

@ -19,6 +19,16 @@ public class JsonFileIntakeReader : IIntakeReader
public bool Read(string file, out BasicInfo basicInfo)
{
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 (!FileDateParser.TryParseFileDate(file, out var date))
{
@ -27,25 +37,27 @@ public class JsonFileIntakeReader : IIntakeReader
}
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;
_totalMapDumpsCounter[fi.Data.Name] = counter;
_totalMapDumpsCounter[fi.Data.LocationLoot.Name] = counter;
}
if (counter < (LootDumpProcessorContext.GetConfig().ReaderConfig.IntakeReaderConfig?.MaxDumpsPerMap ?? 1500))
{
basicInfo = new BasicInfo
{
Map = fi.Data.Id.ToLower(),
Map = fi.Data.LocationLoot.Id.ToLower(),
FileHash = ProcessorUtil.HashFile(fileData),
Data = fi,
Date = date.Value,
Date = date ?? DateTime.MinValue,
FileName = file
};
_totalMapDumpsCounter[fi.Data.Name] += 1;
_totalMapDumpsCounter[fi.Data.LocationLoot.Name] += 1;
if (LoggerFactory.GetInstance().CanBeLogged(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
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);
basicInfo = null;
LoggerFactory.GetInstance().Log($"Ignoring file {file} as the file cap for map {fi.Data.LocationLoot.Id} has been reached", LogLevel.Debug);
basicInfo = null;
return false;
}
if (LoggerFactory.GetInstance().CanBeLogged(LogLevel.Warning))
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
);
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);
basicInfo = null;
return false;
}

View File

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