.NET Format Style Fixes

This commit is contained in:
refringe
2025-06-18 17:09:20 +00:00
committed by Format Bot
parent ca0a7d6345
commit 6e01428b2b
774 changed files with 23507 additions and 40003 deletions
@@ -7,35 +7,19 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record AirdropConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-airdrop";
public override string Kind { get; set; } = "spt-airdrop";
[JsonPropertyName("airdropTypeWeightings")]
public required Dictionary<SptAirdropTypeEnum, double> AirdropTypeWeightings
{
get;
set;
}
public required Dictionary<SptAirdropTypeEnum, double> AirdropTypeWeightings { get; set; }
/// <summary>
/// What rewards will the loot crate contain, keyed by drop type e.g. mixed/weaponArmor/foodMedical/barter
/// </summary>
[JsonPropertyName("loot")]
public required Dictionary<string, AirdropLoot> Loot
{
get;
set;
}
public required Dictionary<string, AirdropLoot> Loot { get; set; }
[JsonPropertyName("customAirdropMapping")]
public required Dictionary<string, SptAirdropTypeEnum> CustomAirdropMapping
{
get;
set;
}
public required Dictionary<string, SptAirdropTypeEnum> CustomAirdropMapping { get; set; }
}
/// <summary>
@@ -48,137 +32,77 @@ public record AirdropLoot
[JsonPropertyName("icon")]
[JsonConverter(typeof(JsonStringEnumConverter))]
public required AirdropTypeEnum Icon
{
get;
set;
}
public required AirdropTypeEnum Icon { get; set; }
/// <summary>
/// Min/max of weapons inside crate
/// </summary>
[JsonPropertyName("weaponPresetCount")]
public required MinMax<int> WeaponPresetCount
{
get;
set;
}
public required MinMax<int> WeaponPresetCount { get; set; }
/// <summary>
/// Min/max of armors (head/chest/rig) inside crate
/// </summary>
[JsonPropertyName("armorPresetCount")]
public required MinMax<int> ArmorPresetCount
{
get;
set;
}
public required MinMax<int> ArmorPresetCount { get; set; }
/// <summary>
/// Min/max of items inside crate
/// </summary>
[JsonPropertyName("itemCount")]
public required MinMax<int> ItemCount
{
get;
set;
}
public required MinMax<int> ItemCount { get; set; }
/// <summary>
/// Min/max of sealed weapon boxes inside crate
/// </summary>
[JsonPropertyName("weaponCrateCount")]
public required MinMax<int> WeaponCrateCount
{
get;
set;
}
public required MinMax<int> WeaponCrateCount { get; set; }
/// <summary>
/// Items to never allow - tpls
/// </summary>
[JsonPropertyName("itemBlacklist")]
public required List<string> ItemBlacklist
{
get;
set;
}
public required List<string> ItemBlacklist { get; set; }
/// <summary>
/// Item type (parentId) to allow inside crate
/// </summary>
[JsonPropertyName("itemTypeWhitelist")]
public required List<string> ItemTypeWhitelist
{
get;
set;
}
public required List<string> ItemTypeWhitelist { get; set; }
/// <summary>
/// Item type/ item tpls to limit count of inside crate - key: item base type: value: max count
/// </summary>
[JsonPropertyName("itemLimits")]
public required Dictionary<string, int> ItemLimits
{
get;
set;
}
public required Dictionary<string, int> ItemLimits { get; set; }
/// <summary>
/// Items to limit stack size of key: item tpl value: min/max stack size
/// </summary>
[JsonPropertyName("itemStackLimits")]
public required Dictionary<string, MinMax<int>> ItemStackLimits
{
get;
set;
}
public required Dictionary<string, MinMax<int>> ItemStackLimits { get; set; }
/// <summary>
/// Armor levels to allow inside crate e.g. [4,5,6]
/// </summary>
[JsonPropertyName("armorLevelWhitelist")]
public List<int>? ArmorLevelWhitelist
{
get;
set;
}
public List<int>? ArmorLevelWhitelist { get; set; }
/// <summary>
/// Should boss items be added to airdrop crate
/// </summary>
[JsonPropertyName("allowBossItems")]
public bool AllowBossItems
{
get;
set;
}
public bool AllowBossItems { get; set; }
[JsonPropertyName("useForcedLoot")]
public bool UseForcedLoot
{
get;
set;
}
public bool UseForcedLoot { get; set; }
[JsonPropertyName("forcedLoot")]
public Dictionary<string, MinMax<int>>? ForcedLoot
{
get;
set;
}
public Dictionary<string, MinMax<int>>? ForcedLoot { get; set; }
[JsonPropertyName("useRewardItemBlacklist")]
public bool UseRewardItemBlacklist
{
get;
set;
}
public bool UseRewardItemBlacklist { get; set; }
[JsonPropertyName("blockSeasonalItemsOutOfSeason")]
public bool BlockSeasonalItemsOutOfSeason
{
get;
set;
}
public bool BlockSeasonalItemsOutOfSeason { get; set; }
}
@@ -5,39 +5,19 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record BackupConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-backup";
public override string Kind { get; set; } = "spt-backup";
[JsonPropertyName("enabled")]
public required bool Enabled
{
get;
set;
}
public required bool Enabled { get; set; }
[JsonPropertyName("maxBackups")]
public int MaxBackups
{
get;
set;
}
public int MaxBackups { get; set; }
[JsonPropertyName("directory")]
public string Directory
{
get;
set;
} = string.Empty;
public string Directory { get; set; } = string.Empty;
[JsonPropertyName("backupInterval")]
public required BackupConfigInterval BackupInterval
{
get;
set;
}
public required BackupConfigInterval BackupInterval { get; set; }
}
public record BackupConfigInterval
@@ -46,16 +26,8 @@ public record BackupConfigInterval
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("enabled")]
public bool Enabled
{
get;
set;
}
public bool Enabled { get; set; }
[JsonPropertyName("intervalMinutes")]
public int IntervalMinutes
{
get;
set;
}
public int IntervalMinutes { get; set; }
}
@@ -5,11 +5,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public abstract record BaseConfig
{
[JsonPropertyName("kind")]
public abstract string Kind
{
get;
set;
}
public abstract string Kind { get; set; }
}
public record RunIntervalValues
@@ -18,16 +14,8 @@ public record RunIntervalValues
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("inRaid")]
public int InRaid
{
get;
set;
}
public int InRaid { get; set; }
[JsonPropertyName("outOfRaid")]
public int OutOfRaid
{
get;
set;
}
public int OutOfRaid { get; set; }
}
File diff suppressed because it is too large Load Diff
@@ -8,25 +8,13 @@ public record BotDurability
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("default")]
public required DefaultDurability Default
{
get;
set;
}
public required DefaultDurability Default { get; set; }
[JsonPropertyName("botDurabilities")]
public required Dictionary<string, DefaultDurability> BotDurabilities
{
get;
set;
}
public required Dictionary<string, DefaultDurability> BotDurabilities { get; set; }
[JsonPropertyName("pmc")]
public required PmcDurability Pmc
{
get;
set;
}
public required PmcDurability Pmc { get; set; }
}
/// <summary>
@@ -38,18 +26,10 @@ public record DefaultDurability
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("armor")]
public required ArmorDurability Armor
{
get;
set;
}
public required ArmorDurability Armor { get; set; }
[JsonPropertyName("weapon")]
public required WeaponDurability Weapon
{
get;
set;
}
public required WeaponDurability Weapon { get; set; }
}
public record PmcDurability
@@ -58,18 +38,10 @@ public record PmcDurability
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("armor")]
public required PmcDurabilityArmor Armor
{
get;
set;
}
public required PmcDurabilityArmor Armor { get; set; }
[JsonPropertyName("weapon")]
public required WeaponDurability Weapon
{
get;
set;
}
public required WeaponDurability Weapon { get; set; }
}
public record PmcDurabilityArmor
@@ -78,39 +50,19 @@ public record PmcDurabilityArmor
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("lowestMaxPercent")]
public int LowestMaxPercent
{
get;
set;
}
public int LowestMaxPercent { get; set; }
[JsonPropertyName("highestMaxPercent")]
public int HighestMaxPercent
{
get;
set;
}
public int HighestMaxPercent { get; set; }
[JsonPropertyName("maxDelta")]
public int MaxDelta
{
get;
set;
}
public int MaxDelta { get; set; }
[JsonPropertyName("minDelta")]
public int MinDelta
{
get;
set;
}
public int MinDelta { get; set; }
[JsonPropertyName("minLimitPercent")]
public int MinLimitPercent
{
get;
set;
}
public int MinLimitPercent { get; set; }
}
public record ArmorDurability
@@ -119,39 +71,19 @@ public record ArmorDurability
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("maxDelta")]
public int MaxDelta
{
get;
set;
}
public int MaxDelta { get; set; }
[JsonPropertyName("minDelta")]
public int MinDelta
{
get;
set;
}
public int MinDelta { get; set; }
[JsonPropertyName("minLimitPercent")]
public int MinLimitPercent
{
get;
set;
}
public int MinLimitPercent { get; set; }
[JsonPropertyName("lowestMaxPercent")]
public int LowestMaxPercent
{
get;
set;
}
public int LowestMaxPercent { get; set; }
[JsonPropertyName("highestMaxPercent")]
public int HighestMaxPercent
{
get;
set;
}
public int HighestMaxPercent { get; set; }
}
public record WeaponDurability
@@ -160,37 +92,17 @@ public record WeaponDurability
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("lowestMax")]
public int LowestMax
{
get;
set;
}
public int LowestMax { get; set; }
[JsonPropertyName("highestMax")]
public int HighestMax
{
get;
set;
}
public int HighestMax { get; set; }
[JsonPropertyName("maxDelta")]
public int MaxDelta
{
get;
set;
}
public int MaxDelta { get; set; }
[JsonPropertyName("minDelta")]
public int MinDelta
{
get;
set;
}
public int MinDelta { get; set; }
[JsonPropertyName("minLimitPercent")]
public double MinLimitPercent
{
get;
set;
}
public double MinLimitPercent { get; set; }
}
@@ -5,29 +5,17 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record BtrDeliveryConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-btrdelivery";
public override string Kind { get; set; } = "spt-btrdelivery";
/// <summary>
/// Override to control how quickly delivery is processed/returned in seconds
/// </summary>
[JsonPropertyName("returnTimeOverrideSeconds")]
public double ReturnTimeOverrideSeconds
{
get;
set;
}
public double ReturnTimeOverrideSeconds { get; set; }
/// <summary>
/// How often server should process BTR delivery in seconds
/// </summary>
[JsonPropertyName("runIntervalSeconds")]
public double RunIntervalSeconds
{
get;
set;
}
public double RunIntervalSeconds { get; set; }
}
@@ -6,125 +6,61 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record CoreConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-core";
public override string Kind { get; set; } = "spt-core";
[JsonPropertyName("sptVersion")]
public required string SptVersion
{
get;
set;
}
public required string SptVersion { get; set; }
[JsonPropertyName("projectName")]
public required string ProjectName
{
get;
set;
}
public required string ProjectName { get; set; }
[JsonPropertyName("compatibleTarkovVersion")]
public required string CompatibleTarkovVersion
{
get;
set;
}
public required string CompatibleTarkovVersion { get; set; }
[JsonPropertyName("serverName")]
public required string ServerName
{
get;
set;
}
public required string ServerName { get; set; }
[JsonPropertyName("profileSaveIntervalSeconds")]
public required int ProfileSaveIntervalInSeconds
{
get;
set;
}
public required int ProfileSaveIntervalInSeconds { get; set; }
[JsonPropertyName("sptFriendNickname")]
public required string SptFriendNickname
{
get;
set;
}
public required string SptFriendNickname { get; set; }
[JsonPropertyName("allowProfileWipe")]
public required bool AllowProfileWipe
{
get;
set;
}
public required bool AllowProfileWipe { get; set; }
[JsonPropertyName("bsgLogging")]
public required BsgLogging BsgLogging
{
get;
set;
}
public required BsgLogging BsgLogging { get; set; }
[JsonPropertyName("release")]
public required Release Release
{
get;
set;
}
public required Release Release { get; set; }
[JsonPropertyName("fixes")]
public required GameFixes Fixes
{
get;
set;
}
public required GameFixes Fixes { get; set; }
[JsonPropertyName("survey")]
public required SurveyResponseData Survey
{
get;
set;
}
public required SurveyResponseData Survey { get; set; }
[JsonPropertyName("features")]
public required ServerFeatures Features
{
get;
set;
}
public required ServerFeatures Features { get; set; }
/// <summary>
/// Commit hash build server was created from
/// </summary>
[JsonPropertyName("commit")]
public string? Commit
{
get;
set;
}
public string? Commit { get; set; }
/// <summary>
/// Timestamp of server build
/// </summary>
[JsonPropertyName("buildTime")]
public string? BuildTime
{
get;
set;
}
public string? BuildTime { get; set; }
/// <summary>
/// Server locale keys that will be added to the bottom of the startup watermark
/// </summary>
[JsonPropertyName("customWatermarkLocaleKeys")]
public List<string>? CustomWatermarkLocaleKeys
{
get;
set;
}
public List<string>? CustomWatermarkLocaleKeys { get; set; }
}
public record BsgLogging
@@ -145,21 +81,13 @@ public record BsgLogging
/// 6 - off
/// </summary>
[JsonPropertyName("verbosity")]
public int Verbosity
{
get;
set;
}
public int Verbosity { get; set; }
/// <summary>
/// Should we send the logging to the server
/// </summary>
[JsonPropertyName("sendToServer")]
public bool SendToServer
{
get;
set;
}
public bool SendToServer { get; set; }
}
public record Release
@@ -171,131 +99,79 @@ public record Release
/// Disclaimer outlining the intended usage of bleeding edge
/// </summary>
[JsonPropertyName("betaDisclaimerText")]
public string? BetaDisclaimerText
{
get;
set;
}
public string? BetaDisclaimerText { get; set; }
/// <summary>
/// Text logged when users agreed to terms
/// </summary>
[JsonPropertyName("betaDisclaimerAcceptText")]
public string? BetaDisclaimerAcceptText
{
get;
set;
}
public string? BetaDisclaimerAcceptText { get; set; }
/// <summary>
/// Server mods loaded message
/// </summary>
[JsonPropertyName("serverModsLoadedText")]
public string? ServerModsLoadedText
{
get;
set;
}
public string? ServerModsLoadedText { get; set; }
/// <summary>
/// Server mods loaded debug message text
/// </summary>
[JsonPropertyName("serverModsLoadedDebugText")]
public string? ServerModsLoadedDebugText
{
get;
set;
}
public string? ServerModsLoadedDebugText { get; set; }
/// <summary>
/// Client mods loaded message
/// </summary>
[JsonPropertyName("clientModsLoadedText")]
public string? ClientModsLoadedText
{
get;
set;
}
public string? ClientModsLoadedText { get; set; }
/// <summary>
/// Client mods loaded debug message text
/// </summary>
[JsonPropertyName("clientModsLoadedDebugText")]
public string? ClientModsLoadedDebugText
{
get;
set;
}
public string? ClientModsLoadedDebugText { get; set; }
/// <summary>
/// Illegal plugins log message
/// </summary>
[JsonPropertyName("illegalPluginsLoadedText")]
public string? IllegalPluginsLoadedText
{
get;
set;
}
public string? IllegalPluginsLoadedText { get; set; }
/// <summary>
/// Illegal plugins exception
/// </summary>
[JsonPropertyName("illegalPluginsExceptionText")]
public string? IllegalPluginsExceptionText
{
get;
set;
}
public string? IllegalPluginsExceptionText { get; set; }
/// <summary>
/// Summary of release changes
/// </summary>
[JsonPropertyName("releaseSummaryText")]
public string? ReleaseSummaryText
{
get;
set;
}
public string? ReleaseSummaryText { get; set; }
/// <summary>
/// Enables the cool watermark in-game
/// </summary>
[JsonPropertyName("isBeta")]
public bool? IsBeta
{
get;
set;
}
public bool? IsBeta { get; set; }
/// <summary>
/// Whether mods are enabled
/// </summary>
[JsonPropertyName("isModdable")]
public bool? IsModdable
{
get;
set;
}
public bool? IsModdable { get; set; }
/// <summary>
/// Are mods loaded on the server?
/// </summary>
[JsonPropertyName("isModded")]
public bool IsModded
{
get;
set;
}
public bool IsModded { get; set; }
/// <summary>
/// How long before the messagebox times out and closes the game
/// </summary>
[JsonPropertyName("betaDisclaimerTimeoutDelay")]
public int BetaDisclaimerTimeoutDelay
{
get;
set;
}
public int BetaDisclaimerTimeoutDelay { get; set; }
}
public record GameFixes
@@ -307,41 +183,25 @@ public record GameFixes
/// Shotguns use a different value than normal guns causing huge pellet dispersion
/// </summary>
[JsonPropertyName("fixShotgunDispersion")]
public bool FixShotgunDispersion
{
get;
set;
}
public bool FixShotgunDispersion { get; set; }
/// <summary>
/// Remove items added by mods when the mod no longer exists - can fix dead profiles stuck at game load
/// </summary>
[JsonPropertyName("removeModItemsFromProfile")]
public bool RemoveModItemsFromProfile
{
get;
set;
}
public bool RemoveModItemsFromProfile { get; set; }
/// <summary>
/// Remove invalid traders from profile - trader data can be leftover when player removes trader mod
/// </summary>
[JsonPropertyName("removeInvalidTradersFromProfile")]
public bool RemoveInvalidTradersFromProfile
{
get;
set;
}
public bool RemoveInvalidTradersFromProfile { get; set; }
/// <summary>
/// Fix issues that cause the game to not start due to inventory item issues
/// </summary>
[JsonPropertyName("fixProfileBreakingInventoryItemIssues")]
public bool FixProfileBreakingInventoryItemIssues
{
get;
set;
}
public bool FixProfileBreakingInventoryItemIssues { get; set; }
}
public record ServerFeatures
@@ -350,38 +210,22 @@ public record ServerFeatures
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("compressProfile")]
public bool CompressProfile
{
get;
set;
}
public bool CompressProfile { get; set; }
[JsonPropertyName("chatbotFeatures")]
public required ChatbotFeatures ChatbotFeatures
{
get;
set;
}
public required ChatbotFeatures ChatbotFeatures { get; set; }
/// <summary>
/// Keyed to profile type e.g. "Standard" or "SPT Developer"
/// </summary>
[JsonPropertyName("createNewProfileTypesBlacklist")]
public required HashSet<string> CreateNewProfileTypesBlacklist
{
get;
set;
}
public required HashSet<string> CreateNewProfileTypesBlacklist { get; set; }
/// <summary>
/// Profile ids to ignore when calculating achievement stats
/// </summary>
[JsonPropertyName("achievementProfileIdBlacklist")]
public required HashSet<string>? AchievementProfileIdBlacklist
{
get;
set;
}
public required HashSet<string>? AchievementProfileIdBlacklist { get; set; }
}
public record ChatbotFeatures
@@ -390,45 +234,25 @@ public record ChatbotFeatures
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("sptFriendGiftsEnabled")]
public bool SptFriendGiftsEnabled
{
get;
set;
}
public bool SptFriendGiftsEnabled { get; set; }
[JsonPropertyName("commandoFeatures")]
public required CommandoFeatures CommandoFeatures
{
get;
set;
}
public required CommandoFeatures CommandoFeatures { get; set; }
[JsonPropertyName("commandUseLimits")]
public required Dictionary<string, int?> CommandUseLimits
{
get;
set;
}
public required Dictionary<string, int?> CommandUseLimits { get; set; }
/// <summary>
/// Human readable id to guid for each bot
/// </summary>
[JsonPropertyName("ids")]
public required Dictionary<string, string> Ids
{
get;
set;
}
public required Dictionary<string, string> Ids { get; set; }
/// <summary>
/// Bot Ids player is allowed to interact with
/// </summary>
[JsonPropertyName("enabledBots")]
public required Dictionary<string, bool> EnabledBots
{
get;
set;
}
public required Dictionary<string, bool> EnabledBots { get; set; }
}
public record CommandoFeatures
@@ -437,9 +261,5 @@ public record CommandoFeatures
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("giveCommandEnabled")]
public bool GiveCommandEnabled
{
get;
set;
}
public bool GiveCommandEnabled { get; set; }
}
@@ -9,18 +9,10 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record GiftsConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-gifts";
public override string Kind { get; set; } = "spt-gifts";
[JsonPropertyName("gifts")]
public required Dictionary<string, Gift> Gifts
{
get;
set;
}
public required Dictionary<string, Gift> Gifts { get; set; }
}
public record Gift
@@ -32,112 +24,59 @@ public record Gift
/// Items to send to player
/// </summary>
[JsonPropertyName("items")]
public List<Item> Items
{
get;
set;
} = [];
public List<Item> Items { get; set; } = [];
/// <summary>
/// Who is sending the gift to player
/// </summary>
[JsonPropertyName("sender")]
public GiftSenderType Sender
{
get;
set;
}
public GiftSenderType Sender { get; set; }
/// <summary>
/// Optional - supply a users id to send from, not necessary when sending from SYSTEM or TRADER
/// </summary>
[JsonPropertyName("senderId")]
public string? SenderId
{
get;
set;
}
public string? SenderId { get; set; }
[JsonPropertyName("senderDetails")]
public UserDialogInfo? SenderDetails
{
get;
set;
}
public UserDialogInfo? SenderDetails { get; set; }
/// <summary>
/// Optional - supply a trader type to send from, not necessary when sending from SYSTEM or USER
/// </summary>
[JsonPropertyName("trader")]
public string? Trader
{
get;
set;
}
public string? Trader { get; set; }
[JsonPropertyName("messageText")]
public string? MessageText
{
get;
set;
}
public string? MessageText { get; set; }
/// <summary>
/// Optional - if sending text from the client locale file
/// </summary>
[JsonPropertyName("localeTextId")]
public string? LocaleTextId
{
get;
set;
}
public string? LocaleTextId { get; set; }
/// <summary>
/// Optional - Used by Seasonal events to send on specific day
/// </summary>
[JsonPropertyName("timestampToSend")]
public long? TimestampToSend
{
get;
set;
}
public long? TimestampToSend { get; set; }
[JsonPropertyName("associatedEvent")]
public SeasonalEventType AssociatedEvent
{
get;
set;
}
public SeasonalEventType AssociatedEvent { get; set; }
[JsonPropertyName("collectionTimeHours")]
public int? CollectionTimeHours
{
get;
set;
}
public int? CollectionTimeHours { get; set; }
/// <summary>
/// Optional, can be used to change profile settings like level/skills
/// </summary>
[JsonPropertyName("profileChangeEvents")]
public List<ProfileChangeEvent>? ProfileChangeEvents
{
get;
set;
}
public List<ProfileChangeEvent>? ProfileChangeEvents { get; set; }
[JsonPropertyName("maxToSendPlayer")]
public int? MaxToSendPlayer
{
get;
set;
}
public int? MaxToSendPlayer { get; set; }
[JsonPropertyName("maxToSendToPlayer")]
public int? MaxToSendToPlayer
{
get;
set;
}
public int? MaxToSendToPlayer { get; set; }
}
@@ -5,25 +5,13 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record HealthConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-health";
public override string Kind { get; set; } = "spt-health";
[JsonPropertyName("healthMultipliers")]
public required HealthMultipliers HealthMultipliers
{
get;
set;
}
public required HealthMultipliers HealthMultipliers { get; set; }
[JsonPropertyName("save")]
public required HealthSave Save
{
get;
set;
}
public required HealthSave Save { get; set; }
}
public record HealthMultipliers
@@ -32,18 +20,10 @@ public record HealthMultipliers
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("death")]
public double Death
{
get;
set;
}
public double Death { get; set; }
[JsonPropertyName("blacked")]
public double Blacked
{
get;
set;
}
public double Blacked { get; set; }
}
public record HealthSave
@@ -52,16 +32,8 @@ public record HealthSave
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("health")]
public bool Health
{
get;
set;
}
public bool Health { get; set; }
[JsonPropertyName("effects")]
public bool Effects
{
get;
set;
}
public bool Effects { get; set; }
}
@@ -7,83 +7,43 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record HideoutConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-hideout";
public override string Kind { get; set; } = "spt-hideout";
/// <summary>
/// How many seconds should pass before hideout crafts / fuel usage is checked and processed
/// </summary>
[JsonPropertyName("runIntervalSeconds")]
public int RunIntervalSeconds
{
get;
set;
}
public int RunIntervalSeconds { get; set; }
/// <summary>
/// Default values used to hydrate `RunIntervalSeconds` with
/// </summary>
[JsonPropertyName("runIntervalValues")]
public required RunIntervalValues RunIntervalValues
{
get;
set;
}
public required RunIntervalValues RunIntervalValues { get; set; }
[JsonPropertyName("hoursForSkillCrafting")]
public int HoursForSkillCrafting
{
get;
set;
}
public int HoursForSkillCrafting { get; set; }
[JsonPropertyName("expCraftAmount")]
public int ExpCraftAmount
{
get;
set;
}
public int ExpCraftAmount { get; set; }
[JsonPropertyName("overrideCraftTimeSeconds")]
public int OverrideCraftTimeSeconds
{
get;
set;
}
public int OverrideCraftTimeSeconds { get; set; }
[JsonPropertyName("overrideBuildTimeSeconds")]
public int OverrideBuildTimeSeconds
{
get;
set;
}
public int OverrideBuildTimeSeconds { get; set; }
/// <summary>
/// Only process a profile's hideout crafts when it has been active in the last x minutes
/// </summary>
[JsonPropertyName("updateProfileHideoutWhenActiveWithinMinutes")]
public int UpdateProfileHideoutWhenActiveWithinMinutes
{
get;
set;
}
public int UpdateProfileHideoutWhenActiveWithinMinutes { get; set; }
[JsonPropertyName("cultistCircle")]
public required CultistCircleSettings CultistCircle
{
get;
set;
}
public required CultistCircleSettings CultistCircle { get; set; }
[JsonPropertyName("hideoutCraftsToAdd")]
public required List<HideoutCraftToAdd> HideoutCraftsToAdd
{
get;
set;
}
public required List<HideoutCraftToAdd> HideoutCraftsToAdd { get; set; }
}
public record HideoutCraftToAdd
@@ -95,32 +55,16 @@ public record HideoutCraftToAdd
/// The new mongoId for the craft to use
/// </summary>
[JsonPropertyName("newId")]
public required string NewId
{
get;
set;
}
public required string NewId { get; set; }
[JsonPropertyName("requirements")]
public required List<Requirement> Requirements
{
get;
set;
}
public required List<Requirement> Requirements { get; set; }
[JsonPropertyName("craftIdToCopy")]
public required string CraftIdToCopy
{
get;
set;
}
public required string CraftIdToCopy { get; set; }
[JsonPropertyName("craftOutputTpl")]
public required string CraftOutputTpl
{
get;
set;
}
public required string CraftOutputTpl { get; set; }
}
public record CultistCircleSettings
@@ -129,146 +73,82 @@ public record CultistCircleSettings
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("maxRewardItemCount")]
public int MaxRewardItemCount
{
get;
set;
}
public int MaxRewardItemCount { get; set; }
[JsonPropertyName("maxAttemptsToPickRewardsWithinBudget")]
public int MaxAttemptsToPickRewardsWithinBudget
{
get;
set;
}
public int MaxAttemptsToPickRewardsWithinBudget { get; set; }
[JsonPropertyName("rewardPriceMultiplerMinMax")]
public required MinMax<double> RewardPriceMultiplierMinMax
{
get;
set;
}
public required MinMax<double> RewardPriceMultiplierMinMax { get; set; }
/// <summary>
/// The odds that meeting the highest threshold gives you a bonus to crafting time
/// </summary>
[JsonPropertyName("bonusAmountMultiplier")]
public double BonusAmountMultiplier
{
get;
set;
}
public double BonusAmountMultiplier { get; set; }
[JsonPropertyName("bonusChanceMultiplier")]
public double BonusChanceMultiplier
{
get;
set;
}
public double BonusChanceMultiplier { get; set; }
/// <summary>
/// What is considered a "high-value" item
/// </summary>
[JsonPropertyName("highValueThresholdRub")]
public int HighValueThresholdRub
{
get;
set;
}
public int HighValueThresholdRub { get; set; }
/// <summary>
/// Hideout/task reward crafts have a unique craft time
/// </summary>
[JsonPropertyName("hideoutTaskRewardTimeSeconds")]
public int HideoutTaskRewardTimeSeconds
{
get;
set;
}
public int HideoutTaskRewardTimeSeconds { get; set; }
/// <summary>
/// Rouble amount player needs to sacrifice to get chance of hideout/task rewards
/// </summary>
[JsonPropertyName("hideoutCraftSacrificeThresholdRub")]
public int HideoutCraftSacrificeThresholdRub
{
get;
set;
}
public int HideoutCraftSacrificeThresholdRub { get; set; }
[JsonPropertyName("craftTimeThreshholds")]
public required List<CraftTimeThreshold> CraftTimeThreshholds
{
get;
set;
}
public required List<CraftTimeThreshold> CraftTimeThreshholds { get; set; }
/// <summary>
/// -1 means no override, value in seconds
/// </summary>
[JsonPropertyName("craftTimeOverride")]
public int CraftTimeOverride
{
get;
set;
}
public int CraftTimeOverride { get; set; }
/// <summary>
/// Specific reward pool when player sacrifices specific item(s)
/// </summary>
[JsonPropertyName("directRewards")]
public required List<DirectRewardSettings> DirectRewards
{
get;
set;
}
public required List<DirectRewardSettings> DirectRewards { get; set; }
/// <summary>
/// Overrides for reward stack sizes, keyed by item tpl
/// </summary>
[JsonPropertyName("directRewardStackSize")]
public required Dictionary<string, MinMax<int>> DirectRewardStackSize
{
get;
set;
}
public required Dictionary<string, MinMax<int>> DirectRewardStackSize { get; set; }
/// <summary>
/// Item tpls to exclude from the reward pool
/// </summary>
[JsonPropertyName("rewardItemBlacklist")]
public required List<string> RewardItemBlacklist
{
get;
set;
}
public required List<string> RewardItemBlacklist { get; set; }
/// <summary>
/// Item tpls to include in the reward pool
/// </summary>
[JsonPropertyName("additionalRewardItemPool")]
public required List<string> AdditionalRewardItemPool
{
get;
set;
}
public required List<string> AdditionalRewardItemPool { get; set; }
[JsonPropertyName("currencyRewards")]
public required Dictionary<string, MinMax<int>> CurrencyRewards
{
get;
set;
}
public required Dictionary<string, MinMax<int>> CurrencyRewards { get; set; }
}
public record CraftTimeThreshold : MinMax<int>
{
[JsonPropertyName("craftTimeSeconds")]
public int CraftTimeSeconds
{
get;
set;
}
public int CraftTimeSeconds { get; set; }
}
public record DirectRewardSettings
@@ -277,33 +157,17 @@ public record DirectRewardSettings
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("reward")]
public required List<string> Reward
{
get;
set;
}
public required List<string> Reward { get; set; }
[JsonPropertyName("requiredItems")]
public required List<string> RequiredItems
{
get;
set;
}
public required List<string> RequiredItems { get; set; }
[JsonPropertyName("craftTimeSeconds")]
public required int CraftTimeSeconds
{
get;
set;
}
public required int CraftTimeSeconds { get; set; }
/// <summary>
/// Is the reward a one time reward or can it be given multiple times
/// </summary>
[JsonPropertyName("repeatable")]
public required bool Repeatable
{
get;
set;
}
public required bool Repeatable { get; set; }
}
@@ -5,74 +5,38 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record HttpConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-http";
public override string Kind { get; set; } = "spt-http";
/// <summary>
/// Address used by webserver
/// </summary>
[JsonPropertyName("ip")]
public required string Ip
{
get;
set;
}
public required string Ip { get; set; }
[JsonPropertyName("port")]
public required int Port
{
get;
set;
}
public required int Port { get; set; }
/// <summary>
/// Address used by game client to connect to
/// </summary>
[JsonPropertyName("backendIp")]
public required string BackendIp
{
get;
set;
}
public required string BackendIp { get; set; }
[JsonPropertyName("backendPort")]
public required int BackendPort
{
get;
set;
}
public required int BackendPort { get; set; }
[JsonPropertyName("webSocketPingDelayMs")]
public required int WebSocketPingDelayMs
{
get;
set;
}
public required int WebSocketPingDelayMs { get; set; }
[JsonPropertyName("logRequests")]
public required bool LogRequests
{
get;
set;
}
public required bool LogRequests { get; set; }
/// <summary>
/// e.g. "SPT_Data/Server/images/traders/579dc571d53a0658a154fbec.png": "SPT_Data/Server/images/traders/NewTraderImage.png"
/// </summary>
[JsonPropertyName("serverImagePathOverride")]
public required Dictionary<string, string> ServerImagePathOverride
{
get;
set;
}
public required Dictionary<string, string> ServerImagePathOverride { get; set; }
[JsonPropertyName("certificatePassword")]
public required string CertificatePassword
{
get;
set;
}
public required string CertificatePassword { get; set; }
}
@@ -5,121 +5,73 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record InRaidConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-inraid";
public override string Kind { get; set; } = "spt-inraid";
/// <summary>
/// Overrides to apply to the pre-raid settings screen
/// </summary>
[JsonPropertyName("raidMenuSettings")]
public required RaidMenuSettings RaidMenuSettings
{
get;
set;
}
public required RaidMenuSettings RaidMenuSettings { get; set; }
/// <summary>
/// What effects should be saved post-raid
/// </summary>
[JsonPropertyName("save")]
public RaidSave Save
{
get;
set;
}
public RaidSave Save { get; set; }
/// <summary>
/// Names of car extracts
/// </summary>
[JsonPropertyName("carExtracts")]
public required List<string> CarExtracts
{
get;
set;
}
public required List<string> CarExtracts { get; set; }
/// <summary>
/// Names of coop extracts
/// </summary>
[JsonPropertyName("coopExtracts")]
public required List<string> CoopExtracts
{
get;
set;
}
public required List<string> CoopExtracts { get; set; }
/// <summary>
/// Fence rep gain from a single car extract
/// </summary>
[JsonPropertyName("carExtractBaseStandingGain")]
public double CarExtractBaseStandingGain
{
get;
set;
}
public double CarExtractBaseStandingGain { get; set; }
/// <summary>
/// Fence rep gain from a single coop extract
/// </summary>
[JsonPropertyName("coopExtractBaseStandingGain")]
public double CoopExtractBaseStandingGain
{
get;
set;
}
public double CoopExtractBaseStandingGain { get; set; }
/// <summary>
/// Fence rep gain when successfully extracting as pscav
/// </summary>
[JsonPropertyName("scavExtractStandingGain")]
public double ScavExtractStandingGain
{
get;
set;
}
public double ScavExtractStandingGain { get; set; }
/// <summary>
/// The likelihood of PMC eliminating a minimum of 2 scavs while you engage them as a pscav.
/// </summary>
[JsonPropertyName("pmcKillProbabilityForScavGain")]
public double PmcKillProbabilityForScavGain
{
get;
set;
}
public double PmcKillProbabilityForScavGain { get; set; }
/// <summary>
/// On death should items in your secure keep their Find in raid status regardless of how you finished the raid
/// </summary>
[JsonPropertyName("keepFiRSecureContainerOnDeath")]
public bool KeepFiRSecureContainerOnDeath
{
get;
set;
}
public bool KeepFiRSecureContainerOnDeath { get; set; }
/// <summary>
/// If enabled always keep found in raid status on items
/// </summary>
[JsonPropertyName("alwaysKeepFoundInRaidOnRaidEnd")]
public bool AlwaysKeepFoundInRaidOnRaidEnd
{
get;
set;
}
public bool AlwaysKeepFoundInRaidOnRaidEnd { get; set; }
/// <summary>
/// Percentage chance a player scav hot is hostile to the player when scavving
/// </summary>
[JsonPropertyName("playerScavHostileChancePercent")]
public double PlayerScavHostileChancePercent
{
get;
set;
}
public double PlayerScavHostileChancePercent { get; set; }
}
public record RaidMenuSettings
@@ -128,60 +80,28 @@ public record RaidMenuSettings
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("aiAmount")]
public required string AiAmount
{
get;
set;
}
public required string AiAmount { get; set; }
[JsonPropertyName("aiDifficulty")]
public required string AiDifficulty
{
get;
set;
}
public required string AiDifficulty { get; set; }
[JsonPropertyName("bossEnabled")]
public bool BossEnabled
{
get;
set;
}
public bool BossEnabled { get; set; }
[JsonPropertyName("scavWars")]
public bool ScavWars
{
get;
set;
}
public bool ScavWars { get; set; }
[JsonPropertyName("taggedAndCursed")]
public bool TaggedAndCursed
{
get;
set;
}
public bool TaggedAndCursed { get; set; }
[JsonPropertyName("enablePve")]
public bool EnablePve
{
get;
set;
}
public bool EnablePve { get; set; }
[JsonPropertyName("randomWeather")]
public bool RandomWeather
{
get;
set;
}
public bool RandomWeather { get; set; }
[JsonPropertyName("randomTime")]
public bool RandomTime
{
get;
set;
}
public bool RandomTime { get; set; }
}
public record RaidSave
@@ -193,9 +113,5 @@ public record RaidSave
/// Should loot gained from raid be saved
/// </summary>
[JsonPropertyName("loot")]
public bool Loot
{
get;
set;
}
public bool Loot { get; set; }
}
@@ -5,96 +5,56 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record InsuranceConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-insurance";
public override string Kind { get; set; } = "spt-insurance";
/// <summary>
/// Chance item is returned as insurance, keyed by trader id
/// </summary>
[JsonPropertyName("returnChancePercent")]
public Dictionary<string, double> ReturnChancePercent
{
get;
set;
} = [];
public Dictionary<string, double> ReturnChancePercent { get; set; } = [];
/// <summary>
/// Item slots that should never be returned as insurance
/// </summary>
[JsonPropertyName("blacklistedEquipment")]
public List<string> BlacklistedEquipment
{
get;
set;
} = [];
public List<string> BlacklistedEquipment { get; set; } = [];
/// <summary>
/// Some slots should always be removed, e.g. 'cartridges'
/// </summary>
[JsonPropertyName("slotIdsToAlwaysRemove")]
public List<string> SlotIdsToAlwaysRemove
{
get;
set;
} = [];
public List<string> SlotIdsToAlwaysRemove { get; set; } = [];
/// <summary>
/// Override to control how quickly insurance is processed/returned in seconds
/// </summary>
[JsonPropertyName("returnTimeOverrideSeconds")]
public double ReturnTimeOverrideSeconds
{
get;
set;
}
public double ReturnTimeOverrideSeconds { get; set; }
/// <summary>
/// Override to control how long insurance returns stay in mail before expiring - in seconds
/// </summary>
[JsonPropertyName("storageTimeOverrideSeconds")]
public double StorageTimeOverrideSeconds
{
get;
set;
}
public double StorageTimeOverrideSeconds { get; set; }
/// <summary>
/// How often server should process insurance in seconds
/// </summary>
[JsonPropertyName("runIntervalSeconds")]
public double RunIntervalSeconds
{
get;
set;
}
public double RunIntervalSeconds { get; set; }
/// <summary>
/// Lowest rouble price for an attachment to be allowed to be taken
/// </summary>
[JsonPropertyName("minAttachmentRoublePriceToBeTaken")]
public double MinAttachmentRoublePriceToBeTaken
{
get;
set;
}
public double MinAttachmentRoublePriceToBeTaken { get; set; }
/// <summary>
/// Chance out of 100% no attachments from a parent are taken
/// </summary>
[JsonPropertyName("chanceNoAttachmentsTakenPercent")]
public double ChanceNoAttachmentsTakenPercent
{
get;
set;
}
public double ChanceNoAttachmentsTakenPercent { get; set; }
[JsonPropertyName("simulateItemsBeingTaken")]
public bool SimulateItemsBeingTaken
{
get;
set;
}
public bool SimulateItemsBeingTaken { get; set; }
}
@@ -6,65 +6,37 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record InventoryConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-inventory";
public override string Kind { get; set; } = "spt-inventory";
/// <summary>
/// Should new items purchased by flagged as found in raid
/// </summary>
[JsonPropertyName("newItemsMarkedFound")]
public bool NewItemsMarkedFound
{
get;
set;
}
public bool NewItemsMarkedFound { get; set; }
[JsonPropertyName("randomLootContainers")]
public required Dictionary<string, RewardDetails> RandomLootContainers
{
get;
set;
}
public required Dictionary<string, RewardDetails> RandomLootContainers { get; set; }
[JsonPropertyName("sealedAirdropContainer")]
public required SealedAirdropContainerSettings SealedAirdropContainer
{
get;
set;
}
public required SealedAirdropContainerSettings SealedAirdropContainer { get; set; }
/// <summary>
/// Contains item tpls that the server should consider money and treat the same as roubles/euros/dollars
/// </summary>
[JsonPropertyName("customMoneyTpls")]
public required List<string> CustomMoneyTpls
{
get;
set;
}
public required List<string> CustomMoneyTpls { get; set; }
/// <summary>
/// Multipliers for skill gain when inside menus, NOT in-game
/// </summary>
[JsonPropertyName("skillGainMultiplers")]
public required Dictionary<string, double> SkillGainMultipliers
{
get;
set;
}
public required Dictionary<string, double> SkillGainMultipliers { get; set; }
/// <summary>
/// Container Tpls that should be deprioritised when choosing where to take money from for payments
/// </summary>
[JsonPropertyName("deprioritisedMoneyContainers")]
public required HashSet<string> DeprioritisedMoneyContainers
{
get;
set;
}
public required HashSet<string> DeprioritisedMoneyContainers { get; set; }
}
public record RewardDetails
@@ -73,39 +45,19 @@ public record RewardDetails
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("_type")]
public string? Type
{
get;
set;
}
public string? Type { get; set; }
[JsonPropertyName("rewardCount")]
public int RewardCount
{
get;
set;
}
public int RewardCount { get; set; }
[JsonPropertyName("foundInRaid")]
public bool FoundInRaid
{
get;
set;
}
public bool FoundInRaid { get; set; }
[JsonPropertyName("rewardTplPool")]
public Dictionary<string, double>? RewardTplPool
{
get;
set;
}
public Dictionary<string, double>? RewardTplPool { get; set; }
[JsonPropertyName("rewardTypePool")]
public List<string>? RewardTypePool
{
get;
set;
}
public List<string>? RewardTypePool { get; set; }
}
public record SealedAirdropContainerSettings
@@ -114,54 +66,26 @@ public record SealedAirdropContainerSettings
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("weaponRewardWeight")]
public required Dictionary<string, double> WeaponRewardWeight
{
get;
set;
}
public required Dictionary<string, double> WeaponRewardWeight { get; set; }
[JsonPropertyName("defaultPresetsOnly")]
public bool DefaultPresetsOnly
{
get;
set;
}
public bool DefaultPresetsOnly { get; set; }
/// <summary>
/// Should contents be flagged as found in raid when opened
/// </summary>
[JsonPropertyName("foundInRaid")]
public bool FoundInRaid
{
get;
set;
}
public bool FoundInRaid { get; set; }
[JsonPropertyName("weaponModRewardLimits")]
public required Dictionary<string, MinMax<int>> WeaponModRewardLimits
{
get;
set;
}
public required Dictionary<string, MinMax<int>> WeaponModRewardLimits { get; set; }
[JsonPropertyName("rewardTypeLimits")]
public required Dictionary<string, MinMax<int>> RewardTypeLimits
{
get;
set;
}
public required Dictionary<string, MinMax<int>> RewardTypeLimits { get; set; }
[JsonPropertyName("ammoBoxWhitelist")]
public required List<string> AmmoBoxWhitelist
{
get;
set;
}
public required List<string> AmmoBoxWhitelist { get; set; }
[JsonPropertyName("allowBossItems")]
public bool AllowBossItems
{
get;
set;
}
public bool AllowBossItems { get; set; }
}
@@ -6,78 +6,46 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record ItemConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-item";
public override string Kind { get; set; } = "spt-item";
/// <summary>
/// Items that should be globally blacklisted
/// </summary>
[JsonPropertyName("blacklist")]
public required HashSet<string> Blacklist
{
get;
set;
}
public required HashSet<string> Blacklist { get; set; }
/// <summary>
/// Items that should not be lootable from any location
/// </summary>
[JsonPropertyName("lootableItemBlacklist")]
public required HashSet<string> LootableItemBlacklist
{
get;
set;
}
public required HashSet<string> LootableItemBlacklist { get; set; }
/// <summary>
/// items that should not be given as rewards
/// </summary>
[JsonPropertyName("rewardItemBlacklist")]
public required HashSet<string> RewardItemBlacklist
{
get;
set;
}
public required HashSet<string> RewardItemBlacklist { get; set; }
/// <summary>
/// Item base types that should not be given as rewards
/// </summary>
[JsonPropertyName("rewardItemTypeBlacklist")]
public required HashSet<string> RewardItemTypeBlacklist
{
get;
set;
}
public required HashSet<string> RewardItemTypeBlacklist { get; set; }
/// <summary>
/// Items that can only be found on bosses
/// </summary>
[JsonPropertyName("bossItems")]
public required HashSet<string> BossItems
{
get;
set;
}
public required HashSet<string> BossItems { get; set; }
[JsonPropertyName("handbookPriceOverride")]
public required Dictionary<string, HandbookPriceOverride> HandbookPriceOverride
{
get;
set;
}
public required Dictionary<string, HandbookPriceOverride> HandbookPriceOverride { get; set; }
/// <summary>
/// Presets to add to the globals.json `ItemPresets` dictionary on server start
/// </summary>
[JsonPropertyName("customItemGlobalPresets")]
public required List<Preset> CustomItemGlobalPresets
{
get;
set;
}
public required List<Preset> CustomItemGlobalPresets { get; set; }
}
public record HandbookPriceOverride
@@ -89,19 +57,11 @@ public record HandbookPriceOverride
/// Price in roubles
/// </summary>
[JsonPropertyName("price")]
public double Price
{
get;
set;
}
public double Price { get; set; }
/// <summary>
/// NOT parentId from items.json, but handbook.json
/// </summary>
[JsonPropertyName("parentId")]
public string? ParentId
{
get;
set;
} = string.Empty;
public string? ParentId { get; set; } = string.Empty;
}
@@ -5,46 +5,26 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record LocaleConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-locale";
public override string Kind { get; set; } = "spt-locale";
/// <summary>
/// e.g. ru/en/cn/fr etc, or 'system', will take computer locale setting
/// </summary>
[JsonPropertyName("gameLocale")]
public required string GameLocale
{
get;
set;
}
public required string GameLocale { get; set; }
/// <summary>
/// e.g. ru/en/cn/fr etc, or 'system', will take computer locale setting
/// </summary>
[JsonPropertyName("serverLocale")]
public required string ServerLocale
{
get;
set;
}
public required string ServerLocale { get; set; }
/// <summary>
/// Languages server can be translated into
/// </summary>
[JsonPropertyName("serverSupportedLocales")]
public required List<string> ServerSupportedLocales
{
get;
set;
}
public required List<string> ServerSupportedLocales { get; set; }
[JsonPropertyName("fallbacks")]
public required Dictionary<string, string> Fallbacks
{
get;
set;
}
public required Dictionary<string, string> Fallbacks { get; set; }
}
@@ -7,232 +7,136 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record LocationConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-location";
public override string Kind { get; set; } = "spt-location";
/// <summary>
/// Rogues are classified as bosses and spawn immediately, this can result in no scavs spawning, delay rogues spawning to allow scavs to spawn first
/// </summary>
[JsonPropertyName("rogueLighthouseSpawnTimeSettings")]
public required RogueLighthouseSpawnTimeSettings RogueLighthouseSpawnTimeSettings
{
get;
set;
}
public required RogueLighthouseSpawnTimeSettings RogueLighthouseSpawnTimeSettings { get; set; }
[JsonPropertyName("looseLootMultiplier")]
public required Dictionary<string, double> LooseLootMultiplier
{
get;
set;
}
public required Dictionary<string, double> LooseLootMultiplier { get; set; }
[JsonPropertyName("staticLootMultiplier")]
public required Dictionary<string, double> StaticLootMultiplier
{
get;
set;
}
public required Dictionary<string, double> StaticLootMultiplier { get; set; }
/// <summary>
/// Custom bot waves to add to a locations base json on game start if addCustomBotWavesToMaps is true
/// </summary>
[JsonPropertyName("customWaves")]
public CustomWaves? CustomWaves
{
get;
set;
}
public CustomWaves? CustomWaves { get; set; }
/// <summary>
/// Open zones to add to map
/// </summary>
[JsonPropertyName("openZones")]
public required Dictionary<string, HashSet<string>> OpenZones
{
get;
set;
}
public required Dictionary<string, HashSet<string>> OpenZones { get; set; }
/// <summary>
/// Key = map id, value = item tpls that should only have one forced loot spawn position
/// </summary>
[JsonPropertyName("forcedLootSingleSpawnById")]
public required Dictionary<string, HashSet<string>> ForcedLootSingleSpawnById
{
get;
set;
}
public required Dictionary<string, HashSet<string>> ForcedLootSingleSpawnById { get; set; }
/// <summary>
/// How many attempts should be taken to fit an item into a container before giving up
/// </summary>
[JsonPropertyName("fitLootIntoContainerAttempts")]
public int FitLootIntoContainerAttempts
{
get;
set;
}
public int FitLootIntoContainerAttempts { get; set; }
/// <summary>
/// Add all possible zones to each maps `OpenZones` property
/// </summary>
[JsonPropertyName("addOpenZonesToAllMaps")]
public bool AddOpenZonesToAllMaps
{
get;
set;
}
public bool AddOpenZonesToAllMaps { get; set; }
/// <summary>
/// Allow addition of custom bot waves designed by SPT to be added to maps - defined in configs/location.json.customWaves
/// </summary>
[JsonPropertyName("addCustomBotWavesToMaps")]
public bool AddCustomBotWavesToMaps
{
get;
set;
}
public bool AddCustomBotWavesToMaps { get; set; }
/// <summary>
/// Should the limits defined inside botTypeLimits to be applied to locations on game start
/// </summary>
[JsonPropertyName("enableBotTypeLimits")]
public bool EnableBotTypeLimits
{
get;
set;
}
public bool EnableBotTypeLimits { get; set; }
/// <summary>
/// Add limits to a locations base.MinMaxBots array if enableBotTypeLimits is true
/// </summary>
[JsonPropertyName("botTypeLimits")]
public required Dictionary<string, List<BotTypeLimit>> BotTypeLimits
{
get;
set;
}
public required Dictionary<string, List<BotTypeLimit>> BotTypeLimits { get; set; }
/// <summary>
/// Container randomisation settings
/// </summary>
[JsonPropertyName("containerRandomisationSettings")]
public required ContainerRandomisationSettings ContainerRandomisationSettings
{
get;
set;
}
public required ContainerRandomisationSettings ContainerRandomisationSettings { get; set; }
/// <summary>
/// How full must a random loose magazine be %
/// </summary>
[JsonPropertyName("minFillLooseMagazinePercent")]
public int MinFillLooseMagazinePercent
{
get;
set;
}
public int MinFillLooseMagazinePercent { get; set; }
/// <summary>
/// How full must a random static magazine be %
/// </summary>
[JsonPropertyName("minFillStaticMagazinePercent")]
public int MinFillStaticMagazinePercent
{
get;
set;
}
public int MinFillStaticMagazinePercent { get; set; }
[JsonPropertyName("allowDuplicateItemsInStaticContainers")]
public bool AllowDuplicateItemsInStaticContainers
{
get;
set;
}
public bool AllowDuplicateItemsInStaticContainers { get; set; }
/// <summary>
/// Chance loose magazines have ammo in them TODO - rename to dynamicMagazineLootHasAmmoChancePercent
/// </summary>
[JsonPropertyName("magazineLootHasAmmoChancePercent")]
public int MagazineLootHasAmmoChancePercent
{
get;
set;
}
public int MagazineLootHasAmmoChancePercent { get; set; }
/// <summary>
/// Chance static magazines have ammo in them
/// </summary>
[JsonPropertyName("staticMagazineLootHasAmmoChancePercent")]
public int StaticMagazineLootHasAmmoChancePercent
{
get;
set;
}
public int StaticMagazineLootHasAmmoChancePercent { get; set; }
/// <summary>
/// Key: map, value: loose loot ids to ignore
/// </summary>
[JsonPropertyName("looseLootBlacklist")]
public required Dictionary<string, List<string>> LooseLootBlacklist
{
get;
set;
}
public required Dictionary<string, List<string>> LooseLootBlacklist { get; set; }
/// <summary>
/// Key: map, value: settings to control how long scav raids are
/// </summary>
[JsonPropertyName("scavRaidTimeSettings")]
public required ScavRaidTimeSettings ScavRaidTimeSettings
{
get;
set;
}
public required ScavRaidTimeSettings ScavRaidTimeSettings { get; set; }
/// <summary>
/// Settings to adjust mods for lootable equipment in raid
/// </summary>
[JsonPropertyName("equipmentLootSettings")]
public required EquipmentLootSettings EquipmentLootSettings
{
get;
set;
}
public required EquipmentLootSettings EquipmentLootSettings { get; set; }
/// <summary>
/// Min percentage to set raider spawns at, -1 makes no changes
/// </summary>
[JsonPropertyName("reserveRaiderSpawnChanceOverrides")]
public required ReserveRaiderSpawnChanceOverrides ReserveRaiderSpawnChanceOverrides
{
get;
set;
}
public required ReserveRaiderSpawnChanceOverrides ReserveRaiderSpawnChanceOverrides { get; set; }
/// <summary>
/// Containers to remove all children from when generating static/loose loot
/// </summary>
[JsonPropertyName("tplsToStripChildItemsFrom")]
public required HashSet<string> TplsToStripChildItemsFrom
{
get;
set;
}
public required HashSet<string> TplsToStripChildItemsFrom { get; set; }
/// <summary>
/// Map ids players cannot visit
/// </summary>
[JsonPropertyName("nonMaps")]
public required HashSet<string> NonMaps
{
get;
set;
}
public required HashSet<string> NonMaps { get; set; }
[JsonPropertyName("transitSettings")]
public TransitSettings? TransitSettings { get; set; }
@@ -256,18 +160,10 @@ public record ReserveRaiderSpawnChanceOverrides
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("nonTriggered")]
public int NonTriggered
{
get;
set;
}
public int NonTriggered { get; set; }
[JsonPropertyName("triggered")]
public int Triggered
{
get;
set;
}
public int Triggered { get; set; }
}
public record EquipmentLootSettings
@@ -279,11 +175,7 @@ public record EquipmentLootSettings
/// Percentage chance item will be added to equipment
/// </summary>
[JsonPropertyName("modSpawnChancePercent")]
public required Dictionary<string, double> ModSpawnChancePercent
{
get;
set;
}
public required Dictionary<string, double> ModSpawnChancePercent { get; set; }
}
public record RogueLighthouseSpawnTimeSettings
@@ -292,18 +184,10 @@ public record RogueLighthouseSpawnTimeSettings
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("enabled")]
public bool Enabled
{
get;
set;
}
public bool Enabled { get; set; }
[JsonPropertyName("waitTimeSeconds")]
public int WaitTimeSeconds
{
get;
set;
}
public int WaitTimeSeconds { get; set; }
}
public record CustomWaves
@@ -315,28 +199,16 @@ public record CustomWaves
/// Bosses spawn on raid start
/// </summary>
[JsonPropertyName("boss")]
public Dictionary<string, List<BossLocationSpawn>> Boss
{
get;
set;
} = [];
public Dictionary<string, List<BossLocationSpawn>> Boss { get; set; } = [];
[JsonPropertyName("normal")]
public Dictionary<string, List<Wave>> Normal
{
get;
set;
} = [];
public Dictionary<string, List<Wave>> Normal { get; set; } = [];
}
public record BotTypeLimit : MinMax<int>
{
[JsonPropertyName("type")]
public new required string Type
{
get;
set;
}
public new required string Type { get; set; }
}
public record ContainerRandomisationSettings
@@ -345,45 +217,25 @@ public record ContainerRandomisationSettings
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("enabled")]
public bool Enabled
{
get;
set;
}
public bool Enabled { get; set; }
/// <summary>
/// What maps can use the container randomisation feature
/// </summary>
[JsonPropertyName("maps")]
public required Dictionary<string, bool> Maps
{
get;
set;
}
public required Dictionary<string, bool> Maps { get; set; }
/// <summary>
/// Some container types don't work when randomised
/// </summary>
[JsonPropertyName("containerTypesToNotRandomise")]
public required HashSet<string> ContainerTypesToNotRandomise
{
get;
set;
}
public required HashSet<string> ContainerTypesToNotRandomise { get; set; }
[JsonPropertyName("containerGroupMinSizeMultiplier")]
public double ContainerGroupMinSizeMultiplier
{
get;
set;
}
public double ContainerGroupMinSizeMultiplier { get; set; }
[JsonPropertyName("containerGroupMaxSizeMultiplier")]
public double ContainerGroupMaxSizeMultiplier
{
get;
set;
}
public double ContainerGroupMaxSizeMultiplier { get; set; }
}
public record ScavRaidTimeSettings
@@ -392,18 +244,10 @@ public record ScavRaidTimeSettings
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("settings")]
public required ScavRaidTimeConfigSettings Settings
{
get;
set;
}
public required ScavRaidTimeConfigSettings Settings { get; set; }
[JsonPropertyName("maps")]
public required Dictionary<string, ScavRaidTimeLocationSettings?> Maps
{
get;
set;
}
public required Dictionary<string, ScavRaidTimeLocationSettings?> Maps { get; set; }
}
public record ScavRaidTimeConfigSettings
@@ -412,11 +256,7 @@ public record ScavRaidTimeConfigSettings
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("trainArrivalDelayObservedSeconds")]
public int TrainArrivalDelayObservedSeconds
{
get;
set;
}
public int TrainArrivalDelayObservedSeconds { get; set; }
}
public record ScavRaidTimeLocationSettings
@@ -428,59 +268,35 @@ public record ScavRaidTimeLocationSettings
/// Should loot be reduced by same percent length of raid is reduced by
/// </summary>
[JsonPropertyName("reduceLootByPercent")]
public bool ReduceLootByPercent
{
get;
set;
}
public bool ReduceLootByPercent { get; set; }
/// <summary>
/// Smallest % of container loot that should be spawned
/// </summary>
[JsonPropertyName("minStaticLootPercent")]
public double MinStaticLootPercent
{
get;
set;
}
public double MinStaticLootPercent { get; set; }
/// <summary>
/// Smallest % of loose loot that should be spawned
/// </summary>
[JsonPropertyName("minDynamicLootPercent")]
public double MinDynamicLootPercent
{
get;
set;
}
public double MinDynamicLootPercent { get; set; }
/// <summary>
/// Chance raid time is reduced
/// </summary>
[JsonPropertyName("reducedChancePercent")]
public double ReducedChancePercent
{
get;
set;
}
public double ReducedChancePercent { get; set; }
/// <summary>
/// How much should raid time be reduced - weighted
/// </summary>
[JsonPropertyName("reductionPercentWeights")]
public Dictionary<string, double> ReductionPercentWeights
{
get;
set;
} = [];
public Dictionary<string, double> ReductionPercentWeights { get; set; } = [];
/// <summary>
/// Should bot waves be removed / spawn times be adjusted
/// </summary>
[JsonPropertyName("adjustWaves")]
public bool AdjustWaves
{
get;
set;
}
public bool AdjustWaves { get; set; }
}
@@ -6,29 +6,20 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record LootConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-loot";
public override string Kind { get; set; } = "spt-loot";
/// <summary>
/// Spawn positions to add into a map, key=mapid
/// </summary>
[JsonPropertyName("looseLoot")]
public required Dictionary<string, Spawnpoint[]> LooseLoot
{
get;
set;
}
public required Dictionary<string, Spawnpoint[]> LooseLoot { get; set; }
/// <summary>
/// Loose loot probability adjustments to apply on game start
/// </summary>
[JsonPropertyName("looseLootSpawnPointAdjustments")]
public required Dictionary<string, Dictionary<string, double>> LooseLootSpawnPointAdjustments
{
get;
set;
}
public required Dictionary<
string,
Dictionary<string, double>
> LooseLootSpawnPointAdjustments { get; set; }
}
@@ -5,41 +5,25 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record LostOnDeathConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-lostondeath";
public override string Kind { get; set; } = "spt-lostondeath";
/// <summary>
/// What equipment in each slot should be lost on death
/// </summary>
[JsonPropertyName("equipment")]
public required LostEquipment Equipment
{
get;
set;
}
public required LostEquipment Equipment { get; set; }
/// <summary>
/// Should special slot items be removed from quest inventory on death e.g. wifi camera/markers
/// </summary>
[JsonPropertyName("specialSlotItems")]
public bool SpecialSlotItems
{
get;
set;
}
public bool SpecialSlotItems { get; set; }
/// <summary>
/// Should quest items be removed from quest inventory on death
/// </summary>
[JsonPropertyName("questItems")]
public bool QuestItems
{
get;
set;
}
public bool QuestItems { get; set; }
}
public record LostEquipment
@@ -48,107 +32,47 @@ public record LostEquipment
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("ArmBand")]
public bool ArmBand
{
get;
set;
}
public bool ArmBand { get; set; }
[JsonPropertyName("Headwear")]
public bool Headwear
{
get;
set;
}
public bool Headwear { get; set; }
[JsonPropertyName("Earpiece")]
public bool Earpiece
{
get;
set;
}
public bool Earpiece { get; set; }
[JsonPropertyName("FaceCover")]
public bool FaceCover
{
get;
set;
}
public bool FaceCover { get; set; }
[JsonPropertyName("ArmorVest")]
public bool ArmorVest
{
get;
set;
}
public bool ArmorVest { get; set; }
[JsonPropertyName("Eyewear")]
public bool Eyewear
{
get;
set;
}
public bool Eyewear { get; set; }
[JsonPropertyName("TacticalVest")]
public bool TacticalVest
{
get;
set;
}
public bool TacticalVest { get; set; }
[JsonPropertyName("PocketItems")]
public bool PocketItems
{
get;
set;
}
public bool PocketItems { get; set; }
[JsonPropertyName("Backpack")]
public bool Backpack
{
get;
set;
}
public bool Backpack { get; set; }
[JsonPropertyName("Holster")]
public bool Holster
{
get;
set;
}
public bool Holster { get; set; }
[JsonPropertyName("FirstPrimaryWeapon")]
public bool FirstPrimaryWeapon
{
get;
set;
}
public bool FirstPrimaryWeapon { get; set; }
[JsonPropertyName("SecondPrimaryWeapon")]
public bool SecondPrimaryWeapon
{
get;
set;
}
public bool SecondPrimaryWeapon { get; set; }
[JsonPropertyName("Scabbard")]
public bool Scabbard
{
get;
set;
}
public bool Scabbard { get; set; }
[JsonPropertyName("Compass")]
public bool Compass
{
get;
set;
}
public bool Compass { get; set; }
[JsonPropertyName("SecuredContainer")]
public bool SecuredContainer
{
get;
set;
}
public bool SecuredContainer { get; set; }
}
@@ -5,23 +5,11 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record MatchConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-match";
public override string Kind { get; set; } = "spt-match";
[JsonPropertyName("enabled")]
public bool Enabled
{
get;
set;
}
public bool Enabled { get; set; }
[JsonPropertyName("randomiseMapContainers")]
public required Dictionary<string, bool> RandomiseMapContainers
{
get;
set;
}
public required Dictionary<string, bool> RandomiseMapContainers { get; set; }
}
@@ -7,18 +7,10 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record PlayerScavConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-playerscav";
public override string Kind { get; set; } = "spt-playerscav";
[JsonPropertyName("karmaLevel")]
public required Dictionary<string, KarmaLevel> KarmaLevel
{
get;
set;
}
public required Dictionary<string, KarmaLevel> KarmaLevel { get; set; }
}
public record KarmaLevel
@@ -27,46 +19,22 @@ public record KarmaLevel
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("botTypeForLoot")]
public required string BotTypeForLoot
{
get;
set;
}
public required string BotTypeForLoot { get; set; }
[JsonPropertyName("modifiers")]
public required Modifiers Modifiers
{
get;
set;
}
public required Modifiers Modifiers { get; set; }
[JsonPropertyName("itemLimits")]
public required Dictionary<string, GenerationData> ItemLimits
{
get;
set;
}
public required Dictionary<string, GenerationData> ItemLimits { get; set; }
[JsonPropertyName("equipmentBlacklist")]
public required Dictionary<EquipmentSlots, List<string>> EquipmentBlacklist
{
get;
set;
}
public required Dictionary<EquipmentSlots, List<string>> EquipmentBlacklist { get; set; }
[JsonPropertyName("labsAccessCardChancePercent")]
public double? LabsAccessCardChancePercent
{
get;
set;
}
public double? LabsAccessCardChancePercent { get; set; }
[JsonPropertyName("lootItemsToAddChancePercent")]
public required Dictionary<string, double> LootItemsToAddChancePercent
{
get;
set;
}
public required Dictionary<string, double> LootItemsToAddChancePercent { get; set; }
}
public record Modifiers
@@ -75,16 +43,8 @@ public record Modifiers
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("equipment")]
public required Dictionary<string, double> Equipment
{
get;
set;
}
public required Dictionary<string, double> Equipment { get; set; }
[JsonPropertyName("mod")]
public required Dictionary<string, double> Mod
{
get;
set;
}
public required Dictionary<string, double> Mod { get; set; }
}
@@ -5,25 +5,13 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record PmcChatResponse : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-pmcchatresponse";
public override string Kind { get; set; } = "spt-pmcchatresponse";
[JsonPropertyName("victim")]
public required ResponseSettings Victim
{
get;
set;
}
public required ResponseSettings Victim { get; set; }
[JsonPropertyName("killer")]
public required ResponseSettings Killer
{
get;
set;
}
public required ResponseSettings Killer { get; set; }
}
public record ResponseSettings
@@ -32,37 +20,17 @@ public record ResponseSettings
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("responseChancePercent")]
public double ResponseChancePercent
{
get;
set;
}
public double ResponseChancePercent { get; set; }
[JsonPropertyName("responseTypeWeights")]
public required Dictionary<string, double> ResponseTypeWeights
{
get;
set;
}
public required Dictionary<string, double> ResponseTypeWeights { get; set; }
[JsonPropertyName("stripCapitalisationChancePercent")]
public double StripCapitalisationChancePercent
{
get;
set;
}
public double StripCapitalisationChancePercent { get; set; }
[JsonPropertyName("allCapsChancePercent")]
public double AllCapsChancePercent
{
get;
set;
}
public double AllCapsChancePercent { get; set; }
[JsonPropertyName("appendBroToMessageEndChancePercent")]
public double AppendBroToMessageEndChancePercent
{
get;
set;
}
public double AppendBroToMessageEndChancePercent { get; set; }
}
@@ -8,282 +8,157 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record PmcConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-pmc";
public override string Kind { get; set; } = "spt-pmc";
/// <summary>
/// What game version should the PMC have
/// </summary>
[JsonPropertyName("gameVersionWeight")]
public required Dictionary<string, double> GameVersionWeight
{
get;
set;
}
public required Dictionary<string, double> GameVersionWeight { get; set; }
/// <summary>
/// What account type should the PMC have
/// </summary>
[JsonPropertyName("accountTypeWeight")]
public required Dictionary<MemberCategory, double> AccountTypeWeight
{
get;
set;
}
public required Dictionary<MemberCategory, double> AccountTypeWeight { get; set; }
/// <summary>
/// Global whitelist/blacklist of vest loot for PMCs
/// </summary>
[JsonPropertyName("vestLoot")]
public required SlotLootSettings VestLoot
{
get;
set;
}
public required SlotLootSettings VestLoot { get; set; }
/// <summary>
/// Global whitelist/blacklist of pocket loot for PMCs
/// </summary>
[JsonPropertyName("pocketLoot")]
public required SlotLootSettings PocketLoot
{
get;
set;
}
public required SlotLootSettings PocketLoot { get; set; }
/// <summary>
/// Global whitelist/blacklist of backpack loot for PMCs
/// </summary>
[JsonPropertyName("backpackLoot")]
public required SlotLootSettings BackpackLoot
{
get;
set;
}
public required SlotLootSettings BackpackLoot { get; set; }
[JsonPropertyName("globalLootBlacklist")]
public required List<string> GlobalLootBlacklist
{
get;
set;
}
public required List<string> GlobalLootBlacklist { get; set; }
/// <summary>
/// Use difficulty defined in config/bot.json/difficulty instead of chosen difficulty dropdown value
/// </summary>
[JsonPropertyName("useDifficultyOverride")]
public required bool UseDifficultyOverride
{
get;
set;
}
public required bool UseDifficultyOverride { get; set; }
/// <summary>
/// Difficulty override e.g. "AsOnline/Hard"
/// </summary>
[JsonPropertyName("difficulty")]
public required string Difficulty
{
get;
set;
}
public required string Difficulty { get; set; }
/// <summary>
/// Chance out of 100 to have a complete gun in backpack
/// </summary>
[JsonPropertyName("looseWeaponInBackpackChancePercent")]
public required double LooseWeaponInBackpackChancePercent
{
get;
set;
}
public required double LooseWeaponInBackpackChancePercent { get; set; }
/// <summary>
/// Chance out of 100 to have an enhancement applied to PMC weapon
/// </summary>
[JsonPropertyName("weaponHasEnhancementChancePercent")]
public required double WeaponHasEnhancementChancePercent
{
get;
set;
}
public required double WeaponHasEnhancementChancePercent { get; set; }
/// <summary>
/// MinMax count of weapons to have in backpack
/// </summary>
[JsonPropertyName("looseWeaponInBackpackLootMinMax")]
public required MinMax<int> LooseWeaponInBackpackLootMinMax
{
get;
set;
}
public required MinMax<int> LooseWeaponInBackpackLootMinMax { get; set; }
[JsonPropertyName("_isUsec")]
public string? IsUsecDescription
{
get;
set;
}
public string? IsUsecDescription { get; set; }
/// <summary>
/// Percentage chance PMC will be USEC
/// </summary>
[JsonPropertyName("isUsec")]
public required double IsUsec
{
get;
set;
}
public required double IsUsec { get; set; }
/// <summary>
/// WildSpawnType enum value USEC PMCs use
/// </summary>
[JsonPropertyName("usecType")]
public required string UsecType
{
get;
set;
}
public required string UsecType { get; set; }
/// <summary>
/// WildSpawnType enum value BEAR PMCs use
/// </summary>
[JsonPropertyName("bearType")]
public required string BearType
{
get;
set;
}
public required string BearType { get; set; }
[JsonPropertyName("_pmcType")]
public string? PmcTypeDescription
{
get;
set;
}
public string? PmcTypeDescription { get; set; }
/// <summary>
/// What 'brain' does a PMC use, keyed by map and side (USEC/BEAR) key: map location, value: type for usec/bear
/// </summary>
[JsonPropertyName("pmcType")]
public required Dictionary<string, Dictionary<string, Dictionary<string, double>>> PmcType
{
get;
set;
}
public required Dictionary<
string,
Dictionary<string, Dictionary<string, double>>
> PmcType { get; set; }
[JsonPropertyName("maxBackpackLootTotalRub")]
public required List<MinMaxLootValue> MaxBackpackLootTotalRub
{
get;
set;
}
public required List<MinMaxLootValue> MaxBackpackLootTotalRub { get; set; }
[JsonPropertyName("maxPocketLootTotalRub")]
public required int MaxPocketLootTotalRub
{
get;
set;
}
public required int MaxPocketLootTotalRub { get; set; }
[JsonPropertyName("maxVestLootTotalRub")]
public required int MaxVestLootTotalRub
{
get;
set;
}
public required int MaxVestLootTotalRub { get; set; }
/// <summary>
/// How many levels above player level can a PMC be
/// </summary>
[JsonPropertyName("botRelativeLevelDeltaMax")]
public required int BotRelativeLevelDeltaMax
{
get;
set;
}
public required int BotRelativeLevelDeltaMax { get; set; }
/// <summary>
/// How many levels below player level can a PMC be
/// </summary>
[JsonPropertyName("botRelativeLevelDeltaMin")]
public required int BotRelativeLevelDeltaMin
{
get;
set;
}
public required int BotRelativeLevelDeltaMin { get; set; }
/// <summary>
/// Force a number of healing items into PMCs secure container to ensure they can heal
/// </summary>
[JsonPropertyName("forceHealingItemsIntoSecure")]
public required bool ForceHealingItemsIntoSecure
{
get;
set;
}
public required bool ForceHealingItemsIntoSecure { get; set; }
[JsonPropertyName("hostilitySettings")]
public required Dictionary<string, HostilitySettings> HostilitySettings
{
get;
set;
}
public required Dictionary<string, HostilitySettings> HostilitySettings { get; set; }
[JsonPropertyName("allPMCsHavePlayerNameWithRandomPrefixChance")]
public required double AllPMCsHavePlayerNameWithRandomPrefixChance
{
get;
set;
}
public required double AllPMCsHavePlayerNameWithRandomPrefixChance { get; set; }
[JsonPropertyName("locationSpecificPmcLevelOverride")]
public required Dictionary<string, MinMax<int>> LocationSpecificPmcLevelOverride
{
get;
set;
}
public required Dictionary<string, MinMax<int>> LocationSpecificPmcLevelOverride { get; set; }
/// <summary>
/// Should secure container loot from usec.json/bear.json be added to pmc bots secure
/// </summary>
[JsonPropertyName("addSecureContainerLootFromBotConfig")]
public required bool AddSecureContainerLootFromBotConfig
{
get;
set;
}
public required bool AddSecureContainerLootFromBotConfig { get; set; }
[JsonPropertyName("addPrefixToSameNamePMCAsPlayerChance")]
public required int? AddPrefixToSameNamePMCAsPlayerChance
{
get;
set;
}
public required int? AddPrefixToSameNamePMCAsPlayerChance { get; set; }
[JsonPropertyName("lootItemLimitsRub")]
public required List<MinMaxLootItemValue>? LootItemLimitsRub
{
get;
set;
}
public required List<MinMaxLootItemValue>? LootItemLimitsRub { get; set; }
[JsonPropertyName("removeExistingPmcWaves")]
public required bool? RemoveExistingPmcWaves
{
get;
set;
}
public required bool? RemoveExistingPmcWaves { get; set; }
[JsonPropertyName("customPmcWaves")]
public required Dictionary<string, List<BossLocationSpawn>> CustomPmcWaves
{
get;
set;
}
public required Dictionary<string, List<BossLocationSpawn>> CustomPmcWaves { get; set; }
}
public record HostilitySettings
@@ -295,59 +170,31 @@ public record HostilitySettings
/// Bot roles that are 100% an enemy
/// </summary>
[JsonPropertyName("additionalEnemyTypes")]
public List<string>? AdditionalEnemyTypes
{
get;
set;
}
public List<string>? AdditionalEnemyTypes { get; set; }
/// <summary>
/// Objects that determine the % chance another bot type is an enemy
/// </summary>
[JsonPropertyName("chancedEnemies")]
public List<ChancedEnemy>? ChancedEnemies
{
get;
set;
}
public List<ChancedEnemy>? ChancedEnemies { get; set; }
[JsonPropertyName("bearEnemyChance")]
public double? BearEnemyChance
{
get;
set;
}
public double? BearEnemyChance { get; set; }
[JsonPropertyName("usecEnemyChance")]
public double? UsecEnemyChance
{
get;
set;
}
public double? UsecEnemyChance { get; set; }
[JsonPropertyName("savageEnemyChance")]
public double? SavageEnemyChance
{
get;
set;
}
public double? SavageEnemyChance { get; set; }
/// <summary>
/// Bot roles that are 100% a friendly
/// </summary>
[JsonPropertyName("additionalFriendlyTypes")]
public List<string>? AdditionalFriendlyTypes
{
get;
set;
}
public List<string>? AdditionalFriendlyTypes { get; set; }
[JsonPropertyName("savagePlayerBehaviour")]
public string? SavagePlayerBehaviour
{
get;
set;
}
public string? SavagePlayerBehaviour { get; set; }
}
public record SlotLootSettings
@@ -359,53 +206,29 @@ public record SlotLootSettings
/// Item Type whitelist
/// </summary>
[JsonPropertyName("whitelist")]
public HashSet<string> Whitelist
{
get;
set;
} = [];
public HashSet<string> Whitelist { get; set; } = [];
/// <summary>
/// Item tpl blacklist
/// </summary>
[JsonPropertyName("blacklist")]
public HashSet<string> Blacklist
{
get;
set;
} = [];
public HashSet<string> Blacklist { get; set; } = [];
}
public record MinMaxLootValue : MinMax<int>
{
[JsonPropertyName("value")]
public double Value
{
get;
set;
}
public double Value { get; set; }
}
public record MinMaxLootItemValue : MinMax<double>
{
[JsonPropertyName("backpack")]
public required MinMax<double> Backpack
{
get;
set;
}
public required MinMax<double> Backpack { get; set; }
[JsonPropertyName("pocket")]
public required MinMax<double> Pocket
{
get;
set;
}
public required MinMax<double> Pocket { get; set; }
[JsonPropertyName("vest")]
public required MinMax<double> Vest
{
get;
set;
}
public required MinMax<double> Vest { get; set; }
}
@@ -9,93 +9,49 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record QuestConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-quest";
public override string Kind { get; set; } = "spt-quest";
/// <summary>
/// Hours to get/redeem items from quest mail keyed by profile type
/// </summary>
[JsonPropertyName("mailRedeemTimeHours")]
public Dictionary<string, double?>? MailRedeemTimeHours
{
get;
set;
}
public Dictionary<string, double?>? MailRedeemTimeHours { get; set; }
[JsonPropertyName("questTemplateIds")]
public PlayerTypeQuestIds? QuestTemplateIds
{
get;
set;
}
public PlayerTypeQuestIds? QuestTemplateIds { get; set; }
/// <summary>
/// Show non-seasonal quests be shown to player
/// </summary>
[JsonPropertyName("showNonSeasonalEventQuests")]
public bool? ShowNonSeasonalEventQuests
{
get;
set;
}
public bool? ShowNonSeasonalEventQuests { get; set; }
[JsonPropertyName("eventQuests")]
public Dictionary<string, EventQuestData>? EventQuests
{
get;
set;
}
public Dictionary<string, EventQuestData>? EventQuests { get; set; }
[JsonPropertyName("repeatableQuests")]
public List<RepeatableQuestConfig>? RepeatableQuests
{
get;
set;
}
public List<RepeatableQuestConfig>? RepeatableQuests { get; set; }
[JsonPropertyName("locationIdMap")]
public Dictionary<string, string>? LocationIdMap
{
get;
set;
}
public Dictionary<string, string>? LocationIdMap { get; set; }
[JsonPropertyName("bearOnlyQuests")]
public HashSet<string>? BearOnlyQuests
{
get;
set;
}
public HashSet<string>? BearOnlyQuests { get; set; }
[JsonPropertyName("usecOnlyQuests")]
public HashSet<string>? UsecOnlyQuests
{
get;
set;
}
public HashSet<string>? UsecOnlyQuests { get; set; }
/// <summary>
/// Quests that the keyed game version do not see/access
/// </summary>
[JsonPropertyName("profileBlacklist")]
public Dictionary<string, HashSet<string>>? ProfileBlacklist
{
get;
set;
}
public Dictionary<string, HashSet<string>>? ProfileBlacklist { get; set; }
/// <summary>
/// key=questid, gameversions that can see/access quest
/// </summary>
[JsonPropertyName("profileWhitelist")]
public Dictionary<string, HashSet<string>>? ProfileWhitelist
{
get;
set;
}
public Dictionary<string, HashSet<string>>? ProfileWhitelist { get; set; }
}
public record PlayerTypeQuestIds
@@ -104,18 +60,10 @@ public record PlayerTypeQuestIds
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("pmc")]
public QuestTypeIds? Pmc
{
get;
set;
}
public QuestTypeIds? Pmc { get; set; }
[JsonPropertyName("scav")]
public QuestTypeIds? Scav
{
get;
set;
}
public QuestTypeIds? Scav { get; set; }
}
public record QuestTypeIds
@@ -124,32 +72,16 @@ public record QuestTypeIds
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("elimination")]
public string? Elimination
{
get;
set;
}
public string? Elimination { get; set; }
[JsonPropertyName("completion")]
public string? Completion
{
get;
set;
}
public string? Completion { get; set; }
[JsonPropertyName("exploration")]
public string? Exploration
{
get;
set;
}
public string? Exploration { get; set; }
[JsonPropertyName("pickup")]
public string? Pickup
{
get;
set;
}
public string? Pickup { get; set; }
}
public record EventQuestData
@@ -158,40 +90,20 @@ public record EventQuestData
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("name")]
public string? Name
{
get;
set;
}
public string? Name { get; set; }
[JsonPropertyName("season")]
public SeasonalEventType? Season
{
get;
set;
}
public SeasonalEventType? Season { get; set; }
[JsonPropertyName("startTimestamp")]
public long? StartTimestamp
{
get;
set;
}
public long? StartTimestamp { get; set; }
[JsonPropertyName("endTimestamp")]
[JsonConverter(typeof(StringToNumberFactoryConverter))]
public long? EndTimestamp
{
get;
set;
}
public long? EndTimestamp { get; set; }
[JsonPropertyName("yearly")]
public bool? Yearly
{
get;
set;
}
public bool? Yearly { get; set; }
}
public record RepeatableQuestConfig
@@ -200,139 +112,67 @@ public record RepeatableQuestConfig
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("id")]
public string? Id
{
get;
set;
}
public string? Id { get; set; }
[JsonPropertyName("name")]
public string? Name
{
get;
set;
}
public string? Name { get; set; }
[JsonPropertyName("side")]
public string? Side
{
get;
set;
}
public string? Side { get; set; }
[JsonPropertyName("types")]
public List<string>? Types
{
get;
set;
}
public List<string>? Types { get; set; }
[JsonPropertyName("resetTime")]
public long? ResetTime
{
get;
set;
}
public long? ResetTime { get; set; }
[JsonPropertyName("numQuests")]
public int? NumQuests
{
get;
set;
}
public int? NumQuests { get; set; }
[JsonPropertyName("minPlayerLevel")]
public int? MinPlayerLevel
{
get;
set;
}
public int? MinPlayerLevel { get; set; }
[JsonPropertyName("rewardScaling")]
public RewardScaling? RewardScaling
{
get;
set;
}
public RewardScaling? RewardScaling { get; set; }
[JsonPropertyName("locations")]
public Dictionary<ELocationName, List<string>>? Locations
{
get;
set;
}
public Dictionary<ELocationName, List<string>>? Locations { get; set; }
[JsonPropertyName("traderWhitelist")]
public List<TraderWhitelist>? TraderWhitelist
{
get;
set;
}
public List<TraderWhitelist>? TraderWhitelist { get; set; }
[JsonPropertyName("questConfig")]
public RepeatableQuestTypesConfig? QuestConfig
{
get;
set;
}
public RepeatableQuestTypesConfig? QuestConfig { get; set; }
/// <summary>
/// Item base types to block when generating rewards
/// </summary>
[JsonPropertyName("rewardBaseTypeBlacklist")]
public HashSet<string>? RewardBaseTypeBlacklist
{
get;
set;
}
public HashSet<string>? RewardBaseTypeBlacklist { get; set; }
/// <summary>
/// Item tplIds to ignore when generating rewards
/// </summary>
[JsonPropertyName("rewardBlacklist")]
public HashSet<string>? RewardBlacklist
{
get;
set;
}
public HashSet<string>? RewardBlacklist { get; set; }
[JsonPropertyName("rewardAmmoStackMinSize")]
public int? RewardAmmoStackMinSize
{
get;
set;
}
public int? RewardAmmoStackMinSize { get; set; }
[JsonPropertyName("freeChangesAvailable")]
public int? FreeChangesAvailable
{
get;
set;
}
public int? FreeChangesAvailable { get; set; }
[JsonPropertyName("freeChanges")]
public int? FreeChanges
{
get;
set;
}
public int? FreeChanges { get; set; }
[JsonPropertyName("keepDailyQuestTypeOnReplacement")]
public bool? KeepDailyQuestTypeOnReplacement
{
get;
set;
}
public bool? KeepDailyQuestTypeOnReplacement { get; set; }
/// <summary>
/// Reputation standing price for replacing a repeatable
/// </summary>
[JsonPropertyName("standingChangeCost")]
public IList<double>? StandingChangeCost
{
get;
set;
}
public IList<double>? StandingChangeCost { get; set; }
}
public record RewardScaling
@@ -341,67 +181,31 @@ public record RewardScaling
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("levels")]
public List<double>? Levels
{
get;
set;
}
public List<double>? Levels { get; set; }
[JsonPropertyName("experience")]
public List<double>? Experience
{
get;
set;
}
public List<double>? Experience { get; set; }
[JsonPropertyName("roubles")]
public List<double>? Roubles
{
get;
set;
}
public List<double>? Roubles { get; set; }
[JsonPropertyName("gpCoins")]
public List<double>? GpCoins
{
get;
set;
}
public List<double>? GpCoins { get; set; }
[JsonPropertyName("items")]
public List<double>? Items
{
get;
set;
}
public List<double>? Items { get; set; }
[JsonPropertyName("reputation")]
public List<double>? Reputation
{
get;
set;
}
public List<double>? Reputation { get; set; }
[JsonPropertyName("rewardSpread")]
public double? RewardSpread
{
get;
set;
}
public double? RewardSpread { get; set; }
[JsonPropertyName("skillRewardChance")]
public List<double>? SkillRewardChance
{
get;
set;
}
public List<double>? SkillRewardChance { get; set; }
[JsonPropertyName("skillPointReward")]
public List<double>? SkillPointReward
{
get;
set;
}
public List<double>? SkillPointReward { get; set; }
}
public record TraderWhitelist
@@ -410,46 +214,22 @@ public record TraderWhitelist
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("name")]
public string? Name
{
get;
set;
}
public string? Name { get; set; }
[JsonPropertyName("traderId")]
public string? TraderId
{
get;
set;
}
public string? TraderId { get; set; }
[JsonPropertyName("questTypes")]
public List<string>? QuestTypes
{
get;
set;
}
public List<string>? QuestTypes { get; set; }
[JsonPropertyName("rewardBaseWhitelist")]
public List<string>? RewardBaseWhitelist
{
get;
set;
}
public List<string>? RewardBaseWhitelist { get; set; }
[JsonPropertyName("rewardCanBeWeapon")]
public bool? RewardCanBeWeapon
{
get;
set;
}
public bool? RewardCanBeWeapon { get; set; }
[JsonPropertyName("weaponRewardChancePercent")]
public double? WeaponRewardChancePercent
{
get;
set;
}
public double? WeaponRewardChancePercent { get; set; }
}
public record RepeatableQuestTypesConfig
@@ -458,56 +238,28 @@ public record RepeatableQuestTypesConfig
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("Exploration")]
public Exploration? Exploration
{
get;
set;
}
public Exploration? Exploration { get; set; }
[JsonPropertyName("Completion")]
public Completion? Completion
{
get;
set;
}
public Completion? Completion { get; set; }
[JsonPropertyName("Pickup")]
public Pickup? Pickup
{
get;
set;
}
public Pickup? Pickup { get; set; }
[JsonPropertyName("Elimination")]
public List<EliminationConfig>? Elimination
{
get;
set;
}
public List<EliminationConfig>? Elimination { get; set; }
}
public record Exploration : BaseQuestConfig
{
[JsonPropertyName("maxExtracts")]
public int? MaximumExtracts
{
get;
set;
}
public int? MaximumExtracts { get; set; }
[JsonPropertyName("maxExtractsWithSpecificExit")]
public int? MaximumExtractsWithSpecificExit
{
get;
set;
}
public int? MaximumExtractsWithSpecificExit { get; set; }
[JsonPropertyName("specificExits")]
public SpecificExits? SpecificExits
{
get;
set;
}
public SpecificExits? SpecificExits { get; set; }
}
public record SpecificExits
@@ -516,123 +268,63 @@ public record SpecificExits
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("probability")]
public double? Probability
{
get;
set;
}
public double? Probability { get; set; }
[JsonPropertyName("passageRequirementWhitelist")]
public List<string>? PassageRequirementWhitelist
{
get;
set;
}
public List<string>? PassageRequirementWhitelist { get; set; }
}
public record Completion : BaseQuestConfig
{
[JsonPropertyName("minRequestedAmount")]
public int? MinimumRequestedAmount
{
get;
set;
}
public int? MinimumRequestedAmount { get; set; }
[JsonPropertyName("maxRequestedAmount")]
public int? MaximumRequestedAmount
{
get;
set;
}
public int? MaximumRequestedAmount { get; set; }
[JsonPropertyName("uniqueItemCount")]
public int? UniqueItemCount
{
get;
set;
}
public int? UniqueItemCount { get; set; }
[JsonPropertyName("minRequestedBulletAmount")]
public int? MinimumRequestedBulletAmount
{
get;
set;
}
public int? MinimumRequestedBulletAmount { get; set; }
[JsonPropertyName("maxRequestedBulletAmount")]
public int? MaximumRequestedBulletAmount
{
get;
set;
}
public int? MaximumRequestedBulletAmount { get; set; }
[JsonPropertyName("useWhitelist")]
public bool? UseWhitelist
{
get;
set;
}
public bool? UseWhitelist { get; set; }
[JsonPropertyName("useBlacklist")]
public bool? UseBlacklist
{
get;
set;
}
public bool? UseBlacklist { get; set; }
/// <summary>
/// Should supplied items be required FiR
/// </summary>
[JsonPropertyName("requiredItemsAreFiR")]
public bool? RequiredItemsAreFiR
{
get;
set;
}
public bool? RequiredItemsAreFiR { get; set; }
/// <summary>
/// Should supplied items be required FiR
/// </summary>
[JsonPropertyName("requiredItemMinDurabilityMinMax")]
public MinMax<double>? RequiredItemMinDurabilityMinMax
{
get;
set;
}
public MinMax<double>? RequiredItemMinDurabilityMinMax { get; set; }
/// <summary>
/// Blacklisted item types to not collect
/// </summary>
[JsonPropertyName("requiredItemTypeBlacklist")]
public HashSet<string>? RequiredItemTypeBlacklist
{
get;
set;
}
public HashSet<string>? RequiredItemTypeBlacklist { get; set; }
}
public record Pickup : BaseQuestConfig
{
[JsonPropertyName("ItemTypeToFetchWithMaxCount")]
public List<PickupTypeWithMaxCount>? ItemTypeToFetchWithMaxCount
{
get;
set;
}
public List<PickupTypeWithMaxCount>? ItemTypeToFetchWithMaxCount { get; set; }
public List<string>? ItemTypesToFetch
{
get;
set;
}
public List<string>? ItemTypesToFetch { get; set; }
[JsonPropertyName("maxItemFetchCount")]
public int? MaxItemFetchCount
{
get;
set;
}
public int? MaxItemFetchCount { get; set; }
}
public record PickupTypeWithMaxCount
@@ -641,161 +333,73 @@ public record PickupTypeWithMaxCount
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("itemType")]
public string? ItemType
{
get;
set;
}
public string? ItemType { get; set; }
[JsonPropertyName("maxPickupCount")]
public int? MaximumPickupCount
{
get;
set;
}
public int? MaximumPickupCount { get; set; }
[JsonPropertyName("minPickupCount")]
public int? MinimumPickupCount
{
get;
set;
}
public int? MinimumPickupCount { get; set; }
}
public record EliminationConfig : BaseQuestConfig
{
[JsonPropertyName("levelRange")]
public MinMax<int>? LevelRange
{
get;
set;
}
public MinMax<int>? LevelRange { get; set; }
[JsonPropertyName("targets")]
public List<ProbabilityObject<string, BossInfo>>? Targets
{
get;
set;
}
public List<ProbabilityObject<string, BossInfo>>? Targets { get; set; }
[JsonPropertyName("bodyPartProb")]
public double? BodyPartProbability
{
get;
set;
}
public double? BodyPartProbability { get; set; }
[JsonPropertyName("bodyParts")]
public List<ProbabilityObject<string, List<string>>>? BodyParts
{
get;
set;
}
public List<ProbabilityObject<string, List<string>>>? BodyParts { get; set; }
[JsonPropertyName("specificLocationProb")]
public double? SpecificLocationProbability
{
get;
set;
}
public double? SpecificLocationProbability { get; set; }
[JsonPropertyName("distLocationBlacklist")]
public List<string>? DistLocationBlacklist
{
get;
set;
}
public List<string>? DistLocationBlacklist { get; set; }
[JsonPropertyName("distProb")]
public double? DistanceProbability
{
get;
set;
}
public double? DistanceProbability { get; set; }
[JsonPropertyName("maxDist")]
public double? MaxDistance
{
get;
set;
}
public double? MaxDistance { get; set; }
[JsonPropertyName("minDist")]
public double? MinDistance
{
get;
set;
}
public double? MinDistance { get; set; }
[JsonPropertyName("maxKills")]
public int? MaxKills
{
get;
set;
}
public int? MaxKills { get; set; }
[JsonPropertyName("minKills")]
public int? MinKills
{
get;
set;
}
public int? MinKills { get; set; }
[JsonPropertyName("minBossKills")]
public int? MinBossKills
{
get;
set;
}
public int? MinBossKills { get; set; }
[JsonPropertyName("maxBossKills")]
public int? MaxBossKills
{
get;
set;
}
public int? MaxBossKills { get; set; }
[JsonPropertyName("minPmcKills")]
public int? MinPmcKills
{
get;
set;
}
public int? MinPmcKills { get; set; }
[JsonPropertyName("maxPmcKills")]
public int? MaxPmcKills
{
get;
set;
}
public int? MaxPmcKills { get; set; }
[JsonPropertyName("weaponCategoryRequirementProb")]
public double? WeaponCategoryRequirementProbability
{
get;
set;
}
public double? WeaponCategoryRequirementProbability { get; set; }
[JsonPropertyName("weaponCategoryRequirements")]
public List<ProbabilityObject<string, List<string>>>? WeaponCategoryRequirements
{
get;
set;
}
public List<ProbabilityObject<string, List<string>>>? WeaponCategoryRequirements { get; set; }
[JsonPropertyName("weaponRequirementProb")]
public double? WeaponRequirementProbability
{
get;
set;
}
public double? WeaponRequirementProbability { get; set; }
[JsonPropertyName("weaponRequirements")]
public List<ProbabilityObject<string, List<string>>>? WeaponRequirements
{
get;
set;
}
public List<ProbabilityObject<string, List<string>>>? WeaponRequirements { get; set; }
}
public record BaseQuestConfig
@@ -804,11 +408,7 @@ public record BaseQuestConfig
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("possibleSkillRewards")]
public List<string>? PossibleSkillRewards
{
get;
set;
}
public List<string>? PossibleSkillRewards { get; set; }
}
public record BossInfo
@@ -817,16 +417,8 @@ public record BossInfo
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("isBoss")]
public bool? IsBoss
{
get;
set;
}
public bool? IsBoss { get; set; }
[JsonPropertyName("isPmc")]
public bool? IsPmc
{
get;
set;
}
public bool? IsPmc { get; set; }
}
@@ -6,65 +6,37 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record RagfairConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-ragfair";
public override string Kind { get; set; } = "spt-ragfair";
/// <summary>
/// How many seconds should pass before expired offers and processed + player offers checked if sold
/// </summary>
[JsonPropertyName("runIntervalSeconds")]
public int RunIntervalSeconds
{
get;
set;
}
public int RunIntervalSeconds { get; set; }
/// <summary>
/// Default values used to hydrate `runIntervalSeconds` with
/// </summary>
[JsonPropertyName("runIntervalValues")]
public RunIntervalValues RunIntervalValues
{
get;
set;
}
public RunIntervalValues RunIntervalValues { get; set; }
/// <summary>
/// Player listing settings
/// </summary>
[JsonPropertyName("sell")]
public Sell Sell
{
get;
set;
}
public Sell Sell { get; set; }
/// <summary>
/// Trader ids + should their assorts be listed on flea
/// </summary>
[JsonPropertyName("traders")]
public Dictionary<string, bool> Traders
{
get;
set;
}
public Dictionary<string, bool> Traders { get; set; }
[JsonPropertyName("dynamic")]
public Dynamic Dynamic
{
get;
set;
}
public Dynamic Dynamic { get; set; }
[JsonPropertyName("tieredFlea")]
public TieredFlea TieredFlea
{
get;
set;
}
public TieredFlea TieredFlea { get; set; }
}
public record Sell
@@ -76,41 +48,25 @@ public record Sell
/// Should a fee be deducted from player when listing an item for sale
/// </summary>
[JsonPropertyName("fees")]
public bool Fees
{
get;
set;
}
public bool Fees { get; set; }
/// <summary>
/// Settings to control chances of offer being sold
/// </summary>
[JsonPropertyName("chance")]
public Chance Chance
{
get;
set;
}
public Chance Chance { get; set; }
/// <summary>
/// Settings to control how long it takes for a player offer to sell
/// </summary>
[JsonPropertyName("time")]
public MinMax<double> Time
{
get;
set;
}
public MinMax<double> Time { get; set; }
/// <summary>
/// Seconds from clicking remove to remove offer from market
/// </summary>
[JsonPropertyName("expireSeconds")]
public int ExpireSeconds
{
get;
set;
}
public int ExpireSeconds { get; set; }
}
public record Chance
@@ -122,41 +78,25 @@ public record Chance
/// Base chance percent to sell an item
/// </summary>
[JsonPropertyName("base")]
public int Base
{
get;
set;
}
public int Base { get; set; }
/// <summary>
/// Value to multiply the sell chance by
/// </summary>
[JsonPropertyName("sellMultiplier")]
public double SellMultiplier
{
get;
set;
}
public double SellMultiplier { get; set; }
/// <summary>
/// Max possible sell chance % for a player listed offer
/// </summary>
[JsonPropertyName("maxSellChancePercent")]
public int MaxSellChancePercent
{
get;
set;
}
public int MaxSellChancePercent { get; set; }
/// <summary>
/// Min possible sell chance % for a player listed offer
/// </summary>
[JsonPropertyName("minSellChancePercent")]
public int MinSellChancePercent
{
get;
set;
}
public int MinSellChancePercent { get; set; }
}
public record Dynamic
@@ -168,232 +108,136 @@ public record Dynamic
/// Should a purchased dynamic offers items be flagged as found in raid
/// </summary>
[JsonPropertyName("purchasesAreFoundInRaid")]
public bool PurchasesAreFoundInRaid
{
get;
set;
}
public bool PurchasesAreFoundInRaid { get; set; }
/// <summary>
/// Use the highest trader price for an offer if its greater than the price in templates/prices.json
/// </summary>
[JsonPropertyName("useTraderPriceForOffersIfHigher")]
public bool UseTraderPriceForOffersIfHigher
{
get;
set;
}
public bool UseTraderPriceForOffersIfHigher { get; set; }
/// <summary>
/// Barter offer specific settings
/// </summary>
[JsonPropertyName("barter")]
public BarterDetails Barter
{
get;
set;
}
public BarterDetails Barter { get; set; }
[JsonPropertyName("pack")]
public PackDetails Pack
{
get;
set;
}
public PackDetails Pack { get; set; }
/// <summary>
/// Dynamic offer price below handbook adjustment values
/// </summary>
[JsonPropertyName("offerAdjustment")]
public OfferAdjustment OfferAdjustment
{
get;
set;
}
public OfferAdjustment OfferAdjustment { get; set; }
/// <summary>
/// How many offers should expire before an offer regeneration occurs
/// </summary>
[JsonPropertyName("expiredOfferThreshold")]
public int ExpiredOfferThreshold
{
get;
set;
}
public int ExpiredOfferThreshold { get; set; }
/// <summary>
/// How many offers should be listed
/// </summary>
[JsonPropertyName("offerItemCount")]
public Dictionary<string, MinMax<int>> OfferItemCount
{
get;
set;
}
public Dictionary<string, MinMax<int>> OfferItemCount { get; set; }
/// <summary>
/// How much should the price of an offer vary by (percent 0.8 = 80%, 1.2 = 120%)
/// </summary>
[JsonPropertyName("priceRanges")]
public PriceRanges PriceRanges
{
get;
set;
}
public PriceRanges PriceRanges { get; set; }
/// <summary>
/// Should default presets to listed only or should non-standard presets found in globals.json be listed too
/// </summary>
[JsonPropertyName("showDefaultPresetsOnly")]
public bool ShowDefaultPresetsOnly
{
get;
set;
}
public bool ShowDefaultPresetsOnly { get; set; }
/// <summary>
/// Tpls that should not use the variable price system when their quality is less than 100% (lower dura/uses = lower price)
/// </summary>
[JsonPropertyName("ignoreQualityPriceVarianceBlacklist")]
public HashSet<string> IgnoreQualityPriceVarianceBlacklist
{
get;
set;
}
public HashSet<string> IgnoreQualityPriceVarianceBlacklist { get; set; }
[JsonPropertyName("endTimeSeconds")]
public MinMax<int> EndTimeSeconds
{
get;
set;
}
public MinMax<int> EndTimeSeconds { get; set; }
/// <summary>
/// Settings to control the durability range of item items listed on flea
/// </summary>
[JsonPropertyName("condition")]
public Dictionary<string, Condition> Condition
{
get;
set;
}
public Dictionary<string, Condition> Condition { get; set; }
/// <summary>
/// Size stackable items should be listed for in percent of max stack size
/// </summary>
[JsonPropertyName("stackablePercent")]
public MinMax<double> StackablePercent
{
get;
set;
}
public MinMax<double> StackablePercent { get; set; }
/// <summary>
/// Items that cannot be stacked can have multiples sold in one offer, what range of values can be listed
/// </summary>
[JsonPropertyName("nonStackableCount")]
public MinMax<int> NonStackableCount
{
get;
set;
}
public MinMax<int> NonStackableCount { get; set; }
/// <summary>
/// Range of rating offers for items being listed
/// </summary>
[JsonPropertyName("rating")]
public MinMax<double> Rating
{
get;
set;
}
public MinMax<double> Rating { get; set; }
/// <summary>
/// Armor specific flea settings
/// </summary>
[JsonPropertyName("armor")]
public ArmorSettings Armor
{
get;
set;
}
public ArmorSettings Armor { get; set; }
/// <summary>
/// A multipler to apply to individual tpls price just prior to item quality adjustment
/// </summary>
[JsonPropertyName("itemPriceMultiplier")]
public Dictionary<string, double>? ItemPriceMultiplier
{
get;
set;
}
public Dictionary<string, double>? ItemPriceMultiplier { get; set; }
[JsonPropertyName("_currencies")]
public string? CurrenciesDescription
{
get;
set;
}
public string? CurrenciesDescription { get; set; }
/// <summary>
/// Percentages to sell offers in each currency
/// </summary>
[JsonPropertyName("currencies")]
public Dictionary<string, double> Currencies
{
get;
set;
}
public Dictionary<string, double> Currencies { get; set; }
/// <summary>
/// Item tpls that should be forced to sell as a single item
/// </summary>
[JsonPropertyName("showAsSingleStack")]
public HashSet<string> ShowAsSingleStack
{
get;
set;
}
public HashSet<string> ShowAsSingleStack { get; set; }
/// <summary>
/// Should christmas/halloween items be removed from flea when not within the seasonal bounds
/// </summary>
[JsonPropertyName("removeSeasonalItemsWhenNotInEvent")]
public bool RemoveSeasonalItemsWhenNotInEvent
{
get;
set;
}
public bool RemoveSeasonalItemsWhenNotInEvent { get; set; }
/// <summary>
/// Flea blacklist settings
/// </summary>
[JsonPropertyName("blacklist")]
public RagfairBlacklist Blacklist
{
get;
set;
}
public RagfairBlacklist Blacklist { get; set; }
/// <summary>
/// Dict of price limits keyed by item type
/// </summary>
[JsonPropertyName("unreasonableModPrices")]
public Dictionary<string, UnreasonableModPrices> UnreasonableModPrices
{
get;
set;
}
public Dictionary<string, UnreasonableModPrices> UnreasonableModPrices { get; set; }
/// <summary>
/// Custom rouble prices for items to override values from prices.json
/// </summary>
[JsonPropertyName("itemPriceOverrideRouble")]
public Dictionary<string, double> ItemPriceOverrideRouble
{
get;
set;
}
public Dictionary<string, double> ItemPriceOverrideRouble { get; set; }
}
public record PriceRanges
@@ -402,25 +246,13 @@ public record PriceRanges
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("default")]
public MinMax<double> Default
{
get;
set;
}
public MinMax<double> Default { get; set; }
[JsonPropertyName("preset")]
public MinMax<double> Preset
{
get;
set;
}
public MinMax<double> Preset { get; set; }
[JsonPropertyName("pack")]
public MinMax<double> Pack
{
get;
set;
}
public MinMax<double> Pack { get; set; }
}
public record BarterDetails
@@ -432,71 +264,43 @@ public record BarterDetails
/// Percentage change an offer is listed as a barter
/// </summary>
[JsonPropertyName("chancePercent")]
public double ChancePercent
{
get;
set;
}
public double ChancePercent { get; set; }
/// <summary>
/// Min number of required items for a barter requirement
/// </summary>
[JsonPropertyName("itemCountMin")]
public int ItemCountMin
{
get;
set;
}
public int ItemCountMin { get; set; }
/// <summary>
/// Max number of required items for a barter requirement
/// </summary>
[JsonPropertyName("itemCountMax")]
public int ItemCountMax
{
get;
set;
}
public int ItemCountMax { get; set; }
/// <summary>
/// How much can the total price of requested items vary from the item offered
/// </summary>
[JsonPropertyName("priceRangeVariancePercent")]
public double PriceRangeVariancePercent
{
get;
set;
}
public double PriceRangeVariancePercent { get; set; }
/// <summary>
/// Min rouble price for an offer to be considered for turning into a barter
/// </summary>
[JsonPropertyName("minRoubleCostToBecomeBarter")]
public double MinRoubleCostToBecomeBarter
{
get;
set;
}
public double MinRoubleCostToBecomeBarter { get; set; }
/// <summary>
/// Should barter offers only single stack
/// </summary>
[JsonPropertyName("makeSingleStackOnly")]
public bool MakeSingleStackOnly
{
get;
set;
}
public bool MakeSingleStackOnly { get; set; }
/// <summary>
/// Item Tpls to never be turned into a barter
/// </summary>
[JsonPropertyName("itemTypeBlacklist")]
public HashSet<string> ItemTypeBlacklist
{
get;
set;
}
public HashSet<string> ItemTypeBlacklist { get; set; }
}
public record PackDetails
@@ -508,41 +312,25 @@ public record PackDetails
/// Percentage change an offer is listed as a pack
/// </summary>
[JsonPropertyName("chancePercent")]
public double ChancePercent
{
get;
set;
}
public double ChancePercent { get; set; }
/// <summary>
/// Min number of required items for a pack
/// </summary>
[JsonPropertyName("itemCountMin")]
public int ItemCountMin
{
get;
set;
}
public int ItemCountMin { get; set; }
/// <summary>
/// Max number of required items for a pack
/// </summary>
[JsonPropertyName("itemCountMax")]
public int ItemCountMax
{
get;
set;
}
public int ItemCountMax { get; set; }
/// <summary>
/// item types to allow being a pack
/// </summary>
[JsonPropertyName("itemTypeWhitelist")]
public HashSet<string> ItemTypeWhitelist
{
get;
set;
}
public HashSet<string> ItemTypeWhitelist { get; set; }
}
public record OfferAdjustment
@@ -554,41 +342,25 @@ public record OfferAdjustment
/// Shuld offer price be adjusted when below handbook price
/// </summary>
[JsonPropertyName("adjustPriceWhenBelowHandbookPrice")]
public bool AdjustPriceWhenBelowHandbookPrice
{
get;
set;
}
public bool AdjustPriceWhenBelowHandbookPrice { get; set; }
/// <summary>
/// How big a percentage difference does price need to vary from handbook to be considered for adjustment
/// </summary>
[JsonPropertyName("maxPriceDifferenceBelowHandbookPercent")]
public double MaxPriceDifferenceBelowHandbookPercent
{
get;
set;
}
public double MaxPriceDifferenceBelowHandbookPercent { get; set; }
/// <summary>
/// How much to multiply the handbook price to get the new price
/// </summary>
[JsonPropertyName("handbookPriceMultipier")]
public double HandbookPriceMultiplier
{
get;
set;
}
public double HandbookPriceMultiplier { get; set; }
/// <summary>
/// What is the minimum rouble price to consider adjusting price of item
/// </summary>
[JsonPropertyName("priceThreshholdRub")]
public double PriceThresholdRub
{
get;
set;
}
public double PriceThresholdRub { get; set; }
}
public record Condition
@@ -600,32 +372,16 @@ public record Condition
/// Percentage change durability is altered
/// </summary>
[JsonPropertyName("conditionChance")]
public double ConditionChance
{
get;
set;
}
public double ConditionChance { get; set; }
[JsonPropertyName("current")]
public MinMax<double> Current
{
get;
set;
}
public MinMax<double> Current { get; set; }
[JsonPropertyName("max")]
public MinMax<double> Max
{
get;
set;
}
public MinMax<double> Max { get; set; }
[JsonPropertyName("_name")]
public string Name
{
get;
set;
}
public string Name { get; set; }
}
public record RagfairBlacklist
@@ -637,81 +393,49 @@ public record RagfairBlacklist
/// Damaged ammo packs
/// </summary>
[JsonPropertyName("damagedAmmoPacks")]
public bool DamagedAmmoPacks
{
get;
set;
}
public bool DamagedAmmoPacks { get; set; }
/// <summary>
/// Custom blacklist for item Tpls
/// </summary>
[JsonPropertyName("custom")]
public HashSet<string> Custom
{
get;
set;
}
public HashSet<string> Custom { get; set; }
/// <summary>
/// BSG blacklist a large number of items from flea, true = use blacklist
/// </summary>
[JsonPropertyName("enableBsgList")]
public bool EnableBsgList
{
get;
set;
}
public bool EnableBsgList { get; set; }
/// <summary>
/// Should quest items be blacklisted from flea
/// </summary>
[JsonPropertyName("enableQuestList")]
public bool EnableQuestList
{
get;
set;
}
public bool EnableQuestList { get; set; }
/// <summary>
/// Should trader items that are blacklisted by bsg be listed on flea
/// </summary>
[JsonPropertyName("traderItems")]
public bool TraderItems
{
get;
set;
}
public bool TraderItems { get; set; }
/// <summary>
/// Maximum level an armor plate can be found in a flea-listed armor item
/// </summary>
[JsonPropertyName("armorPlate")]
public ArmorPlateBlacklistSettings ArmorPlate
{
get;
set;
}
public ArmorPlateBlacklistSettings ArmorPlate { get; set; }
/// <summary>
/// Should specific categories be blacklisted from the flea, true = use blacklist
/// </summary>
[JsonPropertyName("enableCustomItemCategoryList")]
public bool EnableCustomItemCategoryList
{
get;
set;
}
public bool EnableCustomItemCategoryList { get; set; }
/// <summary>
/// Custom category blacklist for parent Ids
/// </summary>
[JsonPropertyName("customItemCategoryList")]
public HashSet<string> CustomItemCategoryList
{
get;
set;
}
public HashSet<string> CustomItemCategoryList { get; set; }
}
public record ArmorPlateBlacklistSettings
@@ -723,21 +447,13 @@ public record ArmorPlateBlacklistSettings
/// Max level of plates an armor can have without being removed
/// </summary>
[JsonPropertyName("maxProtectionLevel")]
public int MaxProtectionLevel
{
get;
set;
}
public int MaxProtectionLevel { get; set; }
/// <summary>
/// Item slots to NOT remove from items on flea
/// </summary>
[JsonPropertyName("ignoreSlots")]
public HashSet<string> IgnoreSlots
{
get;
set;
}
public HashSet<string> IgnoreSlots { get; set; }
}
public record UnreasonableModPrices
@@ -749,38 +465,22 @@ public record UnreasonableModPrices
/// Enable a system that adjusts very high ragfair prices to be below a max multiple of items the handbook values
/// </summary>
[JsonPropertyName("enabled")]
public bool Enabled
{
get;
set;
}
public bool Enabled { get; set; }
/// <summary>
/// Multipler to start adjusting item values from, e.g. a value of 10 means any value over 10x the handbook price gets adjusted
/// </summary>
[JsonPropertyName("handbookPriceOverMultiplier")]
public int HandbookPriceOverMultiplier
{
get;
set;
}
public int HandbookPriceOverMultiplier { get; set; }
/// <summary>
/// The new multiplier for items found using above property, e.g. a value of 4 means set items price to 4x handbook price
/// </summary>
[JsonPropertyName("newPriceHandbookMultiplier")]
public int NewPriceHandbookMultiplier
{
get;
set;
}
public int NewPriceHandbookMultiplier { get; set; }
[JsonPropertyName("itemType")]
public string ItemType
{
get;
set;
}
public string ItemType { get; set; }
}
public record ArmorSettings
@@ -792,21 +492,13 @@ public record ArmorSettings
/// % chance / 100 that armor plates will be removed from an offer before listing
/// </summary>
[JsonPropertyName("removeRemovablePlateChance")]
public int RemoveRemovablePlateChance
{
get;
set;
}
public int RemoveRemovablePlateChance { get; set; }
/// <summary>
/// What slots are to be removed when removeRemovablePlateChance is true
/// </summary>
[JsonPropertyName("plateSlotIdToRemovePool")]
public HashSet<string>? PlateSlotIdToRemovePool
{
get;
set;
}
public HashSet<string>? PlateSlotIdToRemovePool { get; set; }
}
public record TieredFlea
@@ -815,43 +507,23 @@ public record TieredFlea
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("enabled")]
public bool Enabled
{
get;
set;
}
public bool Enabled { get; set; }
/// <summary>
/// key: tpl, value: playerlevel
/// </summary>
[JsonPropertyName("unlocksTpl")]
public Dictionary<string, int> UnlocksTpl
{
get;
set;
}
public Dictionary<string, int> UnlocksTpl { get; set; }
/// <summary>
/// key: item type id, value: playerlevel
/// </summary>
[JsonPropertyName("unlocksType")]
public Dictionary<string, int> UnlocksType
{
get;
set;
}
public Dictionary<string, int> UnlocksType { get; set; }
[JsonPropertyName("ammoTplUnlocks")]
public Dictionary<string, int>? AmmoTplUnlocks
{
get;
set;
}
public Dictionary<string, int>? AmmoTplUnlocks { get; set; }
[JsonPropertyName("ammoTiersEnabled")]
public bool AmmoTiersEnabled
{
get;
set;
}
public bool AmmoTiersEnabled { get; set; }
}
@@ -6,73 +6,37 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record RepairConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-repair";
public override string Kind { get; set; } = "spt-repair";
[JsonPropertyName("priceMultiplier")]
public double PriceMultiplier
{
get;
set;
}
public double PriceMultiplier { get; set; }
[JsonPropertyName("applyRandomizeDurabilityLoss")]
public bool ApplyRandomizeDurabilityLoss
{
get;
set;
}
public bool ApplyRandomizeDurabilityLoss { get; set; }
[JsonPropertyName("weaponSkillRepairGain")]
public double WeaponSkillRepairGain
{
get;
set;
}
public double WeaponSkillRepairGain { get; set; }
[JsonPropertyName("armorKitSkillPointGainPerRepairPointMultiplier")]
public double ArmorKitSkillPointGainPerRepairPointMultiplier
{
get;
set;
}
public double ArmorKitSkillPointGainPerRepairPointMultiplier { get; set; }
/// <summary>
/// INT gain multiplier per repaired item type
/// </summary>
[JsonPropertyName("repairKitIntellectGainMultiplier")]
public required IntellectGainValues RepairKitIntellectGainMultiplier
{
get;
set;
}
public required IntellectGainValues RepairKitIntellectGainMultiplier { get; set; }
/// <summary>
/// How much INT can be given to player per repair action
/// </summary>
[JsonPropertyName("maxIntellectGainPerRepair")]
public required MaxIntellectGainValues MaxIntellectGainPerRepair
{
get;
set;
}
public required MaxIntellectGainValues MaxIntellectGainPerRepair { get; set; }
[JsonPropertyName("weaponTreatment")]
public required WeaponTreatmentRepairValues WeaponTreatment
{
get;
set;
}
public required WeaponTreatmentRepairValues WeaponTreatment { get; set; }
[JsonPropertyName("repairKit")]
public required RepairKit RepairKit
{
get;
set;
}
public required RepairKit RepairKit { get; set; }
}
public record IntellectGainValues
@@ -81,18 +45,10 @@ public record IntellectGainValues
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("weapon")]
public double Weapon
{
get;
set;
}
public double Weapon { get; set; }
[JsonPropertyName("armor")]
public double Armor
{
get;
set;
}
public double Armor { get; set; }
}
public record MaxIntellectGainValues
@@ -101,18 +57,10 @@ public record MaxIntellectGainValues
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("kit")]
public double Kit
{
get;
set;
}
public double Kit { get; set; }
[JsonPropertyName("trader")]
public double Trader
{
get;
set;
}
public double Trader { get; set; }
}
public record WeaponTreatmentRepairValues
@@ -124,45 +72,25 @@ public record WeaponTreatmentRepairValues
/// The chance to gain more weapon maintenance skill
/// </summary>
[JsonPropertyName("critSuccessChance")]
public double CritSuccessChance
{
get;
set;
}
public double CritSuccessChance { get; set; }
[JsonPropertyName("critSuccessAmount")]
public double CritSuccessAmount
{
get;
set;
}
public double CritSuccessAmount { get; set; }
/// <summary>
/// The chance to gain less weapon maintenance skill
/// </summary>
[JsonPropertyName("critFailureChance")]
public double CritFailureChance
{
get;
set;
}
public double CritFailureChance { get; set; }
[JsonPropertyName("critFailureAmount")]
public double CritFailureAmount
{
get;
set;
}
public double CritFailureAmount { get; set; }
/// <summary>
/// The multiplier used for calculating weapon maintenance XP
/// </summary>
[JsonPropertyName("pointGainMultiplier")]
public double PointGainMultiplier
{
get;
set;
}
public double PointGainMultiplier { get; set; }
}
public record RepairKit
@@ -171,32 +99,16 @@ public record RepairKit
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("armor")]
public required BonusSettings Armor
{
get;
set;
}
public required BonusSettings Armor { get; set; }
[JsonPropertyName("weapon")]
public required BonusSettings Weapon
{
get;
set;
}
public required BonusSettings Weapon { get; set; }
[JsonPropertyName("vest")]
public required BonusSettings Vest
{
get;
set;
}
public required BonusSettings Vest { get; set; }
[JsonPropertyName("headwear")]
public required BonusSettings Headwear
{
get;
set;
}
public required BonusSettings Headwear { get; set; }
}
public record BonusSettings
@@ -205,32 +117,16 @@ public record BonusSettings
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("rarityWeight")]
public required Dictionary<string, double> RarityWeight
{
get;
set;
}
public required Dictionary<string, double> RarityWeight { get; set; }
[JsonPropertyName("bonusTypeWeight")]
public required Dictionary<string, double> BonusTypeWeight
{
get;
set;
}
public required Dictionary<string, double> BonusTypeWeight { get; set; }
[JsonPropertyName("Common")]
public required Dictionary<string, BonusValues> Common
{
get;
set;
}
public required Dictionary<string, BonusValues> Common { get; set; }
[JsonPropertyName("Rare")]
public required Dictionary<string, BonusValues> Rare
{
get;
set;
}
public required Dictionary<string, BonusValues> Rare { get; set; }
}
public record BonusValues
@@ -239,19 +135,11 @@ public record BonusValues
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("valuesMinMax")]
public required MinMax<double> ValuesMinMax
{
get;
set;
}
public required MinMax<double> ValuesMinMax { get; set; }
/// <summary>
/// What dura is buff active between (min max of current max)
/// </summary>
[JsonPropertyName("activeDurabilityPercentMinMax")]
public required MinMax<int> ActiveDurabilityPercentMinMax
{
get;
set;
}
public required MinMax<int> ActiveDurabilityPercentMinMax { get; set; }
}
@@ -6,67 +6,31 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record ScavCaseConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-scavcase";
public override string Kind { get; set; } = "spt-scavcase";
[JsonPropertyName("rewardItemValueRangeRub")]
public required Dictionary<string, MinMax<double>> RewardItemValueRangeRub
{
get;
set;
}
public required Dictionary<string, MinMax<double>> RewardItemValueRangeRub { get; set; }
[JsonPropertyName("moneyRewards")]
public required MoneyRewards MoneyRewards
{
get;
set;
}
public required MoneyRewards MoneyRewards { get; set; }
[JsonPropertyName("ammoRewards")]
public required AmmoRewards AmmoRewards
{
get;
set;
}
public required AmmoRewards AmmoRewards { get; set; }
[JsonPropertyName("rewardItemParentBlacklist")]
public required HashSet<string> RewardItemParentBlacklist
{
get;
set;
}
public required HashSet<string> RewardItemParentBlacklist { get; set; }
[JsonPropertyName("rewardItemBlacklist")]
public required HashSet<string> RewardItemBlacklist
{
get;
set;
}
public required HashSet<string> RewardItemBlacklist { get; set; }
[JsonPropertyName("allowMultipleMoneyRewardsPerRarity")]
public bool AllowMultipleMoneyRewardsPerRarity
{
get;
set;
}
public bool AllowMultipleMoneyRewardsPerRarity { get; set; }
[JsonPropertyName("allowMultipleAmmoRewardsPerRarity")]
public bool AllowMultipleAmmoRewardsPerRarity
{
get;
set;
}
public bool AllowMultipleAmmoRewardsPerRarity { get; set; }
[JsonPropertyName("allowBossItemsAsRewards")]
public bool AllowBossItemsAsRewards
{
get;
set;
}
public bool AllowBossItemsAsRewards { get; set; }
}
public record MoneyRewards
@@ -75,39 +39,19 @@ public record MoneyRewards
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("moneyRewardChancePercent")]
public int MoneyRewardChancePercent
{
get;
set;
}
public int MoneyRewardChancePercent { get; set; }
[JsonPropertyName("rubCount")]
public required MoneyLevels RubCount
{
get;
set;
}
public required MoneyLevels RubCount { get; set; }
[JsonPropertyName("usdCount")]
public required MoneyLevels UsdCount
{
get;
set;
}
public required MoneyLevels UsdCount { get; set; }
[JsonPropertyName("eurCount")]
public required MoneyLevels EurCount
{
get;
set;
}
public required MoneyLevels EurCount { get; set; }
[JsonPropertyName("gpCount")]
public required MoneyLevels GpCount
{
get;
set;
}
public required MoneyLevels GpCount { get; set; }
}
public record MoneyLevels
@@ -116,25 +60,13 @@ public record MoneyLevels
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("common")]
public required MinMax<int> Common
{
get;
set;
}
public required MinMax<int> Common { get; set; }
[JsonPropertyName("rare")]
public required MinMax<int> Rare
{
get;
set;
}
public required MinMax<int> Rare { get; set; }
[JsonPropertyName("superrare")]
public required MinMax<int> SuperRare
{
get;
set;
}
public required MinMax<int> SuperRare { get; set; }
}
public record AmmoRewards
@@ -143,30 +75,14 @@ public record AmmoRewards
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("ammoRewardChancePercent")]
public int AmmoRewardChancePercent
{
get;
set;
}
public int AmmoRewardChancePercent { get; set; }
[JsonPropertyName("ammoRewardBlacklist")]
public required Dictionary<string, List<string>> AmmoRewardBlacklist
{
get;
set;
}
public required Dictionary<string, List<string>> AmmoRewardBlacklist { get; set; }
[JsonPropertyName("ammoRewardValueRangeRub")]
public required Dictionary<string, MinMax<double>> AmmoRewardValueRangeRub
{
get;
set;
}
public required Dictionary<string, MinMax<double>> AmmoRewardValueRangeRub { get; set; }
[JsonPropertyName("minStackSize")]
public int MinStackSize
{
get;
set;
}
public int MinStackSize { get; set; }
}
@@ -8,103 +8,70 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record SeasonalEventConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-seasonalevents";
public override string Kind { get; set; } = "spt-seasonalevents";
[JsonPropertyName("enableSeasonalEventDetection")]
public bool EnableSeasonalEventDetection
{
get;
set;
}
public bool EnableSeasonalEventDetection { get; set; }
/// <summary>
/// event / botType / equipSlot / itemid
/// </summary>
[JsonPropertyName("eventGear")]
public required Dictionary<SeasonalEventType, Dictionary<string, Dictionary<string, Dictionary<string, int>>>> EventGear
{
get;
set;
}
public required Dictionary<
SeasonalEventType,
Dictionary<string, Dictionary<string, Dictionary<string, int>>>
> EventGear { get; set; }
/// <summary>
/// event / bot type / equipSlot / itemid
/// </summary>
[JsonPropertyName("eventLoot")]
public required Dictionary<SeasonalEventType, Dictionary<string, Dictionary<string, Dictionary<string, int>>>> EventLoot
{
get;
set;
}
public required Dictionary<
SeasonalEventType,
Dictionary<string, Dictionary<string, Dictionary<string, int>>>
> EventLoot { get; set; }
[JsonPropertyName("events")]
public required List<SeasonalEvent> Events
{
get;
set;
}
public required List<SeasonalEvent> Events { get; set; }
[JsonPropertyName("eventBotMapping")]
public required Dictionary<string, string> EventBotMapping
{
get;
set;
}
public required Dictionary<string, string> EventBotMapping { get; set; }
[JsonPropertyName("eventBossSpawns")]
public required Dictionary<string, Dictionary<string, List<BossLocationSpawn>>> EventBossSpawns
{
get;
set;
}
public required Dictionary<
string,
Dictionary<string, List<BossLocationSpawn>>
> EventBossSpawns { get; set; }
[JsonPropertyName("eventWaves")]
public required Dictionary<string, Dictionary<string, List<Wave>>> EventWaves
{
get;
set;
}
public required Dictionary<string, Dictionary<string, List<Wave>>> EventWaves { get; set; }
[JsonPropertyName("gifterSettings")]
public required List<GifterSetting> GifterSettings
{
get;
set;
}
public required List<GifterSetting> GifterSettings { get; set; }
/// <summary>
/// key = event, second key = map name
/// </summary>
[JsonPropertyName("hostilitySettingsForEvent")]
public required Dictionary<string, Dictionary<string, List<AdditionalHostilitySettings>>> HostilitySettingsForEvent
{
get;
set;
}
public required Dictionary<
string,
Dictionary<string, List<AdditionalHostilitySettings>>
> HostilitySettingsForEvent { get; set; }
/// <summary>
/// Ids of containers on locations that only have Christmas loot
/// </summary>
[JsonPropertyName("christmasContainerIds")]
public required List<string> ChristmasContainerIds
{
get;
set;
}
public required List<string> ChristmasContainerIds { get; set; }
/// <summary>
/// Season - botType - location (body/feet/hands/head)
/// </summary>
[JsonPropertyName("botAppearanceChanges")]
public required Dictionary<SeasonalEventType, Dictionary<string, Dictionary<string, Dictionary<string, int>>>> BotAppearanceChanges
{
get;
set;
}
public required Dictionary<
SeasonalEventType,
Dictionary<string, Dictionary<string, Dictionary<string, int>>>
> BotAppearanceChanges { get; set; }
}
public record SeasonalEvent
@@ -113,72 +80,37 @@ public record SeasonalEvent
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("enabled")]
public bool Enabled
{
get;
set;
}
public bool Enabled { get; set; }
[JsonPropertyName("name")]
public string Name
{
get;
set;
} = string.Empty;
public string Name { get; set; } = string.Empty;
[JsonPropertyName("type")]
public SeasonalEventType Type
{
get;
set;
}
public SeasonalEventType Type { get; set; }
[JsonPropertyName("startDay")]
[JsonConverter(typeof(StringToNumberFactoryConverter))]
public int StartDay
{
get;
set;
}
public int StartDay { get; set; }
[JsonPropertyName("startMonth")]
[JsonConverter(typeof(StringToNumberFactoryConverter))]
public int StartMonth
{
get;
set;
}
public int StartMonth { get; set; }
[JsonPropertyName("endDay")]
[JsonConverter(typeof(StringToNumberFactoryConverter))]
public int EndDay
{
get;
set;
}
public int EndDay { get; set; }
[JsonPropertyName("endMonth")]
[JsonConverter(typeof(StringToNumberFactoryConverter))]
public int EndMonth
{
get;
set;
}
public int EndMonth { get; set; }
[JsonPropertyName("settings")]
public SeasonalEventSettings? Settings
{
get;
set;
}
public SeasonalEventSettings? Settings { get; set; }
[JsonPropertyName("setting")]
public SeasonalEventSettings? SettingsDoNOTUse
{
set
{
Settings = value;
}
set { Settings = value; }
}
}
@@ -188,95 +120,43 @@ public record SeasonalEventSettings
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("enableSummoning")]
public bool? EnableSummoning
{
get;
set;
}
public bool? EnableSummoning { get; set; }
[JsonPropertyName("enableHalloweenHideout")]
public bool? EnableHalloweenHideout
{
get;
set;
}
public bool? EnableHalloweenHideout { get; set; }
[JsonPropertyName("enableChristmasHideout")]
public bool? EnableChristmasHideout
{
get;
set;
}
public bool? EnableChristmasHideout { get; set; }
[JsonPropertyName("enableSanta")]
public bool? EnableSanta
{
get;
set;
}
public bool? EnableSanta { get; set; }
[JsonPropertyName("adjustBotAppearances")]
public bool? AdjustBotAppearances
{
get;
set;
}
public bool? AdjustBotAppearances { get; set; }
[JsonPropertyName("addEventGearToBots")]
public bool? AddEventGearToBots
{
get;
set;
}
public bool? AddEventGearToBots { get; set; }
[JsonPropertyName("addEventLootToBots")]
public bool? AddEventLootToBots
{
get;
set;
}
public bool? AddEventLootToBots { get; set; }
[JsonPropertyName("removeEntryRequirement")]
public List<string>? RemoveEntryRequirement
{
get;
set;
}
public List<string>? RemoveEntryRequirement { get; set; }
[JsonPropertyName("replaceBotHostility")]
public bool? ReplaceBotHostility
{
get;
set;
}
public bool? ReplaceBotHostility { get; set; }
[JsonPropertyName("forceSeason")]
public Season? ForceSeason
{
get;
set;
}
public Season? ForceSeason { get; set; }
[JsonPropertyName("zombieSettings")]
public ZombieSettings? ZombieSettings
{
get;
set;
}
public ZombieSettings? ZombieSettings { get; set; }
[JsonPropertyName("disableBosses")]
public List<string>? DisableBosses
{
get;
set;
}
public List<string>? DisableBosses { get; set; }
[JsonPropertyName("disableWaves")]
public List<string>? DisableWaves
{
get;
set;
}
public List<string>? DisableWaves { get; set; }
}
public record ZombieSettings
@@ -285,32 +165,16 @@ public record ZombieSettings
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("enabled")]
public bool? Enabled
{
get;
set;
}
public bool? Enabled { get; set; }
[JsonPropertyName("mapInfectionAmount")]
public Dictionary<string, double>? MapInfectionAmount
{
get;
set;
}
public Dictionary<string, double>? MapInfectionAmount { get; set; }
[JsonPropertyName("disableBosses")]
public List<string>? DisableBosses
{
get;
set;
}
public List<string>? DisableBosses { get; set; }
[JsonPropertyName("disableWaves")]
public List<string>? DisableWaves
{
get;
set;
}
public List<string>? DisableWaves { get; set; }
}
public record GifterSetting
@@ -319,23 +183,11 @@ public record GifterSetting
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("map")]
public string? Map
{
get;
set;
}
public string? Map { get; set; }
[JsonPropertyName("zones")]
public string? Zones
{
get;
set;
}
public string? Zones { get; set; }
[JsonPropertyName("spawnChance")]
public int? SpawnChance
{
get;
set;
}
public int? SpawnChance { get; set; }
}
@@ -7,63 +7,31 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record TraderConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-trader";
public override string Kind { get; set; } = "spt-trader";
[JsonPropertyName("updateTime")]
public List<UpdateTime> UpdateTime
{
get;
set;
} = [];
public List<UpdateTime> UpdateTime { get; set; } = [];
[JsonPropertyName("updateTimeDefault")]
public int UpdateTimeDefault
{
get;
set;
}
public int UpdateTimeDefault { get; set; }
[JsonPropertyName("purchasesAreFoundInRaid")]
public bool PurchasesAreFoundInRaid
{
get;
set;
}
public bool PurchasesAreFoundInRaid { get; set; }
/// <summary>
/// Should trader reset times be set based on server start time (false = bsg time - on the hour)
/// </summary>
[JsonPropertyName("tradersResetFromServerStart")]
public bool TradersResetFromServerStart
{
get;
set;
}
public bool TradersResetFromServerStart { get; set; }
[JsonPropertyName("traderPriceMultipler")]
public double TraderPriceMultiplier
{
get;
set;
}
public double TraderPriceMultiplier { get; set; }
[JsonPropertyName("fence")]
public required FenceConfig Fence
{
get;
set;
}
public required FenceConfig Fence { get; set; }
[JsonPropertyName("moddedTraders")]
public required ModdedTraders ModdedTraders
{
get;
set;
}
public required ModdedTraders ModdedTraders { get; set; }
}
public record UpdateTime
@@ -72,28 +40,16 @@ public record UpdateTime
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("_name")]
public string Name
{
get;
set;
} = string.Empty;
public string Name { get; set; } = string.Empty;
[JsonPropertyName("traderId")]
public string TraderId
{
get;
set;
} = string.Empty;
public string TraderId { get; set; } = string.Empty;
/// <summary>
/// Seconds between trader resets
/// </summary>
[JsonPropertyName("seconds")]
public required MinMax<int> Seconds
{
get;
set;
}
public required MinMax<int> Seconds { get; set; }
}
public record FenceConfig
@@ -102,199 +58,103 @@ public record FenceConfig
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("discountOptions")]
public required DiscountOptions DiscountOptions
{
get;
set;
}
public required DiscountOptions DiscountOptions { get; set; }
[JsonPropertyName("partialRefreshTimeSeconds")]
public int PartialRefreshTimeSeconds
{
get;
set;
}
public int PartialRefreshTimeSeconds { get; set; }
[JsonPropertyName("partialRefreshChangePercent")]
public double PartialRefreshChangePercent
{
get;
set;
}
public double PartialRefreshChangePercent { get; set; }
[JsonPropertyName("assortSize")]
public int AssortSize
{
get;
set;
}
public int AssortSize { get; set; }
[JsonPropertyName("weaponPresetMinMax")]
public required MinMax<int> WeaponPresetMinMax
{
get;
set;
}
public required MinMax<int> WeaponPresetMinMax { get; set; }
[JsonPropertyName("equipmentPresetMinMax")]
public required MinMax<int> EquipmentPresetMinMax
{
get;
set;
}
public required MinMax<int> EquipmentPresetMinMax { get; set; }
[JsonPropertyName("itemPriceMult")]
public double ItemPriceMult
{
get;
set;
}
public double ItemPriceMult { get; set; }
[JsonPropertyName("presetPriceMult")]
public double PresetPriceMult
{
get;
set;
}
public double PresetPriceMult { get; set; }
[JsonPropertyName("armorMaxDurabilityPercentMinMax")]
public required ItemDurabilityCurrentMax ArmorMaxDurabilityPercentMinMax
{
get;
set;
}
public required ItemDurabilityCurrentMax ArmorMaxDurabilityPercentMinMax { get; set; }
[JsonPropertyName("weaponDurabilityPercentMinMax")]
public required ItemDurabilityCurrentMax WeaponDurabilityPercentMinMax
{
get;
set;
}
public required ItemDurabilityCurrentMax WeaponDurabilityPercentMinMax { get; set; }
/// <summary>
/// Keyed to plate protection level
/// </summary>
[JsonPropertyName("chancePlateExistsInArmorPercent")]
public required Dictionary<string, double> ChancePlateExistsInArmorPercent
{
get;
set;
}
public required Dictionary<string, double> ChancePlateExistsInArmorPercent { get; set; }
/// <summary>
/// Key: item tpl
/// </summary>
[JsonPropertyName("itemStackSizeOverrideMinMax")]
public required Dictionary<string, MinMax<int>?> ItemStackSizeOverrideMinMax
{
get;
set;
}
public required Dictionary<string, MinMax<int>?> ItemStackSizeOverrideMinMax { get; set; }
[JsonPropertyName("itemTypeLimits")]
public required Dictionary<string, int> ItemTypeLimits
{
get;
set;
}
public required Dictionary<string, int> ItemTypeLimits { get; set; }
/// <summary>
/// Prevent duplicate offers of items of specific categories by parentId
/// </summary>
[JsonPropertyName("preventDuplicateOffersOfCategory")]
public required List<string> PreventDuplicateOffersOfCategory
{
get;
set;
}
public required List<string> PreventDuplicateOffersOfCategory { get; set; }
[JsonPropertyName("regenerateAssortsOnRefresh")]
public bool RegenerateAssortsOnRefresh
{
get;
set;
}
public bool RegenerateAssortsOnRefresh { get; set; }
/// <summary>
/// Max rouble price before item is not listed on flea
/// </summary>
[JsonPropertyName("itemCategoryRoublePriceLimit")]
public required Dictionary<string, double?> ItemCategoryRoublePriceLimit
{
get;
set;
}
public required Dictionary<string, double?> ItemCategoryRoublePriceLimit { get; set; }
/// <summary>
/// Each slotid with % to be removed prior to listing on fence
/// </summary>
[JsonPropertyName("presetSlotsToRemoveChancePercent")]
public required Dictionary<string, double?> PresetSlotsToRemoveChancePercent
{
get;
set;
}
public required Dictionary<string, double?> PresetSlotsToRemoveChancePercent { get; set; }
/// <summary>
/// Block seasonal items from appearing when season is inactive
/// </summary>
[JsonPropertyName("blacklistSeasonalItems")]
public bool BlacklistSeasonalItems
{
get;
set;
}
public bool BlacklistSeasonalItems { get; set; }
/// <summary>
/// Max pen value allowed to be listed on flea - affects ammo + ammo boxes
/// </summary>
[JsonPropertyName("ammoMaxPenLimit")]
public double AmmoMaxPenLimit
{
get;
set;
}
public double AmmoMaxPenLimit { get; set; }
[JsonPropertyName("blacklist")]
public required HashSet<string> Blacklist
{
get;
set;
}
public required HashSet<string> Blacklist { get; set; }
[JsonPropertyName("coopExtractGift")]
public required CoopExtractReward CoopExtractGift
{
get;
set;
}
public required CoopExtractReward CoopExtractGift { get; set; }
[JsonPropertyName("btrDeliveryExpireHours")]
public int BtrDeliveryExpireHours
{
get;
set;
}
public int BtrDeliveryExpireHours { get; set; }
/// <summary>
/// Smallest value player rep with fence can fall to
/// </summary>
[JsonPropertyName("playerRepMin")]
public double PlayerRepMin
{
get;
set;
}
public double PlayerRepMin { get; set; }
/// <summary>
/// Highest value player rep with fence can climb to
/// </summary>
[JsonPropertyName("playerRepMax")]
public double PlayerRepMax
{
get;
set;
}
public double PlayerRepMax { get; set; }
}
public record ItemDurabilityCurrentMax
@@ -303,49 +163,25 @@ public record ItemDurabilityCurrentMax
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("current")]
public required MinMax<double> Current
{
get;
set;
}
public required MinMax<double> Current { get; set; }
[JsonPropertyName("max")]
public required MinMax<double> Max
{
get;
set;
}
public required MinMax<double> Max { get; set; }
}
public record CoopExtractReward : LootRequest
{
[JsonPropertyName("sendGift")]
public bool SendGift
{
get;
set;
}
public bool SendGift { get; set; }
[JsonPropertyName("useRewardItemBlacklist")]
public new bool UseRewardItemBlacklist
{
get;
set;
}
public new bool UseRewardItemBlacklist { get; set; }
[JsonPropertyName("messageLocaleIds")]
public required List<string> MessageLocaleIds
{
get;
set;
}
public required List<string> MessageLocaleIds { get; set; }
[JsonPropertyName("giftExpiryHours")]
public int GiftExpiryHours
{
get;
set;
}
public int GiftExpiryHours { get; set; }
}
public record DiscountOptions
@@ -354,39 +190,19 @@ public record DiscountOptions
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("assortSize")]
public int AssortSize
{
get;
set;
}
public int AssortSize { get; set; }
[JsonPropertyName("itemPriceMult")]
public double ItemPriceMult
{
get;
set;
}
public double ItemPriceMult { get; set; }
[JsonPropertyName("presetPriceMult")]
public double PresetPriceMult
{
get;
set;
}
public double PresetPriceMult { get; set; }
[JsonPropertyName("weaponPresetMinMax")]
public required MinMax<int> WeaponPresetMinMax
{
get;
set;
}
public required MinMax<int> WeaponPresetMinMax { get; set; }
[JsonPropertyName("equipmentPresetMinMax")]
public required MinMax<int> EquipmentPresetMinMax
{
get;
set;
}
public required MinMax<int> EquipmentPresetMinMax { get; set; }
}
/// <summary>
@@ -401,9 +217,5 @@ public record ModdedTraders
/// Trader Ids to enable the clothing service for
/// </summary>
[JsonPropertyName("clothingService")]
public List<string> ClothingService
{
get;
set;
} = [];
public List<string> ClothingService { get; set; } = [];
}
@@ -8,39 +8,19 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record WeatherConfig : BaseConfig
{
[JsonPropertyName("kind")]
public override string Kind
{
get;
set;
} = "spt-weather";
public override string Kind { get; set; } = "spt-weather";
[JsonPropertyName("acceleration")]
public double? Acceleration
{
get;
set;
}
public double? Acceleration { get; set; }
[JsonPropertyName("weather")]
public WeatherValues? Weather
{
get;
set;
}
public WeatherValues? Weather { get; set; }
[JsonPropertyName("seasonDates")]
public List<SeasonDateTimes>? SeasonDates
{
get;
set;
}
public List<SeasonDateTimes>? SeasonDates { get; set; }
[JsonPropertyName("overrideSeason")]
public Season? OverrideSeason
{
get;
set;
}
public Season? OverrideSeason { get; set; }
}
public record SeasonDateTimes
@@ -49,50 +29,26 @@ public record SeasonDateTimes
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("seasonType")]
public Season? SeasonType
{
get;
set;
}
public Season? SeasonType { get; set; }
[JsonPropertyName("name")]
public string? Name
{
get;
set;
}
public string? Name { get; set; }
[JsonPropertyName("startDay")]
[JsonConverter(typeof(StringToNumberFactoryConverter))]
public int? StartDay
{
get;
set;
}
public int? StartDay { get; set; }
[JsonPropertyName("startMonth")]
[JsonConverter(typeof(StringToNumberFactoryConverter))]
public int? StartMonth
{
get;
set;
}
public int? StartMonth { get; set; }
[JsonPropertyName("endDay")]
[JsonConverter(typeof(StringToNumberFactoryConverter))]
public int? EndDay
{
get;
set;
}
public int? EndDay { get; set; }
[JsonPropertyName("endMonth")]
[JsonConverter(typeof(StringToNumberFactoryConverter))]
public int? EndMonth
{
get;
set;
}
public int? EndMonth { get; set; }
}
public record WeatherValues
@@ -101,31 +57,19 @@ public record WeatherValues
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("seasonValues")]
public Dictionary<string, SeasonalValues>? SeasonValues
{
get;
set;
}
public Dictionary<string, SeasonalValues>? SeasonValues { get; set; }
/// <summary>
/// How many hours to generate weather data into the future
/// </summary>
[JsonPropertyName("generateWeatherAmountHours")]
public int? GenerateWeatherAmountHours
{
get;
set;
}
public int? GenerateWeatherAmountHours { get; set; }
/// <summary>
/// Length of each weather period
/// </summary>
[JsonPropertyName("timePeriod")]
public WeatherSettings<int>? TimePeriod
{
get;
set;
}
public WeatherSettings<int>? TimePeriod { get; set; }
}
public record SeasonalValues
@@ -134,67 +78,31 @@ public record SeasonalValues
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("clouds")]
public WeatherSettings<double>? Clouds
{
get;
set;
}
public WeatherSettings<double>? Clouds { get; set; }
[JsonPropertyName("windSpeed")]
public WeatherSettings<double>? WindSpeed
{
get;
set;
}
public WeatherSettings<double>? WindSpeed { get; set; }
[JsonPropertyName("windDirection")]
public WeatherSettings<WindDirection>? WindDirection
{
get;
set;
}
public WeatherSettings<WindDirection>? WindDirection { get; set; }
[JsonPropertyName("windGustiness")]
public MinMax<double>? WindGustiness
{
get;
set;
}
public MinMax<double>? WindGustiness { get; set; }
[JsonPropertyName("rain")]
public WeatherSettings<double>? Rain
{
get;
set;
}
public WeatherSettings<double>? Rain { get; set; }
[JsonPropertyName("rainIntensity")]
public MinMax<double>? RainIntensity
{
get;
set;
}
public MinMax<double>? RainIntensity { get; set; }
[JsonPropertyName("fog")]
public WeatherSettings<double>? Fog
{
get;
set;
}
public WeatherSettings<double>? Fog { get; set; }
[JsonPropertyName("temp")]
public TempDayNight? Temp
{
get;
set;
}
public TempDayNight? Temp { get; set; }
[JsonPropertyName("pressure")]
public MinMax<double>? Pressure
{
get;
set;
}
public MinMax<double>? Pressure { get; set; }
}
public record TempDayNight
@@ -203,18 +111,10 @@ public record TempDayNight
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("day")]
public MinMax<double>? Day
{
get;
set;
}
public MinMax<double>? Day { get; set; }
[JsonPropertyName("night")]
public MinMax<double>? Night
{
get;
set;
}
public MinMax<double>? Night { get; set; }
}
public record WeatherSettings<T>
@@ -223,16 +123,8 @@ public record WeatherSettings<T>
public Dictionary<string, object> ExtensionData { get; set; }
[JsonPropertyName("values")]
public List<T>? Values
{
get;
set;
}
public List<T>? Values { get; set; }
[JsonPropertyName("weights")]
public List<double>? Weights
{
get;
set;
}
public List<double>? Weights { get; set; }
}