v1.4.0 Changelog

* Bugfixes for non-working features
* Code Refactor, and cleanup
* Separated out all instances of the config files to their own separate entities. DebugMode is the only entity existing within the original config.json which will enable logging in the server for every feature enabled.
* Removed Progression from the AIO and separated it out to its own individual modification.

New Features
* Added SMG In Holsters to Weapons.json
* Added Skill Progression/Fatigue rates to Skills.json
* Added Remove Discard Limit, and Remove Item Restrictions to Items.json
* Reworked Insurance, and added minHr, maxHr, and storageMaxHr alongside the previously existing priceCoefficient, and returnChance in Insurance.json
* Added Armor Materials to Armor.json
This commit is contained in:
VforValens 2022-08-17 17:51:28 -04:00
parent c932d2b1e0
commit 065c5098b9
50 changed files with 562 additions and 447 deletions

Binary file not shown.

Binary file not shown.

View File

@ -2,7 +2,7 @@
"stacks": "stacks":
{ {
"grenades": 1, "grenades": 1,
"a338lapua": 30, "a338Lapua": 30,
"a127x55": 30, "a127x55": 30,
"a762x54": 40, "a762x54": 40,
"a762x51": 40, "a762x51": 40,

84
config/armor.json Normal file
View File

@ -0,0 +1,84 @@
{
"armorMaterials":
{
"uhmwpe":
{
"destructibility": 0.45,
"minRepairDegradation": 0.01,
"maxRepairDegradation": 0.03,
"explosionDestructibility": 0.4,
"minRepairKitDegradation": 0.005,
"maxRepairKitDegradation": 0.025
},
"aramid":
{
"destructibility": 0.25,
"minRepairDegradation": 0.03,
"maxRepairDegradation": 0.07,
"explosionDestructibility": 0.2,
"minRepairKitDegradation": 0.025,
"maxRepairKitDegradation": 0.065
},
"combined":
{
"destructibility": 0.5,
"minRepairDegradation": 0.1,
"maxRepairDegradation": 0.15,
"explosionDestructibility": 0.4,
"minRepairKitDegradation": 0.09,
"maxRepairKitDegradation": 0.14
},
"titan":
{
"destructibility": 0.55,
"minRepairDegradation": 0.06,
"maxRepairDegradation": 0.1,
"explosionDestructibility": 0.5,
"minRepairKitDegradation": 0.055,
"maxRepairKitDegradation": 0.09
},
"aluminium":
{
"destructibility": 0.6,
"minRepairDegradation": 0.06,
"maxRepairDegradation": 0.1,
"explosionDestructibility": 0.6,
"minRepairKitDegradation": 0.055,
"maxRepairKitDegradation": 0.09
},
"armoredSteel":
{
"destructibility": 0.7,
"minRepairDegradation": 0.01,
"maxRepairDegradation": 0.03,
"explosionDestructibility": 0.6,
"minRepairKitDegradation": 0.005,
"maxRepairKitDegradation": 0.025
},
"ceramic":
{
"destructibility": 0.8,
"minRepairDegradation": 0.17,
"maxRepairDegradation": 0.22,
"explosionDestructibility": 0.7,
"minRepairKitDegradation": 0.155,
"maxRepairKitDegradation": 0.2
},
"glass":
{
"destructibility": 0.8,
"minRepairDegradation": 0.23,
"maxRepairDegradation": 0.42,
"explosionDestructibility": 0.8,
"minRepairKitDegradation": 0.21,
"maxRepairKitDegradation": 0.38
}
}
}

View File

@ -1,33 +1,3 @@
{ {
"DebugMode": false, "DebugMode": false
"quests":
{
"onlyFoundInRaid": true
},
"raid":
{
"carExtractBaseStandingGain": 0.25,
"chompiesBossFix": true,
"fixOpenZones": true,
"scavExtractGain": 0.01,
"timeLimit": 60,
"aiAmount": "asonline",
"aiDifficulty": "asonline",
"bossEnabled": true,
"scavWars": false,
"taggedAndCursed": false,
"enablePve": true
},
"weapons":
{
"jam": false,
"misfeed": false,
"misfire": false,
"overheat": false,
"slide": false
}
} }

View File

@ -1,37 +0,0 @@
export interface Config
{
DebugMode: boolean
raid: Raid
quests: Quests
weapons: Weapons
}
export interface Quests
{
onlyFoundInRaid: boolean
}
export interface Raid
{
carExtractBaseStandingGain: number
chompiesBossFix: boolean
fixOpenZones: boolean
scavExtractGain: number
timeLimit: number
aiAmount: string
aiDifficulty: string
bossEnabled: boolean
scavWars: boolean
taggedAndCursed: boolean
enablePve: boolean
}
export interface Weapons
{
jam: boolean
misfeed: boolean
misfire: boolean
overheat: boolean
slide: boolean
}

View File

@ -25,6 +25,8 @@
"examinedByDefault": false, "examinedByDefault": false,
"removeBackpackFilter": true, "removeBackpackFilter": true,
"removeDiscardLimit": true,
"removeItemRestrictions": false,
"removeKeyUsageMax": false, "removeKeyUsageMax": false,
"roublesMaxStack": 500000, "roublesMaxStack": 500000,
"dollarsMaxStack": 50000, "dollarsMaxStack": 50000,

View File

@ -1,5 +1,6 @@
{ {
"allExtractsAvailable": false, "allExtractsAvailable": false,
"freeLabsEntry": false,
"exfilTime": 8, "exfilTime": 8,
"extractionsExtended": false, "extractionsExtended": false,
"noExtractRestrictions": false "noExtractRestrictions": false

View File

@ -1,3 +0,0 @@
{
"enabled": true
}

View File

@ -1,4 +0,0 @@
export interface Progression
{
enabled: boolean
}

3
config/quests.json Normal file
View File

@ -0,0 +1,3 @@
{
"onlyFoundInRaid": true
}

13
config/raid.json Normal file
View File

@ -0,0 +1,13 @@
{
"carExtractBaseStandingGain": 0.25,
"chompiesBossFix": true,
"fixOpenZones": true,
"scavExtractGain": 0.01,
"timeLimit": 60,
"aiAmount": "asonline",
"aiDifficulty": "asonline",
"bossEnabled": true,
"scavWars": false,
"taggedAndCursed": false,
"enablePve": true
}

11
config/skills.json Normal file
View File

@ -0,0 +1,11 @@
{
"skillEnduranceWeightThreshold": 0.65,
"skillFatiguePerPoint": 0.6,
"skillFreshEffectiveness": 1.3,
"skillFatigueReset": 200,
"skillFreshPoints": 1,
"skillMinEffectiveness": 0.0001,
"skillPointsBeforeFatigue": 1,
"skillProgressRate": 0.4,
"weaponSkillProgressRate": 1
}

26
config/ts/armor.ts Normal file
View File

@ -0,0 +1,26 @@
export interface ArmorConfig
{
armorMaterials: Armor
}
export interface Armor
{
uhmwpe: Materials
aramid: Materials
combined: Materials
titan: Materials
aluminium: Materials
armoredSteel: Materials
ceramic: Materials
glass: Materials
}
export interface Materials
{
destructibility: number
minRepairDegradation: number
maxRepairDegradation: number
explosionDestructibility: number
minRepairKitDegradation: number
maxRepairKitDegradation: number
}

View File

@ -31,15 +31,7 @@ export interface DifficultyWeights
{ {
difficulty: string difficulty: string
useWeights: boolean useWeights: boolean
weights: Weights weights: Record<string, number>
}
export interface Weights
{
easy: number
normal: number
hard: number
impossible: number
} }
export interface ConvertIntoPmcChance export interface ConvertIntoPmcChance

4
config/ts/config.ts Normal file
View File

@ -0,0 +1,4 @@
export interface Config
{
DebugMode: boolean
}

View File

@ -6,6 +6,8 @@ export interface ItemsConfig
eodStash: Stash eodStash: Stash
examinedByDefault: boolean examinedByDefault: boolean
removeBackpackFilter: boolean removeBackpackFilter: boolean
removeDiscardLimit: boolean
removeItemRestrictions: boolean
removeKeyUsageMax: boolean removeKeyUsageMax: boolean
dollarsMaxStack: number dollarsMaxStack: number
eurosMaxStack: number eurosMaxStack: number

View File

@ -1,6 +1,7 @@
export interface LocationsConfig export interface LocationsConfig
{ {
allExtractsAvailable: boolean allExtractsAvailable: boolean
freeLabsEntry: boolean
exfilTime: number exfilTime: number
extractionsExtended: boolean extractionsExtended: boolean
noExtractRestrictions: boolean noExtractRestrictions: boolean

4
config/ts/quests.ts Normal file
View File

@ -0,0 +1,4 @@
export interface QuestsConfig
{
onlyFoundInRaid: boolean
}

14
config/ts/raid.ts Normal file
View File

@ -0,0 +1,14 @@
export interface RaidConfig
{
carExtractBaseStandingGain: number
chompiesBossFix: boolean
fixOpenZones: boolean
scavExtractGain: number
timeLimit: number
aiAmount: string
aiDifficulty: string
bossEnabled: boolean
scavWars: boolean
taggedAndCursed: boolean
enablePve: boolean
}

12
config/ts/skills.ts Normal file
View File

@ -0,0 +1,12 @@
export interface SkillsConfig
{
skillEnduranceWeightThreshold: number
skillFatiguePerPoint: number
skillFatigueReset: number
skillFreshEffectiveness: number
skillFreshPoints: number
skillMinEffectiveness: number
skillPointsBeforeFatigue: number
skillProgressRate: number
weaponSkillProgressRate: number
}

14
config/ts/weapons.ts Normal file
View File

@ -0,0 +1,14 @@
export interface WeaponsConfig
{
malfunctions: Malfunctions
smgInHolsters: boolean
}
export interface Malfunctions
{
jam: boolean
misfeed: boolean
misfire: boolean
overheat: boolean
slide: boolean
}

12
config/weapons.json Normal file
View File

@ -0,0 +1,12 @@
{
"malfunctions":
{
"jam": false,
"misfeed": false,
"misfire": false,
"overheat": false,
"slide": false
},
"smgInHolsters": false
}

View File

@ -1,6 +1,6 @@
{ {
"name": "Valens-AIO", "name": "Valens-AIO",
"version": "1.3.1", "version": "1.4.0",
"main": "src/mod.js", "main": "src/mod.js",
"license": "CC BY-NC-ND 4.0", "license": "CC BY-NC-ND 4.0",
"author": "Valens", "author": "Valens",

View File

@ -1,11 +1,11 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { Logger } from "./logger"; import { Logger } from "./logger";
import { Grenade, Ammo762x51, Ammo762x54, Ammo338Lapua, Ammo46x30, Ammo57x28, Ammo762x25, Ammo9x18, Ammo9x19, Ammo9x21, Ammo357Mag, Ammo45ACP, Ammo545x39, Ammo556x45, Ammo300Blackout, Ammo762x39, Ammo9x39, Ammo366TKM, Ammo127x55, Ammo12Gauge, Ammo20Gauge, Ammo23x75, Ammo30x29, Ammo26x75 } from "@spt-aki/models/enums/AmmoTypes"; import { Grenade, Ammo762x51, Ammo762x54, Ammo338Lapua, Ammo46x30, Ammo57x28, Ammo762x25, Ammo9x18, Ammo9x19, Ammo9x21, Ammo357Mag, Ammo45ACP, Ammo545x39, Ammo556x45, Ammo300Blackout, Ammo762x39, Ammo9x39, Ammo366TKM, Ammo127x55, Ammo12Gauge, Ammo20Gauge, Ammo23x75, Ammo30x29, Ammo26x75 } from "@spt-aki/models/enums/AmmoTypes";
import { AmmoConfig } from "../config/ammo"; import { AmmoConfig } from "../config/ts/ammo";
export class Ammo export class Ammo
{ {
private modConfig: AmmoConfig = require("./config/ammo.json") private modConfig: AmmoConfig = require("../config/ammo.json")
private logger: Logger; private logger: Logger;
private tables: DatabaseServer; private tables: DatabaseServer;
@ -31,7 +31,7 @@ export class Ammo
} }
} }
// Sets 338 Lapua Magnum max stacks. // Sets .338 Lapua Magnum max stacks.
if (mod.a338Lapua != 30) if (mod.a338Lapua != 30)
{ {
for (const value of Object.values(Ammo338Lapua)) for (const value of Object.values(Ammo338Lapua))

131
src/armor.ts Normal file
View File

@ -0,0 +1,131 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { ArmorConfig } from "../config/ts/armor";
import { Logger } from "./logger";
export class Armor
{
private modConfig: ArmorConfig = require("../config/armor.json");
private logger: Logger;
private tables: DatabaseServer;
private mod: any;
private armor: any;
constructor(logger: Logger, databaseServer: DatabaseServer)
{
this.logger = logger;
this.tables = databaseServer;
}
public updateArmor(): void
{
const mod = this.modConfig;
const uhmwpe = this.modConfig.armorMaterials.uhmwpe;
const aramid = this.modConfig.armorMaterials.aramid;
const combined = this.modConfig.armorMaterials.combined;
const titan = this.modConfig.armorMaterials.titan;
const aluminium = this.modConfig.armorMaterials.aluminium;
const steel = this.modConfig.armorMaterials.armoredSteel;
const ceramic = this.modConfig.armorMaterials.ceramic;
const glass = this.modConfig.armorMaterials.glass;
const armor = this.tables.getTables().globals.config.ArmorMaterials;
if (uhmwpe.destructibility != 0.45 || uhmwpe.minRepairDegradation != 0.01 || uhmwpe.maxRepairDegradation != 0.03
|| uhmwpe.explosionDestructibility != 0.4 || uhmwpe.minRepairKitDegradation != 0.005 || uhmwpe.maxRepairKitDegradation != 0.025)
{
armor.UHMWPE.Destructibility = uhmwpe.destructibility;
armor.UHMWPE.MinRepairDegradation = uhmwpe.minRepairDegradation;
armor.UHMWPE.MaxRepairDegradation = uhmwpe.maxRepairDegradation;
armor.UHMWPE.ExplosionDestructibility = uhmwpe.explosionDestructibility;
armor.UHMWPE.MinRepairKitDegradation = uhmwpe.minRepairKitDegradation;
armor.UHMWPE.MaxRepairKitDegradation = uhmwpe.maxRepairKitDegradation;
this.logger.info("UHMWPE Armor Materials Patched");
}
if (aramid.destructibility != 0.25 || aramid.minRepairDegradation != 0.03 || aramid.maxRepairDegradation != 0.07
|| aramid.explosionDestructibility != 0.2 || aramid.minRepairKitDegradation != 0.025 || aramid.maxRepairKitDegradation != 0.065)
{
armor.Aramid.Destructibility = aramid.destructibility;
armor.Aramid.MinRepairDegradation = aramid.minRepairDegradation;
armor.Aramid.MaxRepairDegradation = aramid.maxRepairDegradation;
armor.Aramid.ExplosionDestructibility = aramid.explosionDestructibility;
armor.Aramid.MinRepairKitDegradation = aramid.minRepairKitDegradation;
armor.Aramid.MaxRepairKitDegradation = aramid.maxRepairKitDegradation;
this.logger.info("Aramid Armor Materials Patched");
}
if (combined.destructibility != 0.5 || combined.minRepairDegradation != 0.1 || combined.maxRepairDegradation != 0.15
|| combined.explosionDestructibility != 0.4 || combined.minRepairKitDegradation != 0.009 || combined.maxRepairKitDegradation != 0.014)
{
armor.Combined.Destructibility = combined.destructibility;
armor.Combined.MinRepairDegradation = combined.minRepairDegradation;
armor.Combined.MaxRepairDegradation = combined.maxRepairDegradation;
armor.Combined.ExplosionDestructibility = combined.explosionDestructibility;
armor.Combined.MinRepairKitDegradation = combined.minRepairKitDegradation;
armor.Combined.MaxRepairKitDegradation = combined.maxRepairKitDegradation;
this.logger.info("Combined Armor Materials Patched");
}
if (titan.destructibility != 0.55 || titan.minRepairDegradation != 0.06 || titan.maxRepairDegradation != 0.1
|| titan.explosionDestructibility != 0.5 || titan.minRepairKitDegradation != 0.055 || titan.maxRepairKitDegradation != 0.09)
{
armor.Titan.Destructibility = titan.destructibility;
armor.Titan.MinRepairDegradation = titan.minRepairDegradation;
armor.Titan.MaxRepairDegradation = titan.maxRepairDegradation;
armor.Titan.ExplosionDestructibility = titan.explosionDestructibility;
armor.Titan.MinRepairKitDegradation = titan.minRepairKitDegradation;
armor.Titan.MaxRepairKitDegradation = titan.maxRepairKitDegradation;
this.logger.info("Titan Armor Materials Patched");
}
if (aluminium.destructibility != 0.6 || aluminium.minRepairDegradation != 0.06 || aluminium.maxRepairDegradation != 0.1
|| aluminium.explosionDestructibility != 0.6 || aluminium.minRepairKitDegradation != 0.055 || aluminium.maxRepairKitDegradation != 0.09)
{
armor.Aluminium.Destructibility = aluminium.destructibility;
armor.Aluminium.MinRepairDegradation = aluminium.minRepairDegradation;
armor.Aluminium.MaxRepairDegradation = aluminium.maxRepairDegradation;
armor.Aluminium.ExplosionDestructibility = aluminium.explosionDestructibility;
armor.Aluminium.MinRepairKitDegradation = aluminium.minRepairKitDegradation;
armor.Aluminium.MaxRepairKitDegradation = aluminium.maxRepairKitDegradation;
this.logger.info("Aluminium Armor Materials Patched");
}
if (steel.destructibility != 0.7 || steel.minRepairDegradation != 0.01 || steel.maxRepairDegradation != 0.03
|| steel.explosionDestructibility != 0.6 || steel.minRepairKitDegradation != 0.005 || steel.maxRepairKitDegradation != 0.025)
{
armor.ArmoredSteel.Destructibility = steel.destructibility;
armor.ArmoredSteel.MinRepairDegradation = steel.minRepairDegradation;
armor.ArmoredSteel.MaxRepairDegradation = steel.maxRepairDegradation;
armor.ArmoredSteel.ExplosionDestructibility = steel.explosionDestructibility;
armor.ArmoredSteel.MinRepairKitDegradation = steel.minRepairKitDegradation;
armor.ArmoredSteel.MaxRepairKitDegradation = steel.maxRepairKitDegradation;
this.logger.info("Steel Armor Materials Patched");
}
if (ceramic.destructibility != 0.8 || ceramic.minRepairDegradation != 0.17 || ceramic.maxRepairDegradation != 0.22
|| ceramic.explosionDestructibility != 0.7 || ceramic.minRepairKitDegradation != 0.155 || ceramic.maxRepairKitDegradation != 0.2)
{
armor.Ceramic.Destructibility = ceramic.destructibility;
armor.Ceramic.MinRepairDegradation = ceramic.minRepairDegradation;
armor.Ceramic.MaxRepairDegradation = ceramic.maxRepairDegradation;
armor.Ceramic.ExplosionDestructibility = ceramic.explosionDestructibility;
armor.Ceramic.MinRepairKitDegradation = ceramic.minRepairKitDegradation;
armor.Ceramic.MaxRepairKitDegradation = ceramic.maxRepairKitDegradation;
this.logger.info("Ceramic Armor Materials Patched");
}
if (glass.destructibility != 0.8 || glass.minRepairDegradation != 0.23 || glass.maxRepairDegradation != 0.42
|| glass.explosionDestructibility != 0.8 || glass.minRepairKitDegradation != 0.21 || glass.maxRepairKitDegradation != 0.38)
{
armor.Glass.Destructibility = glass.destructibility;
armor.Glass.MinRepairDegradation = glass.minRepairDegradation;
armor.Glass.MaxRepairDegradation = glass.maxRepairDegradation;
armor.Glass.ExplosionDestructibility = glass.explosionDestructibility;
armor.Glass.MinRepairKitDegradation = glass.minRepairKitDegradation;
armor.Glass.MaxRepairKitDegradation = glass.maxRepairKitDegradation;
this.logger.info("Glass Armor Materials Patched");
}
}
}

View File

@ -1,7 +1,7 @@
import { IBotConfig } from "@spt-aki/models/spt/config/IBotConfig"; import { IBotConfig } from "@spt-aki/models/spt/config/IBotConfig";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { Logger } from "./logger"; import { Logger } from "./logger";
import { BotsConfig } from "../config/bots"; import { BotsConfig } from "../config/ts/bots";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper"; import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
export class Bots export class Bots
{ {

View File

@ -1,6 +1,6 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { Logger } from "./logger"; import { Logger } from "./logger";
import { ContainersConfig } from "../config/containers"; import { ContainersConfig } from "../config/ts/containers";
import { CommonContainers, SecuredContainers } from "@spt-aki/models/enums/ContainerTypes"; import { CommonContainers, SecuredContainers } from "@spt-aki/models/enums/ContainerTypes";
export class Containers export class Containers

View File

@ -1,33 +1,33 @@
import { IRagfairConfig } from "@spt-aki/models/spt/config/IRagfairConfig"; import { IRagfairConfig } from "@spt-aki/models/spt/config/IRagfairConfig";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { Logger } from "./logger"; import { Logger } from "./logger";
import { FleaConfig } from "../config/flea"; import { FleaConfig } from "../config/ts/flea";
import { IGlobals } from "@spt-aki/models/spt/server/IDatabaseTables/IGlobals";
export class Flea export class Flea
{ {
private modConfig: FleaConfig = require("../config/flea.json"); private modConfig: FleaConfig = require("../config/flea.json");
private logger: Logger; private logger: Logger;
private ragfairConfig: IRagfairConfig; private ragfairConfig: IRagfairConfig;
private globals: IGlobals; private tables: DatabaseServer;
constructor (logger: Logger, ragfairConfig: IRagfairConfig, globals: IGlobals) constructor (logger: Logger, ragfairConfig: IRagfairConfig, databaseServer: DatabaseServer)
{ {
this.logger = logger; this.logger = logger;
this.ragfairConfig = ragfairConfig; this.ragfairConfig = ragfairConfig;
this.globals = globals; this.tables = databaseServer;
} }
public updateFlea(): void public updateFlea(): void
{ {
const mod = this.modConfig; const mod = this.modConfig;
const global = this.globals; const global = this.tables.getTables().globals;
const ragfair = this.ragfairConfig.dynamic; const ragfair = this.ragfairConfig.dynamic;
if (mod.minUserLevel != 15) if (mod.minUserLevel != 15)
{ {
global.minUserLevel = mod.minUserLevel; global.config.RagFair.minUserLevel = mod.minUserLevel;
this.logger.info(`Fleamarket unlocked at level ${mod.minUserLevel}`) this.logger.info(`Fleamarket unlocked at level ${mod.minUserLevel}`)
} }

View File

@ -1,23 +1,23 @@
import { IGlobals } from "@spt-aki/models/spt/server/IDatabaseTables/IGlobals"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { GlobalsConfig } from "../config/globals"; import { GlobalsConfig } from "../config/ts/globals";
import { Logger } from "./logger"; import { Logger } from "./logger";
export class Globals export class Globals
{ {
private modConfig: GlobalsConfig = require("../config/globals.json"); private modConfig: GlobalsConfig = require("../config/globals.json");
private logger: Logger; private logger: Logger;
private globals: IGlobals; private tables: DatabaseServer;
constructor(logger: Logger, globals: IGlobals) constructor(logger: Logger, databaseServer: DatabaseServer)
{ {
this.logger = logger; this.logger = logger;
this.globals = globals; this.tables = databaseServer;
} }
public updateGlobals(): void public updateGlobals(): void
{ {
const mod = this.modConfig; const mod = this.modConfig;
const global = this.globals; const global = this.tables.getTables().globals;
if (mod.damagePerMeter != 9 || mod.safeHeight != 3) if (mod.damagePerMeter != 9 || mod.safeHeight != 3)
{ {
@ -50,7 +50,7 @@ export class Globals
private matchEndSettings(): void private matchEndSettings(): void
{ {
const global1 = this.globals.config.exp.match_end; const global1 = this.tables.getTables().globals.config.exp.match_end;
const mod = this.modConfig.matchEnd; const mod = this.modConfig.matchEnd;
global1.survived_exp_requirement = mod.survivedExpRequirement; global1.survived_exp_requirement = mod.survivedExpRequirement;
@ -63,8 +63,8 @@ export class Globals
global1.survivedMult = mod.survivedMult; global1.survivedMult = mod.survivedMult;
global1.runnerMult = mod.runnerMult; global1.runnerMult = mod.runnerMult;
global1.killedMult = mod.killedMult; global1.killedMult = mod.killedMult;
this.globals.config.exp.kill.headShotMult = mod.headShotMult; this.tables.getTables().globals.config.exp.kill.headShotMult = mod.headShotMult;
this.globals.config.exp.kill.expOnDamageAllHealth = mod.expOnDamageAllHealth; this.tables.getTables().globals.config.exp.kill.expOnDamageAllHealth = mod.expOnDamageAllHealth;
this.logger.info("Match End Settings Patched"); this.logger.info("Match End Settings Patched");
} }
} }

View File

@ -1,6 +1,6 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { Logger } from "./logger"; import { Logger } from "./logger";
import { HideoutConfig } from "../config/hideout"; import { HideoutConfig } from "../config/ts/hideout";
import { IHideoutConfig } from "@spt-aki/models/spt/config/IHideoutConfig"; import { IHideoutConfig } from "@spt-aki/models/spt/config/IHideoutConfig";
export class Hideout export class Hideout

View File

@ -1,7 +1,7 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { ITrader } from "@spt-aki/models/eft/common/tables/ITrader"; import { ITrader } from "@spt-aki/models/eft/common/tables/ITrader";
import { IInsuranceConfig } from "@spt-aki/models/spt/config/IInsuranceConfig"; import { IInsuranceConfig } from "@spt-aki/models/spt/config/IInsuranceConfig";
import { InsuranceConfig } from "../config/insurance"; import { InsuranceConfig } from "../config/ts/insurance";
import { Logger } from "./logger"; import { Logger } from "./logger";
export class Insurance export class Insurance

View File

@ -1,5 +1,5 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { ItemsConfig } from "../config/items"; import { ItemsConfig } from "../config/ts/items";
import { Logger } from "./logger"; import { Logger } from "./logger";
export class Items export class Items
@ -100,6 +100,20 @@ export class Items
this.items["569668774bdc2da2298b4568"]._props.StackMaxSize = this.modConfig.eurosMaxStack; this.items["569668774bdc2da2298b4568"]._props.StackMaxSize = this.modConfig.eurosMaxStack;
this.logger.info(`Euro Max Stack set to ${this.modConfig.eurosMaxStack}`, true); this.logger.info(`Euro Max Stack set to ${this.modConfig.eurosMaxStack}`, true);
} }
// Remove ExcludedFilter Restrictions from all items.
if (this.modConfig.removeItemRestrictions)
{
this.removeItemRestrictions();
this.logger.info("Removed Item Restrictions");
}
// Remove the Discard Limit from in raid restrictions.
if (this.modConfig.removeDiscardLimit)
{
this.removeDiscardLimit();
this.logger.info("Removed Discard Limit");
}
} }
@ -124,7 +138,31 @@ export class Items
{ {
if (this.items[item]._parent === "5448e53e4bdc2d60728b4567") if (this.items[item]._parent === "5448e53e4bdc2d60728b4567")
{ {
this.items[item]._props.Grids[4]._props.filters[0].ExcludedFilter = []; for (const i in this.items[item]._props.Grids)
{
const grid = this.items[item]._props.Grids[i];
grid._props.filters[0].ExcludedFilter = [];
}
}
}
}
// Removes any values in the ExcludedFilter for all items under _props > _Grids > _props > filters > ExcludedFilter in database/templates/items.json
private removeItemRestrictions(): void
{
for (const item in this.items)
{
for (const i in this.items[item]._props?.Grids)
{
const grid = this.items[item]._props?.Grids[i];
for (const j in grid._props.filters)
{
const filters = grid._props.filters[j];
if (filters != [] && filters.ExcludedFilter != [])
{
filters.ExcludedFilter = [];
}
}
} }
} }
} }
@ -172,4 +210,12 @@ export class Items
} }
} }
} }
private removeDiscardLimit(): void
{
for (const item in this.items)
{
this.items[item]._props.DiscardLimit = 0;
}
}
} }

View File

@ -1,5 +1,5 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { LocationsConfig } from "../config/locations"; import { LocationsConfig } from "../config/ts/locations";
import { Logger } from "./logger"; import { Logger } from "./logger";
export class Locations export class Locations
@ -45,6 +45,13 @@ export class Locations
this.extractionsExtended(); this.extractionsExtended();
this.logger.info("Extractions Are Extended"); this.logger.info("Extractions Are Extended");
} }
// Remove the access key "5c94bbff86f7747ee735c08f" (Labs access card) from Labs.
if (mod.freeLabsEntry)
{
this.freeLabsEntry();
this.logger.info("Labs is now Free to enter");
}
} }
private allExtractsAvailable(): void private allExtractsAvailable(): void
@ -176,4 +183,10 @@ export class Locations
} }
} }
private freeLabsEntry(): void
{
const locations = this.tables.getTables().locations.laboratory.base;
locations.AccessKeys = [];
}
} }

