Fix for PMC Difficulty. Versioning Update to 1.1.1

This commit is contained in:
VforValens 2022-08-04 16:32:36 -04:00
parent 37ea60b3de
commit 446d309d3f
5 changed files with 370 additions and 109 deletions

3
.gitignore vendored
View File

@ -27,4 +27,5 @@ dist
## windows ## windows
config.json.bk config.json.bk
desktop.ini desktop.ini
*.zip *.zip
*.js

View File

@ -5,11 +5,11 @@
{ {
"ammoStacks": "ammoStacks":
{ {
"grenadeCartridges": 1, "grenadeCartridges": 2,
"marksmanCartridges": 40, "marksmanCartridges": 2,
"pistolCartridges": 50, "pistolCartridges": 2,
"rifleCartridges": 60, "rifleCartridges": 2,
"shotgunCartridges": 20 "shotgunCartridges": 2
} }
}, },
@ -17,22 +17,22 @@
{ {
"bossChance": "bossChance":
{ {
"activated": false, "activated": true,
"chance": 100 "chance": 2
}, },
"maxBotCap": 20, "maxBotCap": 2,
"pmc": "pmc":
{ {
"chanceSameSideIsHostilePercent": 50, "chanceSameSideIsHostilePercent": 2,
"containersOnPMCs": true, "containersOnPMCs": true,
"isUsec": 50, "isUsec": 2,
"lootNValue": 3, "lootNValue": 2,
"maxBackpackLootTotalRub": 150000, "maxBackpackLootTotalRub": 2,
"maxPocketLootTotalRub": 50000, "maxPocketLootTotalRub": 2,
"maxVestLootTotalRub": 50000, "maxVestLootTotalRub": 2,
"pmcDifficulty": "AsOnline", "pmcDifficulty": "Easy",
"convertIntoPmcChance": "convertIntoPmcChance":
{ {
@ -46,17 +46,17 @@
"min": 18, "min": 18,
"max": 45 "max": 45
}, },
"cursedassault for 3.2.0": "cursedassault for 3.2.0":
{ {
"min": 18, "min": 18,
"max": 45 "max": 45
}, },
"pmcbot for 3.2.0": "pmcbot for 3.2.0":
{ {
"min": 18, "min": 18,
"max": 35 "max": 35
}, },
"exusec for 3.2.0": "exusec for 3.2.0":
{ {
"min": 5, "min": 5,
"max": 25 "max": 25
@ -66,13 +66,13 @@
"scav": "scav":
{ {
"lootNValue": 4 "lootNValue": 2
} }
}, },
"flea": "flea":
{ {
"minUserLevel": 15, "minUserLevel": 2,
"blacklist": "blacklist":
{ {
@ -82,84 +82,84 @@
"condition": "condition":
{ {
"conditionChance": 0.2, "conditionChance": 0.4,
"min": 0.6, "min": 0.8,
"max": 1 "max": 0.9
}, },
"currencies": "currencies":
{ {
"roubles": 78, "roubles": 79,
"dollars": 20, "dollars": 21,
"euros": 2 "euros": 1
}, },
"offerItemCount": "offerItemCount":
{ {
"min": 8, "min": 9,
"max": 15 "max": 16
}, },
"reputation": "reputation":
{ {
"gain": 0.0000002, "gain": 0.000002,
"loss": 0.0000002 "loss": 0.000002
}, },
"time": "time":
{ {
"baseSellTime": 15, "baseSellTime": 1,
"minSellTime": 5, "minSellTime": 1,
"maxSellTime": 15 "maxSellTime": 1
} }
}, },
"globals": "globals":
{ {
"damagePerMeter": 9, "damagePerMeter": 3,
"safeHeight": 3, "safeHeight": 9,
"maxLoyaltyTraders": false, "maxLoyaltyTraders": true,
"timeBeforeDeployLocal": 10, "timeBeforeDeployLocal": 1,
"match_end": "match_end":
{ {
"survived_exp_requirement": 200, "survived_exp_requirement": 1,
"survived_seconds_requirement": 420, "survived_seconds_requirement": 1,
"survived_exp_reward": 300, "survived_exp_reward": 1,
"mia_exp_reward": 200, "mia_exp_reward": 1,
"runner_exp_reward": 200, "runner_exp_reward": 1,
"leftMult": 0, "leftMult": 2,
"miaMult": 1, "miaMult": 12,
"survivedMult": 1.3, "survivedMult": 2,
"runnerMult": 0.5, "runnerMult": 2,
"killedMult": 1, "killedMult": 2,
"headShotMult": 1.2, "headShotMult": 12,
"expOnDamageAllHealth": 50 "expOnDamageAllHealth": 52
} }
}, },
"hideout": "hideout":
{ {
"airFilterUnitFlowRate": 0.0047222222222222, "airFilterUnitFlowRate": 0.004722222222222,
"constructionTime": 1, "constructionTime": 2,
"generatorFuelFlowRate": 0.0013194444444444, "generatorFuelFlowRate": 0.001319444444444,
"gpuBoostRate": 0.041225, "gpuBoostRate": 0.04125,
"productionTime": 1, "productionTime": 2,
"scavCaseTime": 1 "scavCaseTime": 2
}, },
"insurance": "insurance":
{ {
"insuranceMultiplier": "insuranceMultiplier":
{ {
"prapor": 0.16, "prapor": 0.1,
"therapist": 0.25 "therapist": 0.2
}, },
"returnChancePercent": "returnChancePercent":
{ {
"prapor": 80, "prapor": 8,
"therapist": 85 "therapist": 8
} }
}, },
@ -168,72 +168,72 @@
{ {
"standardStash": "standardStash":
{ {
"vertical": 28, "vertical": 2,
"horizontal": 10 "horizontal": 11
}, },
"behindStash": "behindStash":
{ {
"vertical": 38, "vertical": 3,
"horizontal": 10 "horizontal": 11
}, },
"escapeStash": "escapeStash":
{ {
"vertical": 48, "vertical": 4,
"horizontal": 10 "horizontal": 11
}, },
"eodStash": "eodStash":
{ {
"vertical": 68, "vertical": 6,
"horizontal": 10 "horizontal": 11
}, },
"examinedByDefault": false, "examinedByDefault": true,
"removeBackpackFilter": true, "removeBackpackFilter": true,
"weightModifier": 1, "weightModifier": 2,
"roublesMaxStack": 500000, "roublesMaxStack": 2,
"dollarsMaxStack": 50000, "dollarsMaxStack": 2,
"eurosMaxStack": 50000 "eurosMaxStack": 2
}, },
"locations": "locations":
{ {
"allExtractsAvailable": false, "allExtractsAvailable": true,
"exfilTime": 8, "exfilTime": 2,
"extractionsExtended": false, "extractionsExtended": true,
"noExtractRestrictions": false "noExtractRestrictions": true
}, },
"loot": "loot":
{ {
"containersInMarkedRoom": true, "containersInMarkedRoom": true,
"looseLootMultiplier": 1, "looseLootMultiplier": 2,
"staticLootMultiplier": 1 "staticLootMultiplier": 2
}, },
"raid": "raid":
{ {
"carExtractBaseStandingGain": 0.25, "carExtractBaseStandingGain": 0.2,
"chompiesBossFix": true, "chompiesBossFix": true,
"fixOpenZones": true, "fixOpenZones": true,
"scavExtractGain": 0.01, "scavExtractGain": 0.02,
"timeLimit": 60, "timeLimit": 2,
"aiAmount": "AsOnline", "aiAmount": "High",
"aiDifficulty": "AsOnline", "aiDifficulty": "Medium",
"bossEnabled": true, "bossEnabled": false,
"scavWars": false, "scavWars": true,
"taggedAndCursed": false, "taggedAndCursed": true,
"enablePve": true "enablePve": false
}, },
"prewipe_events": "prewipe_events":
{ {
"allBossesOnReserve": false, "allBossesOnReserve": true,
"allTradersSellCheapItems": false, "allTradersSellCheapItems": true,
"glukharOnLabs": false, "glukharOnLabs": true,
"killaOnFactory": false, "killaOnFactory": true,
"makeObdolbosPowerful": false "makeObdolbosPowerful": true
} }
} }

261
Valens-AIO/config/config.ts Normal file
View File

@ -0,0 +1,261 @@
export interface Root
{
DebugMode: boolean
ammo: Ammo
bots: Bots
flea: Flea
globals: Globals
hideout: Hideout
insurance: Insurance
items: Items
locations: Locations
loot: Loot
raid: Raid
prewipe_events: PrewipeEvents
}
export interface Ammo
{
ammoStacks: AmmoStacks
}
export interface AmmoStacks
{
grenadeCartridges: number
marksmanCartridges: number
pistolCartridges: number
rifleCartridges: number
shotgunCartridges: number
}
export interface Bots
{
bossChance: BossChance
maxBotCap: number
pmc: Pmc
scav: Scav
}
export interface BossChance
{
activated: boolean
chance: number
}
export interface Pmc
{
chanceSameSideIsHostilePercent: number
containersOnPMCs: boolean
isUsec: number
lootNValue: number
maxBackpackLootTotalRub: number
maxPocketLootTotalRub: number
maxVestLootTotalRub: number
pmcDifficulty: string
convertIntoPmcChance: ConvertIntoPmcChance
}
export interface ConvertIntoPmcChance
{
assault: number
cursedAssault: number
pmcBot: number
exUsec: number
"assault for 3.2.0": AssaultFor320
"cursedassault for 3.2.0": CursedassaultFor320
"pmcbot for 3.2.0": PmcbotFor320
"exusec for 3.2.0": ExusecFor320
}
export interface AssaultFor320
{
min: number
max: number
}
export interface CursedassaultFor320
{
min: number
max: number
}
export interface PmcbotFor320
{
min: number
max: number
}
export interface ExusecFor320
{
min: number
max: number
}
export interface Scav
{
lootNValue: number
}
export interface Flea
{
minUserLevel: number
blacklist: Blacklist
condition: Condition
currencies: Currencies
offerItemCount: OfferItemCount
reputation: Reputation
time: Time
}
export interface Blacklist
{
enableBsgList: boolean
enableQuestList: boolean
}
export interface Condition
{
conditionChance: number
min: number
max: number
}
export interface Currencies
{
roubles: number
dollars: number
euros: number
}
export interface OfferItemCount
{
min: number
max: number
}
export interface Reputation
{
gain: number
loss: number
}
export interface Time
{
baseSellTime: number
minSellTime: number
maxSellTime: number
}
export interface Globals
{
damagePerMeter: number
safeHeight: number
maxLoyaltyTraders: boolean
timeBeforeDeployLocal: number
match_end: MatchEnd
}
export interface MatchEnd
{
survived_exp_requirement: number
survived_seconds_requirement: number
survived_exp_reward: number
mia_exp_reward: number
runner_exp_reward: number
leftMult: number
miaMult: number
survivedMult: number
runnerMult: number
killedMult: number
headShotMult: number
expOnDamageAllHealth: number
}
export interface Hideout
{
airFilterUnitFlowRate: number
constructionTime: number
generatorFuelFlowRate: number
gpuBoostRate: number
productionTime: number
scavCaseTime: number
}
export interface Insurance
{
insuranceMultiplier: InsuranceMultiplier
returnChancePercent: ReturnChancePercent
}
export interface InsuranceMultiplier
{
prapor: number
therapist: number
}
export interface ReturnChancePercent
{
prapor: number
therapist: number
}
export interface Items
{
standardStash: Stash
behindStash: Stash
escapeStash: Stash
eodStash: Stash
examinedByDefault: boolean
removeBackpackFilter: boolean
weightModifier: number
roublesMaxStack: number
dollarsMaxStack: number
eurosMaxStack: number
}
export interface Stash
{
vertical: number
horizontal: number
}
export interface Locations
{
allExtractsAvailable: boolean
exfilTime: number
extractionsExtended: boolean
noExtractRestrictions: boolean
}
export interface Loot
{
containersInMarkedRoom: boolean
looseLootMultiplier: number
staticLootMultiplier: number
}
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 PrewipeEvents
{
allBossesOnReserve: boolean
allTradersSellCheapItems: boolean
glukharOnLabs: boolean
killaOnFactory: boolean
makeObdolbosPowerful: boolean
}

View File

@ -1,6 +1,6 @@
{ {
"name": "Valens-AIO", "name": "Valens-AIO",
"version": "1.1.0", "version": "1.1.1",
"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

@ -5,10 +5,11 @@ import { Logger } from "./logger";
import type { BossLocationSpawn } from "@spt-aki/models/eft/common/ILocationBase"; import type { BossLocationSpawn } from "@spt-aki/models/eft/common/ILocationBase";
import { Traders } from "./traders"; import { Traders } from "./traders";
import { Money } from "@spt-aki/models/enums/Money" import { Money } from "@spt-aki/models/enums/Money"
import { Config } from "../config/config";
export class Bots export class Bots
{ {
private modConfig = require("../config/config.json") private modConfig: Config= require("../config/config.json");
private logger: Logger; private logger: Logger;
private botConfig: IBotConfig; private botConfig: IBotConfig;
private tables: IDatabaseTables; private tables: IDatabaseTables;
@ -28,10 +29,10 @@ export class Bots
const mod = this.modConfig.bots; const mod = this.modConfig.bots;
// Changes PMC difficulty to Easy, Normal, Hard, Impossible or AsOnline. Default AsOnline. // Changes PMC difficulty to Easy, Normal, Hard, Impossible or AsOnline. Default AsOnline.
if (mod.pmc.pmcDifficulty.toLowerCase() != "AsOnline") if (mod.pmc.pmcDifficulty.toLowerCase() != "asonline")
{ {
this.botConfig.pmc.difficulty = mod.pmcDifficulty; this.botConfig.pmc.difficulty = mod.pmc.pmcDifficulty
this.logger.info(`PMC Bot Difficulty set to ${mod.pmcDifficulty}`); this.logger.info(`PMC Bot Difficulty set to ${mod.pmc.pmcDifficulty}`);
} }
// Enables common and secure containers to spawn on PMCs while additionally whitelisting the parent IDs. Rarity adjusted via PMC lootNValue. Default true. // Enables common and secure containers to spawn on PMCs while additionally whitelisting the parent IDs. Rarity adjusted via PMC lootNValue. Default true.
@ -86,29 +87,27 @@ export class Bots
} }
if (mod.pmc.convertIntoPmcChance.assault != 25 || mod.pmc.convertIntoPmcChance.cursedAssault != 25 if (mod.pmc.convertIntoPmcChance.assault != 25 || mod.pmc.convertIntoPmcChance.cursedAssault != 25
|| mod.pmc.convertIntoPmcChance.pmcBot != 25 || mod.pmc.convertIntoPmcChance.exUsec != 10) || mod.pmc.convertIntoPmcChance.pmcBot != 25 || mod.pmc.convertIntoPmcChance.exUsec != 10)
{ {
this.botConfig.pmc.types.assault = mod.pmc.convertIntoPmcChance.assault; this.botConfig.pmc.types.assault = mod.pmc.convertIntoPmcChance.assault;
this.botConfig.pmc.types.cursedAssault = mod.pmc.convertIntoPmcChance.cursedAssault; this.botConfig.pmc.types.cursedAssault = mod.pmc.convertIntoPmcChance.cursedAssault;
this.botConfig.pmc.types.pmcBot = mod.pmc.convertIntoPmcChance.pmcBot; this.botConfig.pmc.type.pmcBot = mod.pmc.convertIntoPmcChance.pmcBot;
this.botConfig.pmc.types.exUsec = mod.pmc.convertIntoPmcChance.exUsec; this.botConfig.pmc.type.exUsec = mod.pmc.convertIntoPmcChance.exUsec;
this.logger.info("Chance to Convert Bots into PMC Patched"); }
}
/*if (mod.pmc.convertIntoPmcChance.assault.min != 15 || mod.pmc.convertIntoPmcChance.assault.max != 40 /*if (mod.pmc.convertIntoPmcChance.assault.min != 15 || mod.pmc.convertIntoPmcChance.assault.max != 40
|| mod.pmc.convertIntoPmcChance.cursedassault.min != 15 || mod.pmc.convertIntoPmcChance.cursedassault.max != 40 || mod.pmc.convertIntoPmcChance.cursedassault.min != 15 || mod.pmc.convertIntoPmcChance.cursedassault.max != 40
|| mod.pmc.convertIntoPmcChance.pmcbot.min != 15 || mod.pmc.convertIntoPmcChance.pmcbot.max != 30 || mod.pmc.convertIntoPmcChance.pmcbot.min != 15 || mod.pmc.convertIntoPmcChance.pmcbot.max != 30
|| mod.pmc.convertIntoPmcChance.exusec.min != 15 || mod.pmc.convertIntoPmcChance.exusec.max != 20) || mod.pmc.convertIntoPmcChance.exusec.min != 15 || mod.pmc.convertIntoPmcChance.exusec.max != 20)
{ {
*this.botConfig.pmc.convertIntoPmcChance.assault.min = mod.pmc.convertIntoPmcChance.assault.min; this.botConfig.pmc.convertIntoPmcChance.assault.min = mod.pmc.convertIntoPmcChance.assault.min;
this.botConfig.pmc.convertIntoPmcChance.assault.max = mod.pmc.convertIntoPmcChance.assault.max; this.botConfig.pmc.convertIntoPmcChance.assault.max = mod.pmc.convertIntoPmcChance.assault.max;
this.botConfig.pmc.convertIntoPmcChance.cursedassault.min = mod.pmc.convertIntoPmcChance.cursedassault.min; this.botConfig.pmc.convertIntoPmcChance.cursedassault.min = mod.pmc.convertIntoPmcChance.cursedassault.min;
this.botConfig.pmc.convertIntoPmcChance.cursedassault.max = mod.pmc.convertIntoPmcChance.cursedassault.max; this.botConfig.pmc.convertIntoPmcChance.cursedassault.max = mod.pmc.convertIntoPmcChance.cursedassault.max;
this.botConfig.pmc.convertIntoPmcChance.pmcbot.min = mod.pmc.convertIntoPmcChance.pmcbot.min; this.botConfig.pmc.convertIntoPmcChance.pmcbot.min = mod.pmc.convertIntoPmcChance.pmcbot.min;
this.botConfig.pmc.convertIntoPmcChance.pmcbot.max = mod.pmc.convertIntoPmcChance.pmcbot.max; this.botConfig.pmc.convertIntoPmcChance.pmcbot.max = mod.pmc.convertIntoPmcChance.pmcbot.max;
this.botConfig.pmc.convertIntoPmcChance.exusec.min = mod.pmc.convertIntoPmcChance.exusec.min; this.botConfig.pmc.convertIntoPmcChance.exusec.min = mod.pmc.convertIntoPmcChance.exusec.min;
this.botConfig.pmc.convertIntoPmcChance.exusec.max = mod.pmc.convertIntoPmcChance.exusec.max;* this.botConfig.pmc.convertIntoPmcChance.exusec.max = mod.pmc.convertIntoPmcChance.exusec.max;
this.logger.info("Chance to Convert Bots into PMC Patched"); this.logger.info("Chance to Convert Bots into PMC Patched");
}*/ }*/