Adding Mods w/Symlink

This commit is contained in:
2025-01-02 20:23:50 -05:00
parent 88fc2c3c93
commit 404890ecbb
10218 changed files with 3191380 additions and 0 deletions
+21
View File
@@ -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,14 @@
# IMPORTANT
# PLEASE READ THE MOD PAGE FOR THE MOST UP TO DATE INFORMATION!
# tbh I hardly update this so please check the mod page for info/faq/questions!
#
#
# SWAG + Donuts
![Version: 3.3.0](https://img.shields.io/badge/Version-3.3.0-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,207 @@
{
"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
}
},
"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": "0",
"BossEscortType": "followergluharassault",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"factory": [
{
"BossChance": 35,
"BossEscortAmount": "0",
"BossEscortType": "followergluharassault",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"factory_night": [
{
"BossChance": 35,
"BossEscortAmount": "0",
"BossEscortType": "followergluharassault",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"groundzero": [
{
"BossChance": 35,
"BossEscortAmount": "0",
"BossEscortType": "followergluharassault",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 35,
"BossEscortAmount": "0",
"BossEscortType": "followergluharassault",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"interchange": [
{
"BossChance": 35,
"BossEscortAmount": "0",
"BossEscortType": "followergluharassault",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"laboratory": [
{
"BossChance": 35,
"BossEscortAmount": "0",
"BossEscortType": "followergluharassault",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 35,
"BossEscortAmount": "0",
"BossEscortType": "followergluharassault",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"reserve": [
{
"BossChance": 35,
"BossEscortAmount": "0",
"BossEscortType": "followergluharassault",
"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": "0",
"BossEscortType": "followergluharassault",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"streets": [
{
"BossChance": 35,
"BossEscortAmount": "0",
"BossEscortType": "followergluharassault",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
],
"woods": [
{
"BossChance": 35,
"BossEscortAmount": "0",
"BossEscortType": "followergluharassault",
"BossName": "bossgluhar",
"BossZone": null,
"Supports": [
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharassault"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharsecurity"
},
{
"BossEscortAmount": "2",
"BossEscortType": "followergluharscout"
}
],
"Time": -1
}
]
}
@@ -0,0 +1,251 @@
{
"customs": [
{
"BossName": "bossknight",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"BossZone": [
"ZoneScavBase"
]
}
],
"factory": [
{
"BossName": "bossknight",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"BossZone": null
}
],
"factory_night": [
{
"BossName": "bossknight",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"BossZone": null
}
],
"groundzero_high": [
{
"BossName": "bossknight",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"BossZone": null
}
],
"groundzero": [
{
"BossName": "bossknight",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"BossZone": null
}
],
"interchange": [
{
"BossName": "bossknight",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"BossZone": null
}
],
"laboratory": [
{
"BossName": "bossknight",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"BossZone": null
}
],
"lighthouse": [
{
"BossName": "bossknight",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"BossZone": [
"Zone_Chalet",
"Zone_TreatmentContainers"
]
}
],
"reserve": [
{
"BossName": "bossknight",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"BossZone": null
}
],
"shoreline": [
{
"BossName": "bossknight",
"BossChance": 5,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"BossZone": [
"ZoneMeteoStation"
]
}
],
"streets": [
{
"BossName": "bossknight",
"BossChance": 15,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"BossZone": null
}
],
"woods": [
{
"BossName": "bossknight",
"BossChance": 20,
"Time": -1,
"BossEscortAmount": "2",
"BossEscortType": "exusec",
"Supports": [
{
"BossEscortAmount": "1",
"BossEscortType": "followerbigpipe"
},
{
"BossEscortAmount": "1",
"BossEscortType": "followerbirdeye"
}
],
"BossZone": [
"ZoneScavBase2"
]
}
]
}
@@ -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,128 @@
{
"customs": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": [
"ZoneCenterBot",
"ZoneCenter",
"ZoneOLI",
"ZoneIDEA",
"ZoneGoshan"
],
"Time": -1
}
],
"laboratory": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followertagilla",
"BossName": "bosskilla",
"BossZone": 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,125 @@
{
"customs": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": [
"ZoneDormitory",
"ZoneGasStation"
],
"Time": -1
}
],
"factory": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 35,
"BossEscortAmount": "4",
"BossEscortType": "followerbully",
"BossName": "bossbully",
"BossZone": null,
"Time": -1
}
]
}
@@ -0,0 +1,126 @@
{
"customs": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": [
"ZoneSanatorium1",
"ZoneSanatorium2",
"ZonePort"
],
"Time": -1
}
],
"streets": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 5,
"BossEscortAmount": "2,3",
"BossEscortType": "followersanitar",
"BossName": "bosssanitar",
"BossZone": null,
"Time": -1
}
]
}
@@ -0,0 +1,124 @@
{
"customs": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 35,
"BossEscortAmount": "2",
"BossEscortType": "followerkojaniy",
"BossName": "bosskojaniy",
"BossZone": [
"ZoneWoodCutter"
],
"Time": -1
}
]
}
@@ -0,0 +1,126 @@
{
"customs": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": [
"BotZone"
],
"Time": -1
}
],
"factory_night": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": [
"BotZone"
],
"Time": -1
}
],
"groundzero": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Time": -1
}
],
"reserve": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 30,
"BossEscortAmount": "0",
"BossEscortType": "followerbully",
"BossName": "bosstagilla",
"BossZone": null,
"Time": -1
}
]
}
@@ -0,0 +1,124 @@
{
"customs": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Time": -1
}
],
"factory": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Time": -1
}
],
"factory_night": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Time": -1
}
],
"groundzero": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Time": -1
}
],
"groundzero_high": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Time": -1
}
],
"interchange": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Time": -1
}
],
"laboratory": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Time": -1
}
],
"lighthouse": [
{
"BossChance": 100,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": [
"Zone_Island"
],
"Time": -1
}
],
"reserve": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Time": -1
}
],
"shoreline": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Time": -1
}
],
"streets": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Time": -1
}
],
"woods": [
{
"BossChance": 0,
"BossEscortAmount": "2",
"BossEscortType": "followerzryachiy",
"BossName": "bosszryachiy",
"BossZone": null,
"Time": -1
}
]
}
@@ -0,0 +1,117 @@
{
"BossDifficulty": "normal",
"BossEscortDifficulty": "normal",
"disableAllSpawns": {
"bosses": true,
"rogues": true,
"raiders": true,
"cultists": true,
"scav_snipers": true,
"bloodhounds": true
},
"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,23 @@
{
"name": "SWAG + DONUTS",
"version": "3.5.1",
"main": "src/SWAG.js",
"license": "MIT",
"author": "nooky and props",
"sptVersion": "~3.9.0",
"scripts": {
"setup": "npm i",
"build": "node ./packageBuild.ts"
},
"devDependencies": {
"@types/node": "16.18.10",
"@typescript-eslint/eslint-plugin": "5.46.1",
"@typescript-eslint/parser": "5.46.1",
"bestzip": "2.2.1",
"eslint": "8.30.0",
"fs-extra": "11.1.0",
"glob": "8.0.3",
"tsyringe": "4.7.0",
"typescript": "4.9.4"
}
}
@@ -0,0 +1,182 @@
import {
BossLocationSpawn,
} from "@spt/models/eft/common/ILocationBase";
export interface BossPattern extends BossLocationSpawn {
OnlySpawnOnce?: boolean;
}
export class Bot {
BotType: string;
MaxBotCount: number;
}
export class GroupPattern {
Name: string;
Bots: Bot[];
Time_min: number;
Time_max: number;
BotZone: string;
RandomTimeSpawn?: boolean;
OnlySpawnOnce?: boolean;
}
export class MapWrapper {
MapName: string;
MapGroups: GroupPattern[];
MapBosses: BossPattern[];
}
export class SpawnPointParam {
Id: string;
Position: Position;
Rotation: number;
Sides: string[];
Categories: string[];
Infiltration: string;
DelayToCanSpawnSec: number;
ColliderParams: ColliderParams;
BotZoneName: string;
}
export class Position {
x: number;
y: number;
z: number;
}
export class ColliderParams {
_parent: string;
_props: Props;
}
export class Center {
x: number;
y: number;
z: number;
}
export class Props {
Center: Center;
Radius: number;
}
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",
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",
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 pmcType: string[] = ["sptbear", "sptusec"];
export const validMaps: string[] = [
"bigmap",
"factory4_day",
"factory4_night",
"interchange",
"laboratory",
"lighthouse",
"rezervbase",
"shoreline",
"tarkovstreets",
"woods",
"sandbox",
"sandbox_high"
];
export const aiAmountProper = {
low: 0.5,
asonline: 1,
medium: 1,
high: 2,
horde: 4,
};
@@ -0,0 +1,790 @@
import {
BossLocationSpawn,
ILocationBase,
Wave,
} 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 { 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 { IGlobals } from "@spt/models/eft/common/IGlobals";
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 * as ClassDef from "./ClassDef";
import {
BossPattern,
GroupPattern,
aiAmountProper,
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";
// 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
];
const customSpawnConfigs = [
punisher,
legion
]
const modName = "SWAG";
let logger: ILogger;
let LocationCallbacks;
LocationCallbacks;
let jsonUtil;
JsonUtil;
let botConfig: IBotConfig;
let pmcConfig: IBotConfig;
let iGlobals: IGlobals;
let configServer: ConfigServer;
let databaseServer: DatabaseServer;
let locations: ILocations;
let seasonalEvents: SeasonalEventService;
let randomUtil: RandomUtil;
let profileHelper: ProfileHelper;
let sessionId : string;
let BossWaveSpawnedOnceAlready: boolean;
const customPatterns: Record<string, ClassDef.GroupPattern> = {};
type LocationName = keyof Omit<ILocations, "base">;
type LocationBackupData = Record<
LocationName,
| {
waves: Wave[];
BossLocationSpawn: BossLocationSpawn[];
openZones: string[];
}
| undefined
>;
type GlobalPatterns = Record<string, MapPatterns>;
type MapPatterns = {
MapGroups: GroupPattern[];
MapBosses: BossPattern[];
};
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 pmcType: string[] = ["sptbear", "sptusec"];
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/offline/end`,
[
{
url: "/client/match/offline/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.fixEmptyBotWavesSettings.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 {
// Retrieve configurations
const botConfig = container.resolve<ConfigServer>("ConfigServer").getConfig<IBotConfig>(ConfigTypes.BOT);
const pmcConfig = container.resolve<ConfigServer>("ConfigServer").getConfig<IBotConfig>(ConfigTypes.PMC);
// Disable PMC conversion
const conversionTypes = ["assault", "cursedassault", "pmcbot", "exusec", "arenafighter", "arenafighterevent", "crazyassaultevent"];
conversionTypes.forEach(type => {
pmcConfig.convertIntoPmcChance[type] = { min: 0, 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") {
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";
let [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");
configServer = container.resolve<ConfigServer>("ConfigServer");
botConfig = configServer.getConfig<IBotConfig>(ConfigTypes.BOT);
pmcConfig = configServer.getConfig<IBotConfig>(ConfigTypes.PMC);
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));
ClassDef.validMaps.forEach((globalmap: LocationName) => {
if (bossConfigs[reverseMapNames[globalmap]]) {
bossConfigs[reverseMapNames[globalmap]].forEach(boss => {
SWAG.SpawnBosses(boss, globalmap);
SWAG.bossCount.count += 1;
});
}
// reset boss count for the next map
SWAG.bossCount.count = 0;
if (otherConfigs[reverseMapNames[globalmap]]) {
otherConfigs[reverseMapNames[globalmap]].forEach(spawn => {
SWAG.SpawnBots(spawn, globalmap);
});
}
if (customConfigs[reverseMapNames[globalmap]]) {
customConfigs[reverseMapNames[globalmap]].forEach(custom => {
SWAG.SpawnCustom(custom, globalmap);
});
}
logger.warning(`SWAG: Configured boss spawns for map ${globalmap}`);
});
}
static SpawnBosses(
boss: ClassDef.BossPattern,
globalmap: LocationName,
): void {
if (bossConfig.TotalBossesPerMap[reverseMapNames[globalmap]] == 0) {
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]])) {
config.DebugOutput &&
logger.info(
"SWAG: Skipping boss spawn as total boss count has been met already"
);
return;
}
else {
let wave: BossLocationSpawn = SWAG.ConfigureBossWave(boss, globalmap);
locations[globalmap].base.BossLocationSpawn.push(wave);
}
}
static SpawnBots(
boss: ClassDef.BossPattern,
globalmap: LocationName,
): void {
let wave: BossLocationSpawn = SWAG.ConfigureBossWave(boss, globalmap);
locations[globalmap].base.BossLocationSpawn.push(wave);
}
static SpawnCustom(
boss: ClassDef.BossPattern,
globalmap: LocationName,
): void {
let wave: BossLocationSpawn = SWAG.ConfigureBossWave(boss, globalmap);
locations[globalmap].base.BossLocationSpawn.push(wave);
}
static ConfigureBossWave(boss: BossLocationSpawn, globalmap: LocationName): BossLocationSpawn {
let spawnChance = 0;
let spawnZones = boss.BossZone || null;
let 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];
};
let difficultyKey = boss.BossDifficult || config.BossDifficulty.toLowerCase();
let difficulty = difficultyKey === "asonline" ? getRandomDifficulty() : diffProper[difficultyKey];
let escortDifficultyKey = boss.BossEscortDifficult || config.BossEscortDifficulty.toLowerCase();
let 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
let 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: BossLocationSpawn = {
BossName: bossName,
BossChance: spawnChance,
BossZone: !!spawnZones
? spawnZones
: SWAG.savedLocationData[globalmap].openZones &&
SWAG.savedLocationData[globalmap].openZones.length > 0
? randomUtil.getStringArrayValue(
SWAG.savedLocationData[globalmap].openZones
)
: "",
BossPlayer: false,
BossDifficult: difficulty,
BossEscortType: roleCase[boss.BossEscortType.toLowerCase()],
BossEscortDifficult: escort_difficulty,
BossEscortAmount: boss.BossEscortAmount || "0",
Time: boss.Time || -1,
Supports: boss.Supports || null,
RandomTimeSpawn: boss.RandomTimeSpawn || false,
TriggerId: boss.TriggerId || "",
TriggerName: boss.TriggerName || ""
};
if (spawnChance != 0) {
config.DebugOutput && logger.warning(`Configured Boss Wave: ${JSON.stringify(wave)}`);
}
return wave;
}
static adjustBossSpawnChance(boss: BossLocationSpawn, globalmap: LocationName): number {
// I need to refactor this garbage
if (boss.BossName === "bosspunisher") {
if (bossConfig.CustomBosses.punisher.enabled) {
if (bossConfig.CustomBosses.punisher.useProgressSpawnChance) {
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;
}
} else {
// if progress spawn chance is not enabled
return bossConfig.CustomBosses["punisher"][reverseMapNames[globalmap]];
}
} else {
// if punisher is not enabled
return 0;
}
}
if (boss.BossName === "bosslegion") {
if (bossConfig.CustomBosses.legion.enabled) {
if (bossConfig.CustomBosses.legion.useProgressSpawnChance) {
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."
);
}
}
// if progress spawn chance is not enabled
return bossConfig.CustomBosses["legion"][reverseMapNames[globalmap]];
}
// if legion is not enabled
else {
return 0;
}
}
// 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 = [];
} else {
// 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);
}
}
}
}
}
}
module.exports = { mod: new SWAG() };