Do a small pass on SPT's config's to reduce warnings and cleanup (#348)

* Do a small pass on SPT's config's to reduce warnings and cleanup

* Revert

* Revert EFT models

* Set list as null
This commit is contained in:
Jesse
2025-06-04 15:46:52 +02:00
committed by GitHub
parent b836ce4bf1
commit ff1dfa54ae
42 changed files with 352 additions and 826 deletions
@@ -3,6 +3,7 @@ using SPTarkov.Server.Core.Controllers;
using SPTarkov.Server.Core.Models.Enums;
using SPTarkov.Server.Core.Models.Spt.Config;
using SPTarkov.Server.Core.Models.Spt.Logging;
using SPTarkov.Server.Core.Models.Spt.Mod;
using SPTarkov.Server.Core.Servers;
using SPTarkov.Server.Core.Services;
using SPTarkov.Server.Core.Utils;
@@ -14,8 +15,8 @@ public class ClientLogCallbacks(
HttpResponseUtil _httpResponseUtil,
ClientLogController _clientLogController,
ConfigServer _configServer,
LocalisationService _localisationService
// ModLoadOrder _modLoadOrder // TODO: needs implementing
LocalisationService _localisationService,
IReadOnlyList<SptMod> _loadedMods
)
{
/// <summary>
@@ -50,7 +51,7 @@ public class ClientLogCallbacks(
data.ReleaseSummaryText = _localisationService.GetText("release-summary");
data.IsBeta = ProgramStatics.ENTRY_TYPE() is EntryType.BLEEDING_EDGE or EntryType.BLEEDING_EDGE_MODS;
data.IsModdable = ProgramStatics.MODS();
data.IsModded = false; // TODO
data.IsModded = _loadedMods.Count > 0;
return new ValueTask<string>(_httpResponseUtil.NoBody(data));
}
@@ -1877,7 +1877,7 @@ public class ItemHelper(
public List<Item> AddChildSlotItems(
List<Item> itemToAdd,
TemplateItem itemToAddTemplate,
Dictionary<string, double?>? modSpawnChanceDict = null,
Dictionary<string, double>? modSpawnChanceDict = null,
bool requiredOnly = false
)
{
@@ -1895,10 +1895,9 @@ public class ItemHelper(
if (modSpawnChanceDict is not null && !(slot.Required ?? false))
{
// only roll chance to not include mod if dict exists and has value for this mod type (e.g. front_plate)
var modSpawnChance = modSpawnChanceDict[slot.Name.ToLower()];
if (modSpawnChance is not null)
if(modSpawnChanceDict.ContainsKey(slot.Name.ToLower()))
{
if (!_randomUtil.GetChance100(modSpawnChance ?? 0))
if (!_randomUtil.GetChance100(modSpawnChanceDict[slot.Name.ToLower()]))
{
continue;
}
@@ -183,97 +183,6 @@ public record ItemDistribution
}
}
public record StaticPropsBase
{
[JsonPropertyName("Id")]
public string? Id
{
get;
set;
}
[JsonPropertyName("IsContainer")]
public bool? IsContainer
{
get;
set;
}
[JsonPropertyName("useGravity")]
public bool? UseGravity
{
get;
set;
}
[JsonPropertyName("randomRotation")]
public bool? RandomRotation
{
get;
set;
}
[JsonPropertyName("Position")]
public XYZ? Position
{
get;
set;
}
[JsonPropertyName("Rotation")]
public XYZ? Rotation
{
get;
set;
}
[JsonPropertyName("IsGroupPosition")]
public bool? IsGroupPosition
{
get;
set;
}
[JsonPropertyName("IsAlwaysSpawn")]
public bool? IsAlwaysSpawn
{
get;
set;
}
[JsonPropertyName("GroupPositions")]
public GroupPosition[] GroupPositions
{
get;
set;
}
[JsonPropertyName("Root")]
public string? Root
{
get;
set;
}
[JsonPropertyName("Items")]
public Item[] Items
{
get;
set;
}
}
[Obsolete("use SpawnpointTemplate")]
public record StaticWeaponProps : StaticPropsBase
{
[JsonPropertyName("Items")]
public Item[] Items
{
get;
set;
}
}
public record StaticContainerDetails
{
[JsonPropertyName("staticWeapons")]
@@ -348,55 +257,3 @@ public record StaticAmmoDetails
set;
}
}
public record StaticForcedProps
{
[JsonPropertyName("containerId")]
public string? ContainerId
{
get;
set;
}
[JsonPropertyName("itemTpl")]
public string? ItemTpl
{
get;
set;
}
}
[Obsolete("use SpawnpointTemplate")]
public record StaticContainerProps : StaticPropsBase
{
[JsonPropertyName("Items")]
public StaticItem[] Items
{
get;
set;
}
}
public record StaticItem
{
[JsonPropertyName("_id")]
public string? Id
{
get;
set;
}
[JsonPropertyName("_tpl")]
public string? Tpl
{
get;
set;
}
[JsonPropertyName("upd")]
public Upd? Upd
{
get;
set;
}
}
@@ -949,11 +949,11 @@ public record NonWaveGroupScenario
public record Limit : MinMax<int>
{
[JsonPropertyName("items")]
public object[] Items
public List<string>? Items
{
get;
set;
} // TODO: was on TS any[] hmmm..
}
[JsonPropertyName("min")]
public int? Min
@@ -8,7 +8,7 @@ public record BotDetailsForChatMessages
{
get;
set;
}
} = string.Empty;
public DogtagSide Side
{
@@ -56,7 +56,7 @@ public record BotGenerationDetails
/// Level specific overrides for PMC level
/// </summary>
[JsonPropertyName("locationSpecificPmcLevelOverride")]
public MinMax<int> LocationSpecificPmcLevelOverride
public MinMax<int>? LocationSpecificPmcLevelOverride
{
get;
set;
@@ -5,95 +5,95 @@ namespace SPTarkov.Server.Core.Models.Spt.Bots;
public record BotLootCache
{
[JsonPropertyName("backpackLoot")]
public Dictionary<string, double>? BackpackLoot
public Dictionary<string, double> BackpackLoot
{
get;
set;
}
} = [];
[JsonPropertyName("pocketLoot")]
public Dictionary<string, double>? PocketLoot
public Dictionary<string, double> PocketLoot
{
get;
set;
}
} = [];
[JsonPropertyName("vestLoot")]
public Dictionary<string, double>? VestLoot
public Dictionary<string, double> VestLoot
{
get;
set;
}
} = [];
[JsonPropertyName("secureLoot")]
public Dictionary<string, double>? SecureLoot
public Dictionary<string, double> SecureLoot
{
get;
set;
}
} = [];
[JsonPropertyName("combinedPoolLoot")]
public Dictionary<string, double>? CombinedPoolLoot
public Dictionary<string, double> CombinedPoolLoot
{
get;
set;
}
} = [];
[JsonPropertyName("specialItems")]
public Dictionary<string, double>? SpecialItems
public Dictionary<string, double> SpecialItems
{
get;
set;
}
} = [];
[JsonPropertyName("healingItems")]
public Dictionary<string, double>? HealingItems
public Dictionary<string, double> HealingItems
{
get;
set;
}
} = [];
[JsonPropertyName("drugItems")]
public Dictionary<string, double>? DrugItems
public Dictionary<string, double> DrugItems
{
get;
set;
}
} = [];
[JsonPropertyName("foodItems")]
public Dictionary<string, double>? FoodItems
public Dictionary<string, double> FoodItems
{
get;
set;
}
} = [];
[JsonPropertyName("drinkItems")]
public Dictionary<string, double>? DrinkItems
public Dictionary<string, double> DrinkItems
{
get;
set;
}
} = [];
[JsonPropertyName("currencyItems")]
public Dictionary<string, double>? CurrencyItems
public Dictionary<string, double> CurrencyItems
{
get;
set;
}
} = [];
[JsonPropertyName("stimItems")]
public Dictionary<string, double>? StimItems
public Dictionary<string, double> StimItems
{
get;
set;
}
} = [];
[JsonPropertyName("grenadeItems")]
public Dictionary<string, double>? GrenadeItems
public Dictionary<string, double> GrenadeItems
{
get;
set;
}
} = [];
}
public record LootCacheType
@@ -7,14 +7,14 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record AirdropConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
} = "spt-airdrop";
[JsonPropertyName("airdropTypeWeightings")]
public Dictionary<SptAirdropTypeEnum, double> AirdropTypeWeightings
public required Dictionary<SptAirdropTypeEnum, double> AirdropTypeWeightings
{
get;
set;
@@ -24,76 +24,14 @@ public record AirdropConfig : BaseConfig
/// What rewards will the loot crate contain, keyed by drop type e.g. mixed/weaponArmor/foodMedical/barter
/// </summary>
[JsonPropertyName("loot")]
public Dictionary<string, AirdropLoot> Loot
public required Dictionary<string, AirdropLoot> Loot
{
get;
set;
}
[JsonPropertyName("customAirdropMapping")]
public Dictionary<string, SptAirdropTypeEnum> CustomAirdropMapping
{
get;
set;
}
}
/// <summary>
/// Chance map will have an airdrop occur out of 100 - locations not included count as 0%
/// </summary>
public record AirdropChancePercent
{
[JsonPropertyName("bigmap")]
public double Bigmap
{
get;
set;
}
[JsonPropertyName("woods")]
public double Woods
{
get;
set;
}
[JsonPropertyName("lighthouse")]
public double Lighthouse
{
get;
set;
}
[JsonPropertyName("shoreline")]
public double Shoreline
{
get;
set;
}
[JsonPropertyName("interchange")]
public double Interchange
{
get;
set;
}
[JsonPropertyName("reserve")]
public double Reserve
{
get;
set;
}
[JsonPropertyName("tarkovStreets")]
public double TarkovStreets
{
get;
set;
}
[JsonPropertyName("sandbox")]
public double Sandbox
public required Dictionary<string, SptAirdropTypeEnum> CustomAirdropMapping
{
get;
set;
@@ -107,7 +45,7 @@ public record AirdropLoot
{
[JsonPropertyName("icon")]
[JsonConverter(typeof(JsonStringEnumConverter))]
public AirdropTypeEnum Icon
public required AirdropTypeEnum Icon
{
get;
set;
@@ -117,7 +55,7 @@ public record AirdropLoot
/// Min/max of weapons inside crate
/// </summary>
[JsonPropertyName("weaponPresetCount")]
public MinMax<int>? WeaponPresetCount
public required MinMax<int> WeaponPresetCount
{
get;
set;
@@ -127,7 +65,7 @@ public record AirdropLoot
/// Min/max of armors (head/chest/rig) inside crate
/// </summary>
[JsonPropertyName("armorPresetCount")]
public MinMax<int>? ArmorPresetCount
public required MinMax<int> ArmorPresetCount
{
get;
set;
@@ -137,7 +75,7 @@ public record AirdropLoot
/// Min/max of items inside crate
/// </summary>
[JsonPropertyName("itemCount")]
public MinMax<int> ItemCount
public required MinMax<int> ItemCount
{
get;
set;
@@ -147,7 +85,7 @@ public record AirdropLoot
/// Min/max of sealed weapon boxes inside crate
/// </summary>
[JsonPropertyName("weaponCrateCount")]
public MinMax<int> WeaponCrateCount
public required MinMax<int> WeaponCrateCount
{
get;
set;
@@ -157,7 +95,7 @@ public record AirdropLoot
/// Items to never allow - tpls
/// </summary>
[JsonPropertyName("itemBlacklist")]
public List<string> ItemBlacklist
public required List<string> ItemBlacklist
{
get;
set;
@@ -167,7 +105,7 @@ public record AirdropLoot
/// Item type (parentId) to allow inside crate
/// </summary>
[JsonPropertyName("itemTypeWhitelist")]
public List<string> ItemTypeWhitelist
public required List<string> ItemTypeWhitelist
{
get;
set;
@@ -177,7 +115,7 @@ public record AirdropLoot
/// Item type/ item tpls to limit count of inside crate - key: item base type: value: max count
/// </summary>
[JsonPropertyName("itemLimits")]
public Dictionary<string, int> ItemLimits
public required Dictionary<string, int> ItemLimits
{
get;
set;
@@ -187,7 +125,7 @@ public record AirdropLoot
/// Items to limit stack size of key: item tpl value: min/max stack size
/// </summary>
[JsonPropertyName("itemStackLimits")]
public Dictionary<string, MinMax<int>> ItemStackLimits
public required Dictionary<string, MinMax<int>> ItemStackLimits
{
get;
set;
@@ -214,7 +152,7 @@ public record AirdropLoot
}
[JsonPropertyName("useForcedLoot")]
public bool? UseForcedLoot
public bool UseForcedLoot
{
get;
set;
@@ -228,14 +166,14 @@ public record AirdropLoot
}
[JsonPropertyName("useRewardItemBlacklist")]
public bool? UseRewardItemBlacklist
public bool UseRewardItemBlacklist
{
get;
set;
}
[JsonPropertyName("blockSeasonalItemsOutOfSeason")]
public bool? BlockSeasonalItemsOutOfSeason
public bool BlockSeasonalItemsOutOfSeason
{
get;
set;
@@ -5,14 +5,14 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record BackupConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
} = "spt-backup";
[JsonPropertyName("enabled")]
public bool Enabled
public required bool Enabled
{
get;
set;
@@ -30,10 +30,10 @@ public record BackupConfig : BaseConfig
{
get;
set;
}
} = string.Empty;
[JsonPropertyName("backupInterval")]
public BackupConfigInterval BackupInterval
public required BackupConfigInterval BackupInterval
{
get;
set;
@@ -2,10 +2,10 @@
namespace SPTarkov.Server.Core.Models.Spt.Config;
public record BaseConfig
public abstract record BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public abstract string Kind
{
get;
set;
@@ -8,7 +8,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record BotConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -18,17 +18,7 @@ public record BotConfig : BaseConfig
/// How many variants of each bot should be generated on raid start
/// </summary>
[JsonPropertyName("presetBatch")]
public Dictionary<string, int>? PresetBatch
{
get;
set;
}
/// <summary>
/// Bot roles that should not have PMC types (pmcBEAR/pmcUSEC) added as enemies to
/// </summary>
[JsonPropertyName("botsToNotAddPMCsAsEnemiesTo")]
public List<string> BotsToNotAddPMCsAsEnemiesTo
public required Dictionary<string, int> PresetBatch
{
get;
set;
@@ -38,7 +28,7 @@ public record BotConfig : BaseConfig
/// What bot types should be classified as bosses
/// </summary>
[JsonPropertyName("bosses")]
public List<string> Bosses
public required List<string> Bosses
{
get;
set;
@@ -48,7 +38,7 @@ public record BotConfig : BaseConfig
/// Control weapon/armor durability min/max values for each bot type
/// </summary>
[JsonPropertyName("durability")]
public BotDurability Durability
public required BotDurability Durability
{
get;
set;
@@ -58,7 +48,7 @@ public record BotConfig : BaseConfig
/// Controls the percentage values of randomization item resources
/// </summary>
[JsonPropertyName("lootItemResourceRandomization")]
public Dictionary<string, RandomisedResourceDetails> LootItemResourceRandomization
public required Dictionary<string, RandomisedResourceDetails> LootItemResourceRandomization
{
get;
set;
@@ -69,7 +59,7 @@ public record BotConfig : BaseConfig
/// key: bottype, value: bottypes to revenge on seeing their death
/// </summary>
[JsonPropertyName("revenge")]
public Dictionary<string, List<string>> Revenge
public required Dictionary<string, List<string>> Revenge
{
get;
set;
@@ -81,7 +71,7 @@ public record BotConfig : BaseConfig
/// key: itemTpl: value: max item count>
/// </summary>
[JsonPropertyName("itemSpawnLimits")]
public Dictionary<string, Dictionary<string, double>> ItemSpawnLimits
public required Dictionary<string, Dictionary<string, double>> ItemSpawnLimits
{
get;
set;
@@ -91,7 +81,7 @@ public record BotConfig : BaseConfig
/// Blacklist/whitelist items on a bot
/// </summary>
[JsonPropertyName("equipment")]
public Dictionary<string, EquipmentFilters?> Equipment
public required Dictionary<string, EquipmentFilters?> Equipment
{
get;
set;
@@ -111,7 +101,7 @@ public record BotConfig : BaseConfig
/// What ai brain should a normal scav use per map
/// </summary>
[JsonPropertyName("assaultBrainType")]
public Dictionary<string, Dictionary<string, int>> AssaultBrainType
public required Dictionary<string, Dictionary<string, int>> AssaultBrainType
{
get;
set;
@@ -121,7 +111,7 @@ public record BotConfig : BaseConfig
/// What ai brain should a player scav use per map
/// </summary>
[JsonPropertyName("playerScavBrainType")]
public Dictionary<string, Dictionary<string, int>> PlayerScavBrainType
public required Dictionary<string, Dictionary<string, int>> PlayerScavBrainType
{
get;
set;
@@ -131,7 +121,7 @@ public record BotConfig : BaseConfig
/// Max number of bots that can be spawned in a raid at any one time
/// </summary>
[JsonPropertyName("maxBotCap")]
public Dictionary<string, int> MaxBotCap
public required Dictionary<string, int> MaxBotCap
{
get;
set;
@@ -161,7 +151,7 @@ public record BotConfig : BaseConfig
/// Bot roles in this array will be given a dog tag on generation
/// </summary>
[JsonPropertyName("botRolesWithDogTags")]
public HashSet<string> BotRolesWithDogTags
public required HashSet<string> BotRolesWithDogTags
{
get;
set;
@@ -171,7 +161,7 @@ public record BotConfig : BaseConfig
/// Settings to control the items that get added into wallets on bots
/// </summary>
[JsonPropertyName("walletLoot")]
public WalletLootSettings WalletLoot
public required WalletLootSettings WalletLoot
{
get;
set;
@@ -181,7 +171,7 @@ public record BotConfig : BaseConfig
/// Currency weights, Keyed by botrole / currency
/// </summary>
[JsonPropertyName("currencyStackSize")]
public Dictionary<string, Dictionary<string, Dictionary<string, double>>> CurrencyStackSize
public required Dictionary<string, Dictionary<string, Dictionary<string, double>>> CurrencyStackSize
{
get;
set;
@@ -191,7 +181,7 @@ public record BotConfig : BaseConfig
/// Tpls for low profile gas blocks
/// </summary>
[JsonPropertyName("lowProfileGasBlockTpls")]
public HashSet<string> LowProfileGasBlockTpls
public required HashSet<string> LowProfileGasBlockTpls
{
get;
set;
@@ -201,7 +191,7 @@ public record BotConfig : BaseConfig
/// What bottypes should be excluded from having loot generated on them (backpack/pocket/vest) does not disable food/drink/special/
/// </summary>
[JsonPropertyName("disableLootOnBotTypes")]
public HashSet<string> DisableLootOnBotTypes
public required HashSet<string> DisableLootOnBotTypes
{
get;
set;
@@ -221,7 +211,7 @@ public record BotConfig : BaseConfig
/// Bot roles that must have a unique name when generated vs other bots in raid
/// </summary>
[JsonPropertyName("botRolesThatMustHaveUniqueName")]
public HashSet<string> BotRolesThatMustHaveUniqueName
public required HashSet<string> BotRolesThatMustHaveUniqueName
{
get;
set;
@@ -562,21 +552,21 @@ public record WalletLootSettings
}
[JsonPropertyName("itemCount")]
public MinMax<int> ItemCount
public required MinMax<int> ItemCount
{
get;
set;
}
[JsonPropertyName("stackSizeWeight")]
public Dictionary<string, double> StackSizeWeight
public required Dictionary<string, double> StackSizeWeight
{
get;
set;
}
[JsonPropertyName("currencyWeight")]
public Dictionary<string, double> CurrencyWeight
public required Dictionary<string, double> CurrencyWeight
{
get;
set;
@@ -586,7 +576,7 @@ public record WalletLootSettings
/// What wallets will have money in them
/// </summary>
[JsonPropertyName("walletTplPool")]
public List<string> WalletTplPool
public required List<string> WalletTplPool
{
get;
set;
@@ -5,21 +5,21 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record BotDurability
{
[JsonPropertyName("default")]
public DefaultDurability Default
public required DefaultDurability Default
{
get;
set;
}
[JsonPropertyName("botDurabilities")]
public Dictionary<string, DefaultDurability> BotDurabilities
public required Dictionary<string, DefaultDurability> BotDurabilities
{
get;
set;
}
[JsonPropertyName("pmc")]
public PmcDurability Pmc
public required PmcDurability Pmc
{
get;
set;
@@ -32,14 +32,14 @@ public record BotDurability
public record DefaultDurability
{
[JsonPropertyName("armor")]
public ArmorDurability Armor
public required ArmorDurability Armor
{
get;
set;
}
[JsonPropertyName("weapon")]
public WeaponDurability Weapon
public required WeaponDurability Weapon
{
get;
set;
@@ -49,14 +49,14 @@ public record DefaultDurability
public record PmcDurability
{
[JsonPropertyName("armor")]
public PmcDurabilityArmor Armor
public required PmcDurabilityArmor Armor
{
get;
set;
}
[JsonPropertyName("weapon")]
public WeaponDurability Weapon
public required WeaponDurability Weapon
{
get;
set;
@@ -6,91 +6,91 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record CoreConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
} = "spt-core";
[JsonPropertyName("sptVersion")]
public string SptVersion
public required string SptVersion
{
get;
set;
}
[JsonPropertyName("projectName")]
public string ProjectName
public required string ProjectName
{
get;
set;
}
[JsonPropertyName("compatibleTarkovVersion")]
public string CompatibleTarkovVersion
public required string CompatibleTarkovVersion
{
get;
set;
}
[JsonPropertyName("serverName")]
public string ServerName
public required string ServerName
{
get;
set;
}
[JsonPropertyName("profileSaveIntervalSeconds")]
public int ProfileSaveIntervalInSeconds
public required int ProfileSaveIntervalInSeconds
{
get;
set;
}
[JsonPropertyName("sptFriendNickname")]
public string SptFriendNickname
public required string SptFriendNickname
{
get;
set;
}
[JsonPropertyName("allowProfileWipe")]
public bool AllowProfileWipe
public required bool AllowProfileWipe
{
get;
set;
}
[JsonPropertyName("bsgLogging")]
public BsgLogging BsgLogging
public required BsgLogging BsgLogging
{
get;
set;
}
[JsonPropertyName("release")]
public Release Release
public required Release Release
{
get;
set;
}
[JsonPropertyName("fixes")]
public GameFixes Fixes
public required GameFixes Fixes
{
get;
set;
}
[JsonPropertyName("survey")]
public SurveyResponseData Survey
public required SurveyResponseData Survey
{
get;
set;
}
[JsonPropertyName("features")]
public ServerFeatures Features
public required ServerFeatures Features
{
get;
set;
@@ -175,7 +175,7 @@ public record Release
/// Text logged when users agreed to terms
/// </summary>
[JsonPropertyName("betaDisclaimerAcceptText")]
public string BetaDisclaimerAcceptText
public string? BetaDisclaimerAcceptText
{
get;
set;
@@ -185,7 +185,7 @@ public record Release
/// Server mods loaded message
/// </summary>
[JsonPropertyName("serverModsLoadedText")]
public string ServerModsLoadedText
public string? ServerModsLoadedText
{
get;
set;
@@ -195,7 +195,7 @@ public record Release
/// Server mods loaded debug message text
/// </summary>
[JsonPropertyName("serverModsLoadedDebugText")]
public string ServerModsLoadedDebugText
public string? ServerModsLoadedDebugText
{
get;
set;
@@ -205,7 +205,7 @@ public record Release
/// Client mods loaded message
/// </summary>
[JsonPropertyName("clientModsLoadedText")]
public string ClientModsLoadedText
public string? ClientModsLoadedText
{
get;
set;
@@ -215,7 +215,7 @@ public record Release
/// Client mods loaded debug message text
/// </summary>
[JsonPropertyName("clientModsLoadedDebugText")]
public string ClientModsLoadedDebugText
public string? ClientModsLoadedDebugText
{
get;
set;
@@ -225,7 +225,7 @@ public record Release
/// Illegal plugins log message
/// </summary>
[JsonPropertyName("illegalPluginsLoadedText")]
public string IllegalPluginsLoadedText
public string? IllegalPluginsLoadedText
{
get;
set;
@@ -235,7 +235,7 @@ public record Release
/// Illegal plugins exception
/// </summary>
[JsonPropertyName("illegalPluginsExceptionText")]
public string IllegalPluginsExceptionText
public string? IllegalPluginsExceptionText
{
get;
set;
@@ -337,16 +337,6 @@ public record GameFixes
public record ServerFeatures
{
/// <summary>
/// Controls whether the server attempts to download mod dependencies not included in the server's executable
/// </summary>
[JsonPropertyName("autoInstallModDependencies")]
public bool AutoInstallModDependencies
{
get;
set;
}
[JsonPropertyName("compressProfile")]
public bool CompressProfile
{
@@ -355,7 +345,7 @@ public record ServerFeatures
}
[JsonPropertyName("chatbotFeatures")]
public ChatbotFeatures ChatbotFeatures
public required ChatbotFeatures ChatbotFeatures
{
get;
set;
@@ -365,7 +355,7 @@ public record ServerFeatures
/// Keyed to profile type e.g. "Standard" or "SPT Developer"
/// </summary>
[JsonPropertyName("createNewProfileTypesBlacklist")]
public HashSet<string> CreateNewProfileTypesBlacklist
public required HashSet<string> CreateNewProfileTypesBlacklist
{
get;
set;
@@ -375,7 +365,7 @@ public record ServerFeatures
/// Profile ids to ignore when calculating achievement stats
/// </summary>
[JsonPropertyName("achievementProfileIdBlacklist")]
public HashSet<string>? AchievementProfileIdBlacklist
public required HashSet<string>? AchievementProfileIdBlacklist
{
get;
set;
@@ -392,14 +382,14 @@ public record ChatbotFeatures
}
[JsonPropertyName("commandoFeatures")]
public CommandoFeatures CommandoFeatures
public required CommandoFeatures CommandoFeatures
{
get;
set;
}
[JsonPropertyName("commandUseLimits")]
public Dictionary<string, int?> CommandUseLimits
public required Dictionary<string, int?> CommandUseLimits
{
get;
set;
@@ -409,7 +399,7 @@ public record ChatbotFeatures
/// Human readable id to guid for each bot
/// </summary>
[JsonPropertyName("ids")]
public Dictionary<string, string> Ids
public required Dictionary<string, string> Ids
{
get;
set;
@@ -419,7 +409,7 @@ public record ChatbotFeatures
/// Bot Ids player is allowed to interact with
/// </summary>
[JsonPropertyName("enabledBots")]
public Dictionary<string, bool> EnabledBots
public required Dictionary<string, bool> EnabledBots
{
get;
set;
@@ -9,14 +9,14 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record GiftsConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
} = "spt-gifts";
[JsonPropertyName("gifts")]
public Dictionary<string, Gift> Gifts
public required Dictionary<string, Gift> Gifts
{
get;
set;
@@ -33,7 +33,7 @@ public record Gift
{
get;
set;
}
} = [];
/// <summary>
/// Who is sending the gift to player
@@ -56,7 +56,7 @@ public record Gift
}
[JsonPropertyName("senderDetails")]
public UserDialogInfo SenderDetails
public UserDialogInfo? SenderDetails
{
get;
set;
@@ -73,7 +73,7 @@ public record Gift
}
[JsonPropertyName("messageText")]
public string MessageText
public string? MessageText
{
get;
set;
@@ -5,21 +5,21 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record HealthConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
} = "spt-health";
[JsonPropertyName("healthMultipliers")]
public HealthMultipliers HealthMultipliers
public required HealthMultipliers HealthMultipliers
{
get;
set;
}
[JsonPropertyName("save")]
public HealthSave Save
public required HealthSave Save
{
get;
set;
@@ -7,7 +7,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record HideoutConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -27,7 +27,7 @@ public record HideoutConfig : BaseConfig
/// Default values used to hydrate `RunIntervalSeconds` with
/// </summary>
[JsonPropertyName("runIntervalValues")]
public RunIntervalValues RunIntervalValues
public required RunIntervalValues RunIntervalValues
{
get;
set;
@@ -72,14 +72,14 @@ public record HideoutConfig : BaseConfig
}
[JsonPropertyName("cultistCircle")]
public CultistCircleSettings CultistCircle
public required CultistCircleSettings CultistCircle
{
get;
set;
}
[JsonPropertyName("hideoutCraftsToAdd")]
public List<HideoutCraftToAdd> HideoutCraftsToAdd
public required List<HideoutCraftToAdd> HideoutCraftsToAdd
{
get;
set;
@@ -92,28 +92,28 @@ public record HideoutCraftToAdd
/// The new mongoId for the craft to use
/// </summary>
[JsonPropertyName("newId")]
public string NewId
public required string NewId
{
get;
set;
}
[JsonPropertyName("requirements")]
public List<Requirement> Requirements
public required List<Requirement> Requirements
{
get;
set;
}
[JsonPropertyName("craftIdToCopy")]
public string CraftIdToCopy
public required string CraftIdToCopy
{
get;
set;
}
[JsonPropertyName("craftOutputTpl")]
public string CraftOutputTpl
public required string CraftOutputTpl
{
get;
set;
@@ -137,7 +137,7 @@ public record CultistCircleSettings
}
[JsonPropertyName("rewardPriceMultiplerMinMax")]
public MinMax<double> RewardPriceMultiplierMinMax
public required MinMax<double> RewardPriceMultiplierMinMax
{
get;
set;
@@ -191,7 +191,7 @@ public record CultistCircleSettings
}
[JsonPropertyName("craftTimeThreshholds")]
public List<CraftTimeThreshold> CraftTimeThreshholds
public required List<CraftTimeThreshold> CraftTimeThreshholds
{
get;
set;
@@ -211,7 +211,7 @@ public record CultistCircleSettings
/// Specific reward pool when player sacrifices specific item(s)
/// </summary>
[JsonPropertyName("directRewards")]
public List<DirectRewardSettings> DirectRewards
public required List<DirectRewardSettings> DirectRewards
{
get;
set;
@@ -221,7 +221,7 @@ public record CultistCircleSettings
/// Overrides for reward stack sizes, keyed by item tpl
/// </summary>
[JsonPropertyName("directRewardStackSize")]
public Dictionary<string, MinMax<int>> DirectRewardStackSize
public required Dictionary<string, MinMax<int>> DirectRewardStackSize
{
get;
set;
@@ -231,7 +231,7 @@ public record CultistCircleSettings
/// Item tpls to exclude from the reward pool
/// </summary>
[JsonPropertyName("rewardItemBlacklist")]
public List<string> RewardItemBlacklist
public required List<string> RewardItemBlacklist
{
get;
set;
@@ -241,14 +241,14 @@ public record CultistCircleSettings
/// Item tpls to include in the reward pool
/// </summary>
[JsonPropertyName("additionalRewardItemPool")]
public List<string> AdditionalRewardItemPool
public required List<string> AdditionalRewardItemPool
{
get;
set;
}
[JsonPropertyName("currencyRewards")]
public Dictionary<string, MinMax<int>> CurrencyRewards
public required Dictionary<string, MinMax<int>> CurrencyRewards
{
get;
set;
@@ -268,21 +268,21 @@ public record CraftTimeThreshold : MinMax<int>
public record DirectRewardSettings
{
[JsonPropertyName("reward")]
public List<string> Reward
public required List<string> Reward
{
get;
set;
}
[JsonPropertyName("requiredItems")]
public List<string> RequiredItems
public required List<string> RequiredItems
{
get;
set;
}
[JsonPropertyName("craftTimeSeconds")]
public int CraftTimeSeconds
public required int CraftTimeSeconds
{
get;
set;
@@ -292,7 +292,7 @@ public record DirectRewardSettings
/// Is the reward a one time reward or can it be given multiple times
/// </summary>
[JsonPropertyName("repeatable")]
public bool Repeatable
public required bool Repeatable
{
get;
set;
@@ -5,7 +5,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record HttpConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -15,14 +15,14 @@ public record HttpConfig : BaseConfig
/// Address used by webserver
/// </summary>
[JsonPropertyName("ip")]
public string Ip
public required string Ip
{
get;
set;
}
[JsonPropertyName("port")]
public int Port
public required int Port
{
get;
set;
@@ -32,28 +32,28 @@ public record HttpConfig : BaseConfig
/// Address used by game client to connect to
/// </summary>
[JsonPropertyName("backendIp")]
public string BackendIp
public required string BackendIp
{
get;
set;
}
[JsonPropertyName("backendPort")]
public int BackendPort
public required int BackendPort
{
get;
set;
}
[JsonPropertyName("webSocketPingDelayMs")]
public int WebSocketPingDelayMs
public required int WebSocketPingDelayMs
{
get;
set;
}
[JsonPropertyName("logRequests")]
public bool LogRequests
public required bool LogRequests
{
get;
set;
@@ -63,14 +63,14 @@ public record HttpConfig : BaseConfig
/// e.g. "SPT_Data/Server/images/traders/579dc571d53a0658a154fbec.png": "SPT_Data/Server/images/traders/NewTraderImage.png"
/// </summary>
[JsonPropertyName("serverImagePathOverride")]
public Dictionary<string, string> ServerImagePathOverride
public required Dictionary<string, string> ServerImagePathOverride
{
get;
set;
}
[JsonPropertyName("certificatePassword")]
public string? CertificatePassword
public required string CertificatePassword
{
get;
set;
@@ -5,7 +5,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record InRaidConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -15,7 +15,7 @@ public record InRaidConfig : BaseConfig
/// Overrides to apply to the pre-raid settings screen
/// </summary>
[JsonPropertyName("raidMenuSettings")]
public RaidMenuSettings RaidMenuSettings
public required RaidMenuSettings RaidMenuSettings
{
get;
set;
@@ -35,7 +35,7 @@ public record InRaidConfig : BaseConfig
/// Names of car extracts
/// </summary>
[JsonPropertyName("carExtracts")]
public List<string> CarExtracts
public required List<string> CarExtracts
{
get;
set;
@@ -45,7 +45,7 @@ public record InRaidConfig : BaseConfig
/// Names of coop extracts
/// </summary>
[JsonPropertyName("coopExtracts")]
public List<string> CoopExtracts
public required List<string> CoopExtracts
{
get;
set;
@@ -125,14 +125,14 @@ public record InRaidConfig : BaseConfig
public record RaidMenuSettings
{
[JsonPropertyName("aiAmount")]
public string AiAmount
public required string AiAmount
{
get;
set;
}
[JsonPropertyName("aiDifficulty")]
public string AiDifficulty
public required string AiDifficulty
{
get;
set;
@@ -5,7 +5,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record InsuranceConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -19,7 +19,7 @@ public record InsuranceConfig : BaseConfig
{
get;
set;
}
} = [];
/// <summary>
/// Item slots that should never be returned as insurance
@@ -29,7 +29,7 @@ public record InsuranceConfig : BaseConfig
{
get;
set;
}
} = [];
/// <summary>
/// Some slots should always be removed, e.g. 'cartridges'
@@ -39,7 +39,7 @@ public record InsuranceConfig : BaseConfig
{
get;
set;
}
} = [];
/// <summary>
/// Override to control how quickly insurance is processed/returned in seconds
@@ -6,7 +6,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record InventoryConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -23,14 +23,14 @@ public record InventoryConfig : BaseConfig
}
[JsonPropertyName("randomLootContainers")]
public Dictionary<string, RewardDetails> RandomLootContainers
public required Dictionary<string, RewardDetails> RandomLootContainers
{
get;
set;
}
[JsonPropertyName("sealedAirdropContainer")]
public SealedAirdropContainerSettings SealedAirdropContainer
public required SealedAirdropContainerSettings SealedAirdropContainer
{
get;
set;
@@ -40,7 +40,7 @@ public record InventoryConfig : BaseConfig
/// Contains item tpls that the server should consider money and treat the same as roubles/euros/dollars
/// </summary>
[JsonPropertyName("customMoneyTpls")]
public List<string> CustomMoneyTpls
public required List<string> CustomMoneyTpls
{
get;
set;
@@ -50,7 +50,7 @@ public record InventoryConfig : BaseConfig
/// Multipliers for skill gain when inside menus, NOT in-game
/// </summary>
[JsonPropertyName("skillGainMultiplers")]
public Dictionary<string, double> SkillGainMultipliers
public required Dictionary<string, double> SkillGainMultipliers
{
get;
set;
@@ -60,7 +60,7 @@ public record InventoryConfig : BaseConfig
/// Container Tpls that should be deprioritised when choosing where to take money from for payments
/// </summary>
[JsonPropertyName("deprioritisedMoneyContainers")]
public HashSet<string> DeprioritisedMoneyContainers
public required HashSet<string> DeprioritisedMoneyContainers
{
get;
set;
@@ -108,7 +108,7 @@ public record RewardDetails
public record SealedAirdropContainerSettings
{
[JsonPropertyName("weaponRewardWeight")]
public Dictionary<string, double> WeaponRewardWeight
public required Dictionary<string, double> WeaponRewardWeight
{
get;
set;
@@ -132,21 +132,21 @@ public record SealedAirdropContainerSettings
}
[JsonPropertyName("weaponModRewardLimits")]
public Dictionary<string, MinMax<int>> WeaponModRewardLimits
public required Dictionary<string, MinMax<int>> WeaponModRewardLimits
{
get;
set;
}
[JsonPropertyName("rewardTypeLimits")]
public Dictionary<string, MinMax<int>> RewardTypeLimits
public required Dictionary<string, MinMax<int>> RewardTypeLimits
{
get;
set;
}
[JsonPropertyName("ammoBoxWhitelist")]
public List<string> AmmoBoxWhitelist
public required List<string> AmmoBoxWhitelist
{
get;
set;
@@ -6,7 +6,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record ItemConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -16,7 +16,7 @@ public record ItemConfig : BaseConfig
/// Items that should be globally blacklisted
/// </summary>
[JsonPropertyName("blacklist")]
public HashSet<string> Blacklist
public required HashSet<string> Blacklist
{
get;
set;
@@ -26,7 +26,7 @@ public record ItemConfig : BaseConfig
/// Items that should not be lootable from any location
/// </summary>
[JsonPropertyName("lootableItemBlacklist")]
public HashSet<string> LootableItemBlacklist
public required HashSet<string> LootableItemBlacklist
{
get;
set;
@@ -36,7 +36,7 @@ public record ItemConfig : BaseConfig
/// items that should not be given as rewards
/// </summary>
[JsonPropertyName("rewardItemBlacklist")]
public HashSet<string> RewardItemBlacklist
public required HashSet<string> RewardItemBlacklist
{
get;
set;
@@ -46,7 +46,7 @@ public record ItemConfig : BaseConfig
/// Item base types that should not be given as rewards
/// </summary>
[JsonPropertyName("rewardItemTypeBlacklist")]
public HashSet<string> RewardItemTypeBlacklist
public required HashSet<string> RewardItemTypeBlacklist
{
get;
set;
@@ -56,14 +56,14 @@ public record ItemConfig : BaseConfig
/// Items that can only be found on bosses
/// </summary>
[JsonPropertyName("bossItems")]
public HashSet<string> BossItems
public required HashSet<string> BossItems
{
get;
set;
}
[JsonPropertyName("handbookPriceOverride")]
public Dictionary<string, HandbookPriceOverride> HandbookPriceOverride
public required Dictionary<string, HandbookPriceOverride> HandbookPriceOverride
{
get;
set;
@@ -73,7 +73,7 @@ public record ItemConfig : BaseConfig
/// Presets to add to the globals.json `ItemPresets` dictionary on server start
/// </summary>
[JsonPropertyName("customItemGlobalPresets")]
public List<Preset> CustomItemGlobalPresets
public required List<Preset> CustomItemGlobalPresets
{
get;
set;
@@ -100,5 +100,5 @@ public record HandbookPriceOverride
{
get;
set;
}
} = string.Empty;
}
@@ -5,7 +5,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record LocaleConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -15,7 +15,7 @@ public record LocaleConfig : BaseConfig
/// e.g. ru/en/cn/fr etc, or 'system', will take computer locale setting
/// </summary>
[JsonPropertyName("gameLocale")]
public string GameLocale
public required string GameLocale
{
get;
set;
@@ -25,7 +25,7 @@ public record LocaleConfig : BaseConfig
/// e.g. ru/en/cn/fr etc, or 'system', will take computer locale setting
/// </summary>
[JsonPropertyName("serverLocale")]
public string ServerLocale
public required string ServerLocale
{
get;
set;
@@ -35,14 +35,14 @@ public record LocaleConfig : BaseConfig
/// Languages server can be translated into
/// </summary>
[JsonPropertyName("serverSupportedLocales")]
public List<string> ServerSupportedLocales
public required List<string> ServerSupportedLocales
{
get;
set;
}
[JsonPropertyName("fallbacks")]
public Dictionary<string, string> Fallbacks
public required Dictionary<string, string> Fallbacks
{
get;
set;
@@ -7,7 +7,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record LocationConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -17,21 +17,21 @@ public record LocationConfig : BaseConfig
/// 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 RogueLighthouseSpawnTimeSettings RogueLighthouseSpawnTimeSettings
public required RogueLighthouseSpawnTimeSettings RogueLighthouseSpawnTimeSettings
{
get;
set;
}
[JsonPropertyName("looseLootMultiplier")]
public Dictionary<string, double> LooseLootMultiplier
public required Dictionary<string, double> LooseLootMultiplier
{
get;
set;
}
[JsonPropertyName("staticLootMultiplier")]
public Dictionary<string, double> StaticLootMultiplier
public required Dictionary<string, double> StaticLootMultiplier
{
get;
set;
@@ -41,7 +41,7 @@ public record LocationConfig : BaseConfig
/// Custom bot waves to add to a locations base json on game start if addCustomBotWavesToMaps is true
/// </summary>
[JsonPropertyName("customWaves")]
public CustomWaves CustomWaves
public CustomWaves? CustomWaves
{
get;
set;
@@ -51,7 +51,7 @@ public record LocationConfig : BaseConfig
/// Open zones to add to map
/// </summary>
[JsonPropertyName("openZones")]
public Dictionary<string, HashSet<string>> OpenZones
public required Dictionary<string, HashSet<string>> OpenZones
{
get;
set;
@@ -61,7 +61,7 @@ public record LocationConfig : BaseConfig
/// Key = map id, value = item tpls that should only have one forced loot spawn position
/// </summary>
[JsonPropertyName("forcedLootSingleSpawnById")]
public Dictionary<string, HashSet<string>> ForcedLootSingleSpawnById
public required Dictionary<string, HashSet<string>> ForcedLootSingleSpawnById
{
get;
set;
@@ -111,7 +111,7 @@ public record LocationConfig : BaseConfig
/// Add limits to a locations base.MinMaxBots array if enableBotTypeLimits is true
/// </summary>
[JsonPropertyName("botTypeLimits")]
public Dictionary<string, List<BotTypeLimit>> BotTypeLimits
public required Dictionary<string, List<BotTypeLimit>> BotTypeLimits
{
get;
set;
@@ -121,7 +121,7 @@ public record LocationConfig : BaseConfig
/// Container randomisation settings
/// </summary>
[JsonPropertyName("containerRandomisationSettings")]
public ContainerRandomisationSettings ContainerRandomisationSettings
public required ContainerRandomisationSettings ContainerRandomisationSettings
{
get;
set;
@@ -178,7 +178,7 @@ public record LocationConfig : BaseConfig
/// Key: map, value: loose loot ids to ignore
/// </summary>
[JsonPropertyName("looseLootBlacklist")]
public Dictionary<string, List<string>> LooseLootBlacklist
public required Dictionary<string, List<string>> LooseLootBlacklist
{
get;
set;
@@ -188,7 +188,7 @@ public record LocationConfig : BaseConfig
/// Key: map, value: settings to control how long scav raids are
/// </summary>
[JsonPropertyName("scavRaidTimeSettings")]
public ScavRaidTimeSettings ScavRaidTimeSettings
public required ScavRaidTimeSettings ScavRaidTimeSettings
{
get;
set;
@@ -198,7 +198,7 @@ public record LocationConfig : BaseConfig
/// Settings to adjust mods for lootable equipment in raid
/// </summary>
[JsonPropertyName("equipmentLootSettings")]
public EquipmentLootSettings EquipmentLootSettings
public required EquipmentLootSettings EquipmentLootSettings
{
get;
set;
@@ -208,7 +208,7 @@ public record LocationConfig : BaseConfig
/// Min percentage to set raider spawns at, -1 makes no changes
/// </summary>
[JsonPropertyName("reserveRaiderSpawnChanceOverrides")]
public ReserveRaiderSpawnChanceOverrides ReserveRaiderSpawnChanceOverrides
public required ReserveRaiderSpawnChanceOverrides ReserveRaiderSpawnChanceOverrides
{
get;
set;
@@ -218,7 +218,7 @@ public record LocationConfig : BaseConfig
/// Containers to remove all children from when generating static/loose loot
/// </summary>
[JsonPropertyName("tplsToStripChildItemsFrom")]
public HashSet<string> TplsToStripChildItemsFrom
public required HashSet<string> TplsToStripChildItemsFrom
{
get;
set;
@@ -228,7 +228,7 @@ public record LocationConfig : BaseConfig
/// Map ids players cannot visit
/// </summary>
[JsonPropertyName("nonMaps")]
public HashSet<string> NonMaps
public required HashSet<string> NonMaps
{
get;
set;
@@ -258,24 +258,7 @@ public record EquipmentLootSettings
/// Percentage chance item will be added to equipment
/// </summary>
[JsonPropertyName("modSpawnChancePercent")]
public Dictionary<string, double?> ModSpawnChancePercent
{
get;
set;
}
}
public record FixEmptyBotWavesSettings
{
[JsonPropertyName("enabled")]
public bool Enabled
{
get;
set;
}
[JsonPropertyName("ignoreMaps")]
public List<string> IgnoreMaps
public required Dictionary<string, double> ModSpawnChancePercent
{
get;
set;
@@ -299,30 +282,6 @@ public record RogueLighthouseSpawnTimeSettings
}
}
public record SplitWaveSettings
{
[JsonPropertyName("enabled")]
public bool Enabled
{
get;
set;
}
[JsonPropertyName("ignoreMaps")]
public List<string> IgnoreMaps
{
get;
set;
}
[JsonPropertyName("waveSizeThreshold")]
public int WaveSizeThreshold
{
get;
set;
}
}
public record CustomWaves
{
/// <summary>
@@ -333,152 +292,20 @@ public record CustomWaves
{
get;
set;
}
} = [];
[JsonPropertyName("normal")]
public Dictionary<string, List<Wave>> Normal
{
get;
set;
}
} = [];
}
public record BotTypeLimit : MinMax<int>
{
[JsonPropertyName("type")]
public string Type
{
get;
set;
}
}
/// <summary>
/// Multiplier to apply to the loot count for a given map
/// </summary>
public record LootMultiplier
{
[JsonPropertyName("bigmap")]
public double BigMap
{
get;
set;
}
[JsonPropertyName("develop")]
public double Develop
{
get;
set;
}
[JsonPropertyName("factory4_day")]
public double Factory4Day
{
get;
set;
}
[JsonPropertyName("factory4_night")]
public double Factory4Night
{
get;
set;
}
[JsonPropertyName("interchange")]
public double Interchange
{
get;
set;
}
[JsonPropertyName("laboratory")]
public double Laboratory
{
get;
set;
}
[JsonPropertyName("rezervbase")]
public double RezervBase
{
get;
set;
}
[JsonPropertyName("shoreline")]
public double Shoreline
{
get;
set;
}
[JsonPropertyName("woods")]
public double Woods
{
get;
set;
}
[JsonPropertyName("hideout")]
public double Hideout
{
get;
set;
}
[JsonPropertyName("lighthouse")]
public double Lighthouse
{
get;
set;
}
[JsonPropertyName("privatearea")]
public double PrivateArea
{
get;
set;
}
[JsonPropertyName("suburbs")]
public double Suburbs
{
get;
set;
}
[JsonPropertyName("tarkovstreets")]
public double TarkovStreets
{
get;
set;
}
[JsonPropertyName("terminal")]
public double Terminal
{
get;
set;
}
[JsonPropertyName("town")]
public double Town
{
get;
set;
}
[JsonPropertyName("sandbox")]
public double Sandbox
{
get;
set;
}
[JsonPropertyName("sandbox_high")]
public double SandboxHigh
public new required string Type
{
get;
set;
@@ -498,7 +325,7 @@ public record ContainerRandomisationSettings
/// What maps can use the container randomisation feature
/// </summary>
[JsonPropertyName("maps")]
public Dictionary<string, bool> Maps
public required Dictionary<string, bool> Maps
{
get;
set;
@@ -508,7 +335,7 @@ public record ContainerRandomisationSettings
/// Some container types don't work when randomised
/// </summary>
[JsonPropertyName("containerTypesToNotRandomise")]
public HashSet<string> ContainerTypesToNotRandomise
public required HashSet<string> ContainerTypesToNotRandomise
{
get;
set;
@@ -532,14 +359,14 @@ public record ContainerRandomisationSettings
public record ScavRaidTimeSettings
{
[JsonPropertyName("settings")]
public ScavRaidTimeConfigSettings Settings
public required ScavRaidTimeConfigSettings Settings
{
get;
set;
}
[JsonPropertyName("maps")]
public Dictionary<string, ScavRaidTimeLocationSettings?>? Maps
public required Dictionary<string, ScavRaidTimeLocationSettings?> Maps
{
get;
set;
@@ -606,7 +433,7 @@ public record ScavRaidTimeLocationSettings
{
get;
set;
}
} = [];
/// <summary>
/// Should bot waves be removed / spawn times be adjusted
@@ -6,7 +6,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record LootConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -16,7 +16,7 @@ public record LootConfig : BaseConfig
/// Spawn positions to add into a map, key=mapid
/// </summary>
[JsonPropertyName("looseLoot")]
public Dictionary<string, Spawnpoint[]> LooseLoot
public required Dictionary<string, Spawnpoint[]> LooseLoot
{
get;
set;
@@ -26,7 +26,7 @@ public record LootConfig : BaseConfig
/// Loose loot probability adjustments to apply on game start
/// </summary>
[JsonPropertyName("looseLootSpawnPointAdjustments")]
public Dictionary<string, Dictionary<string, double>>? LooseLootSpawnPointAdjustments
public required Dictionary<string, Dictionary<string, double>> LooseLootSpawnPointAdjustments
{
get;
set;
@@ -5,7 +5,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record LostOnDeathConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -15,7 +15,7 @@ public record LostOnDeathConfig : BaseConfig
/// What equipment in each slot should be lost on death
/// </summary>
[JsonPropertyName("equipment")]
public LostEquipment Equipment
public required LostEquipment Equipment
{
get;
set;
@@ -5,7 +5,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record MatchConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -19,7 +19,7 @@ public record MatchConfig : BaseConfig
}
[JsonPropertyName("randomiseMapContainers")]
public Dictionary<string, bool> RandomiseMapContainers
public required Dictionary<string, bool> RandomiseMapContainers
{
get;
set;
@@ -7,14 +7,14 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record PlayerScavConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
} = "spt-playerscav";
[JsonPropertyName("karmaLevel")]
public Dictionary<string, KarmaLevel> KarmaLevel
public required Dictionary<string, KarmaLevel> KarmaLevel
{
get;
set;
@@ -24,28 +24,28 @@ public record PlayerScavConfig : BaseConfig
public record KarmaLevel
{
[JsonPropertyName("botTypeForLoot")]
public string BotTypeForLoot
public required string BotTypeForLoot
{
get;
set;
}
[JsonPropertyName("modifiers")]
public Modifiers Modifiers
public required Modifiers Modifiers
{
get;
set;
}
[JsonPropertyName("itemLimits")]
public Dictionary<string, GenerationData> ItemLimits
public required Dictionary<string, GenerationData> ItemLimits
{
get;
set;
}
[JsonPropertyName("equipmentBlacklist")]
public Dictionary<EquipmentSlots, List<string>> EquipmentBlacklist
public required Dictionary<EquipmentSlots, List<string>> EquipmentBlacklist
{
get;
set;
@@ -59,7 +59,7 @@ public record KarmaLevel
}
[JsonPropertyName("lootItemsToAddChancePercent")]
public Dictionary<string, double> LootItemsToAddChancePercent
public required Dictionary<string, double> LootItemsToAddChancePercent
{
get;
set;
@@ -69,59 +69,14 @@ public record KarmaLevel
public record Modifiers
{
[JsonPropertyName("equipment")]
public Dictionary<string, double> Equipment
public required Dictionary<string, double> Equipment
{
get;
set;
}
[JsonPropertyName("mod")]
public Dictionary<string, double> Mod
{
get;
set;
}
}
public record ItemLimits
{
[JsonPropertyName("healing")]
public GenerationData Healing
{
get;
set;
}
[JsonPropertyName("drugs")]
public GenerationData Drugs
{
get;
set;
}
[JsonPropertyName("stims")]
public GenerationData Stims
{
get;
set;
}
[JsonPropertyName("looseLoot")]
public GenerationData LooseLoot
{
get;
set;
}
[JsonPropertyName("magazines")]
public GenerationData Magazines
{
get;
set;
}
[JsonPropertyName("grenades")]
public GenerationData Grenades
public required Dictionary<string, double> Mod
{
get;
set;
@@ -5,21 +5,21 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record PmcChatResponse : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
} = "spt-pmcchatresponse";
[JsonPropertyName("victim")]
public ResponseSettings Victim
public required ResponseSettings Victim
{
get;
set;
}
[JsonPropertyName("killer")]
public ResponseSettings Killer
public required ResponseSettings Killer
{
get;
set;
@@ -36,7 +36,7 @@ public record ResponseSettings
}
[JsonPropertyName("responseTypeWeights")]
public Dictionary<string, double> ResponseTypeWeights
public required Dictionary<string, double> ResponseTypeWeights
{
get;
set;
@@ -8,7 +8,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record PmcConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -18,7 +18,7 @@ public record PmcConfig : BaseConfig
/// What game version should the PMC have
/// </summary>
[JsonPropertyName("gameVersionWeight")]
public Dictionary<string, double> GameVersionWeight
public required Dictionary<string, double> GameVersionWeight
{
get;
set;
@@ -28,7 +28,7 @@ public record PmcConfig : BaseConfig
/// What account type should the PMC have
/// </summary>
[JsonPropertyName("accountTypeWeight")]
public Dictionary<MemberCategory, double> AccountTypeWeight
public required Dictionary<MemberCategory, double> AccountTypeWeight
{
get;
set;
@@ -38,7 +38,7 @@ public record PmcConfig : BaseConfig
/// Global whitelist/blacklist of vest loot for PMCs
/// </summary>
[JsonPropertyName("vestLoot")]
public SlotLootSettings VestLoot
public required SlotLootSettings VestLoot
{
get;
set;
@@ -48,7 +48,7 @@ public record PmcConfig : BaseConfig
/// Global whitelist/blacklist of pocket loot for PMCs
/// </summary>
[JsonPropertyName("pocketLoot")]
public SlotLootSettings PocketLoot
public required SlotLootSettings PocketLoot
{
get;
set;
@@ -58,14 +58,14 @@ public record PmcConfig : BaseConfig
/// Global whitelist/blacklist of backpack loot for PMCs
/// </summary>
[JsonPropertyName("backpackLoot")]
public SlotLootSettings BackpackLoot
public required SlotLootSettings BackpackLoot
{
get;
set;
}
[JsonPropertyName("globalLootBlacklist")]
public List<string> GlobalLootBlacklist
public required List<string> GlobalLootBlacklist
{
get;
set;
@@ -75,7 +75,7 @@ public record PmcConfig : BaseConfig
/// Use difficulty defined in config/bot.json/difficulty instead of chosen difficulty dropdown value
/// </summary>
[JsonPropertyName("useDifficultyOverride")]
public bool UseDifficultyOverride
public required bool UseDifficultyOverride
{
get;
set;
@@ -85,7 +85,7 @@ public record PmcConfig : BaseConfig
/// Difficulty override e.g. "AsOnline/Hard"
/// </summary>
[JsonPropertyName("difficulty")]
public string Difficulty
public required string Difficulty
{
get;
set;
@@ -95,7 +95,7 @@ public record PmcConfig : BaseConfig
/// Chance out of 100 to have a complete gun in backpack
/// </summary>
[JsonPropertyName("looseWeaponInBackpackChancePercent")]
public double LooseWeaponInBackpackChancePercent
public required double LooseWeaponInBackpackChancePercent
{
get;
set;
@@ -105,7 +105,7 @@ public record PmcConfig : BaseConfig
/// Chance out of 100 to have an enhancement applied to PMC weapon
/// </summary>
[JsonPropertyName("weaponHasEnhancementChancePercent")]
public double WeaponHasEnhancementChancePercent
public required double WeaponHasEnhancementChancePercent
{
get;
set;
@@ -115,7 +115,7 @@ public record PmcConfig : BaseConfig
/// MinMax count of weapons to have in backpack
/// </summary>
[JsonPropertyName("looseWeaponInBackpackLootMinMax")]
public MinMax<int> LooseWeaponInBackpackLootMinMax
public required MinMax<int> LooseWeaponInBackpackLootMinMax
{
get;
set;
@@ -132,7 +132,7 @@ public record PmcConfig : BaseConfig
/// Percentage chance PMC will be USEC
/// </summary>
[JsonPropertyName("isUsec")]
public double IsUsec
public required double IsUsec
{
get;
set;
@@ -142,7 +142,7 @@ public record PmcConfig : BaseConfig
/// WildSpawnType enum value USEC PMCs use
/// </summary>
[JsonPropertyName("usecType")]
public string UsecType
public required string UsecType
{
get;
set;
@@ -152,7 +152,7 @@ public record PmcConfig : BaseConfig
/// WildSpawnType enum value BEAR PMCs use
/// </summary>
[JsonPropertyName("bearType")]
public string BearType
public required string BearType
{
get;
set;
@@ -169,28 +169,28 @@ public record PmcConfig : BaseConfig
/// 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 Dictionary<string, Dictionary<string, Dictionary<string, double>>> PmcType
public required Dictionary<string, Dictionary<string, Dictionary<string, double>>> PmcType
{
get;
set;
}
[JsonPropertyName("maxBackpackLootTotalRub")]
public List<MinMaxLootValue> MaxBackpackLootTotalRub
public required List<MinMaxLootValue> MaxBackpackLootTotalRub
{
get;
set;
}
[JsonPropertyName("maxPocketLootTotalRub")]
public int MaxPocketLootTotalRub
public required int MaxPocketLootTotalRub
{
get;
set;
}
[JsonPropertyName("maxVestLootTotalRub")]
public int MaxVestLootTotalRub
public required int MaxVestLootTotalRub
{
get;
set;
@@ -200,7 +200,7 @@ public record PmcConfig : BaseConfig
/// How many levels above player level can a PMC be
/// </summary>
[JsonPropertyName("botRelativeLevelDeltaMax")]
public int BotRelativeLevelDeltaMax
public required int BotRelativeLevelDeltaMax
{
get;
set;
@@ -210,7 +210,7 @@ public record PmcConfig : BaseConfig
/// How many levels below player level can a PMC be
/// </summary>
[JsonPropertyName("botRelativeLevelDeltaMin")]
public int BotRelativeLevelDeltaMin
public required int BotRelativeLevelDeltaMin
{
get;
set;
@@ -220,28 +220,28 @@ public record PmcConfig : BaseConfig
/// Force a number of healing items into PMCs secure container to ensure they can heal
/// </summary>
[JsonPropertyName("forceHealingItemsIntoSecure")]
public bool ForceHealingItemsIntoSecure
public required bool ForceHealingItemsIntoSecure
{
get;
set;
}
[JsonPropertyName("hostilitySettings")]
public Dictionary<string, HostilitySettings> HostilitySettings
public required Dictionary<string, HostilitySettings> HostilitySettings
{
get;
set;
}
[JsonPropertyName("allPMCsHavePlayerNameWithRandomPrefixChance")]
public double AllPMCsHavePlayerNameWithRandomPrefixChance
public required double AllPMCsHavePlayerNameWithRandomPrefixChance
{
get;
set;
}
[JsonPropertyName("locationSpecificPmcLevelOverride")]
public Dictionary<string, MinMax<int>> LocationSpecificPmcLevelOverride
public required Dictionary<string, MinMax<int>> LocationSpecificPmcLevelOverride
{
get;
set;
@@ -251,35 +251,35 @@ public record PmcConfig : BaseConfig
/// Should secure container loot from usec.json/bear.json be added to pmc bots secure
/// </summary>
[JsonPropertyName("addSecureContainerLootFromBotConfig")]
public bool AddSecureContainerLootFromBotConfig
public required bool AddSecureContainerLootFromBotConfig
{
get;
set;
}
[JsonPropertyName("addPrefixToSameNamePMCAsPlayerChance")]
public int? AddPrefixToSameNamePMCAsPlayerChance
public required int? AddPrefixToSameNamePMCAsPlayerChance
{
get;
set;
}
[JsonPropertyName("lootItemLimitsRub")]
public List<MinMaxLootItemValue>? LootItemLimitsRub
public required List<MinMaxLootItemValue>? LootItemLimitsRub
{
get;
set;
}
[JsonPropertyName("removeExistingPmcWaves")]
public bool? RemoveExistingPmcWaves
public required bool? RemoveExistingPmcWaves
{
get;
set;
}
[JsonPropertyName("customPmcWaves")]
public Dictionary<string, List<BossLocationSpawn>> CustomPmcWaves
public required Dictionary<string, List<BossLocationSpawn>> CustomPmcWaves
{
get;
set;
@@ -347,23 +347,6 @@ public record HostilitySettings
}
}
public record PmcTypes
{
[JsonPropertyName("usec")]
public string Usec
{
get;
set;
}
[JsonPropertyName("bear")]
public string Bear
{
get;
set;
}
}
public record SlotLootSettings
{
/// <summary>
@@ -374,7 +357,7 @@ public record SlotLootSettings
{
get;
set;
}
} = [];
/// <summary>
/// Item tpl blacklist
@@ -384,7 +367,7 @@ public record SlotLootSettings
{
get;
set;
}
} = [];
}
public record MinMaxLootValue : MinMax<int>
@@ -400,21 +383,21 @@ public record MinMaxLootValue : MinMax<int>
public record MinMaxLootItemValue : MinMax<double>
{
[JsonPropertyName("backpack")]
public MinMax<double> Backpack
public required MinMax<double> Backpack
{
get;
set;
}
[JsonPropertyName("pocket")]
public MinMax<double> Pocket
public required MinMax<double> Pocket
{
get;
set;
}
[JsonPropertyName("vest")]
public MinMax<double> Vest
public required MinMax<double> Vest
{
get;
set;
@@ -9,7 +9,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record QuestConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -6,7 +6,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record RagfairConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -6,7 +6,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record RepairConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -44,7 +44,7 @@ public record RepairConfig : BaseConfig
/// INT gain multiplier per repaired item type
/// </summary>
[JsonPropertyName("repairKitIntellectGainMultiplier")]
public IntellectGainValues RepairKitIntellectGainMultiplier
public required IntellectGainValues RepairKitIntellectGainMultiplier
{
get;
set;
@@ -54,21 +54,21 @@ public record RepairConfig : BaseConfig
/// How much INT can be given to player per repair action
/// </summary>
[JsonPropertyName("maxIntellectGainPerRepair")]
public MaxIntellectGainValues MaxIntellectGainPerRepair
public required MaxIntellectGainValues MaxIntellectGainPerRepair
{
get;
set;
}
[JsonPropertyName("weaponTreatment")]
public WeaponTreatmentRepairValues WeaponTreatment
public required WeaponTreatmentRepairValues WeaponTreatment
{
get;
set;
}
[JsonPropertyName("repairKit")]
public RepairKit RepairKit
public required RepairKit RepairKit
{
get;
set;
@@ -159,28 +159,28 @@ public record WeaponTreatmentRepairValues
public record RepairKit
{
[JsonPropertyName("armor")]
public BonusSettings Armor
public required BonusSettings Armor
{
get;
set;
}
[JsonPropertyName("weapon")]
public BonusSettings Weapon
public required BonusSettings Weapon
{
get;
set;
}
[JsonPropertyName("vest")]
public BonusSettings Vest
public required BonusSettings Vest
{
get;
set;
}
[JsonPropertyName("headwear")]
public BonusSettings Headwear
public required BonusSettings Headwear
{
get;
set;
@@ -190,28 +190,28 @@ public record RepairKit
public record BonusSettings
{
[JsonPropertyName("rarityWeight")]
public Dictionary<string, double> RarityWeight
public required Dictionary<string, double> RarityWeight
{
get;
set;
}
[JsonPropertyName("bonusTypeWeight")]
public Dictionary<string, double> BonusTypeWeight
public required Dictionary<string, double> BonusTypeWeight
{
get;
set;
}
[JsonPropertyName("Common")]
public Dictionary<string, BonusValues> Common
public required Dictionary<string, BonusValues> Common
{
get;
set;
}
[JsonPropertyName("Rare")]
public Dictionary<string, BonusValues> Rare
public required Dictionary<string, BonusValues> Rare
{
get;
set;
@@ -221,7 +221,7 @@ public record BonusSettings
public record BonusValues
{
[JsonPropertyName("valuesMinMax")]
public MinMax<double> ValuesMinMax
public required MinMax<double> ValuesMinMax
{
get;
set;
@@ -231,7 +231,7 @@ public record BonusValues
/// What dura is buff active between (min max of current max)
/// </summary>
[JsonPropertyName("activeDurabilityPercentMinMax")]
public MinMax<int> ActiveDurabilityPercentMinMax
public required MinMax<int> ActiveDurabilityPercentMinMax
{
get;
set;
@@ -6,42 +6,42 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record ScavCaseConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
} = "spt-scavcase";
[JsonPropertyName("rewardItemValueRangeRub")]
public Dictionary<string, MinMax<double>> RewardItemValueRangeRub
public required Dictionary<string, MinMax<double>> RewardItemValueRangeRub
{
get;
set;
}
[JsonPropertyName("moneyRewards")]
public MoneyRewards MoneyRewards
public required MoneyRewards MoneyRewards
{
get;
set;
}
[JsonPropertyName("ammoRewards")]
public AmmoRewards AmmoRewards
public required AmmoRewards AmmoRewards
{
get;
set;
}
[JsonPropertyName("rewardItemParentBlacklist")]
public HashSet<string> RewardItemParentBlacklist
public required HashSet<string> RewardItemParentBlacklist
{
get;
set;
}
[JsonPropertyName("rewardItemBlacklist")]
public HashSet<string> RewardItemBlacklist
public required HashSet<string> RewardItemBlacklist
{
get;
set;
@@ -79,28 +79,28 @@ public record MoneyRewards
}
[JsonPropertyName("rubCount")]
public MoneyLevels RubCount
public required MoneyLevels RubCount
{
get;
set;
}
[JsonPropertyName("usdCount")]
public MoneyLevels UsdCount
public required MoneyLevels UsdCount
{
get;
set;
}
[JsonPropertyName("eurCount")]
public MoneyLevels EurCount
public required MoneyLevels EurCount
{
get;
set;
}
[JsonPropertyName("gpCount")]
public MoneyLevels GpCount
public required MoneyLevels GpCount
{
get;
set;
@@ -110,21 +110,21 @@ public record MoneyRewards
public record MoneyLevels
{
[JsonPropertyName("common")]
public MinMax<int> Common
public required MinMax<int> Common
{
get;
set;
}
[JsonPropertyName("rare")]
public MinMax<int> Rare
public required MinMax<int> Rare
{
get;
set;
}
[JsonPropertyName("superrare")]
public MinMax<int> SuperRare
public required MinMax<int> SuperRare
{
get;
set;
@@ -141,14 +141,14 @@ public record AmmoRewards
}
[JsonPropertyName("ammoRewardBlacklist")]
public Dictionary<string, List<string>> AmmoRewardBlacklist
public required Dictionary<string, List<string>> AmmoRewardBlacklist
{
get;
set;
}
[JsonPropertyName("ammoRewardValueRangeRub")]
public Dictionary<string, MinMax<double>> AmmoRewardValueRangeRub
public required Dictionary<string, MinMax<double>> AmmoRewardValueRangeRub
{
get;
set;
@@ -8,7 +8,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record SeasonalEventConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -25,7 +25,7 @@ public record SeasonalEventConfig : BaseConfig
/// event / botType / equipSlot / itemid
/// </summary>
[JsonPropertyName("eventGear")]
public Dictionary<SeasonalEventType, Dictionary<string, Dictionary<string, Dictionary<string, int>>>> EventGear
public required Dictionary<SeasonalEventType, Dictionary<string, Dictionary<string, Dictionary<string, int>>>> EventGear
{
get;
set;
@@ -35,42 +35,42 @@ public record SeasonalEventConfig : BaseConfig
/// event / bot type / equipSlot / itemid
/// </summary>
[JsonPropertyName("eventLoot")]
public Dictionary<SeasonalEventType, Dictionary<string, Dictionary<string, Dictionary<string, int>>>> EventLoot
public required Dictionary<SeasonalEventType, Dictionary<string, Dictionary<string, Dictionary<string, int>>>> EventLoot
{
get;
set;
}
[JsonPropertyName("events")]
public List<SeasonalEvent> Events
public required List<SeasonalEvent> Events
{
get;
set;
}
[JsonPropertyName("eventBotMapping")]
public Dictionary<string, string> EventBotMapping
public required Dictionary<string, string> EventBotMapping
{
get;
set;
}
[JsonPropertyName("eventBossSpawns")]
public Dictionary<string, Dictionary<string, List<BossLocationSpawn>>> EventBossSpawns
public required Dictionary<string, Dictionary<string, List<BossLocationSpawn>>> EventBossSpawns
{
get;
set;
}
[JsonPropertyName("eventWaves")]
public Dictionary<string, Dictionary<string, List<Wave>>> EventWaves
public required Dictionary<string, Dictionary<string, List<Wave>>> EventWaves
{
get;
set;
}
[JsonPropertyName("gifterSettings")]
public List<GifterSetting> GifterSettings
public required List<GifterSetting> GifterSettings
{
get;
set;
@@ -80,7 +80,7 @@ public record SeasonalEventConfig : BaseConfig
/// key = event, second key = map name
/// </summary>
[JsonPropertyName("hostilitySettingsForEvent")]
public Dictionary<string, Dictionary<string, List<AdditionalHostilitySettings>>> HostilitySettingsForEvent
public required Dictionary<string, Dictionary<string, List<AdditionalHostilitySettings>>> HostilitySettingsForEvent
{
get;
set;
@@ -90,7 +90,7 @@ public record SeasonalEventConfig : BaseConfig
/// Ids of containers on locations that only have Christmas loot
/// </summary>
[JsonPropertyName("christmasContainerIds")]
public List<string> ChristmasContainerIds
public required List<string> ChristmasContainerIds
{
get;
set;
@@ -100,7 +100,7 @@ public record SeasonalEventConfig : BaseConfig
/// Season - botType - location (body/feet/hands/head)
/// </summary>
[JsonPropertyName("botAppearanceChanges")]
public Dictionary<SeasonalEventType, Dictionary<string, Dictionary<string, Dictionary<string, int>>>> BotAppearanceChanges
public required Dictionary<SeasonalEventType, Dictionary<string, Dictionary<string, Dictionary<string, int>>>> BotAppearanceChanges
{
get;
set;
@@ -121,7 +121,7 @@ public record SeasonalEvent
{
get;
set;
}
} = string.Empty;
[JsonPropertyName("type")]
public SeasonalEventType Type
@@ -7,7 +7,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record TraderConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string Kind
public override string Kind
{
get;
set;
@@ -18,7 +18,7 @@ public record TraderConfig : BaseConfig
{
get;
set;
}
} = [];
[JsonPropertyName("updateTimeDefault")]
public int UpdateTimeDefault
@@ -52,14 +52,14 @@ public record TraderConfig : BaseConfig
}
[JsonPropertyName("fence")]
public FenceConfig Fence
public required FenceConfig Fence
{
get;
set;
}
[JsonPropertyName("moddedTraders")]
public ModdedTraders ModdedTraders
public required ModdedTraders ModdedTraders
{
get;
set;
@@ -73,20 +73,20 @@ public record UpdateTime
{
get;
set;
}
} = string.Empty;
[JsonPropertyName("traderId")]
public string TraderId
{
get;
set;
}
} = string.Empty;
/// <summary>
/// Seconds between trader resets
/// </summary>
[JsonPropertyName("seconds")]
public MinMax<int> Seconds
public required MinMax<int> Seconds
{
get;
set;
@@ -96,7 +96,7 @@ public record UpdateTime
public record FenceConfig
{
[JsonPropertyName("discountOptions")]
public DiscountOptions DiscountOptions
public required DiscountOptions DiscountOptions
{
get;
set;
@@ -124,14 +124,14 @@ public record FenceConfig
}
[JsonPropertyName("weaponPresetMinMax")]
public MinMax<int> WeaponPresetMinMax
public required MinMax<int> WeaponPresetMinMax
{
get;
set;
}
[JsonPropertyName("equipmentPresetMinMax")]
public MinMax<int> EquipmentPresetMinMax
public required MinMax<int> EquipmentPresetMinMax
{
get;
set;
@@ -152,14 +152,14 @@ public record FenceConfig
}
[JsonPropertyName("armorMaxDurabilityPercentMinMax")]
public ItemDurabilityCurrentMax ArmorMaxDurabilityPercentMinMax
public required ItemDurabilityCurrentMax ArmorMaxDurabilityPercentMinMax
{
get;
set;
}
[JsonPropertyName("weaponDurabilityPercentMinMax")]
public ItemDurabilityCurrentMax WeaponDurabilityPercentMinMax
public required ItemDurabilityCurrentMax WeaponDurabilityPercentMinMax
{
get;
set;
@@ -169,7 +169,7 @@ public record FenceConfig
/// Keyed to plate protection level
/// </summary>
[JsonPropertyName("chancePlateExistsInArmorPercent")]
public Dictionary<string, double> ChancePlateExistsInArmorPercent
public required Dictionary<string, double> ChancePlateExistsInArmorPercent
{
get;
set;
@@ -179,14 +179,14 @@ public record FenceConfig
/// Key: item tpl
/// </summary>
[JsonPropertyName("itemStackSizeOverrideMinMax")]
public Dictionary<string, MinMax<int>?> ItemStackSizeOverrideMinMax
public required Dictionary<string, MinMax<int>?> ItemStackSizeOverrideMinMax
{
get;
set;
}
[JsonPropertyName("itemTypeLimits")]
public Dictionary<string, int> ItemTypeLimits
public required Dictionary<string, int> ItemTypeLimits
{
get;
set;
@@ -196,7 +196,7 @@ public record FenceConfig
/// Prevent duplicate offers of items of specific categories by parentId
/// </summary>
[JsonPropertyName("preventDuplicateOffersOfCategory")]
public List<string> PreventDuplicateOffersOfCategory
public required List<string> PreventDuplicateOffersOfCategory
{
get;
set;
@@ -213,7 +213,7 @@ public record FenceConfig
/// Max rouble price before item is not listed on flea
/// </summary>
[JsonPropertyName("itemCategoryRoublePriceLimit")]
public Dictionary<string, double?> ItemCategoryRoublePriceLimit
public required Dictionary<string, double?> ItemCategoryRoublePriceLimit
{
get;
set;
@@ -223,7 +223,7 @@ public record FenceConfig
/// Each slotid with % to be removed prior to listing on fence
/// </summary>
[JsonPropertyName("presetSlotsToRemoveChancePercent")]
public Dictionary<string, double?> PresetSlotsToRemoveChancePercent
public required Dictionary<string, double?> PresetSlotsToRemoveChancePercent
{
get;
set;
@@ -250,14 +250,14 @@ public record FenceConfig
}
[JsonPropertyName("blacklist")]
public HashSet<string> Blacklist
public required HashSet<string> Blacklist
{
get;
set;
}
[JsonPropertyName("coopExtractGift")]
public CoopExtractReward CoopExtractGift
public required CoopExtractReward CoopExtractGift
{
get;
set;
@@ -294,14 +294,14 @@ public record FenceConfig
public record ItemDurabilityCurrentMax
{
[JsonPropertyName("current")]
public MinMax<double> Current
public required MinMax<double> Current
{
get;
set;
}
[JsonPropertyName("max")]
public MinMax<double> Max
public required MinMax<double> Max
{
get;
set;
@@ -318,14 +318,14 @@ public record CoopExtractReward : LootRequest
}
[JsonPropertyName("useRewardItemBlacklist")]
public bool UseRewardItemBlacklist
public new bool UseRewardItemBlacklist
{
get;
set;
}
[JsonPropertyName("messageLocaleIds")]
public List<string> MessageLocaleIds
public required List<string> MessageLocaleIds
{
get;
set;
@@ -363,14 +363,14 @@ public record DiscountOptions
}
[JsonPropertyName("weaponPresetMinMax")]
public MinMax<int> WeaponPresetMinMax
public required MinMax<int> WeaponPresetMinMax
{
get;
set;
}
[JsonPropertyName("equipmentPresetMinMax")]
public MinMax<int> EquipmentPresetMinMax
public required MinMax<int> EquipmentPresetMinMax
{
get;
set;
@@ -390,5 +390,5 @@ public record ModdedTraders
{
get;
set;
}
} = [];
}
@@ -8,7 +8,7 @@ namespace SPTarkov.Server.Core.Models.Spt.Config;
public record WeatherConfig : BaseConfig
{
[JsonPropertyName("kind")]
public string? Kind
public override string Kind
{
get;
set;
@@ -2,13 +2,13 @@ namespace SPTarkov.Server.Core.Models.Spt.Helper;
public record WeightedRandomResult<T>
{
public T Item
public required T Item
{
get;
set;
}
public int Index
public required int Index
{
get;
set;
@@ -7,28 +7,28 @@ namespace SPTarkov.Server.Core.Models.Spt.Hideout;
public record CircleCraftDetails
{
[JsonPropertyName("time")]
public long Time
public required long Time
{
get;
set;
}
[JsonPropertyName("rewardType")]
public CircleRewardType? RewardType
public required CircleRewardType RewardType
{
get;
set;
}
[JsonPropertyName("rewardAmountRoubles")]
public int? RewardAmountRoubles
public required int RewardAmountRoubles
{
get;
set;
}
[JsonPropertyName("rewardDetails")]
public CraftTimeThreshold? RewardDetails
public required CraftTimeThreshold RewardDetails
{
get;
set;
@@ -5,14 +5,14 @@ namespace SPTarkov.Server.Core.Models.Spt.Inventory;
public record ItemSize
{
[JsonPropertyName("width")]
public int Width
public required int Width
{
get;
set;
}
[JsonPropertyName("height")]
public int Height
public required int Height
{
get;
set;
@@ -8,21 +8,21 @@ public record LocaleBase
[JsonPropertyName("global")]
/// DO NOT USE THIS PROPERTY DIRECTLY, USE LOCALESERVICE INSTEAD
/// THIS IS LAZY LOADED AND YOUR CHANGES WILL NOT BE SAVED
public Dictionary<string, LazyLoad<Dictionary<string, string>>>? Global
public required Dictionary<string, LazyLoad<Dictionary<string, string>>> Global
{
get;
set;
}
[JsonPropertyName("menu")]
public Dictionary<string, Dictionary<string, object>>? Menu
public required Dictionary<string, Dictionary<string, object>> Menu
{
get;
set;
}
[JsonPropertyName("languages")]
public Dictionary<string, string>? Languages
public required Dictionary<string, string> Languages
{
get;
set;
@@ -2,17 +2,20 @@
namespace SPTarkov.Server.Core.Models.Spt.Server;
/// <summary>
/// Model for Assets/database/server.json
/// </summary>
public record ServerBase
{
[JsonPropertyName("ip")]
public string? Ip
public required string Ip
{
get;
set;
}
[JsonPropertyName("port")]
public int? Port
public required int Port
{
get;
set;
@@ -559,24 +559,7 @@ public class BotLootCacheService(
/// <param name="botRole">Bot role to hydrate</param>
protected void InitCacheForBotRole(string botRole)
{
_lootCache.TryAdd(botRole, new BotLootCache
{
BackpackLoot = new Dictionary<string, double>(),
PocketLoot = new Dictionary<string, double>(),
VestLoot = new Dictionary<string, double>(),
SecureLoot = new Dictionary<string, double>(),
CombinedPoolLoot = new Dictionary<string, double>(),
SpecialItems = new Dictionary<string, double>(),
GrenadeItems = new Dictionary<string, double>(),
DrugItems = new Dictionary<string, double>(),
FoodItems = new Dictionary<string, double>(),
DrinkItems = new Dictionary<string, double>(),
CurrencyItems = new Dictionary<string, double>(),
HealingItems = new Dictionary<string, double>(),
StimItems = new Dictionary<string, double>()
}
);
_lootCache.TryAdd(botRole, new BotLootCache());
}
/// <summary>