Added, Removed & Updated Mods

• Added SAIN
• Added Looting Bots
• Re-enabled Waypoints
• Re-enabled Big Brain
• Removed AI Refactored
• Removed No Bush ESP
• Updated server and multiplayer profiles
• Updated HollywoodFX
This commit is contained in:
2025-06-02 16:38:14 -04:00
parent 918a2da926
commit d8c1e259f4
131 changed files with 141703 additions and 23 deletions
@@ -0,0 +1,261 @@
[
{
"Name": "Scav",
"Description": "Scavs!",
"Section": "Scavs",
"WildSpawnType": "assault",
"BaseBrain": null
},
{
"Name": "Scav Group",
"Description": "Scavs in a Group!",
"Section": "Scavs",
"WildSpawnType": "assaultGroup",
"BaseBrain": null
},
{
"Name": "Crazy Scav Event",
"Description": "Scavs!",
"Section": "Scavs",
"WildSpawnType": "crazyAssaultEvent",
"BaseBrain": null
},
{
"Name": "Usec",
"Description": "A PMC of the Usec Faction",
"Section": "PMCs",
"WildSpawnType": "pmcUSEC",
"BaseBrain": null
},
{
"Name": "Bear",
"Description": "A PMC of the Bear Faction",
"Section": "PMCs",
"WildSpawnType": "pmcBEAR",
"BaseBrain": null
},
{
"Name": "Tagged and Cursed Scav",
"Description": "The type a scav is assigned when the player is marked as Tagged and Cursed",
"Section": "Scavs",
"WildSpawnType": "cursedAssault",
"BaseBrain": null
},
{
"Name": "Knight",
"Description": "Goons leader. Close proximity to the goons has been noted to cause smashed keyboards",
"Section": "Goons",
"WildSpawnType": "bossKnight",
"BaseBrain": null
},
{
"Name": "BigPipe",
"Description": "Goons follower. Close proximity to the goons has been noted to cause smashed keyboards\"",
"Section": "Goons",
"WildSpawnType": "followerBigPipe",
"BaseBrain": null
},
{
"Name": "BirdEye",
"Description": "Goons follower. Close proximity to the goons has been noted to cause smashed keyboards\"",
"Section": "Goons",
"WildSpawnType": "followerBirdEye",
"BaseBrain": null
},
{
"Name": "Rogue",
"Description": "Ex Usec Personel on Lighthouse usually found around the water treatment plant",
"Section": "Other",
"WildSpawnType": "exUsec",
"BaseBrain": null
},
{
"Name": "Raider",
"Description": "Heavily armed scavs typically found on reserve and Labs by default",
"Section": "Other",
"WildSpawnType": "pmcBot",
"BaseBrain": null
},
{
"Name": "Bloodhound",
"Description": "From the Live Event, nearly identical to raiders except with different voicelines and better gear. Found in",
"Section": "Other",
"WildSpawnType": "arenaFighterEvent",
"BaseBrain": null
},
{
"Name": "Cultist Priest",
"Description": "Found on Customs, Woods, Factory, Shoreline at night",
"Section": "Other",
"WildSpawnType": "sectantPriest",
"BaseBrain": null
},
{
"Name": "Cultist",
"Description": "Found on Customs, Woods, Factory, Shoreline at night",
"Section": "Other",
"WildSpawnType": "sectantWarrior",
"BaseBrain": null
},
{
"Name": "Killa",
"Description": "He shoot. Found on Interchange and Streets",
"Section": "Bosses",
"WildSpawnType": "bossKilla",
"BaseBrain": null
},
{
"Name": "Partisan",
"Description": "Crazy mall santa",
"Section": "Bosses",
"WildSpawnType": "bossPartisan",
"BaseBrain": null
},
{
"Name": "Rashala",
"Description": "Customs Boss",
"Section": "Bosses",
"WildSpawnType": "bossBully",
"BaseBrain": null
},
{
"Name": "Rashala Guard",
"Description": "Customs Boss Follower",
"Section": "Followers",
"WildSpawnType": "followerBully",
"BaseBrain": null
},
{
"Name": "Shturman",
"Description": "Woods Boss",
"Section": "Bosses",
"WildSpawnType": "bossKojaniy",
"BaseBrain": null
},
{
"Name": "Shturman Guard",
"Description": "Woods Boss Follower",
"Section": "Followers",
"WildSpawnType": "followerKojaniy",
"BaseBrain": null
},
{
"Name": "Tagilla",
"Description": "He Smash",
"Section": "Bosses",
"WildSpawnType": "bossTagilla",
"BaseBrain": null
},
{
"Name": "Tagilla Guard",
"Description": "They Smash Too?",
"Section": "Followers",
"WildSpawnType": "followerTagilla",
"BaseBrain": null
},
{
"Name": "Sanitar",
"Description": "Shoreline Boss",
"Section": "Bosses",
"WildSpawnType": "bossSanitar",
"BaseBrain": null
},
{
"Name": "Sanitar Guard",
"Description": "Shoreline Boss Follower",
"Section": "Followers",
"WildSpawnType": "followerSanitar",
"BaseBrain": null
},
{
"Name": "Gluhar",
"Description": "Reserve Boss. Also can be found on Streets.",
"Section": "Bosses",
"WildSpawnType": "bossGluhar",
"BaseBrain": null
},
{
"Name": "Gluhar Guard Snipe",
"Description": "Reserve Boss Follower",
"Section": "Followers",
"WildSpawnType": "followerGluharSnipe",
"BaseBrain": null
},
{
"Name": "Gluhar Guard Scout",
"Description": "Reserve Boss Follower",
"Section": "Followers",
"WildSpawnType": "followerGluharScout",
"BaseBrain": null
},
{
"Name": "Gluhar Guard Security",
"Description": "Reserve Boss Follower",
"Section": "Followers",
"WildSpawnType": "followerGluharSecurity",
"BaseBrain": null
},
{
"Name": "Gluhar Guard Assault",
"Description": "Reserve Boss Follower",
"Section": "Followers",
"WildSpawnType": "followerGluharAssault",
"BaseBrain": null
},
{
"Name": "Kaban",
"Description": "Streets Boss",
"Section": "Bosses",
"WildSpawnType": "bossBoar",
"BaseBrain": null
},
{
"Name": "Kaban Guard",
"Description": "Streets Boss Follower",
"Section": "Followers",
"WildSpawnType": "followerBoar",
"BaseBrain": null
},
{
"Name": "Kaban Guard Close 1",
"Description": "Streets Boss Follower Close 1",
"Section": "Followers",
"WildSpawnType": "followerBoarClose1",
"BaseBrain": null
},
{
"Name": "Kaban Guard Close 2",
"Description": "Streets Boss Follower Close 2",
"Section": "Followers",
"WildSpawnType": "followerBoarClose2",
"BaseBrain": null
},
{
"Name": "Kaban Sniper",
"Description": "Streets Boss Follower Sniper",
"Section": "Followers",
"WildSpawnType": "bossBoarSniper",
"BaseBrain": null
},
{
"Name": "Kolontay",
"Description": "",
"Section": "Bosses",
"WildSpawnType": "bossKolontay",
"BaseBrain": null
},
{
"Name": "Kolontay Assault",
"Description": "",
"Section": "Followers",
"WildSpawnType": "followerKolontayAssault",
"BaseBrain": null
},
{
"Name": "Kolontay Security",
"Description": "",
"Section": "Followers",
"WildSpawnType": "followerKolontaySecurity",
"BaseBrain": null
}
]
@@ -0,0 +1,28 @@
[General]
gameName=spt
modid=0
version=d2025.6.2.0
newestVersion=
category="-1,"
nexusFileStatus=1
installationFile=SAIN-3.3.0-Release.zip
repository=Nexus
ignoredVersion=
comments=
notes=
nexusDescription=
url=
hasCustomURL=true
lastNexusQuery=
lastNexusUpdate=
nexusLastModified=2025-06-02T20:07:15Z
nexusCategory=0
converted=false
validated=false
color=@Variant(\0\0\0\x43\0\xff\xff\0\0\0\0\0\0\0\0)
tracked=0
[installedFiles]
1\modid=0
1\fileid=0
size=1
@@ -0,0 +1,26 @@
{
"name": "SAIN",
"version": "2.3.0",
"main": "src/mod.js",
"license": "MIT",
"author": "zSolarint",
"sptVersion": "~3.11.0",
"scripts": {
"setup": "npm i",
"build": "node ./build.mjs",
"buildinfo": "node ./build.mjs --verbose"
},
"devDependencies": {
"@types/node": "20.11",
"@typescript-eslint/eslint-plugin": "7.2",
"@typescript-eslint/parser": "7.2",
"archiver": "^6.0",
"eslint": "8.57",
"fs-extra": "11.2",
"ignore": "^5.2",
"os": "^0.1",
"tsyringe": "4.8.0",
"typescript": "5.4",
"winston": "3.12"
}
}
@@ -0,0 +1,66 @@
"use strict";
/* eslint-disable prefer-const */
/* eslint-disable @typescript-eslint/brace-style */
Object.defineProperty(exports, "__esModule", { value: true });
const ConfigTypes_1 = require("C:/snapshot/project/obj/models/enums/ConfigTypes");
let botConfig;
let pmcConfig;
let configServer;
class SAIN {
postDBLoad(container) {
configServer = container.resolve("ConfigServer");
pmcConfig = configServer.getConfig(ConfigTypes_1.ConfigTypes.PMC);
botConfig = configServer.getConfig(ConfigTypes_1.ConfigTypes.BOT);
const databaseServer = container.resolve("DatabaseServer");
const tables = databaseServer.getTables();
// Only allow `pmcBot` brains to spawn for PMCs
for (const pmcType in pmcConfig.pmcType) {
for (const map in pmcConfig.pmcType[pmcType]) {
const pmcBrains = pmcConfig.pmcType[pmcType][map];
for (const brain in pmcBrains) {
if (brain === "pmcBot") {
pmcBrains[brain] = 1;
}
else {
pmcBrains[brain] = 0;
}
}
}
}
// Only allow `assault` brains for scavs
for (const map in botConfig.assaultBrainType) {
const scavBrains = botConfig.assaultBrainType[map];
for (const brain in scavBrains) {
if (brain === "assault") {
scavBrains[brain] = 1;
}
else {
scavBrains[brain] = 0;
}
}
}
// Only allow `pmcBot` brains for player scavs
for (const map in botConfig.playerScavBrainType) {
const playerScavBrains = botConfig.playerScavBrainType[map];
for (const brain in playerScavBrains) {
if (brain === "pmcBot") {
playerScavBrains[brain] = 1;
}
else {
playerScavBrains[brain] = 0;
}
}
}
for (const locationName in tables.locations) {
const location = tables.locations[locationName].base;
if (location && location.BotLocationModifier) {
location.BotLocationModifier.AccuracySpeed = 1;
location.BotLocationModifier.GainSight = 1;
location.BotLocationModifier.Scattering = 1;
location.BotLocationModifier.VisibleDistance = 1;
}
}
}
}
module.exports = { mod: new SAIN() };
//# sourceMappingURL=mod.js.map
@@ -0,0 +1,10 @@
{
"version": 3,
"file": "mod.js",
"sourceRoot": "",
"sources": [
"mod.ts"
],
"names": [],
"mappings": ";AAAA,iCAAiC;AACjC,mDAAmD;;AAEnD,kFAA+E;AAQ/E,IAAI,SAAqB,CAAC;AAC1B,IAAI,SAAqB,CAAC;AAC1B,IAAI,YAA0B,CAAC;AAE/B,MAAM,IAAI;IACC,UAAU,CAAC,SAA8B;QAC5C,YAAY,GAAG,SAAS,CAAC,OAAO,CAAe,cAAc,CAAC,CAAC;QAC/D,SAAS,GAAG,YAAY,CAAC,SAAS,CAAa,yBAAW,CAAC,GAAG,CAAC,CAAC;QAChE,SAAS,GAAG,YAAY,CAAC,SAAS,CAAa,yBAAW,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,CAAiB,gBAAgB,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,EAAE,CAAC;QAE1C,+CAA+C;QAC/C,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACtC,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3C,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAA;gBACjD,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;oBAC5B,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;wBACrB,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACzB,CAAC;yBACI,CAAC;wBACF,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACzB,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,wCAAwC;QACxC,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;YAC3C,MAAM,UAAU,GAAG,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACnD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBAC7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACtB,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1B,CAAC;qBACI,CAAC;oBACF,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1B,CAAC;YACL,CAAC;QACL,CAAC;QAED,8CAA8C;QAC9C,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,mBAAmB,EAAE,CAAC;YAC9C,MAAM,gBAAgB,GAAG,SAAS,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC5D,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;gBACnC,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACrB,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChC,CAAC;qBACI,CAAC;oBACF,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChC,CAAC;YACL,CAAC;QACL,CAAC;QAED,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;YAErD,IAAI,QAAQ,IAAI,QAAQ,CAAC,mBAAmB,EAAE,CAAC;gBAC3C,QAAQ,CAAC,mBAAmB,CAAC,aAAa,GAAG,CAAC,CAAC;gBAC/C,QAAQ,CAAC,mBAAmB,CAAC,SAAS,GAAG,CAAC,CAAC;gBAC3C,QAAQ,CAAC,mBAAmB,CAAC,UAAU,GAAG,CAAC,CAAC;gBAC5C,QAAQ,CAAC,mBAAmB,CAAC,eAAe,GAAG,CAAC,CAAC;YACrD,CAAC;QACL,CAAC;IACL,CAAC;CACJ;AACD,MAAM,CAAC,OAAO,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE,EAAE,CAAA"
}
@@ -0,0 +1,77 @@
/* eslint-disable prefer-const */
/* eslint-disable @typescript-eslint/brace-style */
import { ConfigTypes } from "@spt/models/enums/ConfigTypes";
import { IPostDBLoadMod } from "@spt/models/external/IPostDBLoadMod";
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
import { ConfigServer } from "@spt/servers/ConfigServer";
import { DatabaseServer } from "@spt/servers/DatabaseServer";
import { DependencyContainer } from "tsyringe";
let botConfig: IBotConfig;
let pmcConfig: IPmcConfig;
let configServer: ConfigServer;
class SAIN implements IPostDBLoadMod {
public postDBLoad(container: DependencyContainer): void {
configServer = container.resolve<ConfigServer>("ConfigServer");
pmcConfig = configServer.getConfig<IPmcConfig>(ConfigTypes.PMC);
botConfig = configServer.getConfig<IBotConfig>(ConfigTypes.BOT);
const databaseServer = container.resolve<DatabaseServer>("DatabaseServer");
const tables = databaseServer.getTables();
// Only allow `pmcBot` brains to spawn for PMCs
for (const pmcType in pmcConfig.pmcType) {
for (const map in pmcConfig.pmcType[pmcType]) {
const pmcBrains = pmcConfig.pmcType[pmcType][map]
for (const brain in pmcBrains) {
if (brain === "pmcBot") {
pmcBrains[brain] = 1;
}
else {
pmcBrains[brain] = 0;
}
}
}
}
// Only allow `assault` brains for scavs
for (const map in botConfig.assaultBrainType) {
const scavBrains = botConfig.assaultBrainType[map];
for (const brain in scavBrains) {
if (brain === "assault") {
scavBrains[brain] = 1;
}
else {
scavBrains[brain] = 0;
}
}
}
// Only allow `pmcBot` brains for player scavs
for (const map in botConfig.playerScavBrainType) {
const playerScavBrains = botConfig.playerScavBrainType[map];
for (const brain in playerScavBrains) {
if (brain === "pmcBot") {
playerScavBrains[brain] = 1;
}
else {
playerScavBrains[brain] = 0;
}
}
}
for (const locationName in tables.locations) {
const location = tables.locations[locationName].base;
if (location && location.BotLocationModifier) {
location.BotLocationModifier.AccuracySpeed = 1;
location.BotLocationModifier.GainSight = 1;
location.BotLocationModifier.Scattering = 1;
location.BotLocationModifier.VisibleDistance = 1;
}
}
}
}
module.exports = { mod: new SAIN() }