View File

@ -1,6 +1,6 @@
import { ILocationConfig } from "@spt-aki/models/spt/config/ILocationConfig"; import { ILocationConfig } from "@spt-aki/models/spt/config/ILocationConfig";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { LootConfig } from "../config/loot"; import { LootConfig } from "../config/ts/loot";
import { Logger } from "./logger"; import { Logger } from "./logger";
export class Loot export class Loot

View File

@ -12,6 +12,7 @@ import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { ILocationConfig } from "@spt-aki/models/spt/config/ILocationConfig"; import { ILocationConfig } from "@spt-aki/models/spt/config/ILocationConfig";
import { IRagfairConfig } from "@spt-aki/models/spt/config/IRagfairConfig"; import { IRagfairConfig } from "@spt-aki/models/spt/config/IRagfairConfig";
import { Ammo } from "./ammo"; import { Ammo } from "./ammo";
import { Armor } from "./armor";
import { Bots } from "./bots"; import { Bots } from "./bots";
import { Flea } from "./flea"; import { Flea } from "./flea";
import { Hideout } from "./hideout"; import { Hideout } from "./hideout";
@ -21,13 +22,12 @@ import { Raid } from "./raid";
import { Globals } from "./globals"; import { Globals } from "./globals";
import { Insurance } from "./insurance"; import { Insurance } from "./insurance";
import { Logger } from "./logger"; import { Logger } from "./logger";
import { Config } from "../config/config"; import { Config } from "../config/ts/config";
import { Weapons } from "./weapons"; import { Weapons } from "./weapons";
import { Containers } from "./containers"; import { Containers } from "./containers";
import { Locations } from "./locations"; import { Locations } from "./locations";
import { Quests } from "./quests"; import { Quests } from "./quests";
import { Progression } from "./progression"; import { Skills } from "./skills";
import { IGlobals } from "@spt-aki/models/eft/common/IGlobals";
import { Prewipe } from "./prewipe"; import { Prewipe } from "./prewipe";
import { IHideoutConfig } from "@spt-aki/models/spt/config/IHideoutConfig"; import { IHideoutConfig } from "@spt-aki/models/spt/config/IHideoutConfig";
//import { Airdrop } from "./airdrop"; //import { Airdrop } from "./airdrop";
@ -45,7 +45,6 @@ class ValensAIO implements IPostDBLoadMod
//private airdropConfig: IAirdropConfig; //private airdropConfig: IAirdropConfig;
private inRaidConfig: IInRaidConfig; private inRaidConfig: IInRaidConfig;
private weightedRandomHelper : WeightedRandomHelper; private weightedRandomHelper : WeightedRandomHelper;
private globals : IGlobals;
private hideout: IHideoutConfig private hideout: IHideoutConfig
public postDBLoad(container: DependencyContainer): void public postDBLoad(container: DependencyContainer): void
@ -69,16 +68,19 @@ class ValensAIO implements IPostDBLoadMod
const ammo = new Ammo(vLogger, this.databaseServer); const ammo = new Ammo(vLogger, this.databaseServer);
ammo.updateAmmo(); ammo.updateAmmo();
const armor = new Armor(vLogger, this.databaseServer);
armor.updateArmor();
const bots = new Bots(vLogger, this.databaseServer, this.botConfig, this.weightedRandomHelper); const bots = new Bots(vLogger, this.databaseServer, this.botConfig, this.weightedRandomHelper);
bots.updateBots(); bots.updateBots();
const containers = new Containers(vLogger, this.databaseServer); const containers = new Containers(vLogger, this.databaseServer);
containers.updateContainers(); containers.updateContainers();
const flea = new Flea(vLogger, this.ragfairConfig, this.globals); const flea = new Flea(vLogger, this.ragfairConfig, this.databaseServer);
flea.updateFlea(); flea.updateFlea();
const globals = new Globals(vLogger, this.globals); const globals = new Globals(vLogger, this.databaseServer);
globals.updateGlobals(); globals.updateGlobals();
const hideout = new Hideout(vLogger, this.databaseServer, this.hideout); const hideout = new Hideout(vLogger, this.databaseServer, this.hideout);
@ -99,15 +101,15 @@ class ValensAIO implements IPostDBLoadMod
const prewipe = new Prewipe(vLogger, this.databaseServer); const prewipe = new Prewipe(vLogger, this.databaseServer);
prewipe.updatePrewipe(); prewipe.updatePrewipe();
const progression = new Progression(vLogger, this.databaseServer, this.botConfig);
progression.updateProgression();
const quests = new Quests(vLogger, this.databaseServer); const quests = new Quests(vLogger, this.databaseServer);
quests.updateQuests(); quests.updateQuests();
const raid = new Raid(vLogger, this.databaseServer, this.inRaidConfig); const raid = new Raid(vLogger, this.databaseServer, this.inRaidConfig);
raid.updateRaid(); raid.updateRaid();
const skills = new Skills(vLogger, this.databaseServer);
skills.updateSkills();
const weapons = new Weapons(vLogger, this.databaseServer); const weapons = new Weapons(vLogger, this.databaseServer);
weapons.updateWeapons(); weapons.updateWeapons();

