Files
SPT-Server-Build/Libraries/SPTarkov.Server.Core/Models/Eft/Common/LocationBase.cs
T
2025-06-04 14:49:37 +01:00

2403 lines
40 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;
using SPTarkov.Server.Core.Utils.Json.Converters;
namespace SPTarkov.Server.Core.Models.Eft.Common;
public record LocationBase
{
[JsonExtensionData]
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("AccessKeys")]
public List<string>? AccessKeys
{
get;
set;
}
[JsonPropertyName("AccessKeysPvE")]
public List<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 TODO: still needed?
/// </summary>
[JsonPropertyName("BotMaxPlayer")]
public int? BotMaxPlayer
{
get;
set;
}
/// <summary>
/// Is not used in 33420 TODO: still needed?
/// </summary>
[JsonPropertyName("BotMaxTimePlayer")]
public int? BotMaxTimePlayer
{
get;
set;
}
/// <summary>
/// Does not even exist in the client in 33420 TODO: still needed?
/// </summary>
[JsonPropertyName("BotMaxPvE")]
public int? BotMaxPvE
{
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 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 List<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 List<SpawnPointParam>? SpawnPointParams
{
get;
set;
}
[JsonPropertyName("areas")]
public Dictionary<string, Area>? Areas
{
get;
set;
}
[JsonPropertyName("UnixDateTime")]
public long? UnixDateTime
{
get;
set;
}
[JsonPropertyName("_Id")]
public string? IdField
{
get;
set;
}
[JsonPropertyName("doors")]
public List<object>? Doors
{
get;
set;
}
[JsonPropertyName("EscapeTimeLimit")]
public double? EscapeTimeLimit
{
get;
set;
}
// 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 List<Exit>? Exits
{
get;
set;
}
[JsonPropertyName("filter_ex")]
public List<string>? FilterEx
{
get;
set;
}
[JsonPropertyName("limits")]
public List<Limit>? Limits
{
get;
set;
}
[JsonPropertyName("matching_min_seconds")]
public int? MatchingMinSeconds
{
get;
set;
}
[JsonPropertyName("GenerateLocalLootCache")]
public bool? GenerateLocalLootCache
{
get;
set;
}
[JsonPropertyName("maxItemCountInLocation")]
public List<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 List<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 List<string>? Items
{
get;
set;
}
[JsonPropertyName("min")]
public int? Min
{
get;
set;
}
[JsonPropertyName("max")]
public int? Max
{
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("path")]
public string? Path
{
get;
set;
}
[JsonPropertyName("rcid")]
public string? Rcid
{
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("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 List<BossSupport> Supports
{
get;
set;
}
[JsonPropertyName("sptId")]
public string? SptId
{
get;
set;
}
[JsonPropertyName("SpawnMode")]
public List<string> SpawnMode
{
get;
set;
}
}
public record BossSupport
{
[JsonExtensionData]
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("BossEscortAmount")]
public string? BossEscortAmount
{
get;
set;
}
[JsonPropertyName("BossEscortDifficult")]
[JsonConverter(typeof(ListOrTConverterFactory))]
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 List<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 List<string>? AlwaysEnemies
{
get;
set;
}
[JsonPropertyName("AlwaysFriends")]
public List<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 List<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 List<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 List<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 List<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 List<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 List<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 List<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
}