From b3cab2e572388a88626fba2ca72eaadb3e07b26a Mon Sep 17 00:00:00 2001 From: Rage Date: Fri, 3 Jan 2025 03:29:19 -0500 Subject: [PATCH] Downgraded MOAR & Updated ModOrganizer.ini --- ModOrganizer.ini | 10 +- .../BepInEx/config/MOAR.settings.cfg | 39 +- .../config/com.mpstark.DynamicMaps.cfg | 2 +- .../BepInEx/plugins/MOAR.dll | Bin 32768 -> 31232 bytes mods/MOAR - Ultra Lite Spawn Mod/meta.ini | 4 +- .../mods/DewardianDev-MOAR/config/config.json | 12 +- .../user/mods/DewardianDev-MOAR/package.json | 2 +- .../src/Spawning/Spawning.ts | 10 +- .../src/Spawning/buildPmcs.ts | 29 +- .../src/Spawning/buildScavMarksmanWaves.ts | 46 +- .../src/Spawning/updateSpawnLocations.ts | 122 +---- .../DewardianDev-MOAR/src/Spawning/utils.ts | 68 +-- .../BepInEx/plugins/MOAR.dll | Bin 31232 -> 0 bytes .../meta.ini | 28 -- .../.github/workflows/action.yml | 29 -- .../user/mods/DewardianDev-MOAR/.releaserc | 15 - .../user/mods/DewardianDev-MOAR/LICENSE.md | 21 - .../config/PresetWeightings.json | 12 - .../DewardianDev-MOAR/config/Presets.json | 65 --- .../DewardianDev-MOAR/config/bossConfig.json | 63 --- .../mods/DewardianDev-MOAR/config/config.json | 46 -- .../DewardianDev-MOAR/config/mapConfig.json | 110 ----- .../user/mods/DewardianDev-MOAR/package.json | 25 - .../DewardianDev-MOAR/src/GlobalValues.ts | 11 - .../DewardianDev-MOAR/src/Routes/routes.ts | 168 ------- .../src/Spawning/Spawning.ts | 154 ------- .../src/Spawning/buildBossWaves.ts | 278 ----------- .../src/Spawning/buildPmcs.ts | 87 ---- .../src/Spawning/buildScavMarksmanWaves.ts | 226 --------- .../src/Spawning/buildZombieWaves.ts | 80 ---- .../src/Spawning/constants.ts | 204 --------- .../src/Spawning/updateSpawnLocations.ts | 38 -- .../DewardianDev-MOAR/src/Spawning/utils.ts | 430 ------------------ .../src/Tests/checkPresets.ts | 28 -- .../DewardianDev-MOAR/src/Zombies/Zombies.ts | 160 ------- .../user/mods/DewardianDev-MOAR/src/mod.ts | 29 -- .../user/mods/DewardianDev-MOAR/src/utils.ts | 57 --- 37 files changed, 114 insertions(+), 2594 deletions(-) delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/BepInEx/plugins/MOAR.dll delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/meta.ini delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/.github/workflows/action.yml delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/.releaserc delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/LICENSE.md delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/PresetWeightings.json delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/Presets.json delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/bossConfig.json delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/config.json delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/mapConfig.json delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/package.json delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/GlobalValues.ts delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Routes/routes.ts delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/Spawning.ts delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildBossWaves.ts delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildPmcs.ts delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildScavMarksmanWaves.ts delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildZombieWaves.ts delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/constants.ts delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/updateSpawnLocations.ts delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/utils.ts delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Tests/checkPresets.ts delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Zombies/Zombies.ts delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/mod.ts delete mode 100644 mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/utils.ts diff --git a/ModOrganizer.ini b/ModOrganizer.ini index e275dbf..83cff19 100644 --- a/ModOrganizer.ini +++ b/ModOrganizer.ini @@ -1,5 +1,11 @@ [General] +gameName=SPT +gamePath=@ByteArray(replace_me) selected_profile=@ByteArray(Multiplayer) +version=2.5.2 +first_start=false +previousSeparatorColor=@Variant(\0\0\0\x43\x1\xff\xff\x44\x44\x36\x36))\0\0) +backup_install=true [Settings] style=Dark Bronze.qss @@ -7,10 +13,10 @@ style=Dark Bronze.qss [customExecutables] size=1 1\arguments= -1\binary=D:/Games/Singleplayer Tarkov/SPT.Launcher.exe +1\binary=replace_me/SPT.Launcher.exe 1\hide=false 1\ownicon=false 1\steamAppID= 1\title=Multiplayer 1\toolbar=false -1\workingDirectory=D:/Games/Singleplayer Tarkov +1\workingDirectory=replace_me diff --git a/mods/Config Files/BepInEx/config/MOAR.settings.cfg b/mods/Config Files/BepInEx/config/MOAR.settings.cfg index 29beac0..a928597 100644 --- a/mods/Config Files/BepInEx/config/MOAR.settings.cfg +++ b/mods/Config Files/BepInEx/config/MOAR.settings.cfg @@ -1,23 +1,8 @@ -## Settings file was created by plugin MOAR v2.6.2 +## Settings file was created by plugin MOAR v2.5.6 ## Plugin GUID: MOAR.settings [1. Main Settings] -## All Bots/Players (excluding bosses) can spawn anywhere (overrides PMC/Player openzone options) -# Setting type: Boolean -# Default value: false -PMC/Scav/Player OpenZones On/Off = false - -## Adds a large number of zones (including all scav zones) to pmc bots spawn pool -# Setting type: Boolean -# Default value: true -PMC OpenZones On/Off = true - -## Adds a large number of zones to the Player's (you) spawn pool -# Setting type: Boolean -# Default value: true -Player OpenZones On/Off = true - ## Causes all PMCs to spawn in the first few minutes of the game (performance intensive) # Setting type: Boolean # Default value: false @@ -25,15 +10,15 @@ Starting PMCS On/Off = false ## Works with SAIN or SPT to decide the bot's 'difficulty' preset (EASY: 0, easy-MEDIUM: 0.4, easy-MEDIUM-hard: 0.6, medium-hard: 0.85, HARD-impossible: 1, etc..) # Setting type: Double -# Default value: 0.6 +# Default value: 0.3 # Acceptable value range: From 0 to 1.5 -Pmc difficulty = 0.6 +Pmc difficulty = 0.3 ## Works with SAIN or SPT to decide the bot's 'difficulty' preset (EASY: 0, easy-MEDIUM: 0.4, easy-MEDIUM-hard: 0.6, medium-hard: 0.85, HARD-impossible: 1, etc..) # Setting type: Double -# Default value: 0.4 +# Default value: 0.3 # Acceptable value range: From 0 to 1.5 -Scav difficulty = 0.4 +Scav difficulty = 0.3 ## Preset to be used, random pulls a random weighted preset from the PresetWeights.json every time a raid ends # Setting type: String @@ -51,6 +36,12 @@ Preset Announce On/Off = true # Default value: FIKA DETECTED: ALWAYS PRESS THIS FIRST BEFORE MAKING CHANGES!! = +PMC/Scav/Player OpenZones On/Off = false + +PMC OpenZones On/Off = true + +Player OpenZones On/Off = true + [2. Custom game Settings] ## Pushes settings to server @@ -146,9 +137,9 @@ moreScavGroups On/Off = false ## Max bots permitted in any particular spawn zone, recommend not to touch this. # Setting type: Int32 -# Default value: 5 +# Default value: 7 # Acceptable value range: From 0 to 15 -MaxBotPerZone = 5 +MaxBotPerZone = 7 ## Max bots alive at one time # Setting type: Int32 @@ -187,9 +178,9 @@ ScavWaveDistribution = 0.5 ## Determines the weighting of spawns at the beginning (1) spread evenly throughout (0.5) or at the end(0) of the raid # Setting type: Double -# Default value: 0.7 +# Default value: 0.8 # Acceptable value range: From 0 to 1 -PmcWaveDistribution = 0.7 +PmcWaveDistribution = 0.8 ## Multiplies wave counts seen in the server's mapConfig.json by this number # Setting type: Double diff --git a/mods/Config Files/BepInEx/config/com.mpstark.DynamicMaps.cfg b/mods/Config Files/BepInEx/config/com.mpstark.DynamicMaps.cfg index 99e9315..6146549 100644 --- a/mods/Config Files/BepInEx/config/com.mpstark.DynamicMaps.cfg +++ b/mods/Config Files/BepInEx/config/com.mpstark.DynamicMaps.cfg @@ -259,7 +259,7 @@ Centering On Player Zoom Level = 0.15 # Setting type: Single # Default value: 0 # Acceptable value range: From 0 to 15 -Main map zoom = 3.833475 +Main map zoom = 15 ## The keyboard shortcut to peek at the map # Setting type: KeyboardShortcut diff --git a/mods/MOAR - Ultra Lite Spawn Mod/BepInEx/plugins/MOAR.dll b/mods/MOAR - Ultra Lite Spawn Mod/BepInEx/plugins/MOAR.dll index 96571d7d1d2b04c80a182ce7e90e8e94d1b19a45..1da0b445ca1f9a6d5908ae3e5b7287eccb61c1fa 100644 GIT binary patch delta 10222 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 delta 11576 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 diff --git a/mods/MOAR - Ultra Lite Spawn Mod/meta.ini b/mods/MOAR - Ultra Lite Spawn Mod/meta.ini index b467c07..655bf11 100644 --- a/mods/MOAR - Ultra Lite Spawn Mod/meta.ini +++ b/mods/MOAR - Ultra Lite Spawn Mod/meta.ini @@ -1,11 +1,11 @@ [General] gameName=spt modid=0 -version=d2025.1.2.0 +version=d2024.12.31.0 newestVersion= category="1," nexusFileStatus=1 -installationFile=DewardianDev-MOAR-2.6.5.zip +installationFile=DewardianDev-MOAR-2.6.1.zip repository=Nexus ignoredVersion= comments= diff --git a/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/config/config.json b/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/config/config.json index 432ea09..3cabd04 100644 --- a/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/config/config.json +++ b/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/config/config.json @@ -1,19 +1,15 @@ { "enableBotSpawning": true, - "pmcDifficulty": 0.6, - "scavDifficulty": 0.4, + "pmcDifficulty": 0.3, + "scavDifficulty": 0.3, "scavWaveDistribution": 0.5, "scavWaveQuantity": 1, "startingPmcs": false, - "playerOpenZones": true, - "pmcOpenZones": true, - "allOpenZones": false, - - "pmcWaveDistribution": 0.7, + "pmcWaveDistribution": 0.8, "pmcWaveQuantity": 1, "zombiesEnabled": false, @@ -22,7 +18,7 @@ "zombieHealth": 1, "maxBotCap": 25, - "maxBotPerZone": 5, + "maxBotPerZone": 7, "moreScavGroups": false, "morePmcGroups": false, diff --git a/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/package.json b/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/package.json index 276ffe1..a8bbb14 100644 --- a/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/package.json +++ b/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/package.json @@ -1,6 +1,6 @@ { "name": "MOAR", - "version": "2.6.5", + "version": "2.6.1", "main": "src/mod.js", "license": "MIT", "author": "DewardianDev", diff --git a/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/Spawning.ts b/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/Spawning.ts index 8128486..1aaad28 100644 --- a/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/Spawning.ts +++ b/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/Spawning.ts @@ -7,11 +7,7 @@ import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigTypes } from "@spt/models/enums/ConfigTypes"; import { DependencyContainer } from "tsyringe"; import { globalValues } from "../GlobalValues"; -import { - cloneDeep, - getRandomPresetOrCurrentlySelectedPreset, - saveToFile, -} from "../utils"; +import { cloneDeep, getRandomPresetOrCurrentlySelectedPreset } from "../utils"; import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig.d"; import { originalMapList } from "./constants"; import { buildBossWaves } from "./buildBossWaves"; @@ -131,7 +127,7 @@ export const buildWaves = (container: DependencyContainer) => { rezervbase: { pmcbot: { min: 0, max: 0 } }, }; - updateSpawnLocations(locationList, config); + updateSpawnLocations(locationList); setEscapeTimeOverrides(locationList, _mapConfig, Logger, config); @@ -147,7 +143,7 @@ export const buildWaves = (container: DependencyContainer) => { } buildPmcs(config, locationList); - + originalMapList.forEach((name, index) => { if (!locations[name]) { console.log("[MOAR] OH CRAP we have a problem!", name); diff --git a/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/buildPmcs.ts b/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/buildPmcs.ts index 52c60d4..8b19992 100644 --- a/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/buildPmcs.ts +++ b/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/buildPmcs.ts @@ -30,21 +30,25 @@ export default function buildPmcs( .filter( ({ Categories, BotZoneName }) => !!BotZoneName && - !BotZoneName.includes("snipe") && - (Categories.includes("Player") || Categories.includes("All")) && - !BotZoneName.includes("BotZoneGate") + (Categories.includes("Player") || + (map === "laboratory" && + !BotZoneName.includes("BotZoneGate"))) && + !BotZoneName.includes("snipe") ) .map(({ BotZoneName, ...rest }) => { return BotZoneName; }) ), + ...pmcHotZones, ]); - // Make labs have only named zones if (map === "laboratory") { pmcZones = new Array(10).fill(pmcZones).flat(1); + // console.log(pmcZones); } + const timeLimit = locationList[index].base.EscapeTimeLimit * 60; + const { pmcWaveCount } = mapConfig[map]; const escapeTimeLimitRatio = Math.round( @@ -54,12 +58,13 @@ export default function buildPmcs( const totalWaves = Math.round( pmcWaveCount * config.pmcWaveQuantity * escapeTimeLimitRatio ); - + // console.log(pmcZones.length, totalWaves); const numberOfZoneless = totalWaves - pmcZones.length; if (numberOfZoneless > 0) { const addEmpty = new Array(numberOfZoneless).fill(""); pmcZones = shuffle([...pmcZones, ...addEmpty]); } + // if (map === "laboratory") console.log(numberOfZoneless, pmcZones); if (config.debug) { console.log(`${map} PMC count ${totalWaves} \n`); @@ -70,16 +75,10 @@ export default function buildPmcs( ); } - const timeLimit = locationList[index].base.EscapeTimeLimit * 60; - - const waves = buildPmcWaves( - totalWaves, - timeLimit, - config, - pmcZones, - pmcHotZones - ); - + const waves = buildPmcWaves(pmcWaveCount, timeLimit, config, pmcZones); + // if (map === "laboratory") + // console.log(waves.map(({ BossZone }) => BossZone)); + // apply our new waves locationList[index].base.BossLocationSpawn = [ ...waves, ...locationList[index].base.BossLocationSpawn, diff --git a/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/buildScavMarksmanWaves.ts b/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/buildScavMarksmanWaves.ts index 9d58dae..93b9baf 100644 --- a/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/buildScavMarksmanWaves.ts +++ b/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/buildScavMarksmanWaves.ts @@ -89,16 +89,19 @@ export default function buildScavMarksmanWaves( const sniperLocations = new Set( [...locationList[index].base.SpawnPointParams] .filter( - ({ Categories, DelayToCanSpawnSec, BotZoneName, Sides }) => - !Categories.includes("Boss") && - Sides[0] === "Savage" && - (BotZoneName?.toLowerCase().includes("snipe") || - DelayToCanSpawnSec > 40) + ({ Categories, Sides, BotZoneName }) => + !!BotZoneName && + Sides.includes("Savage") && + !Categories.includes("Boss") ) - .map(({ BotZoneName }) => BotZoneName || "") + .filter( + ({ BotZoneName, DelayToCanSpawnSec }) => + BotZoneName?.toLowerCase().includes("snipe") || + DelayToCanSpawnSec > 300 + ) + .map(({ BotZoneName }) => BotZoneName) ); - if (sniperLocations.size) { locationList[index].base.MinMaxBots = [ { @@ -109,21 +112,32 @@ export default function buildScavMarksmanWaves( ]; } - let scavZones = shuffle([ + const scavZones = shuffle([ ...new Set( [...locationList[index].base.SpawnPointParams] .filter( ({ Categories, Sides, BotZoneName }) => !!BotZoneName && - Categories.includes("Bot") && - (Sides.includes("Savage") || Sides.includes("All")) + Sides.includes("Savage") && + !Categories.includes("Boss") ) .map(({ BotZoneName }) => BotZoneName) .filter((name) => !sniperLocations.has(name)) ), ]); + // Reduced Zone Delay + locationList[index].base.SpawnPointParams = locationList[ + index + ].base.SpawnPointParams.map((spawn) => ({ + ...spawn, + DelayToCanSpawnSec: + spawn.DelayToCanSpawnSec > 20 + ? Math.round(spawn.DelayToCanSpawnSec / 10) + : spawn.DelayToCanSpawnSec, + })); + const timeLimit = locationList[index].base.EscapeTimeLimit * 60; const { scavWaveCount } = mapConfig[map]; const escapeTimeLimitRatio = Math.round( @@ -135,19 +149,12 @@ export default function buildScavMarksmanWaves( scavWaveCount * scavWaveQuantity * escapeTimeLimitRatio ); - const numberOfZoneless = scavTotalWaveCount - scavZones.length; - // console.log(numberOfZoneless); - if (numberOfZoneless > 0) { - const addEmpty = new Array(numberOfZoneless).fill(""); - scavZones = shuffle([...scavZones, ...addEmpty]); - } - // console.log(scavZones); config.debug && escapeTimeLimitRatio !== 1 && console.log( `${map} Scav wave count changed from ${scavWaveCount} to ${scavTotalWaveCount} due to escapeTimeLimit adjustment` ); - const timeLimit = locationList[index].base.EscapeTimeLimit * 60; + let snipers = waveBuilder( sniperLocations.size, Math.round(timeLimit / 4), @@ -159,13 +166,14 @@ export default function buildScavMarksmanWaves( [], shuffle([...sniperLocations]), 80, - true, + false, true ); if (snipersHaveFriends) snipers = snipers.map((wave) => ({ ...wave, + slots_min: 0, ...(snipersHaveFriends && wave.slots_max < 2 ? { slots_min: 1, slots_max: 2 } : {}), diff --git a/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/updateSpawnLocations.ts b/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/updateSpawnLocations.ts index e0258c1..f4464b8 100644 --- a/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/updateSpawnLocations.ts +++ b/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/updateSpawnLocations.ts @@ -1,126 +1,36 @@ import { ILocation } from "@spt/models/eft/common/ILocation"; import { configLocations } from "./constants"; import mapConfig from "../../config/mapConfig.json"; -import _config from "../../config/config.json"; -export default function updateSpawnLocations( - locationList: ILocation[], - config: typeof _config -) { +export default function updateSpawnLocations(locationList: ILocation[]) { for (let index = 0; index < locationList.length; index++) { const map = configLocations[index]; - // console.log(map); + const limit = mapConfig[map].spawnMinDistance; - const InfiltrationList = [ - ...new Set( - locationList[index].base.SpawnPointParams.filter( - ({ Infiltration }) => Infiltration - ).map(({ Infiltration }) => Infiltration) - ), - ]; - - // console.log(map, InfiltrationList); - const getRandomInfil = (): string => - InfiltrationList[Math.floor(Math.random() * InfiltrationList.length)]; - // console.log(InfiltrationList); // console.log("\n" + map); locationList[index].base.SpawnPointParams.forEach( ( - { - ColliderParams, - BotZoneName, - DelayToCanSpawnSec, - Categories, - Sides, - Infiltration, - }, + { ColliderParams, BotZoneName, DelayToCanSpawnSec, Categories, Sides }, innerIndex ) => { if ( - !Categories.includes("Boss") && + ColliderParams?._props?.Radius !== undefined && + ColliderParams?._props?.Radius < limit && !BotZoneName?.toLowerCase().includes("snipe") && - DelayToCanSpawnSec < 41 + DelayToCanSpawnSec < 300 ) { - // Make it so players/pmcs can spawn anywhere. - if ( - config.playerOpenZones && - !!Infiltration && - (Sides.includes("Pmc") || Sides.includes("All")) - ) { - locationList[index].base.SpawnPointParams[innerIndex].Categories = [ - "Player", - "Coop", - innerIndex % 2 === 0 ? "Group" : "Opposite", - ]; + // console.log( + // "----", + // ColliderParams._props.Radius, + // "=>", + // limit, + // BotZoneName + // ); - locationList[index].base.SpawnPointParams[innerIndex].Sides = [ - "Pmc", - "All", - ]; - // console.log( - // BotZoneName || "none", - // locationList[index].base.SpawnPointParams[innerIndex].Categories, - // locationList[index].base.SpawnPointParams[innerIndex].Sides - // ); - } - - if ( - !config.allOpenZones && - config.pmcOpenZones && - Categories.includes("Bot") && - Sides[0] === "Savage" && - !Infiltration - ) { - locationList[index].base.SpawnPointParams[innerIndex].Categories = [ - "Player", - "Bot", - ]; - } - - if (!Infiltration && config.allOpenZones) { - locationList[index].base.SpawnPointParams[innerIndex].Categories = [ - "Bot", - "Player", - "Coop", - innerIndex % 2 === 0 ? "Group" : "Opposite", - ]; - - locationList[index].base.SpawnPointParams[innerIndex].Infiltration = - getRandomInfil(); - // console.log( - // locationList[index].base.SpawnPointParams[innerIndex].Infiltration - // ); - locationList[index].base.SpawnPointParams[innerIndex].Sides = [ - "Pmc", - "Savage", - "All", - ]; - } - - if ( - ColliderParams?._props?.Radius !== undefined && - ColliderParams?._props?.Radius < limit - ) { - locationList[index].base.SpawnPointParams[ - innerIndex - ].ColliderParams._props.Radius = limit; - } - } else { - if (!Categories.includes("Boss") && DelayToCanSpawnSec > 40) { - locationList[index].base.SpawnPointParams[ - innerIndex - ].DelayToCanSpawnSec = Math.round( - DelayToCanSpawnSec * Math.random() * Math.random() * 0.5 - ); - - // console.log( - // BotZoneName, - // DelayToCanSpawnSec, - // locationList[index].base.SpawnPointParams[innerIndex] - // .DelayToCanSpawnSec - // ); - } + locationList[index].base.SpawnPointParams[ + innerIndex + ].ColliderParams._props.Radius = limit; } } ); diff --git a/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/utils.ts b/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/utils.ts index 804bb17..77f60d6 100644 --- a/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/utils.ts +++ b/mods/MOAR - Ultra Lite Spawn Mod/user/mods/DewardianDev-MOAR/src/Spawning/utils.ts @@ -44,7 +44,7 @@ export const waveBuilder = ( ); const min = !offset && waves.length < 1 ? 0 : timeStart; - const max = !offset && waves.length < 1 ? 0 : timeStart + 60; + const max = !offset && waves.length < 1 ? 0 : timeStart + 10; if (waves.length >= 1 || offset) timeStart = timeStart + stage; const BotPreset = getDifficulty(difficulty); @@ -55,9 +55,8 @@ export const waveBuilder = ( ); if (slotMax < 1) slotMax = 1; - let slotMin = (Math.round(Math.random() * slotMax) || 1) - 1; + const slotMin = (Math.round(Math.random() * slotMax) || 1) - 1; - if (wildSpawnType === "marksman" && slotMin < 1) slotMin = 1; waves.push({ BotPreset, BotSide: getBotSide(wildSpawnType), @@ -190,26 +189,11 @@ export const getRandomZombieType = () => zombieTypesCaps[Math.round((zombieTypesCaps.length - 1) * Math.random())]; export const buildPmcWaves = ( - pmcTotal: number, + totalWaves: number, escapeTimeLimit: number, config: typeof _config, - bossZones: string[], - hotZones: string[] + bossZones: string[] ): IBossLocationSpawn[] => { - // console.log(pmcTotal) - if (!pmcTotal) return []; - const halfIndex = Math.round(bossZones.length * 0.75); //Put hotzones in the 2 - 4 spawns - // console.log(bossZones.length); - bossZones = [ - ...bossZones.slice(0, halfIndex), - ...hotZones, - ...bossZones.slice(halfIndex), - ]; - - // console.log(bossZones.length, hotZones.length); - // console.log(bossZones); - pmcTotal = pmcTotal + hotZones.length; - let { pmcMaxGroupSize, pmcDifficulty, @@ -218,12 +202,14 @@ export const buildPmcWaves = ( pmcWaveDistribution, } = config; - const averageTime = (escapeTimeLimit * 0.8) / pmcTotal; - + const averageTime = escapeTimeLimit / totalWaves; + const firstHalf = Math.round(averageTime * (1 - pmcWaveDistribution)); + const secondHalf = Math.round(averageTime * (1 + pmcWaveDistribution)); + let timeStart = -1; const waves: IBossLocationSpawn[] = []; - let maxSlotsReached = pmcTotal; + let maxSlotsReached = totalWaves; - while (pmcTotal > 0) { + while (totalWaves > 0) { let bossEscortAmount = Math.round( (morePmcGroups ? 1 : Math.random()) * Math.random() * @@ -231,24 +217,20 @@ export const buildPmcWaves = ( ); if (bossEscortAmount < 0) bossEscortAmount = 0; + const accelerate = totalWaves > 5 && waves.length < totalWaves / 3; + const stage = startingPmcs + ? 10 + : Math.round( + waves.length < Math.round(totalWaves * 0.5) + ? accelerate + ? firstHalf / 3 + : firstHalf + : secondHalf + ); - // const totalCountThisWave = bossEscortAmount + 1; - const totalCountThusFar = pmcTotal - maxSlotsReached; - - const timeToUse = - totalCountThusFar < pmcTotal * pmcWaveDistribution - ? Math.round( - averageTime * (1 - pmcWaveDistribution) * totalCountThusFar - ) - : Math.round( - escapeTimeLimit * (1 - pmcWaveDistribution) + - (1 - pmcWaveDistribution) * totalCountThusFar * averageTime - ); - - let timeStart = - (startingPmcs ? totalCountThusFar * totalCountThusFar * 3 : timeToUse) || - -1; + if (waves.length >= 1) timeStart = timeStart + stage; + // console.log(timeStart, BossEscortAmount); const side = Math.random() > 0.5 ? "pmcBEAR" : "pmcUSEC"; const BossDifficult = getDifficulty(pmcDifficulty); @@ -278,10 +260,7 @@ export const buildPmcWaves = ( maxSlotsReached -= 1 + bossEscortAmount; if (maxSlotsReached <= 0) break; } - // console.log( - // escapeTimeLimit, - // waves.map(({ Time }) => Time) - // ); + return waves; }; @@ -291,7 +270,6 @@ export const buildZombie = ( waveDistribution: number, BossChance: number = 100 ): IBossLocationSpawn[] => { - if (!totalWaves) return []; const averageTime = (escapeTimeLimit * 60) / totalWaves; const firstHalf = Math.round(averageTime * (1 - waveDistribution)); const secondHalf = Math.round(averageTime * (1 + waveDistribution)); diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/BepInEx/plugins/MOAR.dll b/mods/MOAR - Ultra Lite Spawn Mod_backup/BepInEx/plugins/MOAR.dll deleted file mode 100644 index 1da0b445ca1f9a6d5908ae3e5b7287eccb61c1fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31232 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 $GITHUB_OUTPUT - working-directory: ${{ github.workspace }} - - uses: "marvinpinto/action-automatic-releases@latest" - with: - repo_token: "${{ secrets.GITHUB_TOKEN }}" - automatic_release_tag: ${{ steps.versionstep.outputs.version }} - title: "MOAR ${{ steps.versionstep.outputs.version }}" - prerelease: false - files: | - ./dist/*.zip diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/.releaserc b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/.releaserc deleted file mode 100644 index 30ef720..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/.releaserc +++ /dev/null @@ -1,15 +0,0 @@ -branches: - - main - - name: staging - prerelease: true -debug: true -ci: true -dryRun: false -plugins: - - "@semantic-release/commit-analyzer" - - "@semantic-release/release-notes-generator" - - "@semantic-release/github" - - "@semantic-release/npm" - - - "@semantic-release/git" - - assets: ["package.json"] - message: "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/LICENSE.md b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/LICENSE.md deleted file mode 100644 index 35fbeeb..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2023 Dushaoan - -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. diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/PresetWeightings.json b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/PresetWeightings.json deleted file mode 100644 index 14298a3..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/PresetWeightings.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "live-like": 25, - "more-scavs": 8, - "more-pmcs": 8, - "more-scavs-and-pmcs": 5, - "main-boss-roaming": 5, - "sniper-buddies": 4, - "boss-invasion": 2, - "rogue-invasion": 0, - "raider-invasion": 0, - "insanity": 0 -} diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/Presets.json b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/Presets.json deleted file mode 100644 index 7682a97..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/Presets.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "live-like": {}, - "more-scavs": { - "moreScavGroups": true, - "scavMaxGroupSize": 5, - "scavWaveQuantity": 1.2 - }, - "more-pmcs": { - "morePmcGroups": true, - "pmcMaxGroupSize": 5, - "pmcWaveQuantity": 1.2 - }, - "more-scavs-and-pmcs": { - "maxBotCap": 30, - "moreScavGroups": true, - "scavMaxGroupSize": 5, - "morePmcGroups": true, - "pmcMaxGroupSize": 5, - "scavWaveQuantity": 1.2, - "pmcWaveQuantity": 1.2, - "mainBossChanceBuff": 25 - }, - "boss-invasion": { - "bossOpenZones": true, - "bossInvasion": true, - "bossInvasionSpawnChance": 10, - "mainBossChanceBuff": 25, - "gradualBossInvasion": true - }, - "rogue-invasion": { - "randomRaiderGroup": true, - "randomRaiderGroupChance": 50 - }, - "raider-invasion": { - "randomRaiderGroup": true, - "randomRaiderGroupChance": 50 - }, - "insanity": { - "scavWaveDistribution": 0.4, - "scavWaveQuantity": 1.3, - "pmcWaveQuantity": 1.3, - "maxBotCap": 30, - "maxBotPerZone": 9, - "moreScavGroups": true, - "morePmcGroups": true, - "pmcMaxGroupSize": 6, - "scavMaxGroupSize": 6, - "snipersHaveFriends": true, - "bossOpenZones": true, - "randomRaiderGroup": true, - "randomRaiderGroupChance": 50, - "randomRogueGroup": true, - "randomRogueGroupChance": 50, - "mainBossChanceBuff": 50, - "bossInvasion": true, - "bossInvasionSpawnChance": 10 - }, - "main-boss-roaming": { - "bossOpenZones": true, - "mainBossChanceBuff": 35 - }, - "sniper-buddies": { - "snipersHaveFriends": true - } -} diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/bossConfig.json b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/bossConfig.json deleted file mode 100644 index c31d04c..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/bossConfig.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "ADD_THESE_TO_A_MAP_TO_OVERRIDE_OR_ADD_A_BOSS_TO_A_MAP": { - "BOSS_NAME_EXAMPLE": "CHANCE_OF_SPAWNING_PERCENT", - "sectantPriest": 0, - "arenaFighterEvent": 0, - "bossBoarSniper": 0, - "pmcBot": 0, - "bossZryachiy": 0, - "exUsec": 0, - "crazyAssaultEvent": 0, - "peacemaker": 0, - "bossKojaniy": 0, - "bossGluhar": 0, - "bossSanitar": 0, - "bossKilla": 0, - "bossTagilla": 0, - "bossKnight": 0, - "bossBoar": 0, - "bossKolontay": 0, - "bossPartisan": 0, - "bossBully": 0 - }, - "customs": { - "bossKnight": 30, - "bossPartisan": 30, - "bossBully": 30 - }, - "factoryDay": { - "bossTagilla": 30 - }, - "factoryNight": { - "bossTagilla": 30 - }, - "interchange": { - "bossKilla": 30 - }, - "laboratory": {}, - "lighthouse": { - "bossKnight": 30, - "bossPartisan": 30 - }, - "rezervbase": { - "bossGluhar": 30 - }, - "shoreline": { - "bossKnight": 30, - "bossPartisan": 30, - "bossSanitar": 30 - }, - "tarkovstreets": { - "bossBoar": 30, - "bossKolontay": 30 - }, - "woods": { - "bossKojaniy": 30, - "bossKnight": 30, - "bossPartisan": 30 - }, - "gzLow": {}, - "gzHigh": { - "bossKolontay": 30 - } -} \ No newline at end of file diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/config.json b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/config.json deleted file mode 100644 index 3cabd04..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/config.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "enableBotSpawning": true, - - "pmcDifficulty": 0.3, - "scavDifficulty": 0.3, - - "scavWaveDistribution": 0.5, - "scavWaveQuantity": 1, - - "startingPmcs": false, - - "pmcWaveDistribution": 0.8, - "pmcWaveQuantity": 1, - - "zombiesEnabled": false, - "zombieWaveDistribution": 0.5, - "zombieWaveQuantity": 1, - "zombieHealth": 1, - - "maxBotCap": 25, - "maxBotPerZone": 7, - - "moreScavGroups": false, - "morePmcGroups": false, - "pmcMaxGroupSize": 4, - "scavMaxGroupSize": 4, - - "snipersHaveFriends": false, - - "bossOpenZones": false, - - "randomRaiderGroup": false, - "randomRaiderGroupChance": 10, - - "randomRogueGroup": false, - "randomRogueGroupChance": 10, - - "disableBosses": false, - "mainBossChanceBuff": 0, - - "bossInvasion": false, - "bossInvasionSpawnChance": 5, - "gradualBossInvasion": true, - - "debug": false -} diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/mapConfig.json b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/mapConfig.json deleted file mode 100644 index 7871bbb..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/config/mapConfig.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "customs": { - "spawnMinDistance": 30, - "pmcWaveCount": 12, - "scavWaveCount": 21, - "zombieWaveCount": 9, - "scavHotZones": [ - "ZoneDormitory" - ], - "pmcHotZones": [ - "ZoneDormitory" - ] - }, - "factoryDay": { - "spawnMinDistance": 20, - "maxBotCapOverride": 12, - "maxBotPerZoneOverride": 10, - "pmcWaveCount": 8, - "scavWaveCount": 9, - "zombieWaveCount": 6 - }, - "factoryNight": { - "spawnMinDistance": 20, - "maxBotCapOverride": 12, - "maxBotPerZoneOverride": 10, - "pmcWaveCount": 8, - "scavWaveCount": 9, - "zombieWaveCount": 6 - }, - "interchange": { - "spawnMinDistance": 40, - "pmcWaveCount": 14, - "scavWaveCount": 32, - "zombieWaveCount": 12, - "scavHotZones": [ - "ZoneCenterBot", - "ZoneCenter" - ] - }, - "laboratory": { - "spawnMinDistance": 20, - "pmcWaveCount": 10, - "scavWaveCount": 0, - "zombieWaveCount": 12 - }, - "lighthouse": { - "spawnMinDistance": 40, - "pmcWaveCount": 12, - "scavWaveCount": 20, - "zombieWaveCount": 10, - "scavHotZones": [ - "Zone_LongRoad", - "Zone_LongRoad" - ] - }, - "rezervbase": { - "spawnMinDistance": 40, - "pmcWaveCount": 11, - "scavWaveCount": 24, - "zombieWaveCount": 9, - "scavHotZones": [ - "ZoneRailStrorage" - ], - "pmcHotZones": [ - "ZoneBarrack" - ] - }, - "shoreline": { - "spawnMinDistance": 40, - "pmcWaveCount": 14, - "scavWaveCount": 32, - "zombieWaveCount": 12, - "scavHotZones": [ - "ZoneSanatorium1" - ], - "pmcHotZones": [ - "ZoneSanatorium2" - ] - }, - "tarkovstreets": { - "spawnMinDistance": 40, - "pmcWaveCount": 16, - "scavWaveCount": 28, - "zombieWaveCount": 13 - }, - "woods": { - "spawnMinDistance": 40, - "pmcWaveCount": 14, - "scavWaveCount": 28, - "zombieWaveCount": 10, - "scavHotZones": [ - "ZoneWoodCutter" - ], - "pmcHotZones": [ - "ZoneWoodCutter" - ] - }, - "gzLow": { - "spawnMinDistance": 30, - "pmcWaveCount": 10, - "scavWaveCount": 18, - "zombieWaveCount": 9 - }, - "gzHigh": { - "spawnMinDistance": 30, - "pmcWaveCount": 12, - "scavWaveCount": 18, - "zombieWaveCount": 9 - } -} \ No newline at end of file diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/package.json b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/package.json deleted file mode 100644 index a8bbb14..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "MOAR", - "version": "2.6.1", - "main": "src/mod.js", - "license": "MIT", - "author": "DewardianDev", - "sptVersion": "^3.10.x", - "scripts": { - "setup": "npm i", - "build": "node ./packageBuild.ts" - }, - "devDependencies": { - "@semantic-release/git": "^10.0.1", - "@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", - "semantic-release": "^24.2.0", - "tsyringe": "4.7.0", - "typescript": "4.9.4" - } -} diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/GlobalValues.ts b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/GlobalValues.ts deleted file mode 100644 index 2aedb9d..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/GlobalValues.ts +++ /dev/null @@ -1,11 +0,0 @@ -import config from "../config/config.json"; -import { ILocationBase } from "@spt/models/eft/common/ILocationBase"; - -export class globalValues { - public static baseConfig: typeof config = undefined; - public static overrideConfig: Partial = undefined; - public static locationsBase: ILocationBase[] = undefined; - public static currentPreset: string = ""; - public static forcedPreset: string = "custom"; - public static addedMapZones: Record = {}; -} diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Routes/routes.ts b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Routes/routes.ts deleted file mode 100644 index bbbe886..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Routes/routes.ts +++ /dev/null @@ -1,168 +0,0 @@ -import { DependencyContainer } from "tsyringe"; -import { buildWaves } from "../Spawning/Spawning"; -import { StaticRouterModService } from "@spt/services/mod/staticRouter/StaticRouterModService"; -import { DynamicRouterModService } from "@spt/services/mod/dynamicRouter/DynamicRouterModService"; -import { globalValues } from "../GlobalValues"; -import { kebabToTitle } from "../utils"; -import PresetWeightingsConfig from "../../config/PresetWeightings.json"; - -export const setupRoutes = (container: DependencyContainer) => { - const staticRouterModService = container.resolve( - "StaticRouterModService" - ); - - const dynamicRouterModService = container.resolve( - "DynamicRouterModService" - ); - - // Make buildwaves run on game end - staticRouterModService.registerStaticRouter( - `moarUpdater`, - [ - { - url: "/client/match/local/end", - action: async (_url, info, sessionId, output) => { - buildWaves(container); - return output; - }, - }, - ], - "moarUpdater" - ); - - staticRouterModService.registerStaticRouter( - `moarGetCurrentPreset`, - [ - { - url: "/moar/currentPreset", - action: async () => { - return globalValues.forcedPreset || "random"; - }, - }, - ], - "moarGetCurrentPreset" - ); - - staticRouterModService.registerStaticRouter( - `moarGetAnnouncePreset`, - [ - { - url: "/moar/announcePreset", - action: async () => { - if (globalValues.forcedPreset?.toLowerCase() === "random") { - return globalValues.currentPreset; - } - return globalValues.forcedPreset || globalValues.currentPreset; - }, - }, - ], - "moarGetAnnouncePreset" - ); - - staticRouterModService.registerStaticRouter( - `getDefaultConfig`, - [ - { - url: "/moar/getDefaultConfig", - action: async () => { - return JSON.stringify(globalValues.baseConfig); - }, - }, - ], - "getDefaultConfig" - ); - - staticRouterModService.registerStaticRouter( - `getServerConfigWithOverrides`, - [ - { - url: "/moar/getServerConfigWithOverrides", - action: async () => { - return JSON.stringify({ - ...(globalValues.baseConfig || {}), - ...(globalValues.overrideConfig || {}), - }); - }, - }, - ], - "getServerConfigWithOverrides" - ); - - staticRouterModService.registerStaticRouter( - `getServerConfigWithOverrides`, - [ - { - url: "/moar/getServerConfigWithOverrides", - action: async () => { - return JSON.stringify({ - ...globalValues.baseConfig, - ...globalValues.overrideConfig, - }); - }, - }, - ], - "getServerConfigWithOverrides" - ); - - staticRouterModService.registerStaticRouter( - `moarGetPresetsList`, - [ - { - url: "/moar/getPresets", - action: async () => { - let result = [ - ...Object.keys(PresetWeightingsConfig).map((preset) => ({ - Name: kebabToTitle(preset), - Label: preset, - })), - { Name: "Random", Label: "random" }, - { Name: "Custom", Label: "custom" }, - ]; - - return JSON.stringify({ data: result }); - }, - }, - ], - "moarGetPresetsList" - ); - - staticRouterModService.registerStaticRouter( - "setOverrideConfig", - [ - { - url: "/moar/setOverrideConfig", - action: async ( - url: string, - overrideConfig: typeof globalValues.overrideConfig = {}, - sessionID, - output - ) => { - globalValues.overrideConfig = overrideConfig; - - buildWaves(container); - - return "Success"; - }, - }, - ], - "setOverrideConfig" - ); - - staticRouterModService.registerStaticRouter( - "moarSetPreset", - [ - { - url: "/moar/setPreset", - action: async (url: string, { Preset }, sessionID, output) => { - globalValues.forcedPreset = Preset; - buildWaves(container); - - return `Current Preset: ${kebabToTitle( - globalValues.forcedPreset || "Random" - )}`; - }, - }, - ], - "moarSetPreset" - ); -}; diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/Spawning.ts b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/Spawning.ts deleted file mode 100644 index 1aaad28..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/Spawning.ts +++ /dev/null @@ -1,154 +0,0 @@ -import { IBotConfig } from "@spt/models/spt/config/IBotConfig.d"; -import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig.d"; -import { DatabaseServer } from "@spt/servers/DatabaseServer"; -import _config from "../../config/config.json"; -import _mapConfig from "../../config/mapConfig.json"; -import { ConfigServer } from "@spt/servers/ConfigServer"; -import { ConfigTypes } from "@spt/models/enums/ConfigTypes"; -import { DependencyContainer } from "tsyringe"; -import { globalValues } from "../GlobalValues"; -import { cloneDeep, getRandomPresetOrCurrentlySelectedPreset } from "../utils"; -import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig.d"; -import { originalMapList } from "./constants"; -import { buildBossWaves } from "./buildBossWaves"; -import buildZombieWaves from "./buildZombieWaves"; -import buildScavMarksmanWaves from "./buildScavMarksmanWaves"; -import buildPmcs from "./buildPmcs"; -import { setEscapeTimeOverrides } from "./utils"; -import { ILogger } from "@spt/models/spt/utils/ILogger"; -import updateSpawnLocations from "./updateSpawnLocations"; - -export const buildWaves = (container: DependencyContainer) => { - const configServer = container.resolve("ConfigServer"); - const Logger = container.resolve("WinstonLogger"); - const pmcConfig = configServer.getConfig(ConfigTypes.PMC); - const botConfig = configServer.getConfig(ConfigTypes.BOT); - - const locationConfig = configServer.getConfig( - ConfigTypes.LOCATION - ); - - locationConfig.rogueLighthouseSpawnTimeSettings.waitTimeSeconds = 60; - locationConfig.enableBotTypeLimits = false; - locationConfig.fitLootIntoContainerAttempts = 1; // Move to ALP - locationConfig.addCustomBotWavesToMaps = false; - locationConfig.customWaves = { boss: {}, normal: {} }; - - const databaseServer = container.resolve("DatabaseServer"); - - const { locations, bots, globals } = databaseServer.getTables(); - - let config = cloneDeep(globalValues.baseConfig) as typeof _config; - - const preset = getRandomPresetOrCurrentlySelectedPreset(); - - Object.keys(globalValues.overrideConfig).forEach((key) => { - if (config[key] !== globalValues.overrideConfig[key]) { - config.debug && - console.log( - `[MOAR] overrideConfig ${key} changed from ${config[key]} to ${globalValues.overrideConfig[key]}` - ); - config[key] = globalValues.overrideConfig[key]; - } - }); - - // Set from preset if preset above is not empty - Object.keys(preset).forEach((key) => { - if (config[key] !== preset[key]) { - config.debug && - console.log( - `[MOAR] preset ${globalValues.currentPreset}: ${key} changed from ${config[key]} to ${preset[key]}` - ); - config[key] = preset[key]; - } - }); - - config.debug && - console.log( - globalValues.forcedPreset === "custom" - ? "custom" - : globalValues.currentPreset - ); - - const { - bigmap: customs, - factory4_day: factoryDay, - factory4_night: factoryNight, - interchange, - laboratory, - lighthouse, - rezervbase, - shoreline, - tarkovstreets, - woods, - sandbox: gzLow, - sandbox_high: gzHigh, - } = locations; - - let locationList = [ - customs, - factoryDay, - factoryNight, - interchange, - laboratory, - lighthouse, - rezervbase, - shoreline, - tarkovstreets, - woods, - gzLow, - gzHigh, - ]; - - // This resets all locations to original state - if (!globalValues.locationsBase) { - globalValues.locationsBase = locationList.map(({ base }) => - cloneDeep(base) - ); - } else { - locationList = locationList.map((item, key) => ({ - ...item, - base: cloneDeep(globalValues.locationsBase[key]), - })); - } - - pmcConfig.convertIntoPmcChance = { - default: { - assault: { min: 0, max: 0 }, - cursedassault: { min: 0, max: 0 }, - pmcbot: { min: 0, max: 0 }, - exusec: { min: 0, max: 0 }, - arenafighter: { min: 0, max: 0 }, - arenafighterevent: { min: 0, max: 0 }, - crazyassaultevent: { min: 0, max: 0 }, - }, - factory4_day: { assault: { min: 0, max: 0 } }, - laboratory: { pmcbot: { min: 0, max: 0 } }, - rezervbase: { pmcbot: { min: 0, max: 0 } }, - }; - - updateSpawnLocations(locationList); - - setEscapeTimeOverrides(locationList, _mapConfig, Logger, config); - - // Make main waves - buildScavMarksmanWaves(config, locationList, botConfig); - - // BOSS RELATED STUFF! - buildBossWaves(config, locationList); - - //Zombies - if (config.zombiesEnabled) { - buildZombieWaves(config, locationList, bots); - } - - buildPmcs(config, locationList); - - originalMapList.forEach((name, index) => { - if (!locations[name]) { - console.log("[MOAR] OH CRAP we have a problem!", name); - } else { - locations[name] = locationList[index]; - } - }); -}; diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildBossWaves.ts b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildBossWaves.ts deleted file mode 100644 index 02853e7..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildBossWaves.ts +++ /dev/null @@ -1,278 +0,0 @@ -import { ILocation } from "@spt/models/eft/common/ILocation"; -import _config from "../../config/config.json"; -import bossConfig from "../../config/bossConfig.json"; -import mapConfig from "../../config/mapConfig.json"; -import { - bossesToRemoveFromPool, - configLocations, - mainBossNameList, - originalMapList, -} from "./constants"; -import { buildBossBasedWave, shuffle } from "./utils"; -import { IBossLocationSpawn } from "@spt/models/eft/common/ILocationBase"; -import { cloneDeep } from "../utils"; - -export function buildBossWaves( - config: typeof _config, - locationList: ILocation[] -) { - let { - randomRaiderGroup, - randomRaiderGroupChance, - randomRogueGroup, - randomRogueGroupChance, - mainBossChanceBuff, - bossInvasion, - bossInvasionSpawnChance, - disableBosses, - bossOpenZones, - gradualBossInvasion, - } = config; - - const bossList = mainBossNameList.filter( - (bossName) => !["bossKnight"].includes(bossName) - ); - - const allBosses: Record = {}; - for (const key in locationList) { - locationList[key].base.BossLocationSpawn.forEach((boss) => { - if (!allBosses[boss.BossName]) { - allBosses[boss.BossName] = boss; - } - }); - } - - // CreateBossList - const bosses: Record = {}; - for (let indx = 0; indx < locationList.length; indx++) { - // Disable Bosses - if (disableBosses && !!locationList[indx].base?.BossLocationSpawn) { - locationList[indx].base.BossLocationSpawn = []; - } else { - //Remove all other spawns from pool now that we have the spawns zone list - locationList[indx].base.BossLocationSpawn = locationList[ - indx - ].base.BossLocationSpawn.filter( - (boss) => !bossesToRemoveFromPool.has(boss.BossName) - ); - - const location = locationList[indx]; - - const defaultBossSettings = - mapConfig?.[configLocations[indx]]?.defaultBossSettings; - - // Sets bosses spawn chance from settings - if ( - location?.base?.BossLocationSpawn && - defaultBossSettings && - Object.keys(defaultBossSettings)?.length - ) { - const filteredBossList = Object.keys(defaultBossSettings).filter( - (name) => defaultBossSettings[name]?.BossChance !== undefined - ); - if (filteredBossList?.length) { - filteredBossList.forEach((bossName) => { - location.base.BossLocationSpawn = - location.base.BossLocationSpawn.map((boss) => ({ - ...boss, - ...(boss.BossName === bossName - ? { BossChance: defaultBossSettings[bossName].BossChance } - : {}), - })); - }); - } - } - - if (randomRaiderGroup) { - const raiderWave = buildBossBasedWave( - randomRaiderGroupChance, - "1,2,2,2,3", - "pmcBot", - "pmcBot", - "", - locationList[indx].base.EscapeTimeLimit - ); - location.base.BossLocationSpawn.push(raiderWave); - } - - if (randomRogueGroup) { - const rogueWave = buildBossBasedWave( - randomRogueGroupChance, - "1,2,2,2,3", - "exUsec", - "exUsec", - "", - locationList[indx].base.EscapeTimeLimit - ); - location.base.BossLocationSpawn.push(rogueWave); - } - - //Add each boss from each map to bosses object - const filteredBosses = location.base.BossLocationSpawn?.filter( - ({ BossName }) => mainBossNameList.includes(BossName) - ); - - if (filteredBosses.length) { - for (let index = 0; index < filteredBosses.length; index++) { - const boss = filteredBosses[index]; - if ( - !bosses[boss.BossName] || - (bosses[boss.BossName] && - bosses[boss.BossName].BossChance < boss.BossChance) - ) { - bosses[boss.BossName] = { ...boss }; - } - } - } - } - } - - if (!disableBosses) { - // Make boss Invasion - if (bossInvasion) { - if (bossInvasionSpawnChance) { - bossList.forEach((bossName) => { - if (bosses[bossName]) - bosses[bossName].BossChance = bossInvasionSpawnChance; - }); - } - - for (let key = 0; key < locationList.length; key++) { - //Gather bosses to avoid duplicating. - let bossLocations = ""; - - const duplicateBosses = [ - ...locationList[key].base.BossLocationSpawn.filter( - ({ BossName, BossZone }) => { - bossLocations += BossZone + ","; - return bossList.includes(BossName); - } - ).map(({ BossName }) => BossName), - "bossKnight", // So knight doesn't invade - ]; - - const uniqueBossZones = bossOpenZones - ? "" - : [ - ...new Set( - bossLocations - .split(",") - .filter( - (zone) => !!zone && !zone.toLowerCase().includes("snipe") - ) - ), - ].join(","); - - //Build bosses to add - const bossesToAdd = shuffle(Object.values(bosses)) - .filter(({ BossName }) => !duplicateBosses.includes(BossName)) - .map((boss, j) => ({ - ...boss, - BossZone: uniqueBossZones, - BossEscortAmount: - boss.BossEscortAmount === "0" ? boss.BossEscortAmount : "1", - ...(gradualBossInvasion ? { Time: j * 20 + 1 } : {}), - })); - - // UpdateBosses - locationList[key].base.BossLocationSpawn = [ - ...locationList[key].base.BossLocationSpawn, - ...bossesToAdd, - ]; - } - } - let hasChangedBossSpawns = false; - // console.log(Object.keys(allBosses)); - configLocations.forEach((mapName, index) => { - const bossLocationSpawn = locationList[index].base.BossLocationSpawn; - const mapBossConfig: Record = cloneDeep( - bossConfig[mapName] || {} - ); - // if (Object.keys(mapBossConfig).length === 0) console.log(name, "empty"); - const adjusted = new Set([]); - - bossLocationSpawn.forEach(({ BossName, BossChance }, bossIndex) => { - if (typeof mapBossConfig[BossName] === "number") { - if (BossChance !== mapBossConfig[BossName]) { - if (!hasChangedBossSpawns) { - console.log( - `\n[MOAR]: --- Adjusting default boss spawn rates --- ` - ); - hasChangedBossSpawns = true; - } - console.log( - `[MOAR]: ${mapName} ${BossName}: ${locationList[index].base.BossLocationSpawn[bossIndex].BossChance} => ${mapBossConfig[BossName]}` - ); - locationList[index].base.BossLocationSpawn[bossIndex].BossChance = - mapBossConfig[BossName]; - } - adjusted.add(BossName); - } - }); - - const bossesToAdd = Object.keys(mapBossConfig) - .filter( - (adjustName) => !adjusted.has(adjustName) && !!allBosses[adjustName] - ) - .map((bossName) => { - `[MOAR]: Adding non-default boss ${bossName} to ${originalMapList[index]}`; - - const newBoss: IBossLocationSpawn = cloneDeep( - allBosses[bossName] || {} - ); - newBoss.BossChance = mapBossConfig[bossName]; - // console.log( - // "Adding boss", - // bossName, - // "to ", - // originalMapList[index], - // "spawn chance =>", - // mapBossConfig[bossName] - // ); - return newBoss; - }); - - // console.log(bossesToAdd); - - if (bossOpenZones || mainBossChanceBuff) { - locationList[index].base?.BossLocationSpawn?.forEach((boss, key) => { - if (bossList.includes(boss.BossName)) { - if (bossOpenZones) { - locationList[index].base.BossLocationSpawn[key] = { - ...locationList[index].base.BossLocationSpawn[key], - BossZone: "", - }; - } - - if (!!boss.BossChance && mainBossChanceBuff > 0) { - locationList[index].base.BossLocationSpawn[key] = { - ...locationList[index].base.BossLocationSpawn[key], - BossChance: - boss.BossChance + mainBossChanceBuff > 100 - ? 100 - : Math.round(boss.BossChance + mainBossChanceBuff), - }; - } - } - }); - } - - locationList[index].base.BossLocationSpawn = [ - ...locationList[index].base.BossLocationSpawn, - ...bossesToAdd, - ]; - - bossesToAdd.length && - console.log( - `[MOAR] Adding the following bosses to map ${ - configLocations[index] - }: ${bossesToAdd.map(({ BossName }) => BossName)}` - ); - }); - if (hasChangedBossSpawns) { - console.log( - `[MOAR]: --- Adjusting default boss spawn rates complete --- \n` - ); - } - } -} diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildPmcs.ts b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildPmcs.ts deleted file mode 100644 index 8b19992..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildPmcs.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { ILocation } from "@spt/models/eft/common/ILocation"; -import _config from "../../config/config.json"; -import mapConfig from "../../config/mapConfig.json"; -import { - bossesToRemoveFromPool, - defaultEscapeTimes, - defaultHostility, -} from "./constants"; -import { buildPmcWaves, MapSettings, shuffle } from "./utils"; -import { saveToFile } from "../utils"; - -export default function buildPmcs( - config: typeof _config, - locationList: ILocation[] -) { - for (let index = 0; index < locationList.length; index++) { - const mapSettingsList = Object.keys(mapConfig) as Array< - keyof typeof mapConfig - >; - const map = mapSettingsList[index]; - - locationList[index].base.BotLocationModifier.AdditionalHostilitySettings = - defaultHostility; - - const { pmcHotZones = [] } = (mapConfig?.[map] as MapSettings) || {}; - - let pmcZones = shuffle([ - ...new Set( - [...locationList[index].base.SpawnPointParams] - .filter( - ({ Categories, BotZoneName }) => - !!BotZoneName && - (Categories.includes("Player") || - (map === "laboratory" && - !BotZoneName.includes("BotZoneGate"))) && - !BotZoneName.includes("snipe") - ) - .map(({ BotZoneName, ...rest }) => { - return BotZoneName; - }) - ), - ...pmcHotZones, - ]); - // Make labs have only named zones - if (map === "laboratory") { - pmcZones = new Array(10).fill(pmcZones).flat(1); - // console.log(pmcZones); - } - - const timeLimit = locationList[index].base.EscapeTimeLimit * 60; - - const { pmcWaveCount } = mapConfig[map]; - - const escapeTimeLimitRatio = Math.round( - locationList[index].base.EscapeTimeLimit / defaultEscapeTimes[map] - ); - - const totalWaves = Math.round( - pmcWaveCount * config.pmcWaveQuantity * escapeTimeLimitRatio - ); - // console.log(pmcZones.length, totalWaves); - const numberOfZoneless = totalWaves - pmcZones.length; - if (numberOfZoneless > 0) { - const addEmpty = new Array(numberOfZoneless).fill(""); - pmcZones = shuffle([...pmcZones, ...addEmpty]); - } - // if (map === "laboratory") console.log(numberOfZoneless, pmcZones); - - if (config.debug) { - console.log(`${map} PMC count ${totalWaves} \n`); - - escapeTimeLimitRatio !== 1 && - console.log( - `${map} PMC wave count changed from ${pmcWaveCount} to ${totalWaves} due to escapeTimeLimit adjustment` - ); - } - - const waves = buildPmcWaves(pmcWaveCount, timeLimit, config, pmcZones); - // if (map === "laboratory") - // console.log(waves.map(({ BossZone }) => BossZone)); - // apply our new waves - locationList[index].base.BossLocationSpawn = [ - ...waves, - ...locationList[index].base.BossLocationSpawn, - ]; - } -} diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildScavMarksmanWaves.ts b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildScavMarksmanWaves.ts deleted file mode 100644 index 93b9baf..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildScavMarksmanWaves.ts +++ /dev/null @@ -1,226 +0,0 @@ -import { ILocation } from "@spt/models/eft/common/ILocation"; -import _config from "../../config/config.json"; -import mapConfig from "../../config/mapConfig.json"; -import { - configLocations, - defaultEscapeTimes, - defaultHostility, - originalMapList, -} from "./constants"; -import { MapSettings, shuffle, waveBuilder } from "./utils"; -import { IWave, WildSpawnType } from "@spt/models/eft/common/ILocationBase"; -import { IBotConfig } from "@spt/models/spt/config/IBotConfig"; -import { saveToFile } from "../utils"; - -export default function buildScavMarksmanWaves( - config: typeof _config, - locationList: ILocation[], - botConfig: IBotConfig -) { - let { - debug, - maxBotCap, - scavWaveQuantity, - scavWaveDistribution, - snipersHaveFriends, - maxBotPerZone, - scavMaxGroupSize, - scavDifficulty, - moreScavGroups, - } = config; - - for (let index = 0; index < locationList.length; index++) { - const mapSettingsList = Object.keys(mapConfig) as Array< - keyof typeof mapConfig - >; - const map = mapSettingsList[index]; - - locationList[index].base = { - ...locationList[index].base, - ...{ - NewSpawn: false, - OcculsionCullingEnabled: true, - OfflineNewSpawn: false, - OfflineOldSpawn: true, - OldSpawn: true, - BotSpawnCountStep: 0, - }, - }; - - locationList[index].base.NonWaveGroupScenario.Enabled = false; - locationList[index].base["BotStartPlayer"] = 0; - if ( - locationList[index].base.BotStop < - locationList[index].base.EscapeTimeLimit * 60 - ) { - locationList[index].base.BotStop = - locationList[index].base.EscapeTimeLimit * 60; - } - - const { - maxBotPerZoneOverride, - maxBotCapOverride, - EscapeTimeLimit, - scavHotZones, - } = (mapConfig?.[map] as MapSettings) || {}; - - // Set per map EscapeTimeLimit - if (EscapeTimeLimit) { - locationList[index].base.EscapeTimeLimit = EscapeTimeLimit; - locationList[index].base.exit_access_time = EscapeTimeLimit + 1; - } - - // Set default or per map maxBotCap - if (maxBotCapOverride || maxBotCap) { - const capToSet = maxBotCapOverride || maxBotCap; - // console.log(map, capToSet, maxBotCapOverride, maxBotCap); - locationList[index].base.BotMax = capToSet; - locationList[index].base.BotMaxPvE = capToSet; - botConfig.maxBotCap[originalMapList[index]] = capToSet; - } - - // Adjust botZone quantity - if (maxBotPerZoneOverride || maxBotPerZone) { - const BotPerZone = maxBotPerZoneOverride || maxBotPerZone; - // console.log(map, BotPerZone, maxBotPerZoneOverride, maxBotPerZone); - locationList[index].base.MaxBotPerZone = BotPerZone; - } - - const sniperLocations = new Set( - [...locationList[index].base.SpawnPointParams] - .filter( - ({ Categories, Sides, BotZoneName }) => - !!BotZoneName && - Sides.includes("Savage") && - !Categories.includes("Boss") - ) - .filter( - ({ BotZoneName, DelayToCanSpawnSec }) => - BotZoneName?.toLowerCase().includes("snipe") || - DelayToCanSpawnSec > 300 - ) - .map(({ BotZoneName }) => BotZoneName) - ); - - if (sniperLocations.size) { - locationList[index].base.MinMaxBots = [ - { - WildSpawnType: "marksman", - max: sniperLocations.size * 5, - min: sniperLocations.size, - }, - ]; - } - - const scavZones = shuffle([ - ...new Set( - [...locationList[index].base.SpawnPointParams] - .filter( - ({ Categories, Sides, BotZoneName }) => - !!BotZoneName && - Sides.includes("Savage") && - !Categories.includes("Boss") - ) - .map(({ BotZoneName }) => BotZoneName) - .filter((name) => !sniperLocations.has(name)) - ), - ]); - - // Reduced Zone Delay - locationList[index].base.SpawnPointParams = locationList[ - index - ].base.SpawnPointParams.map((spawn) => ({ - ...spawn, - DelayToCanSpawnSec: - spawn.DelayToCanSpawnSec > 20 - ? Math.round(spawn.DelayToCanSpawnSec / 10) - : spawn.DelayToCanSpawnSec, - })); - - const timeLimit = locationList[index].base.EscapeTimeLimit * 60; - const { scavWaveCount } = mapConfig[map]; - - const escapeTimeLimitRatio = Math.round( - locationList[index].base.EscapeTimeLimit / defaultEscapeTimes[map] - ); - - // Scavs - const scavTotalWaveCount = Math.round( - scavWaveCount * scavWaveQuantity * escapeTimeLimitRatio - ); - - config.debug && - escapeTimeLimitRatio !== 1 && - console.log( - `${map} Scav wave count changed from ${scavWaveCount} to ${scavTotalWaveCount} due to escapeTimeLimit adjustment` - ); - - let snipers = waveBuilder( - sniperLocations.size, - Math.round(timeLimit / 4), - 0.5, - WildSpawnType.MARKSMAN, - 0.7, - false, - 2, - [], - shuffle([...sniperLocations]), - 80, - false, - true - ); - - if (snipersHaveFriends) - snipers = snipers.map((wave) => ({ - ...wave, - slots_min: 0, - ...(snipersHaveFriends && wave.slots_max < 2 - ? { slots_min: 1, slots_max: 2 } - : {}), - })); - - const scavWaves = waveBuilder( - scavTotalWaveCount, - timeLimit, - scavWaveDistribution, - WildSpawnType.ASSAULT, - scavDifficulty, - false, - scavMaxGroupSize, - map === "gzHigh" ? [] : scavZones, - scavHotZones, - 0, - false, - !!moreScavGroups - ); - - if (debug) { - let totalscav = 0; - scavWaves.forEach(({ slots_max }) => (totalscav += slots_max)); - - console.log(configLocations[index]); - console.log( - "Scavs:", - totalscav, - "configVal", - Math.round((totalscav / scavWaveCount) * 100) / 100, - "configWaveCount", - scavWaveCount, - "waveCount", - scavWaves.length, - "\n" - ); - } - - // const finalSniperWaves = snipers?.map(({ ...rest }, snipKey) => ({ - // ...rest, - // number: snipKey, - // time_min: snipKey * 120, - // time_max: snipKey * 120 + 120, - // })); - // if (map === "customs") saveToFile({ scavWaves }, "scavWaves.json"); - locationList[index].base.waves = [...snipers, ...scavWaves] - .sort(({ time_min: a }, { time_min: b }) => a - b) - .map((wave, i) => ({ ...wave, number: i + 1 })); - } -} diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildZombieWaves.ts b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildZombieWaves.ts deleted file mode 100644 index ab1ecd2..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/buildZombieWaves.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { ILocation } from "@spt/models/eft/common/ILocation"; -import _config from "../../config/config.json"; -import mapConfig from "../../config/mapConfig.json"; -import { configLocations, defaultEscapeTimes } from "./constants"; -import { - buildZombie, - getHealthBodyPartsByPercentage, - zombieTypes, -} from "./utils"; -import { IBots } from "@spt/models/spt/bots/IBots"; - -export default function buildZombieWaves( - config: typeof _config, - locationList: ILocation[], - bots: IBots -) { - let { debug, zombieWaveDistribution, zombieWaveQuantity, zombieHealth } = - config; - - const zombieBodyParts = getHealthBodyPartsByPercentage(zombieHealth); - zombieTypes.forEach((type) => { - bots.types?.[type]?.health?.BodyParts?.forEach((_, index) => { - bots.types[type].health.BodyParts[index] = zombieBodyParts; - }); - }); - - for (let indx = 0; indx < locationList.length; indx++) { - const location = locationList[indx].base; - const mapSettingsList = Object.keys(mapConfig) as Array< - keyof typeof mapConfig - >; - const map = mapSettingsList[indx]; - - const { zombieWaveCount } = mapConfig?.[configLocations[indx]]; - - // if (location.Events?.Halloween2024?.MaxCrowdAttackSpawnLimit) - // location.Events.Halloween2024.MaxCrowdAttackSpawnLimit = 100; - // if (location.Events?.Halloween2024?.CrowdCooldownPerPlayerSec) - // location.Events.Halloween2024.CrowdCooldownPerPlayerSec = 60; - // if (location.Events?.Halloween2024?.CrowdCooldownPerPlayerSec) - // location.Events.Halloween2024.CrowdsLimit = 10; - // if (location.Events?.Halloween2024?.CrowdAttackSpawnParams) - // location.Events.Halloween2024.CrowdAttackSpawnParams = []; - - if (!zombieWaveCount) return; - - const escapeTimeLimitRatio = Math.round( - locationList[indx].base.EscapeTimeLimit / defaultEscapeTimes[map] - ); - - const zombieTotalWaveCount = Math.round( - zombieWaveCount * zombieWaveQuantity * escapeTimeLimitRatio - ); - - config.debug && - escapeTimeLimitRatio !== 1 && - console.log( - `${map} Zombie wave count changed from ${zombieWaveCount} to ${zombieTotalWaveCount} due to escapeTimeLimit adjustment` - ); - - const zombieWaves = buildZombie( - zombieTotalWaveCount, - location.EscapeTimeLimit, - zombieWaveDistribution, - 9999 - ); - - debug && - console.log( - configLocations[indx], - " generated ", - zombieWaves.length, - "Zombies" - ); - - location.BossLocationSpawn.push(...zombieWaves); - - // console.log(zombieWaves[0], zombieWaves[7]); - } -} diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/constants.ts b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/constants.ts deleted file mode 100644 index 6698732..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/constants.ts +++ /dev/null @@ -1,204 +0,0 @@ -export const defaultHostility = [ - { - AlwaysEnemies: [ - "bossTest", - "followerTest", - "bossKilla", - "bossKojaniy", - "followerKojaniy", - "cursedAssault", - "bossGluhar", - "followerGluharAssault", - "followerGluharSecurity", - "followerGluharScout", - "followerGluharSnipe", - "followerSanitar", - "bossSanitar", - "test", - "assaultGroup", - "sectantWarrior", - "sectantPriest", - "bossTagilla", - "followerTagilla", - "bossKnight", - "followerBigPipe", - "followerBirdEye", - "bossBoar", - "followerBoar", - "arenaFighter", - "arenaFighterEvent", - "bossBoarSniper", - "crazyAssaultEvent", - "sectactPriestEvent", - "followerBoarClose1", - "followerBoarClose2", - "bossKolontay", - "followerKolontayAssault", - "followerKolontaySecurity", - "shooterBTR", - "bossPartisan", - "spiritWinter", - "spiritSpring", - "peacemaker", - "skier", - "assault", - "marksman", - "pmcUSEC", - "pmcBEAR", - "exUsec", - "pmcBot", - "bossBully", - ], - AlwaysFriends: [ - "bossZryachiy", - "followerZryachiy", - "peacefullZryachiyEvent", - "ravangeZryachiyEvent", - "gifter", - ], - BearEnemyChance: 100, - BearPlayerBehaviour: "AlwaysEnemies", - BotRole: "pmcBEAR", - ChancedEnemies: [], - Neutral: [], - SavagePlayerBehaviour: "AlwaysEnemies", - UsecEnemyChance: 100, - UsecPlayerBehaviour: "AlwaysEnemies", - Warn: ["sectactPriestEvent"], - }, - { - AlwaysEnemies: [ - "bossTest", - "followerTest", - "bossKilla", - "bossKojaniy", - "followerKojaniy", - "cursedAssault", - "bossGluhar", - "followerGluharAssault", - "followerGluharSecurity", - "followerGluharScout", - "followerGluharSnipe", - "followerSanitar", - "bossSanitar", - "test", - "assaultGroup", - "sectantWarrior", - "sectantPriest", - "bossTagilla", - "followerTagilla", - "bossKnight", - "followerBigPipe", - "followerBirdEye", - "bossBoar", - "followerBoar", - "arenaFighter", - "arenaFighterEvent", - "bossBoarSniper", - "crazyAssaultEvent", - "sectactPriestEvent", - "followerBoarClose1", - "followerBoarClose2", - "bossKolontay", - "followerKolontayAssault", - "followerKolontaySecurity", - "shooterBTR", - "bossPartisan", - "spiritWinter", - "spiritSpring", - "peacemaker", - "skier", - "assault", - "marksman", - "pmcUSEC", - "pmcBEAR", - "exUsec", - "pmcBot", - "bossBully", - ], - AlwaysFriends: [ - "bossZryachiy", - "followerZryachiy", - "peacefullZryachiyEvent", - "ravangeZryachiyEvent", - "gifter", - ], - BearEnemyChance: 100, - BearPlayerBehaviour: "AlwaysEnemies", - BotRole: "pmcUSEC", - ChancedEnemies: [], - Neutral: [], - SavagePlayerBehaviour: "AlwaysEnemies", - UsecEnemyChance: 100, - UsecPlayerBehaviour: "AlwaysEnemies", - Warn: ["sectactPriestEvent"], - }, -]; - -export const configLocations = [ - "customs", - "factoryDay", - "factoryNight", - "interchange", - "laboratory", - "lighthouse", - "rezervbase", - "shoreline", - "tarkovstreets", - "woods", - "gzLow", - "gzHigh", -]; - -export const originalMapList = [ - "bigmap", - "factory4_day", - "factory4_night", - "interchange", - "laboratory", - "lighthouse", - "rezervbase", - "shoreline", - "tarkovstreets", - "woods", - "sandbox", - "sandbox_high", -]; - -export const bossesToRemoveFromPool = new Set([ - "assault", - "pmcBEAR", - "pmcUSEC", - "infectedAssault", - "infectedTagilla", - "infectedLaborant", - "infectedCivil", -]); - -export const mainBossNameList = [ - "bossKojaniy", - "bossGluhar", - "bossSanitar", - "bossKilla", - "bossTagilla", - "bossKnight", - "bossBoar", - "bossKolontay", - "bossPartisan", - "bossBully", -]; - -export const defaultEscapeTimes = { - customs: 40, - factoryDay: 20, - factoryNight: 25, - interchange: 40, - laboratory: 35, - lighthouse: 40, - rezervbase: 40, - shoreline: 45, - tarkovstreets: 50, - woods: 40, - gzLow: 35, - gzHigh: 35, -}; diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/updateSpawnLocations.ts b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/updateSpawnLocations.ts deleted file mode 100644 index f4464b8..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/updateSpawnLocations.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { ILocation } from "@spt/models/eft/common/ILocation"; -import { configLocations } from "./constants"; -import mapConfig from "../../config/mapConfig.json"; - -export default function updateSpawnLocations(locationList: ILocation[]) { - for (let index = 0; index < locationList.length; index++) { - const map = configLocations[index]; - - const limit = mapConfig[map].spawnMinDistance; - - // console.log("\n" + map); - locationList[index].base.SpawnPointParams.forEach( - ( - { ColliderParams, BotZoneName, DelayToCanSpawnSec, Categories, Sides }, - innerIndex - ) => { - if ( - ColliderParams?._props?.Radius !== undefined && - ColliderParams?._props?.Radius < limit && - !BotZoneName?.toLowerCase().includes("snipe") && - DelayToCanSpawnSec < 300 - ) { - // console.log( - // "----", - // ColliderParams._props.Radius, - // "=>", - // limit, - // BotZoneName - // ); - - locationList[index].base.SpawnPointParams[ - innerIndex - ].ColliderParams._props.Radius = limit; - } - } - ); - } -} diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/utils.ts b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/utils.ts deleted file mode 100644 index 77f60d6..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Spawning/utils.ts +++ /dev/null @@ -1,430 +0,0 @@ -import { - IBossLocationSpawn, - IWave, - WildSpawnType, -} from "@spt/models/eft/common/ILocationBase"; -import _config from "../../config/config.json"; -import { ILocation } from "@spt/models/eft/common/ILocation"; -import { defaultEscapeTimes } from "./constants"; -import { ILogger } from "@spt/models/spt/utils/ILogger"; - -export const waveBuilder = ( - totalWaves: number, - timeLimit: number, - waveDistribution: number, - wildSpawnType: "marksman" | "assault", - difficulty: number, - isPlayer: boolean, - maxSlots: number, - combinedZones: string[] = [], - specialZones: string[] = [], - offset?: number, - starting?: boolean, - moreGroups?: boolean -): IWave[] => { - if (totalWaves === 0) return []; - - const averageTime = timeLimit / totalWaves; - const firstHalf = Math.round(averageTime * (1 - waveDistribution)); - const secondHalf = Math.round(averageTime * (1 + waveDistribution)); - let timeStart = offset || 0; - const waves: IWave[] = []; - let maxSlotsReached = Math.round(1.3 * totalWaves); - while ( - totalWaves > 0 && - (waves.length < totalWaves || specialZones.length > 0) - ) { - const accelerate = totalWaves > 5 && waves.length < totalWaves / 3; - const stage = Math.round( - waves.length < Math.round(totalWaves * 0.5) - ? accelerate - ? firstHalf / 3 - : firstHalf - : secondHalf - ); - - const min = !offset && waves.length < 1 ? 0 : timeStart; - const max = !offset && waves.length < 1 ? 0 : timeStart + 10; - - if (waves.length >= 1 || offset) timeStart = timeStart + stage; - const BotPreset = getDifficulty(difficulty); - // console.log(wildSpawnType, BotPreset); - // Math.round((1 - waves.length / totalWaves) * maxSlots) || 1; - let slotMax = Math.round( - (moreGroups ? Math.random() : Math.random() * Math.random()) * maxSlots - ); - - if (slotMax < 1) slotMax = 1; - const slotMin = (Math.round(Math.random() * slotMax) || 1) - 1; - - waves.push({ - BotPreset, - BotSide: getBotSide(wildSpawnType), - SpawnPoints: getZone( - specialZones, - combinedZones, - waves.length >= totalWaves - ), - isPlayers: isPlayer, - slots_max: slotMax, - slots_min: slotMin, - time_min: starting || !max ? -1 : min, - time_max: starting || !max ? -1 : max, - WildSpawnType: wildSpawnType as WildSpawnType, - number: waves.length, - sptId: wildSpawnType + waves.length, - SpawnMode: ["regular", "pve"], - }); - maxSlotsReached -= slotMax; - // if (wildSpawnType === "assault") console.log(slotMax, maxSlotsReached); - if (maxSlotsReached <= 0) break; - } - // console.log(waves.map(({ slots_min }) => slots_min)); - return waves; -}; - -const getZone = (specialZones, combinedZones, specialOnly) => { - if (!specialOnly && combinedZones.length) - return combinedZones[ - Math.round((combinedZones.length - 1) * Math.random()) - ]; - if (specialZones.length) return specialZones.pop(); - return ""; -}; - -export const getDifficulty = (diff: number) => { - const randomNumb = Math.random() + diff; - switch (true) { - case randomNumb < 0.55: - return "easy"; - case randomNumb < 1.4: - return "normal"; - case randomNumb < 1.85: - return "hard"; - default: - return "impossible"; - } -}; - -export const shuffle = (array: any): n => { - let currentIndex = array.length, - randomIndex; - - // While there remain elements to shuffle. - while (currentIndex != 0) { - // Pick a remaining element. - randomIndex = Math.floor(Math.random() * currentIndex); - currentIndex--; - - // And swap it with the current element. - [array[currentIndex], array[randomIndex]] = [ - array[randomIndex], - array[currentIndex], - ]; - } - - return array; -}; - -const getBotSide = ( - spawnType: "marksman" | "assault" | "pmcBEAR" | "pmcUSEC" -) => { - switch (spawnType) { - case "pmcBEAR": - return "Bear"; - case "pmcUSEC": - return "Usec"; - default: - return "Savage"; - } -}; - -export const buildBossBasedWave = ( - BossChance: number, - BossEscortAmount: string, - BossEscortType: string, - BossName: string, - BossZone: string, - raidTime?: number -): IBossLocationSpawn => { - return { - BossChance, - BossDifficult: "normal", - BossEscortAmount, - BossEscortDifficult: "normal", - BossEscortType, - BossName, - BossPlayer: false, - BossZone, - Delay: 0, - ForceSpawn: false, - IgnoreMaxBots: true, - RandomTimeSpawn: false, - Time: raidTime ? Math.round(Math.random() * (raidTime * 5)) : -1, - Supports: null, - TriggerId: "", - TriggerName: "", - spawnMode: ["regular", "pve"], - }; -}; - -export const zombieTypes = [ - "infectedassault", - "infectedpmc", - "infectedlaborant", - "infectedcivil", -]; - -export const zombieTypesCaps = [ - "infectedAssault", - "infectedPmc", - "infectedLaborant", - "infectedCivil", -]; - -export const getRandomDifficulty = (num: number = 1.5) => - getDifficulty(Math.round(Math.random() * num * 10) / 10); - -export const getRandomZombieType = () => - zombieTypesCaps[Math.round((zombieTypesCaps.length - 1) * Math.random())]; - -export const buildPmcWaves = ( - totalWaves: number, - escapeTimeLimit: number, - config: typeof _config, - bossZones: string[] -): IBossLocationSpawn[] => { - let { - pmcMaxGroupSize, - pmcDifficulty, - startingPmcs, - morePmcGroups, - pmcWaveDistribution, - } = config; - - const averageTime = escapeTimeLimit / totalWaves; - const firstHalf = Math.round(averageTime * (1 - pmcWaveDistribution)); - const secondHalf = Math.round(averageTime * (1 + pmcWaveDistribution)); - let timeStart = -1; - const waves: IBossLocationSpawn[] = []; - let maxSlotsReached = totalWaves; - - while (totalWaves > 0) { - let bossEscortAmount = Math.round( - (morePmcGroups ? 1 : Math.random()) * - Math.random() * - (pmcMaxGroupSize - 1) - ); - - if (bossEscortAmount < 0) bossEscortAmount = 0; - const accelerate = totalWaves > 5 && waves.length < totalWaves / 3; - const stage = startingPmcs - ? 10 - : Math.round( - waves.length < Math.round(totalWaves * 0.5) - ? accelerate - ? firstHalf / 3 - : firstHalf - : secondHalf - ); - - if (waves.length >= 1) timeStart = timeStart + stage; - - // console.log(timeStart, BossEscortAmount); - const side = Math.random() > 0.5 ? "pmcBEAR" : "pmcUSEC"; - - const BossDifficult = getDifficulty(pmcDifficulty); - - waves.push({ - BossChance: 9999, - BossDifficult, - BossEscortAmount: bossEscortAmount.toString(), - BossEscortDifficult: "normal", - BossEscortType: side, - BossName: side, - BossPlayer: false, - BossZone: bossZones.pop() || "", - Delay: 0, - DependKarma: false, - DependKarmaPVE: false, - ForceSpawn: true, - IgnoreMaxBots: true, - RandomTimeSpawn: false, - Time: timeStart, - Supports: null, - TriggerId: "", - TriggerName: "", - spawnMode: ["regular", "pve"], - }); - - maxSlotsReached -= 1 + bossEscortAmount; - if (maxSlotsReached <= 0) break; - } - - return waves; -}; - -export const buildZombie = ( - totalWaves: number, - escapeTimeLimit: number, - waveDistribution: number, - BossChance: number = 100 -): IBossLocationSpawn[] => { - const averageTime = (escapeTimeLimit * 60) / totalWaves; - const firstHalf = Math.round(averageTime * (1 - waveDistribution)); - const secondHalf = Math.round(averageTime * (1 + waveDistribution)); - let timeStart = 90; - const waves: IBossLocationSpawn[] = []; - let maxSlotsReached = Math.round(1.3 * totalWaves); - - while (totalWaves > 0) { - const accelerate = totalWaves > 5 && waves.length < totalWaves / 3; - const stage = Math.round( - waves.length < Math.round(totalWaves * 0.5) - ? accelerate - ? firstHalf / 3 - : firstHalf - : secondHalf - ); - - if (waves.length >= 1) timeStart = timeStart + stage; - const main = getRandomZombieType(); - waves.push({ - BossChance, - BossDifficult: "normal", - BossEscortAmount: "0", - BossEscortDifficult: "normal", - BossEscortType: main, - BossName: main, - BossPlayer: false, - BossZone: "", - Delay: 0, - IgnoreMaxBots: true, - RandomTimeSpawn: false, - Time: timeStart, - Supports: new Array( - Math.round(Math.random() * 4) /* <= 4 AddthistoConfig */ - ) - .fill("") - .map(() => ({ - BossEscortType: getRandomZombieType(), - BossEscortDifficult: ["normal"], - BossEscortAmount: "1", - })), - TriggerId: "", - TriggerName: "", - spawnMode: ["regular", "pve"], - }); - - maxSlotsReached -= 1 + waves[waves.length - 1].Supports.length; - if (maxSlotsReached <= 0) break; - } - - return waves; -}; - -export interface MapSettings { - EscapeTimeLimit?: number; - maxBotPerZoneOverride?: number; - maxBotCapOverride?: number; - pmcHotZones?: string[]; - scavHotZones?: string[]; - pmcWaveCount: number; - scavWaveCount: number; - zombieWaveCount: number; -} - -export const getHealthBodyPartsByPercentage = (num: number) => { - const num35 = Math.round(35 * num); - const num100 = Math.round(100 * num); - const num70 = Math.round(70 * num); - const num80 = Math.round(80 * num); - return { - Head: { - min: num35, - max: num35, - }, - Chest: { - min: num100, - max: num100, - }, - Stomach: { - min: num100, - max: num100, - }, - LeftArm: { - min: num70, - max: num70, - }, - RightArm: { - min: num70, - max: num70, - }, - LeftLeg: { - min: num80, - max: num80, - }, - RightLeg: { - min: num80, - max: num80, - }, - }; -}; - -export interface MapConfigType { - spawnMinDistance: number; - pmcWaveCount: number; - scavWaveCount: number; - zombieWaveCount?: number; - scavHotZones?: string[]; - pmcHotZones?: string[]; - EscapeTimeLimitOverride?: number; -} - -export const setEscapeTimeOverrides = ( - locationList: ILocation[], - mapConfig: Record, - logger: ILogger, - config: typeof _config -) => { - for (let index = 0; index < locationList.length; index++) { - const mapSettingsList = Object.keys(mapConfig) as Array< - keyof typeof mapConfig - >; - - const map = mapSettingsList[index]; - const override = mapConfig[map].EscapeTimeLimitOverride; - const hardcodedEscapeLimitMax = 5; - - if ( - !override && - locationList[index].base.EscapeTimeLimit / defaultEscapeTimes[map] > - hardcodedEscapeLimitMax - ) { - const maxLimit = defaultEscapeTimes[map] * hardcodedEscapeLimitMax; - logger.warning( - `[MOAR] EscapeTimeLimit set too high on ${map}\nEscapeTimeLimit changed from ${locationList[index].base.EscapeTimeLimit} => ${maxLimit}\n` - ); - locationList[index].base.EscapeTimeLimit = maxLimit; - } - - if (override && locationList[index].base.EscapeTimeLimit !== override) { - console.log( - `[Moar] Set ${map}'s Escape time limit to ${override} from ${locationList[index].base.EscapeTimeLimit}\n` - ); - locationList[index].base.EscapeTimeLimit = override; - locationList[index].base.EscapeTimeLimitCoop = override; - locationList[index].base.EscapeTimeLimitPVE = override; - } - - if ( - config.startingPmcs && - locationList[index].base.EscapeTimeLimit / defaultEscapeTimes[map] > 2 - ) { - logger.warning( - `[MOAR] Average EscapeTimeLimit is too high (greater than 2x) to enable starting PMCS\nStarting PMCS has been turned off to prevent performance issues.\n` - ); - config.startingPmcs = false; - } - } -}; diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Tests/checkPresets.ts b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Tests/checkPresets.ts deleted file mode 100644 index 57b753d..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Tests/checkPresets.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ILogger } from "@spt/models/spt/utils/ILogger"; -import { DependencyContainer } from "tsyringe"; -import config from "../../config/config.json"; -import presets from "../../config/Presets.json"; -import presetWeightings from "../../config/PresetWeightings.json"; - -export default function checkPresetLogic(container: DependencyContainer) { - const Logger = container.resolve("WinstonLogger"); - - for (const key in presetWeightings) { - if (presets[key] === undefined) { - Logger.error( - `\n[MOAR]: No preset found in PresetWeightings.json for preset "${key}" in Presets.json` - ); - } - } - - for (const key in presets) { - const preset = presets[key]; - for (const id in preset) { - if (config[id] === undefined) { - Logger.error( - `\n[MOAR]: No associated key found in config.json called "${id}" for preset "${key}" in Presets.json` - ); - } - } - } -} diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Zombies/Zombies.ts b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Zombies/Zombies.ts deleted file mode 100644 index 1125559..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/Zombies/Zombies.ts +++ /dev/null @@ -1,160 +0,0 @@ -import { DependencyContainer } from "tsyringe"; -import { - ISeasonalEventConfig, - ISeasonalEvent, -} from "@spt/models/spt/config/ISeasonalEventConfig.d"; - -import { ConfigServer } from "@spt/servers/ConfigServer"; -import { ConfigTypes } from "@spt/models/enums/ConfigTypes"; -import { SeasonalEventService } from "@spt/services/SeasonalEventService"; -import { zombieTypesCaps } from "../Spawning/utils"; - -export const baseZombieSettings = (enabled: boolean, count: number) => - ({ - enabled, - name: "zombies", - type: "Zombies", - startDay: "1", - startMonth: "1", - endDay: "31", - endMonth: "12", - settings: { - enableSummoning: false, - removeEntryRequirement: [], - replaceBotHostility: true, - zombieSettings: { - enabled: true, - mapInfectionAmount: { - Interchange: count === -1 ? randomNumber100() : count, - Lighthouse: count === -1 ? randomNumber100() : count, - RezervBase: count === -1 ? randomNumber100() : count, - Sandbox: count === -1 ? randomNumber100() : count, - Shoreline: count === -1 ? randomNumber100() : count, - TarkovStreets: count === -1 ? randomNumber100() : count, - Woods: count === -1 ? randomNumber100() : count, - bigmap: count === -1 ? randomNumber100() : count, - factory4: count === -1 ? randomNumber100() : count, - laboratory: count === -1 ? randomNumber100() : count, - }, - disableBosses: [], - disableWaves: [], - }, - }, - } as unknown as ISeasonalEvent); - -const randomNumber100 = () => Math.round(Math.random() * 100); - -export const resetCurrentEvents = ( - container: DependencyContainer, - enabled: boolean, - zombieWaveQuantity: number, - random: boolean = false -) => { - const configServer = container.resolve("ConfigServer"); - const eventConfig = configServer.getConfig( - ConfigTypes.SEASONAL_EVENT - ); - - let percentToShow = random ? -1 : Math.round(zombieWaveQuantity * 100); - if (percentToShow > 100) percentToShow = 100; - - eventConfig.events = [baseZombieSettings(enabled, percentToShow)]; - - const seasonalEventService = container.resolve( - "SeasonalEventService" - ) as any; - - // First we need to clear any existing data - seasonalEventService.currentlyActiveEvents = []; - seasonalEventService.christmasEventActive = false; - seasonalEventService.halloweenEventActive = false; - // Then re-calculate the cached data - seasonalEventService.cacheActiveEvents(); - // seasonalEventService.addEventBossesToMaps("halloweenzombies"); -}; - -export const setUpZombies = (container: DependencyContainer) => { - const configServer = container.resolve("ConfigServer"); - const eventConfig = configServer.getConfig( - ConfigTypes.SEASONAL_EVENT - ); - - eventConfig.events = [baseZombieSettings(false, 100)]; - - // eventConfig.eventBossSpawns = { - // zombies: eventConfig.eventBossSpawns.halloweenzombies, - // }; - eventConfig.eventGear[eventConfig.events[0].name] = {}; - eventConfig.hostilitySettingsForEvent.zombies.default = - eventConfig.hostilitySettingsForEvent.zombies.default - .filter(({ BotRole }) => !["pmcBEAR", "pmcUSEC"].includes(BotRole)) - .map((host) => ({ - ...host, - AlwaysEnemies: [ - "infectedAssault", - "infectedPmc", - "infectedCivil", - "infectedLaborant", - "infectedTagilla", - "pmcBEAR", - "pmcUSEC", - ], - AlwaysNeutral: [ - "marksman", - "assault", - "bossTest", - "bossBully", - "followerTest", - "bossKilla", - "bossKojaniy", - "followerKojaniy", - "pmcBot", - "cursedAssault", - "bossGluhar", - "followerGluharAssault", - "followerGluharSecurity", - "followerGluharScout", - "followerGluharSnipe", - "followerSanitar", - "bossSanitar", - "test", - "assaultGroup", - "sectantWarrior", - "sectantPriest", - "bossTagilla", - "followerTagilla", - "exUsec", - "gifter", - "bossKnight", - "followerBigPipe", - "followerBirdEye", - "bossZryachiy", - "followerZryachiy", - "bossBoar", - "followerBoar", - "arenaFighter", - "arenaFighterEvent", - "bossBoarSniper", - "crazyAssaultEvent", - "peacefullZryachiyEvent", - "sectactPriestEvent", - "ravangeZryachiyEvent", - "followerBoarClose1", - "followerBoarClose2", - "bossKolontay", - "followerKolontayAssault", - "followerKolontaySecurity", - "shooterBTR", - "bossPartisan", - "spiritWinter", - "spiritSpring", - "peacemaker", - "skier", - ], - SavagePlayerBehaviour: "Neutral", - BearPlayerBehaviour: "AlwaysEnemies", - UsecPlayerBehaviour: "AlwaysEnemies", - })); - - // console.log(eventConfig.hostilitySettingsForEvent.zombies.default); -}; diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/mod.ts b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/mod.ts deleted file mode 100644 index ac6279f..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/mod.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { DependencyContainer } from "tsyringe"; -import { IPostSptLoadMod } from "@spt/models/external/IPostSptLoadMod"; -import { IPreSptLoadMod } from "@spt/models/external/IPreSptLoadMod"; -import { enableBotSpawning } from "../config/config.json"; -import { buildWaves } from "./Spawning/Spawning"; -import config from "../config/config.json"; -import { globalValues } from "./GlobalValues"; -import { ILogger } from "@spt/models/spt/utils/ILogger"; -import { setupRoutes } from "./Routes/routes"; -import checkPresetLogic from "./Tests/checkPresets"; - -class Moar implements IPostSptLoadMod, IPreSptLoadMod { - preSptLoad(container: DependencyContainer): void { - if (enableBotSpawning) setupRoutes(container); - } - - postSptLoad(container: DependencyContainer): void { - if (enableBotSpawning) { - checkPresetLogic(container); - globalValues.baseConfig = config; - globalValues.overrideConfig = {}; - const logger = container.resolve("WinstonLogger"); - logger.info("\n[MOAR]: Starting up, may the bots ever be in your favour!"); - buildWaves(container); - } - } -} - -module.exports = { mod: new Moar() }; diff --git a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/utils.ts b/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/utils.ts deleted file mode 100644 index 7f8a3bc..0000000 --- a/mods/MOAR - Ultra Lite Spawn Mod_backup/user/mods/DewardianDev-MOAR/src/utils.ts +++ /dev/null @@ -1,57 +0,0 @@ -import PresetWeightings from "../config/PresetWeightings.json"; -import Presets from "../config/Presets.json"; -import { globalValues } from "./GlobalValues"; - -export const saveToFile = (data, filePath) => { - var fs = require("fs"); - let dir = __dirname; - let dirArray = dir.split("\\"); - const directory = `${dirArray[dirArray.length - 4]}/${ - dirArray[dirArray.length - 3] - }/${dirArray[dirArray.length - 2]}/`; - fs.writeFile( - directory + filePath, - JSON.stringify(data, null, 4), - function (err) { - if (err) throw err; - } - ); -}; - -export const cloneDeep = (objectToClone: any) => - JSON.parse(JSON.stringify(objectToClone)); - -export const getRandomPresetOrCurrentlySelectedPreset = () => { - switch (true) { - case globalValues.forcedPreset.toLowerCase() === "custom": - return {}; - case !globalValues.forcedPreset: - globalValues.forcedPreset = "random"; - break; - case globalValues.forcedPreset === "random": - break; - - default: - return Presets[globalValues.forcedPreset]; - } - - const all = []; - - const itemKeys = Object.keys(PresetWeightings); - - for (const key of itemKeys) { - for (let i = 0; i < PresetWeightings[key]; i++) { - all.push(key); - } - } - - const preset: string = all[Math.round(Math.random() * (all.length - 1))]; - globalValues.currentPreset = preset; - return Presets[preset]; -}; - -export const kebabToTitle = (str: string): string => - str - .split("-") - .map((word) => word.slice(0, 1).toUpperCase() + word.slice(1)) - .join(" ");