View File

@ -1,4 +1,4 @@
import { PrewipeConfig } from "../config/prewipe"; import { PrewipeConfig } from "../config/ts/prewipe";
import { Money } from "@spt-aki/models/enums/Money" import { Money } from "@spt-aki/models/enums/Money"
import type { BossLocationSpawn } from "@spt-aki/models/eft/common/ILocationBase"; import type { BossLocationSpawn } from "@spt-aki/models/eft/common/ILocationBase";
import { Logger } from "./logger"; import { Logger } from "./logger";

View File

@ -1,291 +0,0 @@
import { IBotConfig } from "@spt-aki/models/spt/config/IBotConfig";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { Logger } from "./logger";
import { Config } from "../config/config";
export class Progression
{
private modConfig: Config = require("../config/config.json");
private logger: Logger;
private botConfig: IBotConfig;
private tables: DatabaseServer;
constructor(logger: Logger, databaseServer: DatabaseServer, botConfig: IBotConfig)
{
this.logger = logger;
this.botConfig = botConfig;
this.tables = databaseServer.getTables();
}
public updateProgression(): void
{
// modConfig variables
const mod = this.modConfig.progression;
// Server side variables
if (mod.enabled)
{
this.generateProgression();
this.logger.info("Progressional Gear Changes Injected");
}
}
// Functions start here
private generateProgression()
{
const primaryWeaponArrayLL1 = ["574d967124597745970e7c94", "57d14d2524597714373db789", "57f4c844245977379d5c14d1", "59984ab886f7743e98271174", "5ea03f7400685063ec28bfa8", "5ae08f0a5acfc408fb1398a1", "5bfd297f0db834001a669119", "59d6088586f774275f37482f", "583990e32459771419544dd2", "59e6152586f77473dc057aa1", "5c07c60e0db834002330051f", "5a38e6bac4a2826c6e06d79b", "56dee2bdd2720bc8328b4567", "5447a9cd4bdc2dbd208b4567", "5d2f0d8048f0356c925bc3b0", "5d2f0d8048f0356c925bc3b0", "5fc3e272f8b6a877a729eac5", "58948c8e86f77409493f7266", "5644bd2b4bdc2d3b4c8b4572", "59e6687d86f77411d949b251", "54491c4f4bdc2db1078b4568", "5ba26383d4351e00334c93d9", "587e02ff24597743df3deaeb", "5c501a4d2e221602b412b540", "60db29ce99594040e04c4a27", "5580223e4bdc2d1c128b457f", "61f7c9e189e6fb1a5e3ea78d", "5e870397991fd70db46995c8", "5de652c31b7e3716273428be"];
const primaryWeaponArrayLL2 = primaryWeaponArrayLL1.concat(...["5839a40f24597726f856b511", "59ff346386f77477562ff5e2", "5ab8e9fcd8ce870019439434", "5bf3e03b0db834001d2c4a9c", "55801eed4bdc2d89578b4588", "5fbcc1d9016cce60e8341ab3", "628b5638ad252a16da6dd245", "5f2a9575926fd9352339381f", "5a7828548dc32e5a9c28b516", "60339954d62c9b14ed777c06", "6184055050224f204c1da540", "623063e994fc3f7b302a9696", "5e00903ae9dc277128008b87", "5ac66cb05acfc40198510a10", "5aafa857e5b5b00018480968", "5cc82d76e24e8d00134b4b83", "5bfea6e90db834001b7347f3", "576165642459773c7a400233", "606dae0ab0e443224b421bb7"]);
const primaryWeaponArrayLL3 = primaryWeaponArrayLL2.concat(...["5ac66d725acfc43b321d4b60", "5a0ec13bfcdbcb00165aa685", "5abcbc27d8ce8700182eceeb", "5ac4cd105acfc40016339859", "5ac66d2e5acfc43b321d4b53", "5ac66d9b5acfc4001633997a", "5beed0f50db834001c062b12", "57838ad32459774a17445cd2", "5c46fbd72e2216398b5a8c9c", "5e848cc2988a8701445df1e8", "5d43021ca4b9362eab4b5e25", "588892092459774ac91d4b11", "5c488a752e221602b412af63", "5b0bbe4e5acfc40dc528a72d", "618428466ef05c2ce828f218", "5a367e5dc4a282000e49738f", "5df8ce05b11454561e39243b", "6176aca650224f204c1da3fb", "628a60ae6b1d481ff772e9c8", "6183afd850224f204c1da514", "6165ac306ef05c2ce828ef74", "6259b864ebedf17603599e88"]);
const holsterArrayLL1 = ["5448bd6b4bdc2dfc2f8b4569", "571a12c42459771f627b58a0", "576a581d2459771e7b1bc4f1", "5a17f98cfcdbcb0980087290", "5e81c3cbac2bb513793cdc75", "5cadc190ae921500103bb3b6", "56d59856d2720bd8418b456a", "5a7ae0c351dfba0017554310"];
const holsterArrayLL2 = holsterArrayLL1.concat(...["61a4c8884f95bc3b2c5dc96f", "56e0598dd2720bb5668b45a6", "59f98b4986f7746f546d2cef", "602a9740da11d6478d5a06dc", "6193a720f8ee7e52e42109ed"]);
const holsterArrayLL3 = holsterArrayLL2.concat(...["5abccb7dd8ce87001773e277", "5d3eb3b0a4b93615055e84d2", "5b1fa9b25acfc40018633c01"]);
const backpackArrayLL1 = ["5ab8ee7786f7742d8f33f0b9", "544a5cde4bdc2d39388b456b", "5e9dcf5986f7746c417435b3", "5ab8f04f86f774585f4237d8", "5ca20d5986f774331e7c9602"];
const backpackArrayLL2 = backpackArrayLL1.concat(...["545cdae64bdc2d39198b4568", "60a2828e8689911a226117f9", "618bb76513f5097c8d5aa2d5", "5f5e467b0bc58666c37e7821", "5ab8ebf186f7742d8b372e80"]);
const backpackArrayLL3 = backpackArrayLL2.concat(...["5f5e46b96bdad616ad46d613", "5d5d940f86f7742797262046", "60a272cc93ef783291411d8e", "6034d103ca006d2dca39b3f0", "619cf0335771dd3c390269ae", "628e1ffc83ec92260c0f437f"]);
const tacticalVestArrayLL1 = ["5929a2a086f7744f4b234d43", "5e4abc1f86f774069619fbaa", "6034d0230ca681766b6a0fb5", "6034cf5fffd42c541047f72e", "572b7adb24597762ae139821", "5c0e3eb886f7742015526062"];
const tacticalVestArrayLL2 = tacticalVestArrayLL1.concat(...["5d5d8ca986f7742798716522", "544a5caa4bdc2d1a388b4568", "5c0e446786f7742013381639", "592c2d1a86f7746dbe2af32a", "5d5d85c586f774279a21cbdb", "59e7643b86f7742cbf2c109", "5b44c8ea86f7742d1627baf1", "5ca20abf86f77418567a43f2", "5d5d646386f7742797261fd9", "5fd4c60f875c30179f5d04c2", "60a6220e953894617404b00a", "61bc85697113f767765c7fe7", "603648ff5a45383c122086ac", "5e4abfed86f77406a2713cf7"]);
const tacticalVestArrayLL3 = tacticalVestArrayLL2.concat(...["60a3c70cde5f453f634816a3", "5648a69d4bdc2ded0b8b457b", "5ab8dced86f774646209ec87", "5ab8dab586f77441cd04f2a2", "60a621c49c197e4e8c4455e6", "5b44cad286f77402a54ae7e5", "5c0e6a1586f77404597b4965", "5c0e722886f7740458316a57", "5c0e746986f7741453628fe5", "5d5d87f786f77427997cfaef", "5df8a42886f77412640e2e75", "628d0618d1ba6e4fa07ce5a4", "61bcc89aef0f505f0c6cd0fc", "628dc750b910320f4c27a732", "628cd624459354321c4b7fa2"]);
const earpieceArrayLL1 = ["5b432b965acfc47a8774094e", "6033fa48ffd42c541047f728"];
const earpieceArrayLL2 = earpieceArrayLL1.concat(...["5645bcc04bdc2d363b8b4572", "5aa2ba71e5b5b000137b758f"]);
const earpieceArrayLL3 = earpieceArrayLL2.concat(...["5a16b9fffcdbcb0176308b34"]);
const headwearArrayLL1 = ["5a7c4850e899ef00150be885", "5aa7d193e5b5b000171d063f", "5c06c6a80db834001b735491", "59e7711e86f7746cae05fbe1", "5ac4c50d5acfc40019262e87", "5645bc214bdc2d363b8b4571", "5aa2a7e8e5b5b00016327c16", "5b40e61f5acfc4001a599bec", "5aa2b87de5b5b00016327c25", "5b40e5e25acfc4001a599bea"];
const headwearArrayLL2 = headwearArrayLL1.concat(...["5aa7d03ae5b5b00016327db5", "5d5e7d28a4b936645d161203", "5aa7e454e5b5b0214e506fa2", "5aa7e3abe5b5b000171d064d", "5b40e4035acfc47a87740943", "5b432d215acfc4771e1c6624", "5f60e784f2bcbb675b00dac7", "5aa2ba19e5b5b00014028f4e", "5b43271c5acfc432ff4dce65", "60b52e5bc7d8103275739d67", "5a16b672fcdbcb001912fa83"]);
const headwearArrayLL3 = headwearArrayLL2.concat(...["5ac8d6885acfc400180ae7b0", "5a154d5cfcdbcb001a3b00da", "5e00c1ad86f774747333222c", "5b40e3f35acfc40016388218", "5b4329f05acfc47a86086aa1", "5d6d3716a4b9361bc8618872", "5aa2b9ede5b5b000137b758b", "5c091a4e0db834001d5addc8", "5f60e7788adaa7100c3adb49", "5f60e6403b85f6263c14558c", "5aa7e373e5b5b000137b76f0"]);
const armorVestArrayLL1 = ["5df8a2ca86f7740bfe6df777", "5ab8e4ed86f7742d8e50c7fa", "5648a7494bdc2d9d488b4583", "5c0e5bab86f77461f55ed1f3", "5c0e5edb86f77461f55ed1f7", "62a09d79de7ac81993580530"];
const armorVestArrayLL2 = armorVestArrayLL1.concat(...["5b44d22286f774172b0c9de8", "5c0e51be86f774598e797894"])
const armorVestArrayLL3 = armorVestArrayLL2.concat(...["5f5f41476bdad616ad46d631", "545cdb794bdc2d3a198b456a", "5ab8e79e86f7742d8b372e78", "5b44d0de86f774503d30cba8", "5c0e53c886f7747fa54205c7", "5c0e57ba86f7747fa141986d", "5ca2151486f774244a3b8d30", "609e8540d5c319764c2bc2e9"]);
const eyewearArrayLL1 = ["5aa2b986e5b5b00014028f4c", "557ff21e4bdc2d89578b4586", "5b432be65acfc433000ed01f"];
const eyewearArrayLL2 = eyewearArrayLL1.concat(...["5d5fca1ea4b93635fd598c07"]);
const eyewearArrayLL3 = eyewearArrayLL2.concat(...["603409c80ca681766b6a0fb2", "5c0d32fcd174af02a1659c75", "5d6d2e22a4b9361bd5780d05"]);
const armBandArrayLL1 = ["5b3f16c486f7747c327f55f7", "5b3f3ade86f7746b6b790d8e", "5b3f3af486f774679e752c1f", "5b3f3b0186f774021a2afef7", "5b3f3b0e86f7746752107cda"];
const armBandArrayLL2 = armBandArrayLL1;
const armBandArrayLL3 = armBandArrayLL2.concat(...["619bdf9cc9546643a67df6f8", "619bc61e86e01e16f839a999", "619bdfd4c9546643a67df6fa", "619bdd8886e01e16f839a99c", "60b0f988c4449e4cb624c1da", "5f9949d869e2777a0e779ba5"]);
const faceCoverArrayLL1 = ["572b7f1624597762ae139822"];
const faceCoverArrayLL2 = faceCoverArrayLL1.concat(...["5ab8f39486f7745cd93a1cca", "5b4325355acfc40019478126"]);
const faceCoverArrayLL3 = faceCoverArrayLL2.concat(...["5ab8f85d86f7745cd93a1cf5", "5b432f3d5acfc4704b4a1dfb"]);
const ammo127x55ArrayLL3 = ["5cadf6e5ae921500113bb973", "5cadf6eeae921500134b2799"];
const ammo762x54ArrayLL1 = ["5887431f2459777e1612938f"];
const ammo762x54ArrayLL2 = ammo762x54ArrayLL1.concat(...["5e023cf8186a883be655e54f"]);
const ammo762x54ArrayLL3 = ammo762x54ArrayLL2.concat(...["59e77a2386f7742ee578960a", "560d61e84bdc2da74d8b4571"]);
const ammo762x51ArrayLL1 = ["5e023e6e34d52a55c3304f71"];
const ammo762x51ArrayLL2 = ammo762x51ArrayLL1.concat(...["5e023e53d4353e3302577c4c"]);
const ammo762x51ArrayLL3 = ammo762x51ArrayLL2.concat(...["58dd3ad986f77403051cba8f", "5a608bf24f39f98ffc77720e", "5a6086ea4f39f99cd479502f"]);
const ammo762x39ArrayLL1 = ["5656d7c34bdc2d9d198b4587", "59e4d3d286f774176a36250a"];
const ammo762x39ArrayLL2 = ammo762x39ArrayLL1.concat(...["59e4cf5286f7741778269d8a"]);
const ammo762x39ArrayLL3 = ammo762x39ArrayLL2.concat(...["59e4d24686f7741776641ac7", "59e0d99486f7744a32234762"]);
const ammo762x35ArrayLL2 = ["5fbe3ffdf8b6a877a729ea82"];
const ammo762x35ArrayLL3 = ammo762x35ArrayLL2.concat(...["6196365d58ef8c428c287da1", "619636be6db0f2477964e710"]);
const ammo762x25TTArrayLL1 = ["5735fdcd2459776445391d61", "5735ff5c245977640e39ba7e", "573601b42459776410737435", "573602322459776445391df1"];
const ammo762x25TTArrayLL2 = ammo762x25TTArrayLL1.concat(...["5736026a245977644601dc61", "573603c924597764442bd9cb"]);
const ammo762x25TTArrayLL3 = ammo762x25TTArrayLL2.concat(...["573603562459776430731618"]);
const ammo366TKMArrayLL1 = ["59e6542b86f77411dc52a77a", "59e655cb86f77411dc52a77b"];
const ammo366TKMArrayLL2 = ammo366TKMArrayLL1.concat(...["59e6658b86f77411d949b250"]);
const ammo366TKMArrayLL3 = ammo366TKMArrayLL2.concat(...["5f0596629e22f464da6bbdd9"]);
const ammo556x45ArrayLL1 = ["59e6920f86f77411d82aa167", "54527a984bdc2d4e668b4567", "59e68f6f86f7746c9f75e846", "59e6927d86f77411da468256"];
const ammo556x45ArrayLL2 = ammo556x45ArrayLL1.concat(...["59e6918f86f7746c9f75e849", "59e6906286f7746c9f75e847"]);
const ammo556x45ArrayLL3 = ammo556x45ArrayLL2.concat(...["60194943740c5d77f6705eea", "59e690b686f7746c9f75e848", "5c0d5ae286f7741e46554302"]);
const ammo545x39ArrayLL1 = ["56dff338d2720bbd668b4569", "56dff4a2d2720bbd668b456a", "56dff3afd2720bba668b4567"];
const ammo545x39ArrayLL2 = ammo545x39ArrayLL1.concat(...["56dff2ced2720bb4668b4567", "56dff4ecd2720b5f5a8b4568", "56dff421d2720b5f5a8b4567"]);
const ammo545x39ArrayLL3 = ammo545x39ArrayLL2.concat(...["56dfef82d2720bbd668b4567", "56dff061d2720bb5668b4567", "56dff026d2720bb8668b4567", "5c0d5e4486f77478390952fe"]);
const ammo57x28ArrayLL2 = ["5cc80f8fe4a949033b0224a2"];
const ammo57x28ArrayLL3 = ammo57x28ArrayLL2.concat(...["5cc80f38e4a949001152b560", "5cc80f53e4a949000e1ea4f8", "5cc80f67e4a949035e43bbba", "5cc80f79e4a949033c7343b2", "5cc86840d7f00c002412c56c"]);
const ammo46x30ArrayLL1 = ["5ba26812d4351e003201fef1"];
const ammo46x30ArrayLL2 = ammo46x30ArrayLL1;
const ammo46x30ArrayLL3 = ammo46x30ArrayLL2.concat(...["5ba2678ad4351e44f824b344", "5ba26844d4351e00334c9475"]);
const ammo9x18ArrayLL1 = ["573719762459775a626ccbc1", "57371e4124597760ff7b25f1", "57371eb62459776125652ac1", "57371f2b24597761224311f1", "5737201124597760fc4431f1", "5737207f24597760ff7b25f2"];
const ammo9x18ArrayLL2 = ammo9x18ArrayLL1.concat(...["57371b192459775a9f58a5e0"]);
const ammo9x18ArrayLL3 = ammo9x18ArrayLL2.concat(...["573718ba2459775a75491131", "573719df2459775a626ccbc2", "57371aab2459775a77142f22", "573720e02459776143012541", "57372140245977611f70ee91", "5737218f245977612125ba51"]);
const ammo9x19ArrayLL1 = ["58864a4f2459770fcc257101", "5c3df7d588a4501f290594e5"];
const ammo9x19ArrayLL2 = ammo9x19ArrayLL1.concat(...["56d59d3ad2720bdb418b4577"]);
const ammo9x19ArrayLL3 = ammo9x19ArrayLL2.concat(...["5c925fa22e221601da359b7b", "5efb0e16aeb21837e749c7ff", "5efb0da7a29a85116f6ea05f"]);
const ammo9x21ArrayLL2 = ["5a26abfac4a28232980eabff"];
const ammo9x21ArrayLL3 = ammo9x21ArrayLL2.concat(...["5a269f97c4a282000b151807", "5a26ac06c4a282000c5a90a8"]);
const ammo9x39ArrayLL2 = ["57a0dfb82459774d3078b56c"];
const ammo9x39ArrayLL3 = ammo9x39ArrayLL2.concat(...["57a0e5022459774d1673f889", "5c0d688c86f77413ae3407b2", "5c0d668f86f7747ccb7f13b2"]);
const ammo9x33RArrayLL2 = ["62330b3ed4dc74626d570b95", "62330bfadc5883093563729b", "62330c40bdd19b369e1e53d1"];
const ammo9x33RArrayLL3 = ammo9x33RArrayLL2.concat(...["62330c18744e5e31df12f516"]);
const ammo1143x23ACPArrayLL1 = ["5e81f423763d9f754677bf2e"];
const ammo1143x23ACPArrayLL2 = ammo1143x23ACPArrayLL1.concat(...["5efb0d4f4bc50b58e81710f3"]);
const ammo1143x23ACPArrayLL3 = ammo1143x23ACPArrayLL2.concat(...["5efb0cabfb3e451d70735af5", "5efb0fc6aeb21837e749c801"]);
const ammo12x70ArrayLL1 = ["560d5e524bdc2d25448b4571", "5d6e6772a4b936088465b17c", "5d6e67fba4b9361bc73bc779", "58820d1224597753c90aeb13", "5d6e6869a4b9361c140bcfde", "5d6e6891a4b9361bd473feea", ];
const ammo12x70ArrayLL2 = ammo12x70ArrayLL1.concat(...["5d6e6806a4b936088465b17e", "5d6e689ca4b9361bc8618956", "5d6e68e6a4b9361c140bcfe0"]);
const ammo12x70ArrayLL3 = ammo12x70ArrayLL2.concat(...["5d6e68b3a4b9361bca7e50b5", "5d6e68dea4b9361bcc29e659", "5d6e68a8a4b9360b6c0d54e2", "5d6e6911a4b9361bd5780d52", "5d6e68c4a4b9361b93413f79", "5c0d591486f7744c505b416f"]);
const ammo20x70ArrayLL1 = ["5a38ebd9c4a282000d722a5b", "5d6e695fa4b936359b35d852", "5d6e6a42a4b9364f07165f52", "5d6e6a53a4b9361bd473feec"];
const ammo20x70ArrayLL2 = ammo20x70ArrayLL1.concat(...["5d6e69b9a4b9361bc8618958", "5d6e69c7a4b9360b6c0d54e4"]);
const ammo20x70ArrayLL3 = ammo20x70ArrayLL2.concat(...["5d6e6a05a4b93618084f58d0", "5d6e6a5fa4b93614ec501745"]);
const ammo23x75ArrayLL3 = ["5e85a9a6eacf8c039e4e2ac1", "5f647f31b6238e5dd066e196"];
const progressionWhitelistLL1: IBotConfig.Equipment.whitelist.EquipmentFilterDetails =
{
"levelRange":
{
"min": 1,
"max": 15
},
"equipment":
{
"FirstPrimaryWeapon": [...primaryWeaponArrayLL1],
"Holster": [...holsterArrayLL1],
"Backpack": [...backpackArrayLL1],
"TacticalVest": [...tacticalVestArrayLL1],
"Earpiece": [...earpieceArrayLL1],
"Headwear": [...headwearArrayLL1],
"ArmorVest": [...armorVestArrayLL1],
"Eyewear": [...eyewearArrayLL1],
"ArmBand": [...armBandArrayLL1],
"FaceCover": [...faceCoverArrayLL1]
},
"cartridge":
{
"Caliber762x54R": [...ammo762x54ArrayLL1],
"Caliber762x51": [...ammo762x51ArrayLL1],
"Caliber762x39": [...ammo762x39ArrayLL1],
"Caliber762x25TT": [...ammo762x25TTArrayLL1],
"Caliber366TKM": [...ammo366TKMArrayLL1],
"Caliber556x45NATO": [...ammo556x45ArrayLL1],
"Caliber545x39": [...ammo545x39ArrayLL1],
"Caliber46x30": [...ammo46x30ArrayLL1],
"Caliber1143x23ACP": [...ammo1143x23ACPArrayLL1],
"Caliber9x19PARA": [...ammo9x19ArrayLL1],
"Caliber9x18PM": [...ammo9x18ArrayLL1],
"Caliber12g": [...ammo12x70ArrayLL1],
"Caliber20g": [...ammo20x70ArrayLL1]
}
}
const progressionWhitelistLL2: IBotConfig.Equipment.whitelist.EquipmentFilterDetails =
{
"levelRange":
{
"min": 16,
"max": 25
},
"equipment":
{
"FirstPrimaryWeapon": [...primaryWeaponArrayLL2],
"Holster": [...holsterArrayLL2],
"Backpack": [...backpackArrayLL2],
"TacticalVest": [...tacticalVestArrayLL2],
"Earpiece": [...earpieceArrayLL2],
"Headwear": [...headwearArrayLL2],
"ArmorVest": [...armorVestArrayLL2],
"Eyewear": [...eyewearArrayLL2],
"ArmBand": [...armBandArrayLL2],
"FaceCover": [...faceCoverArrayLL2]
},
"cartridge":
{
"Caliber762x54R": [...ammo762x54ArrayLL2],
"Caliber762x51": [...ammo762x51ArrayLL2],
"Caliber762x39": [...ammo762x39ArrayLL2],
"Caliber762x35": [...ammo762x35ArrayLL2],
"Caliber762x25TT": [...ammo762x25TTArrayLL2],
"Caliber366TKM": [...ammo366TKMArrayLL2],
"Caliber556x45NATO": [...ammo556x45ArrayLL2],
"Caliber545x39": [...ammo545x39ArrayLL2],
"Caliber57x28": [...ammo57x28ArrayLL2],
"Caliber46x30": [...ammo46x30ArrayLL2],
"Caliber1143x23ACP": [...ammo1143x23ACPArrayLL2],
"Caliber9x39": [...ammo9x39ArrayLL2],
"Caliber9x33R": [...ammo9x33RArrayLL2],
"Caliber9x21": [...ammo9x21ArrayLL2],
"Caliber9x19PARA": [...ammo9x19ArrayLL2],
"Caliber9x18PM": [...ammo9x18ArrayLL2],
"Caliber12g": [...ammo12x70ArrayLL2],
"Caliber20g": [...ammo20x70ArrayLL2]
}
}
const progressionWhitelistLL3: IBotConfig.Equipment.whitelist.EquipmentFilterDetails =
{
"levelRange":
{
"min": 26,
"max": 36
},
"equipment":
{
"FirstPrimaryWeapon": [...primaryWeaponArrayLL3],
"Holster": [...holsterArrayLL3],
"Backpack": [...backpackArrayLL3],
"TacticalVest": [...tacticalVestArrayLL3],
"Earpiece": [...earpieceArrayLL3],
"Headwear": [...headwearArrayLL3],
"ArmorVest": [...armorVestArrayLL3],
"Eyewear": [...eyewearArrayLL3],
"ArmBand": [...armBandArrayLL3],
"FaceCover": [...faceCoverArrayLL3]
},
"cartridge":
{
"Caliber127x55": [...ammo127x55ArrayLL3],
"Caliber762x54R": [...ammo762x54ArrayLL3],
"Caliber762x51": [...ammo762x51ArrayLL3],
"Caliber762x39": [...ammo762x39ArrayLL3],
"Caliber762x35": [...ammo762x35ArrayLL3],
"Caliber762x25TT": [...ammo762x25TTArrayLL3],
"Caliber366TKM": [...ammo366TKMArrayLL3],
"Caliber556x45NATO": [...ammo556x45ArrayLL3],
"Caliber545x39": [...ammo545x39ArrayLL3],
"Caliber57x28": [...ammo57x28ArrayLL3],
"Caliber46x30": [...ammo46x30ArrayLL3],
"Caliber1143x23ACP": [...ammo1143x23ACPArrayLL3],
"Caliber9x39": [...ammo9x39ArrayLL3],
"Caliber9x33R": [...ammo9x33RArrayLL3],
"Caliber9x21": [...ammo9x21ArrayLL3],
"Caliber9x19PARA": [...ammo9x19ArrayLL3],
"Caliber9x18PM": [...ammo9x18ArrayLL3],
"Caliber12g": [...ammo12x70ArrayLL3],
"Caliber20g": [...ammo20x70ArrayLL3],
"Caliber23x75": [...ammo23x75ArrayLL3]
}
}
this.botConfig.equipment.pmc.whitelist.push(progressionWhitelistLL1);
this.botConfig.equipment.pmc.whitelist.push(progressionWhitelistLL2);
this.botConfig.equipment.pmc.whitelist.push(progressionWhitelistLL3);
}
}

