Files
SPT-Server-Build/Libraries/SPTarkov.Server.Core/Models/Eft/Common/LocationBase.cs
T

1200 lines
33 KiB
C#

using System.Text.Json.Serialization;
using SPTarkov.Server.Core.Models.Common;
using SPTarkov.Server.Core.Models.Enums;
using SPTarkov.Server.Core.Utils.Json;
namespace SPTarkov.Server.Core.Models.Eft.Common;
public record LocationBase
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("AccessKeys")]
public IEnumerable<string>? AccessKeys { get; set; }
[JsonPropertyName("AccessKeysPvE")]
public IEnumerable<string>? AccessKeysPvE { get; set; }
[JsonPropertyName("AirdropParameters")]
public List<AirdropParameter>? AirdropParameters { get; set; }
[JsonPropertyName("NewSpawnForPlayers")]
public bool? NewSpawnForPlayers { get; set; }
[JsonPropertyName("OfflineNewSpawn")]
public bool? OfflineNewSpawn { get; set; }
[JsonPropertyName("OfflineOldSpawn")]
public bool? OfflineOldSpawn { get; set; }
[JsonPropertyName("Area")]
public double? Area { get; set; }
[JsonPropertyName("AveragePlayTime")]
public double? AveragePlayTime { get; set; }
[JsonPropertyName("AveragePlayerLevel")]
public double? AveragePlayerLevel { get; set; }
[JsonPropertyName("Banners")]
public List<Banner>? Banners { get; set; }
[JsonPropertyName("BossLocationSpawn")]
public List<BossLocationSpawn> BossLocationSpawn { get; set; }
[JsonPropertyName("secretExits")]
public List<Exit>? SecretExits { get; set; }
[JsonPropertyName("BotStartPlayer")]
public int? BotStartPlayer { get; set; }
[JsonPropertyName("BotAssault")]
public int? BotAssault { get; set; }
/// <summary>
/// Weighting on how likely a bot will be Easy difficulty
/// </summary>
[JsonPropertyName("BotEasy")]
public int? BotEasy { get; set; }
/// <summary>
/// Weighting on how likely a bot will be Hard difficulty
/// </summary>
[JsonPropertyName("BotHard")]
public int? BotHard { get; set; }
/// <summary>
/// Weighting on how likely a bot will be Impossible difficulty
/// </summary>
[JsonPropertyName("BotImpossible")]
public int? BotImpossible { get; set; }
[JsonPropertyName("BotLocationModifier")]
public BotLocationModifier BotLocationModifier { get; set; }
[JsonPropertyName("BotMarksman")]
public int? BotMarksman { get; set; }
/// <summary>
/// Maximum Number of bots that are currently alive/loading/delayed
/// </summary>
[JsonPropertyName("BotMax")]
public int BotMax { get; set; }
/// <summary>
/// Is not used in 33420
/// </summary>
[JsonPropertyName("BotMaxPlayer")]
public int? BotMaxPlayer { get; set; }
/// <summary>
/// Is not used in 33420
/// </summary>
[JsonPropertyName("BotMaxTimePlayer")]
public int? BotMaxTimePlayer { get; set; }
/// <summary>
/// Weighting on how likely a bot will be Normal difficulty
/// </summary>
[JsonPropertyName("BotNormal")]
public int? BotNormal { get; set; }
/// <summary>
/// How many bot slots that need to be open before trying to spawn new bots.
/// </summary>
[JsonPropertyName("BotSpawnCountStep")]
public int? BotSpawnCountStep { get; set; }
/// <summary>
/// How often to check if bots are spawn-able. In seconds
/// </summary>
[JsonPropertyName("BotSpawnPeriodCheck")]
public int? BotSpawnPeriodCheck { get; set; }
/// <summary>
/// The bot spawn will toggle on and off in intervals of Off(Min/Max) and On(Min/Max)
/// </summary>
[JsonPropertyName("BotSpawnTimeOffMax")]
public int? BotSpawnTimeOffMax { get; set; }
[JsonPropertyName("BotSpawnTimeOffMin")]
public int? BotSpawnTimeOffMin { get; set; }
[JsonPropertyName("BotSpawnTimeOnMax")]
public int? BotSpawnTimeOnMax { get; set; }
[JsonPropertyName("BotSpawnTimeOnMin")]
public int? BotSpawnTimeOnMin { get; set; }
/// <summary>
/// How soon bots will be allowed to spawn
/// </summary>
[JsonPropertyName("BotStart")]
public int BotStart { get; set; }
/// <summary>
/// After this long bots will no longer spawn
/// </summary>
[JsonPropertyName("BotStop")]
public int? BotStop { get; set; }
[JsonPropertyName("Description")]
public string? Description { get; set; }
[JsonPropertyName("DisabledForScav")]
public bool? DisabledForScav { get; set; }
[JsonPropertyName("EventTrapsData")]
public EventTrapsData? EventTrapsData { get; set; }
[JsonPropertyName("DisabledScavExits")]
public string? DisabledScavExits { get; set; }
[JsonPropertyName("Enabled")]
public bool Enabled { get; set; }
[JsonPropertyName("EnableCoop")]
public bool? EnableCoop { get; set; }
[JsonPropertyName("GlobalLootChanceModifier")]
public double? GlobalLootChanceModifier { get; set; }
[JsonPropertyName("GlobalLootChanceModifierPvE")]
public double? GlobalLootChanceModifierPvE { get; set; }
[JsonPropertyName("GlobalContainerChanceModifier")]
public double? GlobalContainerChanceModifier { get; set; }
[JsonPropertyName("HeatmapCellSize")]
public XYZ? HeatmapCellSize { get; set; }
[JsonPropertyName("HeatmapLayers")]
public List<string>? HeatmapLayers { get; set; }
[JsonPropertyName("IconX")]
public double? IconX { get; set; }
[JsonPropertyName("IconY")]
public double? IconY { get; set; }
[JsonPropertyName("Id")]
public required string Id { get; set; }
[JsonPropertyName("Insurance")]
public bool Insurance { get; set; }
[JsonPropertyName("IsSecret")]
public bool? IsSecret { get; set; }
[JsonPropertyName("Locked")]
public bool? Locked { get; set; }
[JsonPropertyName("Loot")]
public IEnumerable<SpawnpointTemplate>? Loot { get; set; }
[JsonPropertyName("MatchMakerMinPlayersByWaitTime")]
public List<MinPlayerWaitTime>? MatchMakerMinPlayersByWaitTime { get; set; }
[JsonPropertyName("MaxBotPerZone")]
public int? MaxBotPerZone { get; set; }
[JsonPropertyName("MaxDistToFreePoint")]
public int? MaxDistToFreePoint { get; set; }
[JsonPropertyName("MaxPlayers")]
public int? MaxPlayers { get; set; }
[JsonPropertyName("MinDistToExitPoint")]
public double? MinDistToExitPoint { get; set; }
[JsonPropertyName("MinDistToFreePoint")]
public double? MinDistToFreePoint { get; set; }
[JsonPropertyName("MinMaxBots")]
public List<MinMaxBot> MinMaxBots { get; set; }
[JsonPropertyName("MinPlayers")]
public int? MinPlayers { get; set; }
[JsonPropertyName("MaxCoopGroup")]
public int? MaxCoopGroup { get; set; }
[JsonPropertyName("Name")]
public string? Name { get; set; }
[JsonPropertyName("NonWaveGroupScenario")]
public NonWaveGroupScenario? NonWaveGroupScenario { get; set; }
[JsonPropertyName("NewSpawn")]
public bool? NewSpawn { get; set; }
[JsonPropertyName("OcculsionCullingEnabled")]
public bool? OcculsionCullingEnabled { get; set; }
[JsonPropertyName("OldSpawn")]
public bool? OldSpawn { get; set; }
[JsonPropertyName("OpenZones")]
public string OpenZones { get; set; }
[JsonPropertyName("Preview")]
public Preview? Preview { get; set; }
[JsonPropertyName("PlayersRequestCount")]
public int? PlayersRequestCount { get; set; }
[JsonPropertyName("RequiredPlayerLevel")]
public int? RequiredPlayerLevel { get; set; }
[JsonPropertyName("RequiredPlayerLevelMin")]
public int? RequiredPlayerLevelMin { get; set; }
[JsonPropertyName("RequiredPlayerLevelMax")]
public int? RequiredPlayerLevelMax { get; set; }
[JsonPropertyName("MinPlayerLvlAccessKeys")]
public int? MinPlayerLvlAccessKeys { get; set; }
[JsonPropertyName("PmcMaxPlayersInGroup")]
public int? PmcMaxPlayersInGroup { get; set; }
[JsonPropertyName("ScavMaxPlayersInGroup")]
public int? ScavMaxPlayersInGroup { get; set; }
[JsonPropertyName("Rules")]
public string? Rules { get; set; }
[JsonPropertyName("SafeLocation")]
public bool? SafeLocation { get; set; }
[JsonPropertyName("Scene")]
public Scene? Scene { get; set; }
[JsonPropertyName("NoGroupSpawn")]
public bool? NoGroupSpawn { get; set; }
[JsonPropertyName("SpawnPointParams")]
public IEnumerable<SpawnPointParam>? SpawnPointParams { get; set; }
[JsonPropertyName("areas")]
public Dictionary<string, Area>? Areas { get; set; }
[JsonPropertyName("UnixDateTime")]
public long UnixDateTime { get; set; }
[JsonPropertyName("_Id")]
public MongoId IdField { get; set; }
[JsonPropertyName("doors")]
public List<object>? Doors { get; set; }
[JsonPropertyName("EscapeTimeLimit")]
public double? EscapeTimeLimit { get; set; }
[Obsolete("BSG fucked up another property name")]
[JsonPropertyName("escape_time_limit")]
public int Escape_Time_Limit_Do_Not_Use
{
set { EscapeTimeLimit = value; }
}
[JsonPropertyName("EscapeTimeLimitCoop")]
public int? EscapeTimeLimitCoop { get; set; }
[JsonPropertyName("EscapeTimeLimitPVE")]
public int? EscapeTimeLimitPVE { get; set; }
[JsonPropertyName("Events")]
public LocationEvents? Events { get; set; }
// Checked in client
[JsonPropertyName("exit_access_time")]
public int? ExitAccessTime { get; set; }
[JsonPropertyName("ForceOnlineRaidInPVE")]
public bool? ForceOnlineRaidInPVE { get; set; }
[JsonPropertyName("ExitZones")]
public string? ExitZones { get; set; }
[JsonPropertyName("exit_count")]
public int? ExitCount { get; set; }
[JsonPropertyName("exit_time")]
public double? ExitTime { get; set; }
[JsonPropertyName("SpawnSafeDistanceMeters")]
public double? SpawnSafeDistanceMeters { get; set; }
[JsonPropertyName("OneTimeSpawn")]
public bool? OneTimeSpawn { get; set; }
[JsonPropertyName("exits")]
public IEnumerable<Exit> Exits { get; set; }
[JsonPropertyName("filter_ex")]
public IEnumerable<string>? FilterEx { get; set; }
[JsonPropertyName("limits")]
public IEnumerable<Limit>? Limits { get; set; }
[JsonPropertyName("matching_min_seconds")]
public int? MatchingMinSeconds { get; set; }
[JsonPropertyName("GenerateLocalLootCache")]
public bool? GenerateLocalLootCache { get; set; }
[JsonPropertyName("maxItemCountInLocation")]
public IEnumerable<MaxItemCountInLocation>? MaxItemCountInLocation { get; set; }
[JsonPropertyName("sav_summon_seconds")]
public int? SavSummonSeconds { get; set; }
[JsonPropertyName("tmp_location_field_remove_me")]
public int? TmpLocationFieldRemoveMe { get; set; }
[JsonPropertyName("transits")]
public IEnumerable<Transit>? Transits { get; set; }
[JsonPropertyName("users_gather_seconds")]
public int? UsersGatherSeconds { get; set; }
[JsonPropertyName("users_spawn_seconds_n")]
public int? UsersSpawnSecondsN { get; set; }
[JsonPropertyName("users_spawn_seconds_n2")]
public int? UsersSpawnSecondsN2 { get; set; }
[JsonPropertyName("users_summon_seconds")]
public int? UsersSummonSeconds { get; set; }
[JsonPropertyName("waves")]
public List<Wave> Waves { get; set; }
}
public record EventTrapsData
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
public double MaxBarbedWires { get; set; }
public double MaxTrapDoors { get; set; }
public double MinBarbedWires { get; set; }
public double MinTrapDoors { get; set; }
}
public record Transit
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("activateAfterSec")]
public int? ActivateAfterSeconds { get; set; }
[JsonPropertyName("active")]
public bool? IsActive { get; set; }
[JsonPropertyName("events")]
public bool? Events { get; set; }
[JsonPropertyName("hideIfNoKey")]
public bool? HideIfNoKey { get; set; }
[JsonPropertyName("name")]
public string? Name { get; set; }
[JsonPropertyName("conditions")]
public string? Conditions { get; set; }
[JsonPropertyName("description")]
public string? Description { get; set; }
[JsonPropertyName("id")]
public int? Id { get; set; }
[JsonPropertyName("location")]
public string? Location { get; set; }
[JsonPropertyName("target")]
public string? Target { get; set; }
[JsonPropertyName("time")]
public long? Time { get; set; }
}
public record NonWaveGroupScenario
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("Chance")]
public double? Chance { get; set; }
[JsonPropertyName("Enabled")]
public bool? IsEnabled { get; set; }
[JsonPropertyName("MaxToBeGroup")]
public int? MaximumToBeGrouped { get; set; }
[JsonPropertyName("MinToBeGroup")]
public int? MinimumToBeGrouped { get; set; }
}
public record Limit : MinMax<int>
{
[JsonPropertyName("items")]
public IEnumerable<string>? Items { get; set; }
}
public record AirdropParameter
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("AirdropPointDeactivateDistance")]
public int? AirdropPointDeactivateDistance { get; set; }
[JsonPropertyName("MinPlayersCountToSpawnAirdrop")]
public int? MinimumPlayersCountToSpawnAirdrop { get; set; }
[JsonPropertyName("PlaneAirdropChance")]
public double? PlaneAirdropChance { get; set; }
[JsonPropertyName("PlaneAirdropCooldownMax")]
public int? PlaneAirdropCooldownMax { get; set; }
[JsonPropertyName("PlaneAirdropCooldownMin")]
public int? PlaneAirdropCooldownMin { get; set; }
[JsonPropertyName("PlaneAirdropEnd")]
public int? PlaneAirdropEnd { get; set; }
[JsonPropertyName("PlaneAirdropMax")]
public int? PlaneAirdropMax { get; set; }
[JsonPropertyName("PlaneAirdropStartMax")]
public int? PlaneAirdropStartMax { get; set; }
[JsonPropertyName("PlaneAirdropStartMin")]
public int? PlaneAirdropStartMin { get; set; }
[JsonPropertyName("UnsuccessfulTryPenalty")]
public int? UnsuccessfulTryPenalty { get; set; }
}
public record Banner
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("id")]
public string? Id { get; set; }
[JsonPropertyName("pic")]
public Pic? Picture { get; set; }
}
public record Pic
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("file")]
public string? File { get; set; }
[JsonPropertyName("path")]
public string? Path { get; set; }
[JsonPropertyName("rcid")]
public string? Rcid { get; set; }
[JsonPropertyName("type")]
public string? Type { get; set; }
}
public record BossLocationSpawn
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("BossChance")]
public double? BossChance { get; set; }
[JsonPropertyName("BossDifficult")]
public string? BossDifficulty { get; set; }
[JsonPropertyName("BossEscortAmount")]
public string? BossEscortAmount { get; set; }
[JsonPropertyName("BossEscortDifficult")]
public string? BossEscortDifficulty { get; set; }
[JsonPropertyName("BossEscortType")]
public string? BossEscortType { get; set; }
[JsonPropertyName("BossName")]
public string? BossName { get; set; }
[JsonPropertyName("BossPlayer")]
public bool? IsBossPlayer { get; set; }
[JsonPropertyName("BossZone")]
public string? BossZone { get; set; }
[JsonPropertyName("RandomTimeSpawn")]
public bool? IsRandomTimeSpawn { get; set; }
[JsonPropertyName("ShowOnTarkovMap")]
public bool? ShowOnTarkovMap { get; set; }
[JsonPropertyName("ShowOnTarkovMapPvE")]
public bool? ShowOnTarkovMapPvE { get; set; }
[JsonPropertyName("Time")]
public double? Time { get; set; }
[JsonPropertyName("TriggerId")]
public string? TriggerId { get; set; }
[JsonPropertyName("TriggerName")]
public string? TriggerName { get; set; }
[JsonPropertyName("Delay")]
public double? Delay { get; set; }
[JsonPropertyName("DependKarma")]
public bool? DependKarma { get; set; }
[JsonPropertyName("DependKarmaPVE")]
public bool? DependKarmaPVE { get; set; }
[JsonPropertyName("ForceSpawn")]
public bool? ForceSpawn { get; set; }
[JsonPropertyName("IgnoreMaxBots")]
public bool? IgnoreMaxBots { get; set; }
[JsonIgnore(Condition = JsonIgnoreCondition.Never)]
[JsonPropertyName("Supports")]
public IEnumerable<BossSupport> Supports { get; set; }
[JsonPropertyName("sptId")]
public string? SptId { get; set; }
[JsonPropertyName("SpawnMode")]
public IEnumerable<string> SpawnMode { get; set; }
}
public record BossSupport
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("BossEscortAmount")]
public string? BossEscortAmount { get; set; }
[JsonPropertyName("BossEscortDifficult")]
public ListOrT<string> BossEscortDifficulty { get; set; }
[JsonPropertyName("BossEscortType")]
public string? BossEscortType { get; set; }
}
public record BotLocationModifier
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("AccuracySpeed")]
public double? AccuracySpeed { get; set; }
[JsonPropertyName("AdditionalHostilitySettings")]
public IEnumerable<AdditionalHostilitySettings> AdditionalHostilitySettings { get; set; }
[JsonPropertyName("DistToActivate")]
public double? DistanceToActivate { get; set; }
[JsonPropertyName("DistToActivatePvE")]
public double? DistanceToActivatePvE { get; set; }
[JsonPropertyName("DistToPersueAxemanCoef")]
public double? DistanceToPursueAxemanCoefficient { get; set; }
[JsonPropertyName("DistToSleep")]
public double? DistanceToSleep { get; set; }
[JsonPropertyName("DistToSleepPvE")]
public double? DistanceToSleepPvE { get; set; }
[JsonPropertyName("GainSight")]
public double? GainSight { get; set; }
[JsonPropertyName("KhorovodChance")]
public double? KhorovodChance { get; set; }
[JsonPropertyName("MagnetPower")]
public double? MagnetPower { get; set; }
[JsonPropertyName("MarksmanAccuratyCoef")]
public double? MarksmanAccuracyCoefficient { get; set; }
[JsonPropertyName("Scattering")]
public double? Scattering { get; set; }
[JsonPropertyName("VisibleDistance")]
public double? VisibleDistance { get; set; }
[JsonPropertyName("MaxExfiltrationTime")]
public double? MaxExfiltrationTime { get; set; }
[JsonPropertyName("MinExfiltrationTime")]
public double? MinExfiltrationTime { get; set; }
[JsonPropertyName("FogVisibilityDistanceCoef")]
public double? FogVisibilityDistanceCoef { get; set; }
[JsonPropertyName("FogVisibilitySpeedCoef")]
public double? FogVisibilitySpeedCoef { get; set; }
[JsonPropertyName("LockSpawnCheckRadius")]
public double? FogVisibLockSpawnCheckRadiusilitySpeedCoef { get; set; }
[JsonPropertyName("LockSpawnCheckRadiusPvE")]
public double? LockSpawnCheckRadiusPvE { get; set; }
[JsonPropertyName("LockSpawnStartTime")]
public double? LockSpawnStartTime { get; set; }
[JsonPropertyName("LockSpawnStartTimePvE")]
public double? LockSpawnStartTimePvE { get; set; }
[JsonPropertyName("LockSpawnStepTime")]
public double? LockSpawnStepTime { get; set; }
[JsonPropertyName("LockSpawnStepTimePvE")]
public double? LockSpawnStepTimePvE { get; set; }
[JsonPropertyName("NonWaveSpawnBotsLimitPerPlayer")]
public double? NonWaveSpawnBotsLimitPerPlayer { get; set; }
[JsonPropertyName("NonWaveSpawnBotsLimitPerPlayerPvE")]
public double? NonWaveSpawnBotsLimitPerPlayerPvE { get; set; }
[JsonPropertyName("RainVisibilityDistanceCoef")]
public double? RainVisibilityDistanceCoef { get; set; }
[JsonPropertyName("RainVisibilitySpeedCoef")]
public double? RainVisibilitySpeedCoef { get; set; }
}
public record AdditionalHostilitySettings
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("AlwaysEnemies")]
public HashSet<string>? AlwaysEnemies { get; set; }
[JsonPropertyName("AlwaysFriends")]
public HashSet<string>? AlwaysFriends { get; set; }
[JsonPropertyName("BearEnemyChance")]
public double? BearEnemyChance { get; set; }
[JsonPropertyName("BearPlayerBehaviour")]
public string? BearPlayerBehaviour { get; set; }
[JsonPropertyName("BotRole")]
public string? BotRole { get; set; }
[JsonPropertyName("ChancedEnemies")]
public List<ChancedEnemy>? ChancedEnemies { get; set; }
[JsonPropertyName("Neutral")]
public HashSet<string>? Neutral { get; set; }
[JsonPropertyName("SavagePlayerBehaviour")]
public string? SavagePlayerBehaviour { get; set; }
[JsonPropertyName("SavageEnemyChance")]
public double? SavageEnemyChance { get; set; }
[JsonPropertyName("UsecEnemyChance")]
public double? UsecEnemyChance { get; set; }
[JsonPropertyName("UsecPlayerBehaviour")]
public string? UsecPlayerBehaviour { get; set; }
[JsonPropertyName("Warn")]
public IEnumerable<string>? Warn { get; set; }
}
public record ChancedEnemy
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("EnemyChance")]
public int? EnemyChance { get; set; }
[JsonPropertyName("Role")]
public string? Role { get; set; }
}
public record MinMaxBot : MinMax<int>
{
[JsonPropertyName("WildSpawnType")]
public string? WildSpawnType { get; set; } // TODO: Could be WildSpawnType or string
}
public record MinPlayerWaitTime
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("minPlayers")]
public int? MinPlayers { get; set; }
[JsonPropertyName("time")]
public long? Time { get; set; }
}
public record Preview
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("path")]
public string? Path { get; set; }
[JsonPropertyName("rcid")]
public string? Rcid { get; set; }
}
public record Scene
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("path")]
public string? Path { get; set; }
[JsonPropertyName("rcid")]
public string? Rcid { get; set; }
}
public record SpawnPointParam
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("BotZoneName")]
public string? BotZoneName { get; set; }
[JsonPropertyName("Categories")]
public IEnumerable<string>? Categories { get; set; }
[JsonPropertyName("ColliderParams")]
public ColliderParams? ColliderParams { get; set; }
[JsonPropertyName("CorePointId")]
public int? CorePointId { get; set; }
[JsonPropertyName("DelayToCanSpawnSec")]
public double? DelayToCanSpawnSec { get; set; }
[JsonPropertyName("Id")]
public string? Id { get; set; }
[JsonPropertyName("Infiltration")]
public string? Infiltration { get; set; }
[JsonPropertyName("Position")]
public XYZ? Position { get; set; }
[JsonPropertyName("Rotation")]
public double? Rotation { get; set; }
[JsonPropertyName("Sides")]
public IEnumerable<string>? Sides { get; set; }
}
public record ColliderParams
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
private string? _parent;
[JsonPropertyName("_parent")]
public string? Parent
{
get { return _parent; }
set { _parent = string.Intern(value); }
}
[JsonPropertyName("_props")]
public ColliderProps? Props { get; set; }
}
public record ColliderProps
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("Center")]
public XYZ? Center { get; set; }
[JsonPropertyName("Size")]
public XYZ? Size { get; set; }
[JsonPropertyName("Radius")]
public double? Radius { get; set; }
}
public record Exit
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
/// <summary>
/// % Chance out of 100 exit will appear in raid
/// </summary>
[JsonPropertyName("Chance")]
public double? Chance { get; set; }
[JsonPropertyName("ChancePVE")]
public double? ChancePVE { get; set; }
[JsonPropertyName("Count")]
public int? Count { get; set; }
[JsonPropertyName("CountPVE")]
public int? CountPVE { get; set; }
// Had to add this property as BSG sometimes names the properties with full PVE capitals
// This property will just point the value to CountPve
[JsonPropertyName("CountPve")]
public int CountPve
{
set { CountPVE = value; }
}
[JsonPropertyName("EntryPoints")]
public string? EntryPoints { get; set; }
[JsonPropertyName("EventAvailable")]
public bool? EventAvailable { get; set; }
[JsonPropertyName("EligibleForPMC")]
public bool? EligibleForPMC { get; set; }
[JsonPropertyName("EligibleForScav")]
public bool? EligibleForScav { get; set; }
[JsonPropertyName("ExfiltrationTime")]
public double? ExfiltrationTime { get; set; }
[JsonPropertyName("ExfiltrationTimePVE")]
public double? ExfiltrationTimePVE { get; set; }
[JsonPropertyName("ExfiltrationType")]
[JsonConverter(typeof(JsonStringEnumConverter))]
public ExfiltrationType? ExfiltrationType { get; set; }
[JsonPropertyName("RequiredSlot")]
[JsonConverter(typeof(JsonStringEnumConverter))]
public EquipmentSlots? RequiredSlot { get; set; }
[JsonPropertyName("Id")]
public string? Id { get; set; }
[JsonPropertyName("MaxTime")]
public double? MaxTime { get; set; }
[JsonPropertyName("MaxTimePVE")]
public double? MaxTimePVE { get; set; }
// Checked in client
[JsonPropertyName("MinTime")]
public double? MinTime { get; set; }
[JsonPropertyName("MinTimePVE")]
public double? MinTimePVE { get; set; }
[JsonPropertyName("Name")]
public string? Name { get; set; }
[JsonPropertyName("_Name")]
public string? _Name { get; set; }
[JsonPropertyName("_name")]
public string? _NameLower { get; set; }
[JsonPropertyName("PassageRequirement")]
[JsonConverter(typeof(JsonStringEnumConverter))]
public RequirementState PassageRequirement { get; set; }
[JsonPropertyName("PlayersCount")]
public int? PlayersCount { get; set; }
[JsonPropertyName("PlayersCountPVE")]
public int? PlayersCountPVE { get; set; }
[JsonPropertyName("RequirementTip")]
public string? RequirementTip { get; set; }
[JsonPropertyName("Side")]
public string? Side { get; set; }
}
public record MaxItemCountInLocation
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("TemplateId")]
public string? TemplateId { get; set; }
[JsonPropertyName("Value")]
public int? Value { get; set; }
}
public record Wave
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("BotPreset")]
public string? BotPreset { get; set; }
[JsonPropertyName("BotSide")]
public string? BotSide { get; set; }
[JsonPropertyName("KeepZoneOnSpawn")]
public bool? KeepZoneOnSpawn { get; set; }
[JsonPropertyName("SpawnPoints")]
public string? SpawnPoints { get; set; }
[JsonPropertyName("WildSpawnType")]
[JsonConverter(typeof(JsonStringEnumConverter))]
public WildSpawnType? WildSpawnType { get; set; }
[JsonPropertyName("isPlayers")]
public bool? IsPlayers { get; set; }
[JsonPropertyName("number")]
public int? Number { get; set; }
[JsonPropertyName("slots_max")]
public int? SlotsMax { get; set; }
[JsonPropertyName("slots_min")]
public int? SlotsMin { get; set; }
[JsonPropertyName("time_max")]
public int? TimeMax { get; set; }
[JsonPropertyName("time_min")]
public int? TimeMin { get; set; }
/// <summary>
/// OPTIONAL - Needs to be unique - Used by custom wave service to ensure same wave isnt added multiple times
/// </summary>
[JsonPropertyName("sptId")]
public string? SptId { get; set; }
[JsonPropertyName("ChanceGroup")]
public int? ChanceGroup { get; set; }
/// <summary>
/// 'pve' and/or 'regular'
/// </summary>
[JsonPropertyName("SpawnMode")]
public HashSet<string>? SpawnMode { get; set; }
[JsonPropertyName("OpenZones")]
public string? OpenZones { get; set; }
}
public record LocationEvents
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("Halloween2024")]
public Halloween2024? Halloween2024 { get; set; }
public Khorovod? Khorovod { get; set; }
}
public record Khorovod
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
public double? Chance { get; set; }
}
public record Halloween2024
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("CrowdAttackBlockRadius")]
public double? CrowdAttackBlockRadius { get; set; }
[JsonPropertyName("CrowdAttackSpawnParams")]
public IEnumerable<CrowdAttackSpawnParam>? CrowdAttackSpawnParams { get; set; }
[JsonPropertyName("CrowdCooldownPerPlayerSec")]
public double? CrowdCooldownPerPlayerSec { get; set; }
[JsonPropertyName("CrowdsLimit")]
public int? CrowdsLimit { get; set; }
[JsonPropertyName("InfectedLookCoeff")]
public double? InfectedLookCoeff { get; set; }
[JsonPropertyName("MaxCrowdAttackSpawnLimit")]
public int? MaxCrowdAttackSpawnLimit { get; set; }
[JsonPropertyName("MinInfectionPercentage")]
public double? MinInfectionPercentage { get; set; }
[JsonPropertyName("MinSpawnDistToPlayer")]
public double? MinSpawnDistToPlayer { get; set; }
[JsonPropertyName("TargetPointSearchRadiusLimit")]
public double? TargetPointSearchRadiusLimit { get; set; }
[JsonPropertyName("ZombieCallDeltaRadius")]
public double? ZombieCallDeltaRadius { get; set; }
[JsonPropertyName("ZombieCallPeriodSec")]
public double? ZombieCallPeriodSec { get; set; }
[JsonPropertyName("ZombieCallRadiusLimit")]
public double? ZombieCallRadiusLimit { get; set; }
[JsonPropertyName("ZombieMultiplier")]
public double? ZombieMultiplier { get; set; }
[JsonPropertyName("InfectionPercentage")]
public double? InfectionPercentage { get; set; }
public Khorovod? Khorovod { get; set; }
}
public record CrowdAttackSpawnParam
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("Difficulty")]
public string? Difficulty { get; set; }
[JsonPropertyName("Role")]
public string? Role { get; set; }
[JsonPropertyName("Weight")]
public int? Weight { get; set; }
}
public record Area
{
[JsonExtensionData]
public Dictionary<string, object>? ExtensionData { get; set; }
[JsonPropertyName("center")]
public XYZ? Center { get; set; }
[JsonPropertyName("infiltrationZone")]
public string? InfiltrationZone { get; set; }
[JsonPropertyName("orientation")]
public double? Orientation { get; set; }
[JsonPropertyName("position")]
public XYZ? Position { get; set; }
[JsonPropertyName("sides")]
public HashSet<string>? Sides { get; set; }
[JsonPropertyName("size")]
public XYZ? Size { get; set; }
}
public enum WildSpawnType
{
marksman,
assault,
bossTest,
bossBully,
followerTest,
followerBully,
bossKilla,
bossKojaniy,
followerKojaniy,
pmcBot,
cursedAssault,
bossGluhar,
followerGluharAssault,
followerGluharSecurity,
followerGluharScout,
followerGluharSnipe,
followerSanitar,
bossSanitar,
test,
assaultGroup,
sectantWarrior,
sectantPriest,
bossTagilla,
followerTagilla,
exUsec,
gifter,
bossKnight,
followerBigPipe,
followerBirdEye,
bossZryachiy,
followerZryachiy,
bossBoar = 32,
followerBoar,
arenaFighter,
arenaFighterEvent,
bossBoarSniper,
crazyAssaultEvent,
peacefullZryachiyEvent,
sectactPriestEvent,
ravangeZryachiyEvent,
followerBoarClose1,
followerBoarClose2,
bossKolontay,
followerKolontayAssault,
followerKolontaySecurity,
shooterBTR,
bossPartisan,
spiritWinter,
spiritSpring,
peacemaker,
pmcBEAR,
pmcUSEC,
skier,
sectantPredvestnik = 57,
sectantPrizrak,
sectantOni,
infectedAssault,
infectedPmc,
infectedCivil,
infectedLaborant,
infectedTagilla,
bossTagillaAgro,
bossKillaAgro,
tagillaHelperAgro,
}