using System.Text.Json.Serialization; using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Eft.Common; using SPTarkov.Server.Core.Models.Enums; using SPTarkov.Server.Core.Utils.Json.Converters; namespace SPTarkov.Server.Core.Models.Spt.Config; public record SeasonalEventConfig : BaseConfig { [JsonPropertyName("kind")] public override string Kind { get; set; } = "spt-seasonalevents"; [JsonPropertyName("enableSeasonalEventDetection")] public bool EnableSeasonalEventDetection { get; set; } /// /// event / botType / equipSlot / itemid /// [JsonPropertyName("eventGear")] public required Dictionary>>> EventGear { get; set; } /// /// event / bot type / equipSlot / itemid /// [JsonPropertyName("eventLoot")] public required Dictionary>>> EventLoot { get; set; } [JsonPropertyName("events")] public required List Events { get; set; } [JsonPropertyName("eventBotMapping")] public required Dictionary EventBotMapping { get; set; } [JsonPropertyName("eventBossSpawns")] public required Dictionary>> EventBossSpawns { get; set; } [JsonPropertyName("eventWaves")] public required Dictionary>> EventWaves { get; set; } [JsonPropertyName("gifterSettings")] public required List GifterSettings { get; set; } /// /// key = event, second key = map name /// [JsonPropertyName("hostilitySettingsForEvent")] public required Dictionary>> HostilitySettingsForEvent { get; set; } [JsonPropertyName("khorovodEventTransitWhitelist")] public required Dictionary> KhorovodEventTransitWhitelist { get; set; } /// /// Ids of containers on locations that only have Christmas loot /// [JsonPropertyName("christmasContainerIds")] public required HashSet ChristmasContainerIds { get; set; } /// /// Season - botType - location (body/feet/hands/head) /// [JsonPropertyName("botAppearanceChanges")] public required Dictionary< SeasonalEventType, Dictionary>> > BotAppearanceChanges { get; set; } } public record SeasonalEvent { [JsonPropertyName("enabled")] public bool Enabled { get; set; } [JsonPropertyName("name")] public string Name { get; set; } = string.Empty; [JsonPropertyName("type")] public SeasonalEventType Type { get; set; } [JsonPropertyName("startDay")] [JsonConverter(typeof(StringToNumberFactoryConverter))] public int StartDay { get; set; } [JsonPropertyName("startMonth")] [JsonConverter(typeof(StringToNumberFactoryConverter))] public int StartMonth { get; set; } [JsonPropertyName("endDay")] [JsonConverter(typeof(StringToNumberFactoryConverter))] public int EndDay { get; set; } [JsonPropertyName("endMonth")] [JsonConverter(typeof(StringToNumberFactoryConverter))] public int EndMonth { get; set; } [JsonPropertyName("settings")] public SeasonalEventSettings? Settings { get; set; } [JsonPropertyName("setting")] public SeasonalEventSettings? SettingsDoNOTUse { set { Settings = value; } } } public record SeasonalEventSettings { [JsonPropertyName("enableSummoning")] public bool? EnableSummoning { get; set; } [JsonPropertyName("enableHalloweenHideout")] public bool? EnableHalloweenHideout { get; set; } [JsonPropertyName("enableChristmasHideout")] public bool? EnableChristmasHideout { get; set; } [JsonPropertyName("enableSanta")] public bool? EnableSanta { get; set; } [JsonPropertyName("adjustBotAppearances")] public bool? AdjustBotAppearances { get; set; } [JsonPropertyName("addEventGearToBots")] public bool? AddEventGearToBots { get; set; } [JsonPropertyName("addEventLootToBots")] public bool? AddEventLootToBots { get; set; } [JsonPropertyName("removeEntryRequirement")] public List? RemoveEntryRequirement { get; set; } [JsonPropertyName("replaceBotHostility")] public bool? ReplaceBotHostility { get; set; } [JsonPropertyName("forceSeason")] public Season? ForceSeason { get; set; } [JsonPropertyName("zombieSettings")] public ZombieSettings? ZombieSettings { get; set; } [JsonPropertyName("disableBosses")] public List? DisableBosses { get; set; } [JsonPropertyName("disableWaves")] public List? DisableWaves { get; set; } [JsonPropertyName("enableRundansEvent")] public bool? EnableRundansEvent { get; set; } [JsonPropertyName("enableKhorvodEvent")] public bool? EnableKhorvodEvent { get; set; } [JsonPropertyName("christmasLootBoostAmount")] public double? ChristmasLootBoostAmount { get; set; } } public record ZombieSettings { [JsonPropertyName("enabled")] public bool? Enabled { get; set; } [JsonPropertyName("mapInfectionAmount")] public Dictionary? MapInfectionAmount { get; set; } [JsonPropertyName("disableBosses")] public List? DisableBosses { get; set; } [JsonPropertyName("disableWaves")] public List? DisableWaves { get; set; } } public record GifterSetting { [JsonPropertyName("map")] public string? Map { get; set; } [JsonPropertyName("zones")] public string? Zones { get; set; } [JsonPropertyName("spawnChance")] public int? SpawnChance { get; set; } }