View File

@ -1,22 +1,22 @@
import { Logger } from "./logger"; import { Logger } from "./logger";
import { Config } from "../config/config"; import { QuestsConfig } from "../config/ts/quests";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
export class Quests export class Quests
{ {
private modConfig: Config = require("../config/config.json"); private modConfig: QuestsConfig = require("../config/quests.json");
private logger: Logger; private logger: Logger;
private tables: DatabaseServer; private tables: DatabaseServer;
constructor(logger: Logger, databaseServer: DatabaseServer) constructor(logger: Logger, databaseServer: DatabaseServer)
{ {
this.logger = logger; this.logger = logger;
this.tables = databaseServer.getTables(); this.tables = databaseServer;
} }
public updateQuests(): void public updateQuests(): void
{ {
if (!this.modConfig.quests.onlyFoundInRaid) if (!this.modConfig.onlyFoundInRaid)
{ {
this.onlyFoundInRaid(); this.onlyFoundInRaid();
this.logger.info("Quest Items No Longer Need Be Found In Raid"); this.logger.info("Quest Items No Longer Need Be Found In Raid");
@ -26,12 +26,12 @@ export class Quests
// Updates the weight modifier (as a multiplier) for all items in database/templates/items.json // Updates the weight modifier (as a multiplier) for all items in database/templates/items.json
private onlyFoundInRaid(): void private onlyFoundInRaid(): void
{ {
const quests = this.tables.templates.quests; const quests = this.tables.getTables().templates.quests;
for (const questid in quests) for (const questid in quests)
{ {
const questsAvailableForFinishConditions = quests[questid].conditions.AvailableForFinish; const questsAvailableForFinishConditions = quests[questid].conditions.AvailableForFinish;
const findItemConditions = questsAvailableForFinishConditions.find(x=>x.parent === "FindItem"); const findItemConditions = questsAvailableForFinishConditions.find(x=>x._parent === "FindItem");
if (!findItemConditions) if (!findItemConditions)
{ {
@ -44,5 +44,4 @@ export class Quests
} }
} }
} }
} }

View File

@ -1,11 +1,11 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig"; import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
import { Logger } from "./logger"; import { Logger } from "./logger";
import { Config } from "../config/config"; import { RaidConfig } from "../config/ts/raid";
export class Raid export class Raid
{ {
private modConfig: Config = require("../config/config.json") private modConfig: RaidConfig = require("../config/raid.json")
private logger: Logger; private logger: Logger;
private tables: DatabaseServer; private tables: DatabaseServer;
private inRaidConfig: IInRaidConfig; private inRaidConfig: IInRaidConfig;
@ -13,13 +13,13 @@ export class Raid
constructor(logger:Logger, databaseServer: DatabaseServer, inRaidConfig: IInRaidConfig) constructor(logger:Logger, databaseServer: DatabaseServer, inRaidConfig: IInRaidConfig)
{ {
this.logger = logger; this.logger = logger;
this.tables = databaseServer.getTables(); this.tables = databaseServer;
this.inRaidConfig = inRaidConfig; this.inRaidConfig = inRaidConfig;
} }
public updateRaid(): void public updateRaid(): void
{ {
const mod = this.modConfig.raid; const mod = this.modConfig;
if (mod.fixOpenZones) if (mod.fixOpenZones)
{ {
@ -35,13 +35,13 @@ export class Raid
if (mod.timeLimit) if (mod.timeLimit)
{ {
const maps = this.tables.locations; const maps = this.tables.getTables().locations;
for (const map in maps) for (const map in maps)
{ {
if (this.tables.locations[map].base?.EscapeTimeLimit) if (this.tables.getTables().locations[map].base?.EscapeTimeLimit)
{ {
this.tables.locations[map].base.EscapeTimeLimit = this.modConfig.raid.timeLimit; this.tables.getTables().locations[map].base.EscapeTimeLimit = this.modConfig.timeLimit;
} }
} }
this.logger.info(`Raid Time Limits set to ${mod.timeLimit} minutes.`); this.logger.info(`Raid Time Limits set to ${mod.timeLimit} minutes.`);
@ -93,14 +93,14 @@ export class Raid
for (const location in zones) for (const location in zones)
{ {
this.tables.locations[location].base.OpenZones = zones[location]; this.tables.getTables().locations[location].base.OpenZones = zones[location];
} }
} }
private chompiesBossFix(): void private chompiesBossFix(): void
{ {
const labsBosses = this.tables.locations.laboratory.base.BossLocationSpawn; const labsBosses = this.tables.getTables().locations.laboratory.base.BossLocationSpawn;
const reserveBosses = this.tables.locations.rezervbase.base.BossLocationSpawn; const reserveBosses = this.tables.getTables().locations.rezervbase.base.BossLocationSpawn;
const spawn1 = labsBosses.find(x => x.TriggerId === "autoId_00008_EXFIL"); const spawn1 = labsBosses.find(x => x.TriggerId === "autoId_00008_EXFIL");
if (spawn1) if (spawn1)
{ {

76
src/skills.ts Normal file
View File

@ -0,0 +1,76 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { SkillsConfig } from "../config/ts/skills";
import { Logger } from "./logger";
export class Skills
{
private modConfig: SkillsConfig = require("../config/skills.json");
private logger: Logger;
private tables: DatabaseServer;
constructor(logger: Logger, databaseServer: DatabaseServer)
{
this.logger = logger;
this.tables = databaseServer;
}
public updateSkills(): void
{
const skills = this.tables.getTables().globals.config;
const mod = this.modConfig;
if (mod.weaponSkillProgressRate != 1)
{
skills.SkillsSettings.WeaponSkillProgressRate = mod.weaponSkillProgressRate;
this.logger.info(`Weapon Skill Progress Rate changed to ${mod.weaponSkillProgressRate}`)
}
if (mod.skillProgressRate != 0.4)
{
skills.SkillsSettings.SkillProgressRate = mod.skillProgressRate;
this.logger.info(`Skill Progress Rate changed to ${mod.skillProgressRate}`)
}
if (mod.skillEnduranceWeightThreshold != 0.65)
{
skills.SkillEnduranceWeightThreshold = mod.skillEnduranceWeightThreshold;
this.logger.info(`Skill Endurance Weight Threshold changed to ${mod.skillEnduranceWeightThreshold}`)
}
if (mod.skillMinEffectiveness != 0.0001)
{
skills.SkillMinEffectiveness = mod.skillMinEffectiveness;
this.logger.info(`Skill Min Effectiveness changed to ${mod.skillMinEffectiveness}`)
}
if (mod.skillFatiguePerPoint != 0.6)
{
skills.SkillFatiguePerPoint = mod.skillFatiguePerPoint;
this.logger.info(`Skill Fatigue Per Point changed to ${mod.skillFatiguePerPoint}`);
}
if (mod.skillFreshEffectiveness != 1.3)
{
skills.SkillFreshEffectiveness = mod.skillFreshEffectiveness;
this.logger.info(`Skill Fresh Effectiveness changed to ${mod.skillFreshEffectiveness}`);
}
if (mod.skillFreshPoints != 1)
{
skills.SkillFreshPoints = mod.skillFreshPoints;
this.logger.info(`Skill Fresh Points changed to ${mod.skillFreshPoints}`);
}
if (mod.skillPointsBeforeFatigue != 1)
{
skills.SkillPointsBeforeFatigue = mod.skillPointsBeforeFatigue;
this.logger.info(`Skill Points Before Fatigue changed to ${mod.skillPointsBeforeFatigue}`);
}
if (mod.skillFatiguePerPoint != 200)
{
skills.SkillFatigueReset = mod.skillFatigueReset;
this.logger.info(`Skill Fatigue Reset changed to ${mod.skillFatigueReset}`);
}
}
}

View File

@ -1,67 +1,85 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { Config } from "../config/config"; import { WeaponsConfig } from "../config/ts/weapons";
import { Logger } from "./logger"; import { Logger } from "./logger";
export class Weapons export class Weapons
{ {
private modConfig: Config = require("../config/config.json") private modConfig: WeaponsConfig = require("../config/weapons.json")
private logger: Logger; private logger: Logger;
private tables: DatabaseServer; private tables: DatabaseServer;
private mod: any;
private weapons: any; private weapons: any;
constructor(logger:Logger, databaseServer: DatabaseServer) constructor(logger:Logger, databaseServer: DatabaseServer)
{ {
this.logger = logger; this.logger = logger;
this.tables = databaseServer.getTables(); this.tables = databaseServer;
} }
public updateWeapons(): void public updateWeapons(): void
{ {
this.mod = this.modConfig.weapons; const mod = this.modConfig;
this.weapons = this.tables.getTables().templates.items;
if (this.mod.overheat || this.mod.jam || this.mod.slide || this.mod.misfeed || this.mod.misfire) if (mod.malfunctions.overheat || mod.malfunctions.jam || mod.malfunctions.slide || mod.malfunctions.misfeed || mod.malfunctions.misfire)
{ {
this.weaponMalfunctions(); this.weaponMalfunctions();
this.logger.info("Weapon Malfunctions Patched", true); this.logger.info("Weapon Malfunctions Patched");
}
if (mod.smgInHolsters)
{
this.smgInHolsters();
this.logger.info("SMGs may now be placed in holsters");
} }
} }
private weaponMalfunctions(): void private weaponMalfunctions(): void
{ {
const items = this.tables.templates.items; const items = this.tables.getTables().templates.items;
for (const id in items) for (const id in items)
{ {
const base = items[id]; const base = items[id];
const malfunctions = this.modConfig.malfunctions;
//Weapons malfunctions //Weapons malfunctions
if (this.mod.jam && base._props.AllowJam) if (malfunctions.jam && base._props.AllowJam)
{ {
base._props.AllowJam = false; base._props.AllowJam = false;
} }
if (this.mod.misfire && base._props.AllowMisfire) if (malfunctions.misfire && base._props.AllowMisfire)
{ {
base._props.AllowMisfire = false; base._props.AllowMisfire = false;
} }
if (this.mod.feed && base._props.AllowFeed) if (malfunctions.misfeed && base._props.AllowFeed)
{ {
base._props.AllowFeed = false; base._props.AllowFeed = false;
} }
if (this.mod.overheat && base._props.AllowOverheat) if (malfunctions.overheat && base._props.AllowOverheat)
{ {
base._props.AllowOverheat = false; base._props.AllowOverheat = false;
} }
if (this.mod.slide && base._props.AllowSlide) if (malfunctions.slide && base._props.AllowSlide)
{ {
base._props.AllowSlide = false; base._props.AllowSlide = false;
} }
} }
} }
private smgInHolsters(): void
{
for (const weaponId in this.weapons)
{
if (this.weapons[weaponId]._id === "55d7217a4bdc2d86028b456d")
{
this.weapons[weaponId]._props.Slots[2]._props.filters[0].Filter.push("5447b5e04bdc2d62278b4567")
}
}
}
} }