diff --git a/project/assets/configs/seasonalevents.json b/project/assets/configs/seasonalevents.json index 4eebc5f8..f4197a85 100644 --- a/project/assets/configs/seasonalevents.json +++ b/project/assets/configs/seasonalevents.json @@ -238,6 +238,595 @@ "arenaFighterEvent": "arenaFighterEvent", "crazyAssaultEvent": "crazyAssaultEvent" }, + "eventWaves": { + "halloweenzombies": { + "laboratory": [ + { + "BossChance": 10000, + "BossDifficult": "easy", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedLaborant", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": null, + "Time": 9999, + "TriggerId": "InfectedSpawn10", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "hard", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": null, + "Time": 9999, + "TriggerId": "InfectedSpawn10", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "hard", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": [], + "Supports": null, + "Time": 9999, + "TriggerId": "InfectedSpawn10", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedLaborant", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": null, + "Time": 9999, + "TriggerId": "InfectedSpawn10", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedLaborant", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": [], + "Supports": null, + "Time": 9999, + "TriggerId": "InfectedSpawn10", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedLaborant", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": [], + "Supports": null, + "Time": 9999, + "TriggerId": "InfectedSpawn10", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedLaborant", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": null, + "Time": 9999, + "TriggerId": "InfectedSpawn10", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedLaborant", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": null, + "Time": 9999, + "TriggerId": "InfectedSpawn10", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedLaborant", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": [{ + "BossEscortType": "infectedLaborant", + "BossEscortDifficult": ["easy"], + "BossEscortAmount": "1" + }, { + "BossEscortType": "infectedPmc", + "BossEscortDifficult": ["hard"], + "BossEscortAmount": "1" + } + ], + "Time": 9999, + "TriggerId": "InfectedSpawn20", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "hard", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": [{ + "BossEscortType": "infectedPmc", + "BossEscortDifficult": ["easy"], + "BossEscortAmount": "1" + }, { + "BossEscortType": "infectedLaborant", + "BossEscortDifficult": ["normal"], + "BossEscortAmount": "1" + }, { + "BossEscortType": "infectedPmc", + "BossEscortDifficult": ["hard"], + "BossEscortAmount": "1" + } + ], + "Time": 9999, + "TriggerId": "InfectedSpawn30", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": [{ + "BossEscortType": "infectedLaborant", + "BossEscortDifficult": ["easy"], + "BossEscortAmount": "1" + } + ], + "Time": 9999, + "TriggerId": "InfectedSpawn40", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": [{ + "BossEscortType": "infectedLaborant", + "BossEscortDifficult": ["normal"], + "BossEscortAmount": "1" + } + ], + "Time": 9999, + "TriggerId": "InfectedSpawn50", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": [{ + "BossEscortType": "infectedLaborant", + "BossEscortDifficult": ["normal"], + "BossEscortAmount": "1" + } + ], + "Time": 9999, + "TriggerId": "InfectedSpawn60", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "hard", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": [{ + "BossEscortType": "infectedLaborant", + "BossEscortDifficult": ["normal"], + "BossEscortAmount": "1" + } + ], + "Time": 9999, + "TriggerId": "InfectedSpawn70", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "hard", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": [{ + "BossEscortType": "infectedLaborant", + "BossEscortDifficult": ["normal"], + "BossEscortAmount": "1" + } + ], + "Time": 9999, + "TriggerId": "InfectedSpawn80", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "hard", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": [{ + "BossEscortType": "infectedLaborant", + "BossEscortDifficult": ["normal"], + "BossEscortAmount": "1" + } + ], + "Time": 9999, + "TriggerId": "InfectedSpawn90", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "hard", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": [{ + "BossEscortType": "infectedLaborant", + "BossEscortDifficult": ["normal"], + "BossEscortAmount": "1" + } + ], + "Time": 9999, + "TriggerId": "InfectedSpawn100", + "TriggerName": "botEvent" + }, { + "BossChance": 10000, + "BossDifficult": "easy", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedLaborant", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": null, + "Time": 960, + "TriggerId": "", + "TriggerName": "" + }, { + "BossChance": 10000, + "BossDifficult": "hard", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": null, + "Time": 960, + "TriggerId": "", + "TriggerName": "" + }, { + "BossChance": 10000, + "BossDifficult": "hard", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": [], + "Supports": null, + "Time": 960, + "TriggerId": "", + "TriggerName": "" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedLaborant", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": null, + "Time": 960, + "TriggerId": "", + "TriggerName": "" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedLaborant", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": [], + "Supports": null, + "Time": 960, + "TriggerId": "", + "TriggerName": "" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedLaborant", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": [], + "Supports": null, + "Time": 960, + "TriggerId": "", + "TriggerName": "" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedLaborant", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": null, + "Time": 960, + "TriggerId": "", + "TriggerName": "" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedLaborant", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": null, + "Time": 960, + "TriggerId": "", + "TriggerName": "" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedLaborant", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": [{ + "BossEscortType": "infectedLaborant", + "BossEscortDifficult": ["easy"], + "BossEscortAmount": "1" + }, { + "BossEscortType": "infectedPmc", + "BossEscortDifficult": ["hard"], + "BossEscortAmount": "1" + } + ], + "Time": 960, + "TriggerId": "", + "TriggerName": "" + }, { + "BossChance": 10000, + "BossDifficult": "hard", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": [{ + "BossEscortType": "infectedPmc", + "BossEscortDifficult": ["easy"], + "BossEscortAmount": "1" + }, { + "BossEscortType": "infectedLaborant", + "BossEscortDifficult": ["normal"], + "BossEscortAmount": "1" + }, { + "BossEscortType": "infectedPmc", + "BossEscortDifficult": ["hard"], + "BossEscortAmount": "1" + } + ], + "Time": 960, + "TriggerId": "", + "TriggerName": "" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": [{ + "BossEscortType": "infectedLaborant", + "BossEscortDifficult": ["easy"], + "BossEscortAmount": "1" + } + ], + "Time": 960, + "TriggerId": "", + "TriggerName": "" + }, { + "BossChance": 10000, + "BossDifficult": "normal", + "BossEscortAmount": "0", + "BossEscortDifficult": "normal", + "BossEscortType": "infectedLaborant", + "BossName": "infectedPmc", + "BossPlayer": false, + "BossZone": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement", + "Delay": 0, + "IgnoreMaxBots": false, + "RandomTimeSpawn": false, + "SpawnMode": ["regular", "pve"], + "Supports": [{ + "BossEscortType": "infectedLaborant", + "BossEscortDifficult": ["normal"], + "BossEscortAmount": "1" + } + ], + "Time": 960, + "TriggerId": "", + "TriggerName": "" + } + ] + } + }, "eventBossSpawns": { "halloween": { "bigmap": [ @@ -717,7 +1306,8 @@ "endDay": "4", "endMonth": "11", "settings": { - "enableSummoning": true + "enableSummoning": false, + "enableZombies": true } }, { diff --git a/project/assets/database/locations/factory4_day/base.json b/project/assets/database/locations/factory4_day/base.json index 2117174e..c4a3092e 100644 --- a/project/assets/database/locations/factory4_day/base.json +++ b/project/assets/database/locations/factory4_day/base.json @@ -4887,6 +4887,73 @@ ], "sav_summon_seconds": 60, "tmp_location_field_remove_me": 0, + "Events": { + "Halloween2024": { + "CrowdAttackBlockRadius": 100, + "CrowdAttackSpawnParams": [{ + "Difficulty": "easy", + "Role": "infectedAssault", + "Weight": 30 + }, { + "Difficulty": "normal", + "Role": "infectedAssault", + "Weight": 110 + }, { + "Difficulty": "hard", + "Role": "infectedAssault", + "Weight": 60 + }, { + "Difficulty": "easy", + "Role": "infectedPmc", + "Weight": 15 + }, { + "Difficulty": "normal", + "Role": "infectedPmc", + "Weight": 55 + }, { + "Difficulty": "hard", + "Role": "infectedPmc", + "Weight": 30 + }, { + "Difficulty": "easy", + "Role": "infectedCivil", + "Weight": 0 + }, { + "Difficulty": "normal", + "Role": "infectedCivil", + "Weight": 0 + }, { + "Difficulty": "hard", + "Role": "infectedCivil", + "Weight": 0 + }, { + "Difficulty": "easy", + "Role": "infectedLaborant", + "Weight": 0 + }, { + "Difficulty": "normal", + "Role": "infectedLaborant", + "Weight": 0 + }, { + "Difficulty": "hard", + "Role": "infectedLaborant", + "Weight": 0 + } + ], + "CrowdCooldownPerPlayerSec": 300, + "CrowdsLimit": 2, + "InfectedLookCoeff": 2, + "MaxCrowdAttackSpawnLimit": 14, + "MinInfectionPercentage": 0, + "MinSpawnDistToPlayer": 40, + "TargetPointSearchRadiusLimit": 80, + "ZombieCallDeltaRadius": 20, + "ZombieCallPeriodSec": 1, + "ZombieCallRadiusLimit": 50, + "ZombieMultiplier": 5, + "InfectionPercentage": 0 + } + }, "transits": [ { "activateAfterSec": 60, diff --git a/project/assets/database/locations/laboratory/base.json b/project/assets/database/locations/laboratory/base.json index aba1288d..fe99cd7b 100644 --- a/project/assets/database/locations/laboratory/base.json +++ b/project/assets/database/locations/laboratory/base.json @@ -565,6 +565,85 @@ "EscapeTimeLimit": 35, "EscapeTimeLimitCoop": 30, "EscapeTimeLimitPVE": 35, + "Events": { + "Halloween2024": { + "CrowdAttackBlockRadius": 100, + "CrowdAttackSpawnParams": [ + { + "Difficulty": "easy", + "Role": "infectedAssault", + "Weight": 0 + }, + { + "Difficulty": "normal", + "Role": "infectedAssault", + "Weight": 0 + }, + { + "Difficulty": "hard", + "Role": "infectedAssault", + "Weight": 0 + }, + { + "Difficulty": "easy", + "Role": "infectedPmc", + "Weight": 22 + }, + { + "Difficulty": "normal", + "Role": "infectedPmc", + "Weight": 90 + }, + { + "Difficulty": "hard", + "Role": "infectedPmc", + "Weight": 90 + }, + { + "Difficulty": "easy", + "Role": "infectedCivil", + "Weight": 0 + }, + { + "Difficulty": "normal", + "Role": "infectedCivil", + "Weight": 0 + }, + { + "Difficulty": "hard", + "Role": "infectedCivil", + "Weight": 0 + }, + { + "Difficulty": "easy", + "Role": "infectedLaborant", + "Weight": 23 + }, + { + "Difficulty": "normal", + "Role": "infectedLaborant", + "Weight": 75 + }, + { + "Difficulty": "hard", + "Role": "infectedLaborant", + "Weight": 0 + } + ], + "CrowdCooldownPerPlayerSec": 300, + "CrowdsLimit": 2, + "InfectedLookCoeff": 2, + "InfectionPercentage": 0, + "MaxCrowdAttackSpawnLimit": 14, + "MinInfectionPercentage": 0, + "MinSpawnDistToPlayer": 40, + "TargetPointSearchRadiusLimit": 80, + "ZombieCallDeltaRadius": 20, + "ZombieCallPeriodSec": 1, + "ZombieCallRadiusLimit": 50, + "ZombieMultiplier": 5 + } + }, "ForceOnlineRaidInPVE": false, "GenerateLocalLootCache": true, "GlobalContainerChanceModifier": 1, diff --git a/project/src/models/spt/config/ISeasonalEventConfig.ts b/project/src/models/spt/config/ISeasonalEventConfig.ts index 466e9d10..5a9599e9 100644 --- a/project/src/models/spt/config/ISeasonalEventConfig.ts +++ b/project/src/models/spt/config/ISeasonalEventConfig.ts @@ -1,4 +1,4 @@ -import { IBossLocationSpawn } from "@spt/models/eft/common/ILocationBase"; +import { IBossLocationSpawn, IWave } from "@spt/models/eft/common/ILocationBase"; import { SeasonalEventType } from "@spt/models/enums/SeasonalEventType"; import { IBaseConfig } from "@spt/models/spt/config/IBaseConfig"; @@ -10,6 +10,7 @@ export interface ISeasonalEventConfig extends IBaseConfig { events: ISeasonalEvent[]; eventBotMapping: Record; eventBossSpawns: Record>; + eventWaves: Record>; gifterSettings: IGifterSetting[]; } diff --git a/project/src/services/SeasonalEventService.ts b/project/src/services/SeasonalEventService.ts index cc945a1e..34a06e61 100644 --- a/project/src/services/SeasonalEventService.ts +++ b/project/src/services/SeasonalEventService.ts @@ -2,7 +2,7 @@ import { BotHelper } from "@spt/helpers/BotHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { IConfig } from "@spt/models/eft/common/IGlobals"; import { ILocation } from "@spt/models/eft/common/ILocation"; -import { IBossLocationSpawn } from "@spt/models/eft/common/ILocationBase"; +import { IBossLocationSpawn, IWave } from "@spt/models/eft/common/ILocationBase"; import { IInventory } from "@spt/models/eft/common/tables/IBotType"; import { ConfigTypes } from "@spt/models/enums/ConfigTypes"; import { ItemTpl } from "@spt/models/enums/ItemTpl"; @@ -352,6 +352,10 @@ export class SeasonalEventService { this.enableHalloweenSummonEvent(); this.addEventBossesToMaps(event.type); } + if (event.settings?.enableZombies) { + this.enableHalloweenZombiesEvent(); + this.addEventWavesToMaps("halloweenZombies"); + } this.addPumpkinsToScavBackpacks(); this.adjustTraderIcons(event.type); break; @@ -416,18 +420,45 @@ export class SeasonalEventService { this.databaseService.getGlobals().config.EventSettings.EventActive = true; } + protected enableHalloweenZombiesEvent(): void { + // TODO - expand to be more dynamic + // TODO - add zombies waves to maps + this.databaseService.getLocations().laboratory.base.Events.Halloween2024.InfectionPercentage = 100; + this.databaseService.getLocations().factory4_day.base.Events.Halloween2024.InfectionPercentage = 50; + } + + protected addEventWavesToMaps(eventType: string): void { + const wavesToAddByMap = this.seasonalEventConfig.eventWaves[eventType.toLowerCase()]; + + if (!wavesToAddByMap) { + this.logger.warning(`Unable to add: ${eventType} waves, eventWaves is missing`); + return; + } + const mapKeys = Object.keys(wavesToAddByMap) ?? []; + const locations = this.databaseService.getLocations(); + for (const mapKey of mapKeys) { + const wavesToAdd = mapKeys[mapKey]; + if (!wavesToAdd) { + this.logger.warning(`Unable to add: ${eventType} wave to: ${mapKey}`); + continue; + } + + locations[mapKey].base.BossLocationSpawn.push(...wavesToAdd); + } + } + /** * Add event bosses to maps * @param eventType Seasonal event, e.g. HALLOWEEN/CHRISTMAS */ - protected addEventBossesToMaps(eventType: SeasonalEventType): void { + protected addEventBossesToMaps(eventType: string): void { const botsToAddPerMap = this.seasonalEventConfig.eventBossSpawns[eventType.toLowerCase()]; if (!botsToAddPerMap) { this.logger.warning(`Unable to add: ${eventType} bosses, eventBossSpawns is missing`); return; } const mapKeys = Object.keys(botsToAddPerMap) ?? []; - + const locations = this.databaseService.getLocations(); for (const mapKey of mapKeys) { const bossesToAdd = botsToAddPerMap[mapKey]; if (!bossesToAdd) { @@ -435,8 +466,6 @@ export class SeasonalEventService { continue; } for (const boss of bossesToAdd) { - const locations = this.databaseService.getLocations(); - const mapBosses: IBossLocationSpawn[] = locations[mapKey].base.BossLocationSpawn; if (!mapBosses.some((bossSpawn) => bossSpawn.BossName === boss.BossName)) { locations[mapKey].base.BossLocationSpawn.push(...bossesToAdd);