using System.Text.Json.Serialization; using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Enums; namespace SPTarkov.Server.Core.Models.Spt.Config; public record AirdropConfig : BaseConfig { [JsonPropertyName("kind")] public override string Kind { get; set; } = "spt-airdrop"; [JsonPropertyName("airdropTypeWeightings")] public required Dictionary AirdropTypeWeightings { get; set; } /// /// What rewards will the loot crate contain, keyed by drop type e.g. mixed/weaponArmor/foodMedical/barter /// [JsonPropertyName("loot")] public required Dictionary Loot { get; set; } [JsonPropertyName("customAirdropMapping")] public required Dictionary CustomAirdropMapping { get; set; } } /// /// Loot inside crate /// public record AirdropLoot { [JsonPropertyName("icon")] [JsonConverter(typeof(JsonStringEnumConverter))] public required AirdropTypeEnum Icon { get; set; } /// /// Min/max of weapons inside crate /// [JsonPropertyName("weaponPresetCount")] public required MinMax WeaponPresetCount { get; set; } /// /// Min/max of armors (head/chest/rig) inside crate /// [JsonPropertyName("armorPresetCount")] public required MinMax ArmorPresetCount { get; set; } /// /// Min/max of items inside crate /// [JsonPropertyName("itemCount")] public required MinMax ItemCount { get; set; } /// /// Min/max of sealed weapon boxes inside crate /// [JsonPropertyName("weaponCrateCount")] public required MinMax WeaponCrateCount { get; set; } /// /// Items to never allow - tpls /// [JsonPropertyName("itemBlacklist")] public required List ItemBlacklist { get; set; } /// /// Item type (parentId) to allow inside crate /// [JsonPropertyName("itemTypeWhitelist")] public required HashSet ItemTypeWhitelist { get; set; } /// /// Item type/ item tpls to limit count of inside crate - key: item base type: value: max count /// [JsonPropertyName("itemLimits")] public required Dictionary ItemLimits { get; set; } /// /// Items to limit stack size of key: item tpl value: min/max stack size /// [JsonPropertyName("itemStackLimits")] public required Dictionary> ItemStackLimits { get; set; } /// /// Armor levels to allow inside crate e.g. [4,5,6] /// [JsonPropertyName("armorLevelWhitelist")] public HashSet? ArmorLevelWhitelist { get; set; } /// /// Should boss items be added to airdrop crate /// [JsonPropertyName("allowBossItems")] public bool AllowBossItems { get; set; } [JsonPropertyName("useForcedLoot")] public bool UseForcedLoot { get; set; } [JsonPropertyName("forcedLoot")] public Dictionary>? ForcedLoot { get; set; } [JsonPropertyName("useRewardItemBlacklist")] public bool UseRewardItemBlacklist { get; set; } [JsonPropertyName("blockSeasonalItemsOutOfSeason")] public bool BlockSeasonalItemsOutOfSeason { get; set; } }