Updated Swagnuts & Some Mod Configs

This commit is contained in:
2025-01-12 22:40:35 -05:00
parent 73e3f57758
commit c02a35612e
350 changed files with 27968 additions and 29 deletions
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Kevin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,11 @@
# IMPORTANT
# PLEASE READ THE MOD PAGE FOR THE MOST UP TO DATE INFORMATION!
# SWAG + Donuts
![Version: 3.5.3](https://img.shields.io/badge/Version-3.5.3-informational?style=flat-square)
**All credit goes to Props, creator of SWAG and DONUTS**
---
All mod info can be found on the mod page: https://hub.sp-tarkov.com/files/file/878-swag-donuts-dynamic-spawn-waves-and-custom-spawn-points/
@@ -0,0 +1,221 @@
{
"TotalBossesPerMap": {
"factory": -1,
"factory_night": -1,
"customs": -1,
"woods": -1,
"shoreline": -1,
"lighthouse": -1,
"reserve": -1,
"interchange": -1,
"laboratory": -1,
"streets": -1
},
"Bosses": {
"useGlobalBossSpawnChance": true,
"gluhar": {
"customs": 0,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 0,
"reserve": 35,
"shoreline": 0,
"streets": 0,
"woods": 0
},
"goons": {
"customs": 35,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 30,
"reserve": 0,
"shoreline": 35,
"streets": 0,
"woods": 35
},
"kaban": {
"customs": 0,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 0,
"reserve": 0,
"shoreline": 0,
"streets": 35,
"woods": 0
},
"killa": {
"customs": 0,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 35,
"laboratory": 0,
"lighthouse": 0,
"reserve": 0,
"shoreline": 0,
"streets": 0,
"woods": 0
},
"kolontay": {
"customs": 0,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 35,
"interchange": 0,
"laboratory": 0,
"lighthouse": 0,
"reserve": 0,
"shoreline": 0,
"streets": 35,
"woods": 0
},
"reshala": {
"customs": 35,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 0,
"reserve": 0,
"shoreline": 0,
"streets": 0,
"woods": 0
},
"sanitar": {
"customs": 0,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 0,
"reserve": 0,
"shoreline": 25,
"streets": 0,
"woods": 0
},
"shturman": {
"customs": 0,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 0,
"reserve": 0,
"shoreline": 0,
"streets": 0,
"woods": 15
},
"tagilla": {
"customs": 0,
"factory": 35,
"factory_night": 35,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 0,
"reserve": 0,
"shoreline": 0,
"streets": 0,
"woods": 0
},
"zryachiy": {
"customs": 0,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 100,
"reserve": 0,
"shoreline": 0,
"streets": 0,
"woods": 0
},
"partisan": {
"customs": 15,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 15,
"reserve": 0,
"shoreline": 15,
"streets": 0,
"woods": 15
}
},
"CustomBosses": {
"santa": {
"enabled": true,
"forceSpawnOutsideEvent": false,
"customs": 0,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 0,
"reserve": 0,
"shoreline": 0,
"streets": 0,
"woods": 0
},
"punisher": {
"enabled": false,
"useProgressSpawnChance": true,
"customs": 0,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 0,
"reserve": 0,
"shoreline": 0,
"streets": 0,
"woods": 0
},
"legion": {
"enabled": false,
"useProgressSpawnChance": true,
"customs": 0,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 0,
"reserve": 0,
"shoreline": 0,
"streets": 0,
"woods": 0
}
}
}
@@ -0,0 +1,294 @@
{
"customs": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"factory": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"factory_night": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"groundzero": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"interchange": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"laboratory": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"reserve": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity",
"BossName": "bossgluhar",
"BossZone": [
"ZoneRailStrorage",
"ZonePTOR2",
"ZoneBarrack"
],
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"shoreline": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"streets": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"woods": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
]
}
@@ -0,0 +1,254 @@
{
"customs": [
{
"BossChance": 15,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"BossName": "bossknight",
"BossZone": ["ZoneScavBase"],
"RandomTimeSpawn": true,
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"Time": -1
}
],
"factory": [
{
"BossChance": 15,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"BossName": "bossknight",
"BossZone": null,
"RandomTimeSpawn": true,
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"Time": -1
}
],
"factory_night": [
{
"BossChance": 15,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"BossName": "bossknight",
"BossZone": null,
"RandomTimeSpawn": true,
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 15,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"BossName": "bossknight",
"BossZone": null,
"RandomTimeSpawn": true,
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"Time": -1
}
],
"groundzero": [
{
"BossChance": 15,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"BossName": "bossknight",
"BossZone": null,
"RandomTimeSpawn": true,
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"Time": -1
}
],
"interchange": [
{
"BossChance": 15,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"BossName": "bossknight",
"BossZone": null,
"RandomTimeSpawn": true,
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"Time": -1
}
],
"laboratory": [
{
"BossChance": 15,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"BossName": "bossknight",
"BossZone": null,
"RandomTimeSpawn": true,
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 15,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"BossName": "bossknight",
"BossZone": ["Zone_Chalet", "Zone_TreatmentContainers"],
"RandomTimeSpawn": true,
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"Time": -1
}
],
"reserve": [
{
"BossChance": 15,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"BossName": "bossknight",
"BossZone": null,
"RandomTimeSpawn": true,
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"Time": -1
}
],
"shoreline": [
{
"BossChance": 5,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"BossName": "bossknight",
"BossZone": ["ZoneMeteoStation"],
"RandomTimeSpawn": true,
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"Time": -1
}
],
"streets": [
{
"BossChance": 15,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"BossName": "bossknight",
"BossZone": null,
"RandomTimeSpawn": true,
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"Time": -1
}
],
"woods": [
{
"BossChance": 20,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"BossName": "bossknight",
"BossZone": ["ZoneScavBase2"],
"RandomTimeSpawn": true,
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"Time": -1
}
]
}
@@ -0,0 +1,304 @@
{
"customs": [
{
"BossChance": 11,
"BossEscortAmount": "6",
"BossEscortType": "followerboar",
"BossName": "bossboar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "4",
"BossEscortType": "followerboar"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose1"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose2"
}
],
"Time": -1
}
],
"factory": [
{
"BossChance": 11,
"BossEscortAmount": "6",
"BossEscortType": "followerboar",
"BossName": "bossboar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "4",
"BossEscortType": "followerboar"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose1"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose2"
}
],
"Time": -1
}
],
"factory_night": [
{
"BossChance": 11,
"BossEscortAmount": "6",
"BossEscortType": "followerboar",
"BossName": "bossboar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "4",
"BossEscortType": "followerboar"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose1"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose2"
}
],
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 11,
"BossEscortAmount": "6",
"BossEscortType": "followerboar",
"BossName": "bossboar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "4",
"BossEscortType": "followerboar"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose1"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose2"
}
],
"Time": -1
}
],
"groundzero": [
{
"BossChance": 11,
"BossEscortAmount": "6",
"BossEscortType": "followerboar",
"BossName": "bossboar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "4",
"BossEscortType": "followerboar"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose1"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose2"
}
],
"Time": -1
}
],
"interchange": [
{
"BossChance": 11,
"BossEscortAmount": "6",
"BossEscortType": "followerboar",
"BossName": "bossboar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "4",
"BossEscortType": "followerboar"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose1"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose2"
}
],
"Time": -1
}
],
"laboratory": [
{
"BossChance": 11,
"BossEscortAmount": "6",
"BossEscortType": "followerboar",
"BossName": "bossboar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "4",
"BossEscortType": "followerboar"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose1"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose2"
}
],
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 11,
"BossEscortAmount": "6",
"BossEscortType": "followerboar",
"BossName": "bossboar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "4",
"BossEscortType": "followerboar"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose1"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose2"
}
],
"Time": -1
}
],
"reserve": [
{
"BossChance": 11,
"BossEscortAmount": "6",
"BossEscortType": "followerboar",
"BossName": "bossboar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "4",
"BossEscortType": "followerboar"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose1"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose2"
}
],
"Time": -1
}
],
"shoreline": [
{
"BossChance": 11,
"BossEscortAmount": "6",
"BossEscortType": "followerboar",
"BossName": "bossboar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "4",
"BossEscortType": "followerboar"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose1"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose2"
}
],
"Time": -1
}
],
"streets": [
{
"BossChance": 11,
"BossEscortAmount": "6",
"BossEscortType": "followerboar",
"BossName": "bossboar",
"BossZone": [
"ZoneCarShowroom"
],
"Supports": [
{
"BossEscortAmount": "4",
"BossEscortType": "followerboar"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose1"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose2"
}
],
"Time": -1
},
{
"BossChance": 100,
"BossEscortAmount": "1,2",
"BossEscortType": "bossboarsniper",
"BossName": "bossboarsniper",
"BossZone": [
"ZoneSnipeCarShowroom"
],
"Time": 99999,
"TriggerId": "bossboarBorn",
"TriggerName": "botEvent"
}
],
"woods": [
{
"BossChance": 11,
"BossEscortAmount": "6",
"BossEscortType": "followerboar",
"BossName": "bossboar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "4",
"BossEscortType": "followerboar"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose1"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerboarclose2"
}
],
"Time": -1
}
]
}
@@ -0,0 +1,140 @@
{
"customs": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": [
"ZoneCenterBot",
"ZoneCenter",
"ZoneOLI",
"ZoneIDEA",
"ZoneGoshan"
],
"Supports": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
]
}
@@ -0,0 +1,293 @@
{
"customs": [
{
"BossName": "bosskolontay",
"BossChance": 35,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity",
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontayassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity"
},
{
"BossEscortAmount": "0",
"BossEscortType": "followergluharscout"
}
],
"BossZone": null
}
],
"factory": [
{
"BossName": "bosskolontay",
"BossChance": 35,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity",
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontayassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity"
},
{
"BossEscortAmount": "0",
"BossEscortType": "followergluharscout"
}
],
"BossZone": null
}
],
"factory_night": [
{
"BossName": "bosskolontay",
"BossChance": 35,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity",
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontayassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity"
},
{
"BossEscortAmount": "0",
"BossEscortType": "followergluharscout"
}
],
"BossZone": null
}
],
"groundzero": [
{
"BossName": "bosskolontay",
"BossChance": 35,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity",
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontayassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity"
},
{
"BossEscortAmount": "0",
"BossEscortType": "followergluharscout"
}
],
"BossZone": null
}
],
"groundzero_high": [
{
"BossName": "bosskolontay",
"BossChance": 35,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity",
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontayassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity"
},
{
"BossEscortAmount": "0",
"BossEscortType": "followergluharscout"
}
],
"BossZone": null
}
],
"interchange": [
{
"BossName": "bosskolontay",
"BossChance": 35,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity",
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontayassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity"
},
{
"BossEscortAmount": "0",
"BossEscortType": "followergluharscout"
}
],
"BossZone": null
}
],
"laboratory": [
{
"BossName": "bosskolontay",
"BossChance": 35,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity",
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontayassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity"
},
{
"BossEscortAmount": "0",
"BossEscortType": "followergluharscout"
}
],
"BossZone": null
}
],
"lighthouse": [
{
"BossName": "bosskolontay",
"BossChance": 35,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity",
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontayassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity"
},
{
"BossEscortAmount": "0",
"BossEscortType": "followergluharscout"
}
],
"BossZone": null
}
],
"reserve": [
{
"BossName": "bosskolontay",
"BossChance": 35,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity",
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontayassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity"
},
{
"BossEscortAmount": "0",
"BossEscortType": "followergluharscout"
}
],
"BossZone": null
}
],
"shoreline": [
{
"BossName": "bosskolontay",
"BossChance": 35,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity",
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontayassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity"
},
{
"BossEscortAmount": "0",
"BossEscortType": "followergluharscout"
}
],
"BossZone": null
}
],
"streets": [
{
"BossName": "bosskolontay",
"BossChance": 35,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity",
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontayassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity"
},
{
"BossEscortAmount": "0",
"BossEscortType": "followergluharscout"
}
],
"BossZone": [
"ZoneClimova",
"ZoneMvd"
]
}
],
"woods": [
{
"BossName": "bosskolontay",
"BossChance": 35,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity",
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontayassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followerkolontaysecurity"
},
{
"BossEscortAmount": "0",
"BossEscortType": "followergluharscout"
}
],
"BossZone": null
}
]
}
@@ -0,0 +1,136 @@
{
"customs": [
{
"BossChance": 15,
"BossEscortAmount": "0",
"BossEscortType": "followerzryachiy",
"BossName": "bosspartisan",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 0,
"BossEscortAmount": "0",
"BossEscortType": "followerzryachiy",
"BossName": "bosspartisan",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 0,
"BossEscortAmount": "0",
"BossEscortType": "followerzryachiy",
"BossName": "bosspartisan",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 0,
"BossEscortAmount": "0",
"BossEscortType": "followerzryachiy",
"BossName": "bosspartisan",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 0,
"BossEscortAmount": "0",
"BossEscortType": "followerzryachiy",
"BossName": "bosspartisan",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 0,
"BossEscortAmount": "0",
"BossEscortType": "followerzryachiy",
"BossName": "bosspartisan",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 0,
"BossEscortAmount": "0",
"BossEscortType": "followerzryachiy",
"BossName": "bosspartisan",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 15,
"BossEscortAmount": "0",
"BossEscortType": "followerzryachiy",
"BossName": "bosspartisan",
"BossZone": [
"Zone_Island"
],
"Supports": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 0,
"BossEscortAmount": "0",
"BossEscortType": "followerzryachiy",
"BossName": "bosspartisan",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 15,
"BossEscortAmount": "0",
"BossEscortType": "followerzryachiy",
"BossName": "bosspartisan",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 0,
"BossEscortAmount": "0",
"BossEscortType": "followerzryachiy",
"BossName": "bosspartisan",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 15,
"BossEscortAmount": "0",
"BossEscortType": "followerzryachiy",
"BossName": "bosspartisan",
"BossZone": null,
"Supports": null,
"Time": -1
}
]
}
@@ -0,0 +1,137 @@
{
"customs": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": [
"ZoneDormitory",
"ZoneGasStation"
],
"Supports": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Supports": null,
"Time": -1
}
]
}
@@ -0,0 +1,138 @@
{
"customs": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": [
"ZoneSanatorium1",
"ZoneSanatorium2",
"ZonePort"
],
"Supports": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Supports": null,
"Time": -1
}
]
}
@@ -0,0 +1,136 @@
{
"customs": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": [
"ZoneWoodCutter"
],
"Supports": null,
"Time": -1
}
]
}
@@ -0,0 +1,138 @@
{
"customs": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": [
"BotZone"
],
"Supports": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": [
"BotZone"
],
"Supports": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Supports": null,
"Time": -1
}
]
}
@@ -0,0 +1,136 @@
{
"customs": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 100,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": [
"Zone_Island"
],
"Supports": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Supports": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Supports": null,
"Time": -1
}
]
}
@@ -0,0 +1,117 @@
{
"BossDifficulty": "normal",
"BossEscortDifficulty": "normal",
"disableAllSpawns": {
"bosses": false,
"rogues": false,
"raiders": false,
"cultists": false,
"scav_snipers": false,
"bloodhounds": false
},
"Spawns": {
"useGlobalSpawnChance": true,
"bloodhounds": {
"customs": 5,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 0,
"reserve": 0,
"shoreline": 5,
"streets": 0,
"woods": 5
},
"cultists": {
"customs": 10,
"factory": 0,
"factory_night": 2,
"groundzero": 0,
"groundzero_high": 44,
"interchange": 0,
"laboratory": 0,
"lighthouse": 0,
"reserve": 0,
"shoreline": 10,
"streets": 0,
"woods": 12
},
"raiders": {
"customs": 0,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 65,
"lighthouse": 0,
"reserve": 65,
"shoreline": 0,
"streets": 0,
"woods": 0
},
"rogues": {
"customs": 0,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 75,
"reserve": 0,
"shoreline": 0,
"streets": 0,
"woods": 0
},
"scav_snipers": {
"customs": 65,
"factory": 0,
"factory_night": 0,
"groundzero": 0,
"groundzero_high": 0,
"interchange": 0,
"laboratory": 0,
"lighthouse": 65,
"reserve": 0,
"shoreline": 65,
"streets": 65,
"woods": 65
}
},
"MaxBotCap": {
"factory": 16,
"customs": 24,
"woods": 26,
"shoreline": 24,
"lighthouse": 26,
"reserve": 24,
"interchange": 24,
"laboratory": 18,
"streets": 26,
"groundzero": 22,
"groundzero_high": 24
},
"NightMaxBotCap": {
"factory_night": 16,
"customs": 24,
"woods": 26,
"shoreline": 24,
"lighthouse": 26,
"reserve": 24,
"interchange": 24,
"laboratory": 18,
"streets": 26,
"groundzero": 22,
"groundzero_high": 24
},
"UseDefaultSpawns": {
"Waves": false,
"Bosses": false,
"TriggeredWaves": false
},
"DebugOutput": false
}
@@ -0,0 +1,122 @@
{
"customs": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossName": "bosslegion",
"BossZone": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossName": "bosslegion",
"BossZone": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossName": "bosslegion",
"BossZone": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossName": "bosslegion",
"BossZone": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossName": "bosslegion",
"BossZone": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossName": "bosslegion",
"BossZone": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossName": "bosslegion",
"BossZone": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossName": "bosslegion",
"BossZone": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossName": "bosslegion",
"BossZone": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossName": "bosslegion",
"BossZone": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossName": "bosslegion",
"BossZone": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossName": "bosslegion",
"BossZone": null,
"Time": -1
}
]
}
@@ -0,0 +1,146 @@
{
"customs": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossDifficult": "impossible",
"BossEscortDifficult": "impossible",
"BossName": "bosspunisher",
"BossZone": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossDifficult": "impossible",
"BossEscortDifficult": "impossible",
"BossName": "bosspunisher",
"BossZone": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossDifficult": "impossible",
"BossEscortDifficult": "impossible",
"BossName": "bosspunisher",
"BossZone": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossDifficult": "impossible",
"BossEscortDifficult": "impossible",
"BossName": "bosspunisher",
"BossZone": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossDifficult": "impossible",
"BossEscortDifficult": "impossible",
"BossName": "bosspunisher",
"BossZone": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossDifficult": "impossible",
"BossEscortDifficult": "impossible",
"BossName": "bosspunisher",
"BossZone": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossDifficult": "impossible",
"BossEscortDifficult": "impossible",
"BossName": "bosspunisher",
"BossZone": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossDifficult": "impossible",
"BossEscortDifficult": "impossible",
"BossName": "bosspunisher",
"BossZone": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossDifficult": "impossible",
"BossEscortDifficult": "impossible",
"BossName": "bosspunisher",
"BossZone": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossDifficult": "impossible",
"BossEscortDifficult": "impossible",
"BossName": "bosspunisher",
"BossZone": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossDifficult": "impossible",
"BossEscortDifficult": "impossible",
"BossName": "bosspunisher",
"BossZone": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 15,
"BossEscortAmount": "4",
"BossEscortType": "exUsec",
"BossDifficult": "impossible",
"BossEscortDifficult": "impossible",
"BossName": "bosspunisher",
"BossZone": null,
"Time": -1
}
]
}
@@ -0,0 +1,122 @@
{
"customs": [
{
"BossChance": 35,
"BossName": "gifter",
"BossEscortType": "gifter",
"BossEscortAmount": "0",
"BossZone": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 35,
"BossName": "gifter",
"BossEscortType": "gifter",
"BossEscortAmount": "0",
"BossZone": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 35,
"BossName": "gifter",
"BossEscortType": "gifter",
"BossEscortAmount": "0",
"BossZone": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 35,
"BossName": "gifter",
"BossEscortType": "gifter",
"BossEscortAmount": "0",
"BossZone": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 35,
"BossName": "gifter",
"BossEscortType": "gifter",
"BossEscortAmount": "0",
"BossZone": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 35,
"BossName": "gifter",
"BossEscortType": "gifter",
"BossEscortAmount": "0",
"BossZone": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 35,
"BossName": "gifter",
"BossEscortType": "gifter",
"BossEscortAmount": "0",
"BossZone": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 35,
"BossName": "gifter",
"BossEscortType": "gifter",
"BossEscortAmount": "0",
"BossZone": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 35,
"BossName": "gifter",
"BossEscortType": "gifter",
"BossEscortAmount": "0",
"BossZone": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 35,
"BossName": "gifter",
"BossEscortType": "gifter",
"BossEscortAmount": "0",
"BossZone": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 35,
"BossName": "gifter",
"BossEscortType": "gifter",
"BossEscortAmount": "0",
"BossZone": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 35,
"BossName": "gifter",
"BossEscortType": "gifter",
"BossEscortAmount": "0",
"BossZone": null,
"Time": -1
}
]
}
@@ -0,0 +1,134 @@
{
"customs": [
{
"BossName": "arenafighterevent",
"BossChance": 5,
"Time": -1,
"BossEscortAmount": "3,4",
"BossEscortType": "arenafighterevent",
"BossZone": [
"ZoneBrige",
"ZoneBlockPost"
]
}
],
"factory": [
{
"BossName": "arenafighterevent",
"BossChance": 5,
"Time": -1,
"BossEscortAmount": "3,4",
"BossEscortType": "arenafighterevent",
"BossZone": null
}
],
"factory_night": [
{
"BossName": "arenafighterevent",
"BossChance": 5,
"Time": -1,
"BossEscortAmount": "3,4",
"BossEscortType": "arenafighterevent",
"BossZone": null
}
],
"groundzero": [
{
"BossName": "arenafighterevent",
"BossChance": 5,
"Time": -1,
"BossEscortAmount": "3,4",
"BossEscortType": "arenafighterevent",
"BossZone": null
}
],
"groundzero_high": [
{
"BossName": "arenafighterevent",
"BossChance": 5,
"Time": -1,
"BossEscortAmount": "3,4",
"BossEscortType": "arenafighterevent",
"BossZone": null
}
],
"interchange": [
{
"BossName": "arenafighterevent",
"BossChance": 5,
"Time": -1,
"BossEscortAmount": "3,4",
"BossEscortType": "arenafighterevent",
"BossZone": null
}
],
"laboratory": [
{
"BossName": "arenafighterevent",
"BossChance": 5,
"Time": -1,
"BossEscortAmount": "3,4",
"BossEscortType": "arenafighterevent",
"BossZone": null
}
],
"lighthouse": [
{
"BossName": "arenafighterevent",
"BossChance": 5,
"Time": -1,
"BossEscortAmount": "3,4",
"BossEscortType": "arenafighterevent",
"BossZone": null
}
],
"reserve": [
{
"BossName": "arenafighterevent",
"BossChance": 5,
"Time": -1,
"BossEscortAmount": "3,4",
"BossEscortType": "arenafighterevent",
"BossZone": null
}
],
"shoreline": [
{
"BossName": "arenafighterevent",
"BossChance": 5,
"BossEscortType": "arenafighterevent",
"BossEscortAmount": "3,4",
"Time": -1,
"BossZone": [
"ZoneStartVillage",
"ZoneGasStation",
"ZonePowerStation"
]
}
],
"streets": [
{
"BossName": "arenafighterevent",
"BossChance": 5,
"Time": -1,
"BossEscortAmount": "3,4",
"BossEscortType": "arenafighterevent",
"BossZone": null
}
],
"woods": [
{
"BossName": "arenafighterevent",
"BossChance": 5,
"BossEscortType": "arenafighterevent",
"BossEscortAmount": "3,4",
"Time": -1,
"BossZone": [
"ZoneClearVill",
"ZoneRoad",
"ZoneHouse",
"ZoneBigRocks"
]
}
]
}
@@ -0,0 +1,174 @@
{
"customs": [
{
"BossName": "sectantpriest",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "4",
"BossEscortType": "sectantwarrior",
"BossZone": [
"ZoneCustoms",
"ZoneWade",
"ZoneCrossRoad",
"ZoneOldAZS"
]
}
],
"factory": [
{
"BossName": "sectantpriest",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "4",
"BossEscortType": "sectantwarrior",
"BossZone": null
}
],
"factory_night": [
{
"BossName": "sectantpriest",
"BossChance": 55,
"BossEscortType": "sectantwarrior",
"BossEscortAmount": "2",
"Time": -1,
"BossZone": [
"BotZone"
]
},
{
"BossName": "sectantpriest",
"BossChance": 55,
"BossEscortType": "sectantwarrior",
"BossEscortAmount": "2",
"Time": 300,
"BossZone": [
"BotZone"
]
},
{
"BossName": "sectantpriest",
"BossChance": 55,
"BossEscortType": "sectantwarrior",
"BossEscortAmount": "2",
"Time": 600,
"BossZone": [
"BotZone"
]
},
{
"BossName": "sectantpriest",
"BossChance": 55,
"BossEscortType": "sectantwarrior",
"BossEscortAmount": "2",
"Time": 900,
"BossZone": [
"BotZone"
]
}
],
"groundzero": [
{
"BossName": "sectantpriest",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "4",
"BossEscortType": "sectantwarrior",
"BossZone": null
}
],
"groundzero_high": [
{
"BossName": "sectantpriest",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "4",
"BossEscortType": "sectantwarrior",
"BossZone": null
}
],
"interchange": [
{
"BossName": "sectantpriest",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "4",
"BossEscortType": "sectantwarrior",
"BossZone": null
}
],
"laboratory": [
{
"BossName": "sectantpriest",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "4",
"BossEscortType": "sectantwarrior",
"BossZone": null
}
],
"lighthouse": [
{
"BossName": "sectantpriest",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "4",
"BossEscortType": "sectantwarrior",
"BossZone": null
}
],
"reserve": [
{
"BossName": "sectantpriest",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "4",
"BossEscortType": "sectantwarrior",
"BossZone": null
}
],
"shoreline": [
{
"BossName": "sectantpriest",
"BossChance": 15,
"BossEscortType": "sectantwarrior",
"BossEscortAmount": "3",
"Time": -1,
"BossZone": [
"ZoneForestGasStation"
]
},
{
"BossName": "sectantpriest",
"BossChance": 15,
"BossEscortType": "sectantwarrior",
"BossEscortAmount": "3",
"Time": -1,
"BossZone": [
"ZoneForestSpawn"
]
}
],
"streets": [
{
"BossName": "sectantpriest",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "4",
"BossEscortType": "sectantwarrior",
"BossZone": null
}
],
"woods": [
{
"BossName": "sectantpriest",
"BossChance": 15,
"BossEscortType": "sectantwarrior",
"BossEscortAmount": "4",
"Time": -1,
"BossZone": [
"ZoneMiniHouse",
"ZoneBrokenVill"
]
}
]
}
@@ -0,0 +1,340 @@
{
"customs": [
{
"BossChance": 35,
"BossEscortAmount": "2,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 35,
"BossEscortAmount": "2,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 35,
"BossEscortAmount": "2,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 35,
"BossEscortAmount": "2,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 35,
"BossEscortAmount": "2,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 35,
"BossEscortAmount": "2,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 55,
"BossEscortAmount": "1,1,1,1,2,2,2,1,1,1,1,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneFloor1"
],
"Time": 900
},
{
"BossChance": 55,
"BossEscortAmount": "1,1,1,1,2,2,2,1,1,1,1,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneFloor2"
],
"Time": 300
},
{
"BossChance": 45,
"BossEscortAmount": "1,1,1,1,2,2,2,1,1,1,1,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneBasement"
],
"Time": 450,
"TriggerId": "autoId_00008_EXFIL",
"TriggerName": "interactObject"
},
{
"BossChance": 45,
"BossEscortAmount": "1,1,1,1,2,2,2,1,1,1,1,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneBasement"
],
"Time": 800,
"TriggerId": "autoId_00010_EXFIL",
"TriggerName": "interactObject"
},
{
"BossChance": 40,
"BossEscortAmount": "1,1,1,1,2,2,2,1,1,1,1,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneBasement"
],
"Time": -1,
"TriggerId": "autoId_00007_EXFIL",
"TriggerName": "interactObject"
},
{
"BossChance": 45,
"BossEscortAmount": "1,1,1,1,2,2,2,1,1,1,1,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneFloor2"
],
"Time": -1,
"TriggerId": "autoId_00007_EXFIL",
"TriggerName": "interactObject"
},
{
"BossChance": 35,
"BossEscortAmount": "1,1,1,1,2,2,2,1,1,1,1,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneFloor1"
],
"Time": 600,
"TriggerId": "autoId_00632_EXFIL",
"TriggerName": "interactObject"
},
{
"BossChance": 35,
"BossEscortAmount": "1,1,1,1,2,2,2,1,1,1,1,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneFloor2"
],
"Time": 600,
"TriggerId": "autoId_00632_EXFIL",
"TriggerName": "interactObject"
},
{
"BossChance": 35,
"BossEscortAmount": "1,1,1,1,2,2,2,1,1,1,1,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneFloor1"
],
"Time": -1,
"TriggerId": "autoId_00012_EXFIL",
"TriggerName": "interactObject"
},
{
"BossChance": 35,
"BossEscortAmount": "1,1,1,1,2,2,2,1,1,1,1,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneFloor2"
],
"Time": -1,
"TriggerId": "autoId_00012_EXFIL",
"TriggerName": "interactObject"
},
{
"BossChance": 35,
"BossEscortAmount": "1,1,1,1,2,2,2,1,1,1,1,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneFloor1"
],
"Time": 1200,
"TriggerId": "autoId_00014_EXFIL",
"TriggerName": "interactObject"
},
{
"BossChance": 35,
"BossEscortAmount": "1,1,2,2,1,1,2,2,2,2,1,1,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneFloor2"
],
"Time": 1200,
"TriggerId": "autoId_00014_EXFIL",
"TriggerName": "interactObject"
},
{
"BossChance": 35,
"BossEscortAmount": "1,1,2,2,1,1,2,2,2,2,1,1,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneFloor1"
],
"Time": -1,
"TriggerId": "autoId_00009_EXFIL",
"TriggerName": "interactObject"
},
{
"BossChance": 35,
"BossEscortAmount": "1,1,1,1,2,2,2,1,1,1,1,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneFloor2"
],
"Time": -1,
"TriggerId": "autoId_00009_EXFIL",
"TriggerName": "interactObject"
},
{
"BossChance": 40,
"BossEscortAmount": "1,1,1,1,2,2,2,1,1,1,1,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneGate2"
],
"Time": -1,
"TriggerId": "autoId_00014_EXFIL",
"TriggerName": "interactObject"
},
{
"BossChance": 45,
"BossEscortAmount": "1,1,1,1,2,2,2,1,1,1,1,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"BotZoneGate1"
],
"Time": -1,
"TriggerId": "autoId_00632_EXFIL",
"TriggerName": "interactObject"
}
],
"lighthouse": [
{
"BossChance": 35,
"BossEscortAmount": "2,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 35,
"BossEscortAmount": "2,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"ZoneRailStrorage"
],
"Time": 1470
},
{
"BossChance": 40,
"BossEscortAmount": "2,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"ZoneRailStrorage"
],
"Time": -1,
"TriggerId": "autoId_00632_EXFIL",
"TriggerName": "interactObject"
},
{
"BossChance": 40,
"BossEscortAmount": "2,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"ZoneSubCommand"
],
"Time": -1,
"TriggerId": "autoId_00000_D2_LEVER",
"TriggerName": "interactObject"
},
{
"BossChance": 40,
"BossEscortAmount": "2,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": [
"ZoneSubCommand"
],
"Time": 3,
"TriggerId": "raider_simple_patroling",
"TriggerName": "interactObject"
}
],
"shoreline": [
{
"BossChance": 35,
"BossEscortAmount": "2,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 35,
"BossEscortAmount": "2,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 35,
"BossEscortAmount": "2,2,2,2,3",
"BossEscortType": "pmcbot",
"BossName": "pmcbot",
"BossZone": null,
"Time": -1
}
]
}
@@ -0,0 +1,184 @@
{
"customs": [
{
"BossChance": 100,
"BossEscortAmount": "1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 100,
"BossEscortAmount": "1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 100,
"BossEscortAmount": "1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 100,
"BossEscortAmount": "1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 100,
"BossEscortAmount": "1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 100,
"BossEscortAmount": "1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 100,
"BossEscortAmount": "1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 100,
"BossEscortAmount": "1",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": [
"Zone_Blockpost"
],
"Time": -1
},
{
"BossChance": 100,
"BossEscortAmount": "1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": [
"Zone_RoofContainers"
],
"Time": -1
},
{
"BossChance": 40,
"BossEscortAmount": "1,1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": [
"Zone_TreatmentRocks"
],
"Time": -1
},
{
"BossChance": 40,
"BossEscortAmount": "1,1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": [
"Zone_TreatmentBeach"
],
"Time": -1
},
{
"BossChance": 80,
"BossEscortAmount": "0",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": [
"Zone_RoofRocks"
],
"Time": -1
},
{
"BossChance": 80,
"BossEscortAmount": "1",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": [
"Zone_RoofBeach"
],
"Time": -1
},
{
"BossChance": 10,
"BossEscortAmount": "1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": [
"Zone_Hellicopter"
],
"Time": -1
}
],
"reserve": [
{
"BossChance": 100,
"BossEscortAmount": "1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 100,
"BossEscortAmount": "1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 100,
"BossEscortAmount": "1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 100,
"BossEscortAmount": "1,2",
"BossEscortType": "exusec",
"BossName": "exusec",
"BossZone": null,
"Time": -1
}
]
}
@@ -0,0 +1,206 @@
{
"customs": [
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": [
"ZoneSnipeTower"
]
},
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": [
"ZoneSnipeFactory"
]
},
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": [
"ZoneBlockPostSniper"
]
},
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": [
"ZoneSnipeBrige"
]
}
],
"factory": [
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": null
}
],
"factory_night": [
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": null
}
],
"groundzero": [
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": [
"ZoneSandSnipeCenter"
]
}
],
"groundzero_high": [
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": [
"ZoneSandSnipeCenter"
]
}
],
"interchange": [
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": null
}
],
"laboratory": [
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": null
}
],
"lighthouse": [
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": [
"Zone_SniperPeak"
]
}
],
"reserve": [
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": null
}
],
"shoreline": [
{
"BossName": "marksman",
"BossChance": 65,
"BossEscortType": "marksman",
"BossEscortAmount": "0",
"Time": -1,
"BossZone": [
"ZonePowerStationSniper"
]
},
{
"BossName": "marksman",
"BossChance": 65,
"BossEscortType": "marksman",
"BossEscortAmount": "0",
"Time": -1,
"BossZone": [
"ZoneBunkeSniper"
]
}
],
"streets": [
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": [
"ZoneSnipeCinema"
]
},
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": [
"ZoneSnipeCarShowroom"
]
},
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": [
"ZoneSnipeBuilding"
]
},
{
"BossName": "marksman",
"BossChance": 65,
"Time": -1,
"BossEscortAmount": "0",
"BossEscortType": "marksman",
"BossZone": [
"ZoneSnipeSW01"
]
}
],
"woods": [
{
"BossName": "marksman",
"BossChance": 65,
"BossEscortType": "marksman",
"BossEscortAmount": "0",
"Time": -1,
"BossZone": [
"ZoneHighRocks"
]
}
]
}
@@ -0,0 +1,32 @@
{
"name": "SWAG + DONUTS",
"version": "3.5.3",
"sptVersion": "~3.10.0",
"main": "src/SWAG.js",
"license": "MIT",
"author": "nooky and props",
"contributors": [
"Arys"
],
"loadBefore": [],
"loadAfter": [],
"incompatibilities": [],
"scripts": {
"setup": "npm i",
"build": "node ./build.mjs",
"buildinfo": "node ./build.mjs --verbose"
},
"devDependencies": {
"@types/node": "20.11",
"@typescript-eslint/eslint-plugin": "7.2",
"@typescript-eslint/parser": "7.2",
"archiver": "^6.0",
"eslint": "8.57",
"fs-extra": "11.2",
"glob": "8.0.3",
"ignore": "^5.2",
"tsyringe": "4.8.0",
"typescript": "5.4",
"winston": "3.12"
}
}
@@ -0,0 +1,119 @@
/* eslint-disable @typescript-eslint/naming-convention */
import { IBossLocationSpawn } from "@spt/models/eft/common/ILocationBase";
export interface IBossPattern extends IBossLocationSpawn
{
OnlySpawnOnce?: boolean;
}
export const roleCase: object = {
assault: "assault",
exusec: "exUsec",
marksman: "marksman",
pmcbot: "pmcBot",
sectantpriest: "sectantPriest",
sectantwarrior: "sectantWarrior",
assaultgroup: "assaultGroup",
bossbully: "bossBully",
bosstagilla: "bossTagilla",
bossgluhar: "bossGluhar",
bosskilla: "bossKilla",
bosskojaniy: "bossKojaniy",
bosssanitar: "bossSanitar",
bossboar: "bossBoar",
bossboarsniper: "bossBoarSniper",
bosskolontay: "bossKolontay",
bosspunisher: "bosspunisher",
bosslegion: "bosslegion",
bosspartisan: "bossPartisan",
followerboar: "followerBoar",
followerboarclose1: "followerBoarClose1",
followerboarclose2: "followerBoarClose2",
followerbully: "followerBully",
followergluharassault: "followerGluharAssault",
followergluharscout: "followerGluharScout",
followergluharsecurity: "followerGluharSecurity",
followergluharsnipe: "followerGluharSnipe",
followerkojaniy: "followerKojaniy",
followersanitar: "followerSanitar",
followertagilla: "followerTagilla",
followerkolontayassault: "followerKolontayAssault",
followerkolontaysecurity: "followerKolontaySecurity",
cursedassault: "cursedAssault",
pmc: "pmc",
usec: "usec",
bear: "bear",
sptbear: "sptBear",
sptusec: "sptUsec",
bosstest: "bossTest",
followertest: "followerTest",
gifter: "gifter",
bossknight: "bossKnight",
followerbigpipe: "followerBigPipe",
followerbirdeye: "followerBirdEye",
bosszryachiy: "bossZryachiy",
followerzryachiy: "followerZryachiy",
arenafighterevent: "arenaFighterEvent",
crazyassaultevent: "crazyAssaultEvent"
};
export const reverseBossNames: object = {
bossboar: "kaban",
bossbully: "reshala",
bosstagilla: "tagilla",
bossgluhar: "gluhar",
bosskilla: "killa",
bosskojaniy: "shturman",
bosssanitar: "sanitar",
bossknight: "goons",
bosszryachiy: "zryachiy",
bosskolontay: "kolontay",
bosspartisan: "partisan",
marksman: "scav_snipers",
sectantpriest: "cultists",
exusec: "rogues",
pmcbot: "raiders",
crazyassaultevent: "crazyscavs",
arenafighterevent: "bloodhounds",
bosspunisher: "punisher",
bosslegion: "legion",
gifter: "santa"
};
export const reverseMapNames: object = {
factory4_day: "factory",
factory4_night: "factory_night",
bigmap: "customs",
woods: "woods",
shoreline: "shoreline",
lighthouse: "lighthouse",
rezervbase: "reserve",
interchange: "interchange",
laboratory: "laboratory",
tarkovstreets: "streets",
sandbox: "groundzero",
sandbox_high: "groundzero_high"
};
export const diffProper = {
easy: "easy",
asonline: "random",
normal: "normal",
hard: "hard",
impossible: "impossible"
};
export const validMaps: string[] = [
"bigmap",
"factory4_day",
"factory4_night",
"interchange",
"laboratory",
"lighthouse",
"rezervbase",
"shoreline",
"tarkovstreets",
"woods",
"sandbox",
"sandbox_high"
];
@@ -0,0 +1,845 @@
/* eslint-disable @typescript-eslint/naming-convention */
import {
IBossLocationSpawn,
ILocationBase,
IWave
} from "@spt/models/eft/common/ILocationBase";
import { ConfigTypes } from "@spt/models/enums/ConfigTypes";
import { IPostDBLoadMod } from "@spt/models/external/IPostDBLoadMod";
import { IPreSptLoadMod } from "@spt/models/external/IPreSptLoadMod";
import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
import { ILocations } from "@spt/models/spt/server/ILocations";
import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer";
import { DatabaseServer } from "@spt/servers/DatabaseServer";
import { ContextVariableType } from "@spt/context/ContextVariableType";
import { ApplicationContext } from "@spt/context/ApplicationContext";
import { WeatherController } from "@spt/controllers/WeatherController";
import { IGetRaidConfigurationRequestData } from "@spt/models/eft/match/IGetRaidConfigurationRequestData";
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
import { StaticRouterModService } from "@spt/services/mod/staticRouter/StaticRouterModService";
import { JsonUtil } from "@spt/utils/JsonUtil";
import { RandomUtil } from "@spt/utils/RandomUtil";
import { DependencyContainer } from "tsyringe";
import { LocationCallbacks } from "@spt/callbacks/LocationCallbacks";
import { SeasonalEventService } from "@spt/services/SeasonalEventService";
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import * as fs from "fs";
import * as path from "path";
import {
IBossPattern,
validMaps,
diffProper,
roleCase,
reverseMapNames,
reverseBossNames
} from "./ClassDef";
// General SWAG Config
import config from "../config/config.json";
import bossConfig from "../config/bossConfig.json";
// Bosses
import gluhar from "../config/bosses/gluhar.json";
import goons from "../config/bosses/goons.json";
import kaban from "../config/bosses/kaban.json";
import killa from "../config/bosses/killa.json";
import kolontay from "../config/bosses/kolontay.json";
import reshala from "../config/bosses/reshala.json";
import sanitar from "../config/bosses/sanitar.json";
import shturman from "../config/bosses/shturman.json";
import tagilla from "../config/bosses/tagilla.json";
import zryachiy from "../config/bosses/zryachiy.json";
import partisan from "../config/bosses/partisan.json";
// Spawn Configs
import bloodhounds from "../config/other/bloodhounds.json";
import cultists from "../config/other/cultists.json";
import raiders from "../config/other/raiders.json";
import rogues from "../config/other/rogues.json";
import scav_snipers from "../config/other/scav_snipers.json";
// Custom
import punisher from "../config/custom/punisher.json"
import legion from "../config/custom/legion.json"
const otherSpawnConfigs = [
bloodhounds,
cultists,
scav_snipers,
raiders,
rogues
];
const bossSpawnConfigs = [
gluhar,
goons,
kaban,
killa,
kolontay,
reshala,
sanitar,
shturman,
tagilla,
zryachiy,
partisan
];
const customSpawnConfigs = [
punisher,
legion
]
const modName = "SWAG";
let logger: ILogger;
let locationCallbacks: LocationCallbacks;
let jsonUtil: JsonUtil;
let databaseServer: DatabaseServer;
let locations: ILocations;
let seasonalEvents: SeasonalEventService;
let randomUtil: RandomUtil;
let profileHelper: ProfileHelper;
let sessionId: string;
type LocationName = keyof Omit<ILocations, "base">;
type LocationBackupData = Record<LocationName,
{
waves: IWave[];
BossLocationSpawn: IBossLocationSpawn[];
openZones: string[];
} | undefined>;
class SWAG implements IPreSptLoadMod, IPostDBLoadMod
{
public static savedLocationData: LocationBackupData = {
factory4_day: undefined,
factory4_night: undefined,
bigmap: undefined,
interchange: undefined,
laboratory: undefined,
lighthouse: undefined,
rezervbase: undefined,
shoreline: undefined,
tarkovstreets: undefined,
woods: undefined,
sandbox: undefined,
sandbox_high: undefined,
// unused
develop: undefined,
hideout: undefined,
privatearea: undefined,
suburbs: undefined,
terminal: undefined,
town: undefined
};
public static randomWaveTimer = {
time_min: 0,
time_max: 0
};
public static actual_timers = {
time_min: 0,
time_max: 0
};
public static waveCounter = {
count: 1
};
public static raid_time = {
time_of_day: "day"
};
public static bossCount = {
count: 0
};
preSptLoad(container: DependencyContainer): void
{
const httpResponse =
container.resolve<HttpResponseUtil>("HttpResponseUtil");
const staticRouterModService = container.resolve<StaticRouterModService>(
"StaticRouterModService"
);
staticRouterModService.registerStaticRouter(
`${modName}/client/match/local/end`,
[{
url: "/client/match/local/end",
action: async (
url: string,
info: any,
sessionID: string,
output: string
): Promise<any> =>
{
sessionId = sessionID;
SWAG.clearDefaultSpawns();
SWAG.configureMaps();
return locationCallbacks.getLocationData(url, info, sessionID);
}
}],
"SWAG"
);
staticRouterModService.registerStaticRouter(
`${modName}/client/locations`,
[{
url: "/client/locations",
action: async (
url: string,
info: any,
sessionID: string,
output: string
): Promise<any> =>
{
sessionId = sessionID;
SWAG.clearDefaultSpawns();
SWAG.configureMaps();
return locationCallbacks.getLocationData(url, info, sessionID);
}
}],
"SWAG"
);
staticRouterModService.registerStaticRouter(
`${modName}/client/items`,
[{
url: "/client/items",
action: async (
url: string,
info: any,
sessionID: string,
output: string
) =>
{
sessionId = sessionID;
const locationConfig = container.resolve<ConfigServer>("ConfigServer").getConfig<ILocationConfig>(ConfigTypes.LOCATION);
// as of SPT 3.6.0 we need to disable the new spawn system so that SWAG can clear spawns properly
if (
!config?.UseDefaultSpawns?.Waves ||
!config?.UseDefaultSpawns?.Bosses ||
!config?.UseDefaultSpawns?.TriggeredWaves
)
{
SWAG.disableSpawnSystems();
}
// disable more vanilla spawn stuff
locationConfig.splitWaveIntoSingleSpawnsSettings.enabled = false;
locationConfig.rogueLighthouseSpawnTimeSettings.enabled = false;
locationConfig.addOpenZonesToAllMaps = false;
locationConfig.addCustomBotWavesToMaps = false;
locationConfig.enableBotTypeLimits = false;
logger.info(
"SWAG: Vanilla spawn systems disabled"
);
return output;
}
}],
"SWAG"
);
staticRouterModService.registerStaticRouter(
`${modName}/client/raid/configuration`,
[{
url: "/client/raid/configuration",
action: async (
url: string,
info: any,
sessionID: string,
output: string
): Promise<any> =>
{
try
{
const botConfig = container.resolve<ConfigServer>("ConfigServer").getConfig<IBotConfig>(ConfigTypes.BOT);
const pmcConfig = container.resolve<ConfigServer>("ConfigServer").getConfig<IBotConfig>(ConfigTypes.PMC);
const { convertIntoPmcChance } = pmcConfig;
Object.entries(convertIntoPmcChance).forEach(([mapKey, map]) => {
Object.entries(map).forEach(([roleKey, role]) => {
role.min = 0;
role.max = 0;
});
});
logger.info("SWAG: PMC conversion is OFF (this is good - be sure this loads AFTER Realism/SVM)");
// Adjust time and map caps
const appContext = container.resolve<ApplicationContext>("ApplicationContext");
const weatherController = container.resolve<WeatherController>("WeatherController");
const matchInfoStartOff = appContext.getLatestValue(ContextVariableType.RAID_CONFIGURATION).getValue<IGetRaidConfigurationRequestData>();
const time = weatherController.generate().time;
let realTime = time;
if (matchInfoStartOff.timeVariant === "PAST")
{
// eslint-disable-next-line prefer-const
let [hours, minutes] = time.split(":").map(Number);
hours = (hours - 12 + 24) % 24; // Adjust time backwards by 12 hours and ensure it wraps correctly
realTime = `${hours}:${minutes}`;
}
// Determine Time of Day
let TOD = "day";
const [hours] = realTime.split(":").map(Number);
if ((matchInfoStartOff.location !== "factory4_night" && hours >= 5 && hours < 22) ||
matchInfoStartOff.location === "factory4_day" ||
matchInfoStartOff.location.toLowerCase() === "laboratory")
{
TOD = "day";
}
else
{
TOD = "night";
}
// Set map caps based on Time of Day
if (TOD === "day")
{
Object.keys(config.MaxBotCap).forEach(key =>
{
botConfig.maxBotCap[key] = config.MaxBotCap[key];
});
}
else
{ // "night"
Object.keys(config.NightMaxBotCap).forEach(key =>
{
botConfig.maxBotCap[key] = config.NightMaxBotCap[key];
});
}
logger.info(`SWAG: ${TOD} Raid Max Bot Caps set`);
return httpResponse.nullResponse();
}
catch (e)
{
logger.error(`SWAG: Failed To modify PMC conversion, you may have more PMCs than you're supposed to. Error: ${e}`);
return httpResponse.nullResponse();
}
}
}],
"SWAG"
);
}
postDBLoad(container: DependencyContainer): void
{
logger = container.resolve<ILogger>("WinstonLogger");
locationCallbacks = container.resolve<LocationCallbacks>("LocationCallbacks");
jsonUtil = container.resolve<JsonUtil>("JsonUtil");
databaseServer = container.resolve<DatabaseServer>("DatabaseServer");
locations = databaseServer.getTables().locations;
randomUtil = container.resolve<RandomUtil>("RandomUtil");
seasonalEvents = container.resolve<SeasonalEventService>("SeasonalEventService");
profileHelper = container.resolve<ProfileHelper>("ProfileHelper");
}
/**
* Returns all available OpenZones specified in location.base.OpenZones as well as any OpenZone found in the SpawnPointParams.
* Filters out all sniper zones
* @param map
* @returns
*/
static getOpenZones(map: LocationName): string[]
{
const baseobj: ILocationBase = locations[map]?.base;
// Get all OpenZones defined in the base obj that do not include sniper zones. Need to filter for empty strings as well.
const foundOpenZones = baseobj?.OpenZones?.split(",")
.filter((name) => !name.includes("Snipe"))
.filter((name) => name.trim() !== "") ?? [];
// Sometimes there are zones in the SpawnPointParams that arent listed in the OpenZones, parse these and add them to the list of zones
baseobj?.SpawnPointParams?.forEach((spawn) =>
{
//check spawn for open zones and if it doesn't exist add to end of array
if (
spawn?.BotZoneName &&
!foundOpenZones.includes(spawn.BotZoneName) &&
!spawn.BotZoneName.includes("Snipe")
)
{
foundOpenZones.push(spawn.BotZoneName);
}
});
//logger.info(`SWAG: Open Zones(${map}): ${JSON.stringify(foundOpenZones)}`);
return foundOpenZones;
}
static shuffleArray(array: any[])
{
for (let i = array.length - 1; i > 0; i--)
{
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
}
static configureMaps(): void
{
const bossConfigs: { [key: string]: any[] } = {};
const otherConfigs: { [key: string]: any[] } = {};
const customConfigs: { [key: string]: any[] } = {};
bossSpawnConfigs.forEach(data =>
{
Object.keys(data).forEach(mapKey =>
{
if (bossConfig.TotalBossesPerMap[mapKey] === 0 || config.disableAllSpawns.bosses)
{
return;
}
if (!bossConfigs[mapKey])
{
bossConfigs[mapKey] = [];
}
const filteredBosses = data[mapKey].filter(boss =>
{
// ignore boarsniper
if (boss.BossName == "bossboarsniper")
{
return false;
}
const shouldSkip = boss.BossChance === 0 ||
(bossConfig.Bosses.useGlobalBossSpawnChance &&
bossConfig.Bosses[reverseBossNames[boss.BossName]][mapKey] === 0);
return !shouldSkip;
});
bossConfigs[mapKey].push(...filteredBosses);
});
});
otherSpawnConfigs.forEach(data =>
{
Object.keys(data).forEach(mapKey =>
{
if (!otherConfigs[mapKey])
{
otherConfigs[mapKey] = [];
}
const filteredBosses = data[mapKey].filter(boss =>
{
const bossType = reverseBossNames[boss.BossName];
if (config.disableAllSpawns[bossType])
{
return false;
}
const shouldSkip = boss.BossChance === 0 ||
(config.Spawns.useGlobalSpawnChance && config.Spawns[bossType][mapKey] === 0);
return !shouldSkip;
});
otherConfigs[mapKey].push(...filteredBosses);
});
});
customSpawnConfigs.forEach(data =>
{
Object.keys(data).forEach(mapKey =>
{
if (!customConfigs[mapKey])
{
customConfigs[mapKey] = [];
}
const filteredBosses = data[mapKey].filter(boss =>
{
if (boss.BossName == "gifter")
{
if (!bossConfig.CustomBosses.santa.enabled ||
(!seasonalEvents.christmasEventEnabled() && !bossConfig.CustomBosses.santa.forceSpawnOutsideEvent))
{
return false;
}
}
const shouldSkip = boss.BossChance === 0 ||
!bossConfig.CustomBosses[reverseBossNames[boss.BossName]].enabled ||
(bossConfig.CustomBosses[reverseBossNames[boss.BossName]].enabled &&
bossConfig.CustomBosses[reverseBossNames[boss.BossName]][mapKey] === 0);
return !shouldSkip;
});
customConfigs[mapKey].push(...filteredBosses);
});
});
// Shuffle each array within the configuration objects
Object.values(bossConfigs).forEach(array => this.shuffleArray(array));
Object.values(otherConfigs).forEach(array => this.shuffleArray(array));
Object.values(customConfigs).forEach(array => this.shuffleArray(array));
validMaps.forEach((globalmap: LocationName) =>
{
bossConfigs[reverseMapNames[globalmap]]?.forEach(boss =>
{
SWAG.spawnBosses(boss, globalmap);
SWAG.bossCount.count += 1;
});
// reset boss count for the next map
SWAG.bossCount.count = 0;
otherConfigs[reverseMapNames[globalmap]]?.forEach(spawn =>
{
SWAG.spawnBots(spawn, globalmap);
});
customConfigs[reverseMapNames[globalmap]]?.forEach(custom =>
{
SWAG.spawnCustom(custom, globalmap);
});
logger.warning(`SWAG: Configured boss spawns for map ${globalmap}`);
});
}
static spawnBosses(
boss: IBossPattern,
globalmap: LocationName
): void
{
if (bossConfig.TotalBossesPerMap[reverseMapNames[globalmap]] == 0)
{
if (config.DebugOutput)
logger.info(
"SWAG: TotalBosses set to 0 for this map, skipping boss spawn"
);
return;
}
else if (bossConfig.TotalBossesPerMap[reverseMapNames[globalmap]] != -1 && (SWAG.bossCount.count >= bossConfig.TotalBossesPerMap[reverseMapNames[globalmap]]))
{
if (config.DebugOutput)
logger.info(
"SWAG: Skipping boss spawn as total boss count has been met already"
);
return;
}
else
{
const wave: IBossLocationSpawn = SWAG.configureBossWave(boss, globalmap);
locations[globalmap].base.BossLocationSpawn.push(wave);
}
}
static spawnBots(
boss: IBossPattern,
globalmap: LocationName
): void
{
const wave: IBossLocationSpawn = SWAG.configureBossWave(boss, globalmap);
locations[globalmap].base.BossLocationSpawn.push(wave);
}
static spawnCustom(
boss: IBossPattern,
globalmap: LocationName
): void
{
const wave: IBossLocationSpawn = SWAG.configureBossWave(boss, globalmap);
locations[globalmap].base.BossLocationSpawn.push(wave);
}
static configureBossWave(boss: IBossLocationSpawn, globalmap: LocationName): IBossLocationSpawn
{
let spawnChance = 0;
let spawnZones = boss.BossZone || null;
const bossName = roleCase[boss.BossName.toLowerCase()] || boss.BossName;
const getRandomDifficulty = () =>
{
const availableDifficulties = ["easy", "normal", "hard", "impossible"];
const randomIndex = Math.floor(Math.random() * availableDifficulties.length);
return availableDifficulties[randomIndex];
};
const difficultyKey = boss.BossDifficult || config.BossDifficulty.toLowerCase();
const difficulty = difficultyKey === "asonline" ? getRandomDifficulty() : diffProper[difficultyKey];
const escortDifficultyKey = boss.BossEscortDifficult || config.BossEscortDifficulty.toLowerCase();
const escort_difficulty = escortDifficultyKey === "asonline" ? getRandomDifficulty() : diffProper[escortDifficultyKey];
boss?.Supports?.forEach((escort) =>
{
escort.BossEscortDifficult = [escort_difficulty];
escort.BossEscortType = roleCase[escort.BossEscortType.toLowerCase()];
});
// exclusive to bosses only
if (boss.BossName.startsWith("boss"))
{
spawnChance = this.adjustBossSpawnChance(boss, globalmap);
}
// something other than bosses
else if (config.Spawns.useGlobalSpawnChance)
{
spawnChance = config.Spawns[reverseBossNames[boss.BossName]][reverseMapNames[globalmap]];
}
else
{
spawnChance = boss.BossChance || 0;
}
// zones
if (spawnZones != null)
{
spawnZones = boss.BossZone || spawnZones;
if (spawnZones.length > 1)
{
// let's just pick one zone, can't trust BSG to do this correctly
const random_zone = SWAG.getRandIntInclusive(0, spawnZones.length - 1);
spawnZones = spawnZones[random_zone];
}
// if it's not > 1 and not null, then we'll assume there's a single zone defined instead
else
{
spawnZones = spawnZones[0];
}
}
// Using the SPT class here
const wave: IBossLocationSpawn = {
BossChance: spawnChance,
BossDifficult: difficulty,
BossName: bossName,
BossPlayer: false,
BossEscortAmount: boss.BossEscortAmount || "0",
BossEscortDifficult: escort_difficulty,
BossEscortType: roleCase[boss.BossEscortType.toLowerCase()],
BossZone: spawnZones != null
? spawnZones
: SWAG.savedLocationData[globalmap] &&
SWAG.savedLocationData[globalmap].openZones &&
SWAG.savedLocationData[globalmap].openZones.length > 0
? randomUtil.getStringArrayValue(SWAG.savedLocationData[globalmap].openZones)
: "",
ForceSpawn: boss.ForceSpawn || false,
IgnoreMaxBots: true,
RandomTimeSpawn: boss.RandomTimeSpawn || false,
spawnMode: ["pve", "regular"],
Supports: boss.Supports || null,
Time: boss.Time || -1,
TriggerId: boss.TriggerId || "",
TriggerName: boss.TriggerName || ""
};
if (spawnChance != 0 && config.DebugOutput)
{
logger.warning(`Configured Boss Wave: ${JSON.stringify(wave)}`);
}
return wave;
}
static adjustBossSpawnChance(boss: IBossLocationSpawn, globalmap: LocationName): number
{
// I need to refactor this garbage
if (boss.BossName === "bosspunisher")
{
// if punisher is not enabled
if (!bossConfig.CustomBosses.punisher.enabled)
{
return 0;
}
// if progress spawn chance is not enabled
if (!bossConfig.CustomBosses.punisher.useProgressSpawnChance)
{
return bossConfig.CustomBosses["punisher"][reverseMapNames[globalmap]];
}
const pmcProfile = profileHelper.getPmcProfile(sessionId);
const profileId = pmcProfile?._id;
const punisherBossProgressFilePath = path.resolve(
__dirname,
`../../WTT-RogueJustice/profiles/${profileId}/progress.json`
);
try
{
const progressData = JSON.parse(
fs.readFileSync(punisherBossProgressFilePath, "utf8")
);
return progressData?.actualPunisherChance ?? 1;
}
catch (error)
{
logger.warning(
"SWAG: Unable to load Punisher Boss progress file, either you don't have the mod installed or you don't have a Punisher progress file yet."
);
return 1;
}
}
// if legion is not enabled
if (boss.BossName === "bosslegion")
{
if (!bossConfig.CustomBosses.legion.enabled)
{
return 0;
}
// if progress spawn chance is not enabled
if (!bossConfig.CustomBosses.legion.useProgressSpawnChance)
{
return bossConfig.CustomBosses["legion"][reverseMapNames[globalmap]];
}
const legionBossProgressFilePath = path.resolve(
__dirname,
"../../RaidOverhaul/config/LegionChance.json"
);
try
{
const progressData = JSON.parse(
fs.readFileSync(legionBossProgressFilePath, "utf8")
);
return progressData?.legionChance ?? 15;
}
catch (error)
{
logger.warning(
"SWAG: Unable to load Legion Boss progress file, either you don't have the mod installed or you deleted your LegionChance.json."
);
}
}
// all other bosses...
else if (bossConfig.Bosses.useGlobalBossSpawnChance)
{
// edge case, only applies to Kaban
if (boss.BossName == "bossboarsniper")
{
return boss.BossChance;
}
return bossConfig.Bosses[reverseBossNames[boss.BossName]][reverseMapNames[globalmap]];
}
// if global boss chance is not enabled
else
{
return boss.BossChance;
}
}
static getRandIntInclusive(min: number, max: number): number
{
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min;
}
static disableSpawnSystems(): void
{
let map: keyof ILocations;
for (map in locations)
{
if (map === "base" || map === "hideout")
{
continue;
}
// locations[map].base.OfflineNewSpawn = false;
// locations[map].base.OfflineOldSpawn = true;
locations[map].base.NewSpawn = false;
locations[map].base.OldSpawn = true;
}
}
static clearDefaultSpawns(): void
{
let map: keyof ILocations;
for (map in locations)
{
if (map === "base" || map === "hideout")
{
continue;
}
// Save a backup of the wave data and the BossLocationSpawn to use when restoring defaults on raid end. Store openzones in this data as well
if (!SWAG.savedLocationData[map])
{
const locationBase = locations[map].base;
SWAG.savedLocationData[map] = {
waves: locationBase.waves,
BossLocationSpawn: locationBase.BossLocationSpawn,
openZones: this.getOpenZones(map)
};
}
// Reset Database, Cringe -- i stole this code from LUA
locations[map].base.waves = [...SWAG.savedLocationData[map].waves];
locations[map].base.BossLocationSpawn = [
...SWAG.savedLocationData[map].BossLocationSpawn
];
// Clear bots spawn
if (!config?.UseDefaultSpawns?.Waves)
{
locations[map].base.waves = [];
}
// Clear boss spawn
const bossLocationSpawn = locations[map].base.BossLocationSpawn;
if (
!config?.UseDefaultSpawns?.Bosses &&
!config?.UseDefaultSpawns?.TriggeredWaves
)
{
locations[map].base.BossLocationSpawn = [];
continue;
}
// Remove Default Boss Spawns
if (!config?.UseDefaultSpawns?.Bosses)
{
for (let i = 0; i < bossLocationSpawn.length; i++)
{
// Triggered wave check
if (bossLocationSpawn[i]?.TriggerName?.length === 0)
{
locations[map].base.BossLocationSpawn.splice(i--, 1);
}
}
}
// Remove Default Triggered Waves
if (!config?.UseDefaultSpawns?.TriggeredWaves)
{
for (let i = 0; i < bossLocationSpawn.length; i++)
{
// Triggered wave check
if (bossLocationSpawn[i]?.TriggerName?.length > 0)
{
locations[map].base.BossLocationSpawn.splice(i--, 1);
}
}
}
}
}
}
export const mod = new SWAG();