Compare commits

..

No commits in common. "main" and "1.7.0" have entirely different histories.
main ... 1.7.0

200 changed files with 880 additions and 2442 deletions

View File

@ -1,118 +1,62 @@
{
"airdropChancePercent":
{
"bigmap": 20,
"bigmap": 25,
"woods": 25,
"lighthouse": 20,
"shoreline": 20,
"interchange": 20,
"reserve": 10,
"tarkovStreets": 12
"lighthouse": 25,
"shoreline": 25,
"interchange": 25,
"reserve": 25
},
"airdropMinStartTimeSeconds": 60,
"airdropMaxStartTimeSeconds": 300,
"airdropMinStartTimeSeconds": 60,
"airdropMaxStartTimeSeconds": 300,
"planeMinFlyHeight": 400,
"planeMaxFlyHeight": 500,
"planeVolume": 0.5,
"planeSpeed": 65,
"crateFallSpeed": 3,
"loot": {
"presetCount": {
"min": 3,
"max": 5
},
"itemCount": {
"min": 12,
"max": 25
},
"itemBlacklist": [
"5e997f0b86f7741ac73993e2",
"5b44abe986f774283e2e3512",
"5e99711486f7744bfc4af328",
"5e99735686f7744bfc4af32c",
"6087e570b998180e9f76dc24",
"5d52d479a4b936793d58c76b",
"5e85aac65505fa48730d8af2",
"63495c500c297e20065a08b1",
"5cde8864d7f00c0010373be1",
"5b3b713c5acfc4330140bd8d"
],
"itemTypeWhitelist": [
"543be5dd4bdc2deb348b4569",
"5485a8684bdc2da71d8b4567",
"5d650c3e815116009f6201d2",
"5448e8d64bdc2dce718b4568",
"5448e8d04bdc2ddf718b4569",
"5447e1d04bdc2dff2f8b4567",
"57864ee62459775490116fc1",
"5448e54d4bdc2dcc718b4568",
"5448e5284bdc2dcb718b4567",
"5448e53e4bdc2d60728b4567",
"5448f3a64bdc2d60728b456a",
"5448f3ac4bdc2dce718b4569",
"55818ad54bdc2ddc698b4569",
"55818af64bdc2d5b648b4570",
"55818b0e4bdc2dde698b456e",
"5448bc234bdc2d3c308b4569",
"57864ada245977548638de91",
"5645bcb74bdc2ded0b8b4578",
"5448e5724bdc2ddf718b4568",
"55818add4bdc2d5b648b456f",
"543be6564bdc2df4348b4568",
"57864bb7245977548b3b66c2",
"550aa4cd4bdc2dd8348b456c",
"5448f39d4bdc2d0a728b4568",
"5448f3a14bdc2d27728b4569",
"5447e1d04bdc2dff2f8b4567",
"55818b164bdc2ddc698b456c",
"55818ae44bdc2dde698b456c"
],
"itemLimits": {
"5447b5cf4bdc2d65278b4567": 1,
"5448e8d04bdc2ddf718b4569": 3,
"5448e8d64bdc2dce718b4568": 3,
"5448bc234bdc2d3c308b4569": 3,
"5448f3a64bdc2d60728b456a": 3,
"5448e54d4bdc2dcc718b4568": 3,
"5485a8684bdc2da71d8b4567": 4,
"57864bb7245977548b3b66c2": 2,
"57864ada245977548638de91": 3,
"5d650c3e815116009f6201d2": 2,
"5645bcb74bdc2ded0b8b4578": 2,
"5448e5724bdc2ddf718b4568": 2,
"55818add4bdc2d5b648b456f": 2,
"543be6564bdc2df4348b4568": 3,
"550aa4cd4bdc2dd8348b456c": 2,
"5448f39d4bdc2d0a728b4568": 4,
"5448f3a14bdc2d27728b4569": 2,
"5447e1d04bdc2dff2f8b4567": 1,
"55818ad54bdc2ddc698b4569": 3,
"55818b164bdc2ddc698b456c": 2,
"55818ae44bdc2dde698b456c": 2,
"5448e5284bdc2dcb718b4567": 2
},
"itemStackLimits": {
"5fc382a9d724d907e2077dab": {
"min": 5,
"max": 5
},
"59e690b686f7746c9f75e848": {
"min": 10,
"max": 25
},
"5449016a4bdc2d6f028b456f": {
"min": 5000,
"max": 50000
},
"569668774bdc2da2298b4568": {
"min": 100,
"max": 500
},
"5696686a4bdc2da3298b456a": {
"min": 100,
"max": 500
}
},
"armorLevelWhitelist": [0, 4, 5, 6]
"loot":
{
"presetCount": { "min": 3, "max": 5},
"itemCount": { "min": 12, "max": 25},
"itemBlacklist": ["5e997f0b86f7741ac73993e2"],
"itemTypeWhitelist": [
"543be5dd4bdc2deb348b4569",
"5485a8684bdc2da71d8b4567",
"5d650c3e815116009f6201d2",
"5448e8d64bdc2dce718b4568",
"5448e8d04bdc2ddf718b4569",
"5447e1d04bdc2dff2f8b4567",
"57864ee62459775490116fc1",
"5448e54d4bdc2dcc718b4568",
"5448e5284bdc2dcb718b4567",
"5448e53e4bdc2d60728b4567",
"5448f3a64bdc2d60728b456a",
"5448f3ac4bdc2dce718b4569",
"55818af64bdc2d5b648b4570",
"55818b0e4bdc2dde698b456e",
"5448bc234bdc2d3c308b4569",
"57864ada245977548638de91",
"5645bcb74bdc2ded0b8b4578",
"5448e5724bdc2ddf718b4568",
"55818add4bdc2d5b648b456f",
"543be6564bdc2df4348b4568",
"57864bb7245977548b3b66c2",
"550aa4cd4bdc2dd8348b456c"],
"itemLimits": {
"5447b5cf4bdc2d65278b4567": 1,
"5448bc234bdc2d3c308b4569": 3,
"5448f3a64bdc2d60728b456a": 3,
"5448e54d4bdc2dcc718b4568": 3,
"5485a8684bdc2da71d8b4567": 4,
"57864bb7245977548b3b66c2": 2,
"57864ada245977548638de91": 3,
"5d650c3e815116009f6201d2": 2,
"5645bcb74bdc2ded0b8b4578": 2,
"5448e5724bdc2ddf718b4568": 2,
"55818add4bdc2d5b648b456f": 2,
"543be6564bdc2df4348b4568": 3,
"57864bb7245977548b3b66c2": 2,
"550aa4cd4bdc2dd8348b456c": 2}
}
}
}

View File

@ -4,24 +4,23 @@
"activated": false,
"chance": 100
},
"botGenerationBatchSizePerType": 15,
"maxBotCap": {
"factory": 10,
"customs": 15,
"woods": 15,
"shoreline": 15,
"lighthouse": 15,
"reservebase": 15,
"interchange": 15,
"laboratory": 15,
"streets of tarkov": 18,
"default": 15
"maxBotCap":
{
"factory": 25,
"customs": 25,
"woods": 20,
"shoreline": 20,
"lighthouse": 25,
"reservebase": 20,
"interchange": 20,
"laboratory": 25,
"default": 20
},
"pmc":
{
"chanceSameSideIsHostilePercent": 80,
"chanceSameSideIsHostile": 50,
"containersOnPMCs": true,
"isUsec": 50,
"lootNValue": 3,
@ -33,32 +32,29 @@
{
"assault":
{
"min": 20,
"max": 30
"min": 15,
"max": 40
},
"cursedassault":
"cursedAssault":
{
"min": 15,
"max": 40
},
"pmcBot":
{
"min": 15,
"max": 30
},
"pmcbot":
{
"min": 15,
"max": 25
},
"exusec":
"exUsec":
{
"min": 5,
"max": 5
"max": 20
}
},
"useDifficultyOverride": false,
"difficulty": "AsOnline",
"botRelativeLevelDeltaMax": 10,
"difficultyWeights":
{
"difficulty": "asonline",
"useWeights": false,
"weights":
{
@ -70,7 +66,7 @@
},
"looseWeaponInBackpackChance": 15,
"looseWeaponInBackpackLootMinMax":
"looseWeaponInBackpackLoot":
{
"min": 1,
"max": 1

View File

@ -1,6 +1,5 @@
{
"minUserLevel": 15,
"runIntervalSeconds": 45,
"blacklist":
{
@ -8,50 +7,11 @@
"enableQuestList": true
},
"condition":
"condition":
{
"5422acb9af1c889c16000029": {
"_name": "WEAPON",
"conditionChance": 0.2,
"min": 0.6,
"max": 1
},
"543be5664bdc2dd4348b4569": {
"_name": "MEDS",
"conditionChance": 0.2,
"min": 0.6,
"max": 1
},
"5447e0e74bdc2d3c308b4567": {
"_name": "SPEC_ITEM",
"conditionChance": 0.3,
"min": 0.02,
"max": 1
},
"543be5e94bdc2df1348b4568": {
"_name": "KEY",
"conditionChance": 0.02,
"min": 0.97,
"max": 1
},
"5448e5284bdc2dcb718b4567": {
"_name": "VEST",
"conditionChance": 0.2,
"min": 0.05,
"max": 1
},
"57bef4c42459772e8d35a53b": {
"_name": "ARMORED_EQUIPMENT",
"conditionChance": 0.6,
"min": 0.05,
"max": 1
},
"543be6674bdc2df1348b4569": {
"_name": "FOOD_DRINK",
"conditionChance": 0.05,
"min": 0.05,
"max": 1
}
"conditionChance": 0.2,
"min": 0.6,
"max": 1.0
},
"currencies":

View File

@ -1,5 +1,8 @@
{
"airFilterUnitFlowRate": 0.0047222222222222,
"constructionTime": 1,
"generatorFuelFlowRate": 0.0013194444444444,
"gpuBoostRate": 0.015,
"productionTime": 1,
"scavCaseTime": 1
}

View File

@ -7,7 +7,7 @@
"maxHr": 36,
"storageMaxHr": 96,
"priceCoef": 0.16,
"returnChance": 75
"returnChance": 80
},
"therapist":

View File

@ -3,6 +3,5 @@
"freeLabsEntry": false,
"exfilTime": 8,
"extractionsExtended": false,
"enableCoopExtracts": false,
"noExtractRestrictions": false
}

View File

@ -3,15 +3,9 @@
"chompiesBossFix": true,
"fixOpenZones": true,
"scavExtractGain": 0.01,
"timeLimit":
{
"enabled": false,
"raidTime": 60
},
"aiAmount": "AsOnline",
"aiDifficulty": "AsOnline",
"timeLimit": 60,
"aiAmount": "asonline",
"aiDifficulty": "asonline",
"bossEnabled": true,
"scavWars": false,
"taggedAndCursed": false,

View File

@ -41,76 +41,21 @@
}]
},
"updateTimeDefault": 3600,
"durabilityPurchaseThreshhold": {
"54cb50c76803fa8b248b4571": 60,
"54cb57776803fa99248b456e": 60,
"579dc571d53a0658a154fbec": 0,
"58330581ace78e27b8b10cee": 60,
"5935c25fb3acc3127c3d8cd9": 60,
"5a7c2eca46aef81a7ca2145d": 60,
"5ac3b934156ae10c4430e83c": 60,
"5c0647fdd443bc2504c2d371": 60,
"default": 60
},
"minDurabilityForSale": 60,
"traderPriceMultipler": 1,
"persistPurchaseDataInProfile": true,
"fence": {
"fence":
{
"partialRefreshTimeSeconds": 240,
"partialRefreshChangePercent": 15,
"assortSize": 50,
"assortSize": 100,
"maxPresetsPercent": 5,
"itemPriceMult": 0.8,
"presetPriceMult": 1.5,
"regenerateAssortsOnRefresh": false,
"itemTypeLimits": {
"550aa4bf4bdc2dd6348b456b": 3,
"55818add4bdc2d5b648b456f": 5,
"5448bc234bdc2d3c308b4569": 5,
"55818b224bdc2dde698b456f": 5,
"555ef6e44bdc2de9068b457e": 5,
"5a341c4086f77401f2541505": 5,
"55818ad54bdc2ddc698b4569": 5,
"5448e53e4bdc2d60728b4567": 5,
"55818ac54bdc2d5b648b456e": 5,
"55818af64bdc2d5b648b4570": 5,
"55818a304bdc2db5418b457d": 4,
"5a74651486f7744e73386dd1": 5,
"55818a594bdc2db9688b456a": 5,
"55818a104bdc2db9688b4569": 5,
"55818a684bdc2ddd698b456d": 3,
"550aa4cd4bdc2dd8348b456c": 3,
"55818acf4bdc2dde698b456b": 5,
"55818a6f4bdc2db9688b456b": 5,
"5447b5f14bdc2d61278b4567": 3,
"5447b5cf4bdc2d65278b4567": 5,
"5447b6094bdc2dc3278b4567": 5,
"5447b5e04bdc2d62278b4567": 5,
"55818b164bdc2ddc698b456c": 3,
"617f1ef5e8b54b0998387733": 2,
"5448ecbe4bdc2d60728b4568": 2,
"57864a66245977548f04a81f": 2,
"5a341c4686f77469e155819e": 3,
"57864a3d24597754843f8721": 2,
"5448e54d4bdc2dcc718b4568": 4,
"5448f39d4bdc2d0a728b4568": 5,
"5795f317245977243854e041": 3
},
"presetMaxDurabilityPercentMinMax":{
"min": 35,
"max": 60
},
"armorMaxDurabilityPercentMinMax":{
"min": 35,
"max": 60
},
"blacklist": [
"5661632d4bdc2d903d8b456b",
"543be5e94bdc2df1348b4568",
"543be6674bdc2df1348b4569",
"5448bf274bdc2dfc2f8b456a",
"5447bedf4bdc2d87278b4568",
"6275303a9f372d6ea97f9ec7"
]
}
"presetPriceMult": 2.5,
"blacklist": ["5661632d4bdc2d903d8b456b",
"543be5e94bdc2df1348b4568",
"543be6674bdc2df1348b4569",
"5448bf274bdc2dfc2f8b456a",
"543be5664bdc2dd4348b4569",
"5447bedf4bdc2d87278b4568"]
}
}

View File

@ -1,14 +1,36 @@
import { AirdropChancePercent, AirdropLoot } from "@spt-aki/models/spt/config/IAirdropConfig";
export interface AirdropConfig
{
airdropChancePercent: AirdropChancePercent;
planeMinFlyHeight: number;
planeMaxFlyHeight: number;
planeVolume: number;
planeSpeed: number;
crateFallSpeed: number;
airdropMinStartTimeSeconds: number;
airdropMaxStartTimeSeconds: number;
loot: AirdropLoot;
}
}
export interface AirdropChancePercent
{
bigmap: number;
woods: number;
lighthouse: number;
shoreline: number;
interchange: number;
reserve: number;
}
export interface AirdropLoot
{
presetCount: MinMax;
itemCount: MinMax;
itemBlacklist: string[];
itemTypeWhitelist: string[];
/** key: item base type: value: max count */
itemLimits: Record<string, number>;
}
export interface MinMax
{
max: number;
min: number;
}

View File

@ -1,37 +1,9 @@
import { MinMax } from "@spt-aki/models/common/MinMax";
import { DynamicLoot } from "@spt-aki/models/spt/config/IPmcConfig";
export interface BotsConfig
{
bossChance: BossChance;
botGenerationBatchSizePerType: number;
maxBotCap: MaxBotCap;
pmc: IPmcConfig;
scav: Scav;
}
export interface IPmcConfig
{
dynamicLoot: DynamicLoot;
useDifficultyOverride: boolean;
difficulty: string;
looseWeaponInBackpackChancePercent: number;
looseWeaponInBackpackLootMinMax: MinMax;
isUsec: number;
usecType: string;
bearType: string;
chanceSameSideIsHostilePercent: number;
/** key: location, value: type for usec/bear */
pmcType: Record<string, Record<string, Record<string, number>>>;
maxBackpackLootTotalRub: number;
maxPocketLootTotalRub: number;
maxVestLootTotalRub: number;
convertIntoPmcChance: Record<string, MinMax>;
enemyTypes: string[];
botRelativeLevelDeltaMax: number;
containersOnPMCs: boolean;
lootNValue: number;
difficultyWeights: DifficultyWeights;
bossChance: BossChance
maxBotCap: MaxBotCap
pmc: Pmc
scav: Scav
}
export interface BossChance
@ -39,9 +11,25 @@ export interface BossChance
activated: boolean
chance: number
}
export interface Pmc
{
chanceSameSideIsHostile: number
containersOnPMCs: boolean
isUsec: number
lootNValue: number
maxBackpackLootTotalRub: number
maxPocketLootTotalRub: number
maxVestLootTotalRub: number
difficultyWeights: DifficultyWeights
convertIntoPmcChance: ConvertIntoPmcChance
looseWeaponInBackpackChance: number
looseWeaponInBackpackLoot: LooseWeapon
}
export interface DifficultyWeights
{
difficulty: string
useWeights: boolean
weights: Record<string, number>
}

View File

@ -1,51 +1,50 @@
export interface FleaConfig
{
runIntervalSeconds: number;
minUserLevel: number;
blacklist: Blacklist;
condition: Condition;
currencies: Currencies;
offerItemCount: OfferItemCount;
reputation: Reputation;
time: Time;
minUserLevel: number
blacklist: Blacklist
condition: Condition
currencies: Currencies
offerItemCount: OfferItemCount
reputation: Reputation
time: Time
}
export interface Blacklist
{
enableBsgList: boolean;
enableQuestList: boolean;
enableBsgList: boolean
enableQuestList: boolean
}
export interface Condition
{
conditionChance: number;
min: number;
max: number;
conditionChance: number
min: number
max: number
}
export interface Currencies
{
roubles: number;
dollars: number;
euros: number;
roubles: number
dollars: number
euros: number
}
export interface OfferItemCount
{
min: number;
max: number;
min: number
max: number
}
export interface Reputation
{
gain: number;
loss: number;
gain: number
loss: number
}
export interface Time
{
baseSellTime: number;
minSellTime: number;
maxSellTime: number;
baseSellTime: number
minSellTime: number
maxSellTime: number
}

View File

@ -1,6 +1,9 @@
export interface HideoutConfig
{
airFilterUnitFlowRate: number
constructionTime: number
generatorFuelFlowRate: number
gpuBoostRate: number
productionTime: number
scavCaseTime: number
}

View File

@ -4,6 +4,5 @@ export interface LocationsConfig
freeLabsEntry: boolean
exfilTime: number
extractionsExtended: boolean
enableCoopExtracts: boolean
noExtractRestrictions: boolean
}

View File

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

View File

@ -1,13 +1,8 @@
import { FenceConfig } from "@spt-aki/models/spt/config/ITraderConfig";
export interface TradersConfig
{
updateTime: UpdateTime;
updateTimeDefault: number;
/** What % of max durability an item needs to sell to a trader*/
durabilityPurchaseThreshhold: Record<string, number>;
minDurabilityForSale: number;
traderPriceMultipler: number;
persistPurchaseDataInProfile: boolean;
fence: FenceConfig;
}
@ -21,4 +16,15 @@ export interface UpdateTime1
{
traderId: string;
seconds: number;
}
}
export interface FenceConfig
{
partialRefreshTimeSeconds: number;
partialRefreshChangePercent: number;
assortSize: number;
maxPresetsPercent: number;
presetPriceMult: number;
blacklist: string[];
}

View File

@ -1,10 +1,10 @@
{
"name": "Valens-AIO",
"version": "1.8.2",
"version": "1.7.0",
"main": "src/mod.js",
"license": "CC BY-NC-ND 4.0",
"author": "Valens",
"akiVersion": ">=3.5.0",
"akiVersion": "3.4.*",
"scripts": {
"setup:environment": "npm i",
"build:unzipped": "copyfiles -e \"./node_modules/**/*.*\" -e \"./dist/**/*.*\" -e \"./package-lock.json\" -e \"./tsconfig.json\" -e \"./README.txt\" -e \"./mod.code-workspace\" \"./**/*.*\" ./dist",

View File

@ -1,8 +1,8 @@
import { IAirdropConfig } from "@spt-aki/models/spt/config/IAirdropConfig";
import { IDatabaseTables } from "@spt-aki/models/spt/server/IDatabaseTables";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { AirdropConfig } from "../config/ts/airdrop";
import { Logger } from "./logger";
import { IAirdropConfig } from "@spt-aki/models/spt/config/IAirdropConfig";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { IDatabaseTables } from "@spt-aki/models/spt/server/IDatabaseTables";
export class Airdrop
{
@ -54,22 +54,6 @@ export class Airdrop
this.logger.info(`Plane Volume is ${mod.planeVolume}`);
}
// Sets the speed of the plane as it flies to what is configured.
if (mod.planeSpeed != airdrop.planeSpeed)
{
airdrop.planeSpeed = mod.planeSpeed;
this.logger.info(`Plane Speed is ${mod.planeSpeed}`);
}
// Sets the fall speed of the cargo crate dropping out of the plate to what is configured.
if (mod.crateFallSpeed != airdrop.crateFallSpeed)
{
airdrop.crateFallSpeed = mod.crateFallSpeed;
this.logger.info(`Crate Fall Speed is ${mod.crateFallSpeed}`);
}
// Airdrop Loot Settings configuration begin.
// Sets the Preset Count to what is configured.
if (mod.loot.presetCount != airdrop.loot.presetCount)
{
@ -104,20 +88,6 @@ export class Airdrop
airdrop.loot.itemLimits = mod.loot.itemLimits;
this.logger.info(`Item Limits is ${mod.loot.itemLimits}`);
}
// Sets the itemStackLimits to what is configured.
if (mod.loot.itemStackLimits != airdrop.loot.itemStackLimits)
{
airdrop.loot.itemStackLimits = mod.loot.itemStackLimits;
this.logger.info(`Item Stack Limits is ${mod.loot.itemStackLimits}`);
}
// Sets the Armor Level Whitelist to what is configured.
if (mod.loot.armorLevelWhitelist != airdrop.loot.armorLevelWhitelist)
{
airdrop.loot.armorLevelWhitelist = mod.loot.armorLevelWhitelist;
this.logger.info(`Armor Level Whitelist is ${mod.loot.armorLevelWhitelist}`);
}
}
@ -132,13 +102,11 @@ export class Airdrop
chance["shoreline"] = mod.shoreline;
chance["interchange"] = mod.interchange;
chance["reserve"] = mod.reserve;
chance["tarkovStreets"] = mod.tarkovStreets;
this.logger.info(`Customs Airdrop Chance is ${mod.bigmap}`);
this.logger.info(`Woods Airdrop Chance is ${mod.woods}`);
this.logger.info(`Lighthouse Airdrop Chance is ${mod.lighthouse}`);
this.logger.info(`Shoreline Airdrop Chance is ${mod.shoreline}`);
this.logger.info(`Interchange Airdrop Chance is ${mod.interchange}`);
this.logger.info(`Reserve Airdrop Chance is ${mod.reserve}`);
this.logger.info(`Streets Airdrop Chance is ${mod.tarkovStreets}`);
}
}

View File

@ -1,8 +1,8 @@
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { IBotConfig } from "@spt-aki/models/spt/config/IBotConfig";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { BotsConfig } from "../config/ts/bots";
import { Logger } from "./logger";
import { BotsConfig } from "../config/ts/bots";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
export class Bots
{
@ -36,21 +36,21 @@ export class Bots
// Checks if straight up difficulty selection is used or not to determine if it should use that or if it should then go to use weighted difficulties.
if (modPMC.difficultyWeights.useWeights)
if (modPMC.difficultyWeights.difficulty != "asonline")
{
const chosenDifficulty = this.chooseRandomWeightedDifficulty();
this.logger.info("PMC Difficulty Chance Weights Patched");
this.logger.info(`PMC Difficulty Chosen: ${chosenDifficulty}`)
}
else if (modPMC.difficulty != pmc.difficulty)
{
pmc.difficulty = modPMC.difficulty;
this.logger.info(`PMC Bot Difficulty set to ${modPMC.difficulty}`);
}
else if (modPMC.useDifficultyOverride)
{
pmc.useDifficultyOverride = modPMC.useDifficultyOverride;
this.logger.info("PMC Bot Difficulty now overriden by raid settings");
// Uses PMC difficulty weighting if straight up difficulty selection is not used.
if (modPMC.difficultyWeights.useWeights)
{
const chosenDifficulty = this.chooseRandomWeightedDifficulty();
this.logger.info("PMC Difficulty Chance Weights Patched");
this.logger.info(`PMC Difficulty Chosen: ${chosenDifficulty}`);
}
// Uses PMC difficulty if weighting is disabled.
else
{
pmc.difficulty = modPMC.difficultyWeights.difficulty;
this.logger.info(`PMC Bot Difficulty set to ${modPMC.difficultyWeights.difficulty}`);
}
}
@ -81,13 +81,12 @@ export class Bots
// Chance that the PMC bot of your faction (BEAR/USEC) will be hostile or not. Default is 50%.
if (modPMC.chanceSameSideIsHostilePercent != pmc.chanceSameSideIsHostilePercent)
if (modPMC.chanceSameSideIsHostile != pmc.chanceSameSideIsHostilePercent)
{
pmc.chanceSameSideIsHostilePercent = modPMC.chanceSameSideIsHostilePercent;
this.logger.info(`Chance Same Side Is Hostle is ${modPMC.chanceSameSideIsHostilePercent}`);
pmc.chanceSameSideIsHostilePercent = modPMC.chanceSameSideIsHostile;
this.logger.info(`Chance Same Side Is Hostle is ${modPMC.chanceSameSideIsHostile}`);
}
// Adjusts the Max Bot Cap located in configs/bot.json/maxBotCap
{
for (const [key] of Object.entries(bot.maxBotCap))
@ -108,33 +107,25 @@ export class Bots
// Adjusts the chance for PMC to spawn instead of the default bot type if configured outside of the default values.
if (this.modConfig.pmc.convertIntoPmcChance.assault.min != this.botConfig.pmc.convertIntoPmcChance.assault.min || this.modConfig.pmc.convertIntoPmcChance.assault.max != this.botConfig.pmc.convertIntoPmcChance.assault.max
|| this.modConfig.pmc.convertIntoPmcChance.cursedassault.min != this.botConfig.pmc.convertIntoPmcChance.cursedassault.min || this.modConfig.pmc.convertIntoPmcChance.cursedassault.max != this.botConfig.pmc.convertIntoPmcChance.cursedassault.max
|| this.modConfig.pmc.convertIntoPmcChance.pmcbot.min != this.botConfig.pmc.convertIntoPmcChance.pmcbot.min || this.modConfig.pmc.convertIntoPmcChance.pmcbot.max != this.botConfig.pmc.convertIntoPmcChance.pmcbot.max
|| this.modConfig.pmc.convertIntoPmcChance.exusec.min != this.botConfig.pmc.convertIntoPmcChance.exusec.min || this.modConfig.pmc.convertIntoPmcChance.exusec.max != this.botConfig.pmc.convertIntoPmcChance.exusec.max)
if (this.modConfig.pmc.convertIntoPmcChance.assault.min != 15 || this.modConfig.pmc.convertIntoPmcChance.assault.max != 40
|| this.modConfig.pmc.convertIntoPmcChance.cursedAssault.min != 15 || this.modConfig.pmc.convertIntoPmcChance.cursedAssault.max != 40
|| this.modConfig.pmc.convertIntoPmcChance.pmcBot.min != 15 || this.modConfig.pmc.convertIntoPmcChance.pmcBot.max != 30
|| this.modConfig.pmc.convertIntoPmcChance.exUsec.min != 5 || this.modConfig.pmc.convertIntoPmcChance.exUsec.max != 20)
{
this.adjustPmcChance();
this.logger.info("Chance to Convert Bots into PMC Patched");
}
// Modfiies the botRelativeLevelDeltaMax which alters the relative level delta maximum of PMC bots.
if (mod.pmc.botRelativeLevelDeltaMax != this.botConfig.pmc.botRelativeLevelDeltaMax)
{
this.botConfig.pmc.botRelativeLevelDeltaMax = mod.pmc.botRelativeLevelDeltaMax;
this.logger.info(`Bot Relative Delta Max Level set to ${mod.pmc.botRelativeLevelDeltaMax}`);
}
// Makes *all* bosses spawn chance configurable.
if (mod.bossChance.activated)
{
this.configureBossChance();
this.logger.info(`Boss Chance set to ${mod.bossChance.chance}`);
this.logger.info(`Boss Chance set to ${mod.bossChance.chance}`)
}
if (modPMC.looseWeaponInBackpackChancePercent != 15 || modPMC.looseWeaponInBackpackLootMinMax.max != 1 || modPMC.looseWeaponInBackpackLootMinMax.min != 1)
if (modPMC.looseWeaponInBackpackChance != 15 || modPMC.looseWeaponInBackpackLoot.max != 1 || modPMC.looseWeaponInBackpackLoot.min != 1)
{
this.changeLooseWeapon();
this.logger.info("Loose Weapon In PMC Backpack Values Patched");
@ -146,10 +137,10 @@ export class Bots
// Function to enable secured and common containers on PMCs.
private containersOnPMCs(): void
{
const backpackLoot = this.botConfig.pmc.backpackLoot.whitelist;
const dynaLoot = this.botConfig.pmc.dynamicLoot.whitelist;
backpackLoot.push("5448bf274bdc2dfc2f8b456a");
backpackLoot.push("5795f317245977243854e041");
dynaLoot.push("5448bf274bdc2dfc2f8b456a");
dynaLoot.push("5795f317245977243854e041");
}
private chooseRandomWeightedDifficulty(): string
@ -167,12 +158,12 @@ export class Bots
pmcConfig.assault.min = modConfig.assault.min;
pmcConfig.assault.max = modConfig.assault.max;
pmcConfig.cursedassault.min = modConfig.cursedassault.min;
pmcConfig.cursedassault.max = modConfig.cursedassault.max;
pmcConfig.pmcbot.min = modConfig.pmcbot.min;
pmcConfig.pmcbot.max = modConfig.pmcbot.max;
pmcConfig.exusec.min = modConfig.exusec.min;
pmcConfig.exusec.max = modConfig.exusec.max;
pmcConfig.cursedassault.min = modConfig.cursedAssault.min;
pmcConfig.cursedassault.max = modConfig.cursedAssault.max;
pmcConfig.pmcbot.min = modConfig.pmcBot.min;
pmcConfig.pmcbot.max = modConfig.pmcBot.max;
pmcConfig.exusec.min = modConfig.exUsec.min;
pmcConfig.exusec.max = modConfig.exUsec.max;
}
@ -208,9 +199,9 @@ export class Bots
const pmcConfig = this.botConfig.pmc;
const modConfig = this.modConfig.pmc;
pmcConfig.looseWeaponInBackpackChancePercent = modConfig.looseWeaponInBackpackChancePercent;
pmcConfig.looseWeaponInBackpackLootMinMax.min = modConfig.looseWeaponInBackpackLootMinMax.min;
pmcConfig.looseWeaponInBackpackLootMinMax.max = modConfig.looseWeaponInBackpackLootMinMax.max;
pmcConfig.looseWeaponInBackpackChancePercent = modConfig.looseWeaponInBackpackChance;
pmcConfig.looseWeaponInBackpackLootMinMax.min = modConfig.looseWeaponInBackpackLoot.min;
pmcConfig.looseWeaponInBackpackLootMinMax.max = modConfig.looseWeaponInBackpackLoot.max;
}
}

View File

@ -1,7 +1,7 @@
import { IRagfairConfig } from "@spt-aki/models/spt/config/IRagfairConfig";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { FleaConfig } from "../config/ts/flea";
import { Logger } from "./logger";
import { FleaConfig } from "../config/ts/flea";
export class Flea
{
@ -25,35 +25,20 @@ export class Flea
const global = this.tables.getTables().globals;
const ragfair = this.ragfairConfig.dynamic;
if (mod.runIntervalSeconds != this.ragfairConfig.runIntervalSeconds)
{
this.ragfairConfig.runIntervalSeconds = mod.runIntervalSeconds;
this.logger.info(`Run Interval Seconds patched to ${mod.runIntervalSeconds} seconds`);
}
if (mod.minUserLevel != global.config.RagFair.minUserLevel)
if (mod.minUserLevel != 15)
{
global.config.RagFair.minUserLevel = mod.minUserLevel;
this.logger.info(`Fleamarket unlocked at level ${mod.minUserLevel}`)
}
if (!mod.blacklist.enableBsgList)
if (!mod.blacklist.enableBsgList || !mod.blacklist.enableQuestList)
{
ragfair.blacklist.enableBsgList = false;
ragfair.blacklist.enableBsgList = mod.blacklist.enableBsgList;
ragfair.blacklist.enableQuestList = mod.blacklist.enableQuestList;
this.logger.info("Fleamarket Blacklists patched");
}
if (!mod.blacklist.enableQuestList)
{
ragfair.blacklist.enableQuestList = false;
this.logger.info("Fleamarket Blacklists patched");
}
if (mod.condition.conditionChance != ragfair.condition.conditionChance || mod.condition.min != ragfair.condition.min || mod.condition.max != ragfair.condition.max)
if (mod.condition.conditionChance != 0.2 || mod.condition.min != 0.6 || mod.condition.max != 1)
{
ragfair.condition.conditionChance = mod.condition.conditionChance;
ragfair.condition.min = mod.condition.min;
@ -61,8 +46,7 @@ export class Flea
this.logger.info("Fleamarket Condition patched");
}
if (mod.currencies.roubles != ragfair.currencies.roubles || mod.currencies.dollars != ragfair.currencies.dollars || mod.currencies.euros != ragfair.currencies.euros)
if (mod.currencies.roubles != 78 || mod.currencies.dollars != 20 || mod.currencies.euros != 2)
{
ragfair.currencies["5449016a4bdc2d6f028b456f"] = mod.currencies.roubles;
ragfair.currencies["5696686a4bdc2da3298b456a"] = mod.currencies.dollars;
@ -70,30 +54,26 @@ export class Flea
this.logger.info("Fleamarket Currencies patched")
}
if (mod.offerItemCount.min != ragfair.offerItemCount.min || mod.offerItemCount.max != ragfair.offerItemCount.max)
if (mod.offerItemCount.min != 8 || mod.offerItemCount.max != 15)
{
ragfair.offerItemCount.min = mod.offerItemCount.min;
ragfair.offerItemCount.max = mod.offerItemCount.max;
this.logger.info("Fleamarket Offer Item Count patched");
}
if (mod.reputation.gain != this.ragfairConfig.sell.reputation.gain || mod.reputation.loss != this.ragfairConfig.sell.reputation.loss)
if (mod.reputation.gain != 0.0000002 || mod.reputation.loss != 0.0000002)
{
ragfair.offerItemCount.min = mod.offerItemCount.min;
ragfair.offerItemCount.max = mod.offerItemCount.max;
this.logger.info("Fleamarket Reputation patched");
}
if (mod.time.baseSellTime != this.ragfairConfig.sell.time.base || mod.time.minSellTime != this.ragfairConfig.sell.time.min || mod.time.maxSellTime != this.ragfairConfig.sell.time.max)
if (mod.time.baseSellTime != 15 || mod.time.minSellTime != 5 || mod.time.maxSellTime != 15)
{
const sell = this.ragfairConfig.sell.time;
const mod = this.modConfig.time;
sell.base = mod.baseSellTime;
sell.min = mod.minSellTime;
sell.max = mod.maxSellTime;
const sell = this.ragfairConfig.sell;
sell.time.base = mod.time.baseSellTime;
sell.time.min = mod.time.minSellTime;
sell.time.max = mod.time.maxSellTime;
this.logger.info("Fleamarket Sell Times patched");
}
}

View File

@ -1,7 +1,7 @@
import { IHideoutConfig } from "@spt-aki/models/spt/config/IHideoutConfig";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { HideoutConfig } from "../config/ts/hideout";
import { Logger } from "./logger";
import { HideoutConfig } from "../config/ts/hideout";
import { IHideoutConfig } from "@spt-aki/models/spt/config/IHideoutConfig";
export class Hideout
{
@ -38,6 +38,18 @@ export class Hideout
this.updateScavCase();
this.logger.info(`Scav Case Time Patched to ${mod.scavCaseTime}`);
}
if (mod.airFilterUnitFlowRate != 0.0047222222222222
||mod.generatorFuelFlowRate != 0.0013194444444444
||mod.gpuBoostRate != 0.015)
{
this.hideoutConfig.airFilterUnitFlowRate = mod.airFilterUnitFlowRate;
this.hideoutConfig.generatorFuelFlowRate = mod.generatorFuelFlowRate;
this.hideoutConfig.gpuBoostRate = mod.gpuBoostRate;
this.logger.info(`Air Filter Flow Rate set to ${mod.airFilterUnitFlowRate}`);
this.logger.info(`Generator Fuel Flow Rate set to ${mod.generatorFuelFlowRate}`);
this.logger.info(`GPU Boost Rate set to ${mod.gpuBoostRate}`);
}
}
private updateConstructionTime()

View File

@ -46,13 +46,6 @@ export class Locations
this.logger.info("Extractions Are Extended");
}
// Enables co-op extractions (PMC w/ Scav)
if (mod.enableCoopExtracts)
{
this.coopExtractsEnabled();
this.logger.info("Coop Extracts Are Enabled");
}
// Remove the access key "5c94bbff86f7747ee735c08f" (Labs access card) from Labs.
if (mod.freeLabsEntry)
{
@ -113,34 +106,13 @@ export class Locations
{
if (i !== "base")
{
for (const x in locations[i].base.exits)
{
if (locations[i].base.exits[x].Name !== "EXFIL_Train")
{
if (locations[i].base.exits[x].Chance !== 100)
{
locations[i].base.exits[x].Chance = 100;
}
}
}
}
}
}
private coopExtractsEnabled(): void
{
const locations = this.tables.getTables().locations;
for (const i in locations)
{
if (i !== "base")
for (const x in locations[i].base.exits)
{
if (locations[i].base.exits[x].Name !== "EXFIL_Train" &&
!locations[i].base.exits[x].Name.includes("lab") ||
locations[i].base.exits[x].Name === "lab_Vent")
!locations[i].base.exits[x].Name.includes("lab") ||
locations[i].base.exits[x].Name === "lab_Vent")
{
if (locations[i].base.exits[x].PassageRequirement === "ScavCooperation")
if (locations[i].base.exits[x].PassageRequirement !== "None")
{
locations[i].base.exits[x].PassageRequirement = "None";
}
@ -166,8 +138,9 @@ export class Locations
}
}
}
}
}
}
private extractionsExtended(): void
@ -204,12 +177,6 @@ export class Locations
locations[map].base.exits[extract].EntryPoints = "House,Old Station";
}
break;
case "lighthouse":
for (const extract in locations[map].base.exits)
{
locations[map].base.exits[extract].EntryPoints = "Tunnel, North"
}
break;
default:
break;
}

View File

@ -21,7 +21,7 @@ export class Loot
{
const mod = this.modConfig;
if (mod.looseLootMultiplier != 1)
if (mod.looseLootMultiplier > 1)
{
for (const map in this.locationConfig.looseLootMultiplier)
{
@ -30,7 +30,7 @@ export class Loot
this.logger.info(`Loose Loot Multiplier: ${mod.looseLootMultiplier}`);
}
if (mod.staticLootMultiplier != 1)
if (mod.staticLootMultiplier > 1)
{
for (const map in this.locationConfig.staticLootMultiplier)
{
@ -55,29 +55,27 @@ export class Loot
{
// Customs Marked Room Loot.
let spawnPoints = this.tables.getTables().locations.bigmap.looseLoot.spawnpoints;
const customsMarked1 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135 (10)"));
const customsMarked2 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135 (9)"));
const customsMarked3 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135 (8)"));
const customsMarked1 = spawnPoints.find(x=>x.template.Id==="Loot 135 (10)1203364");
const customsMarked2 = spawnPoints.find(x=>x.template.Id==="Loot 135 (9)1198014");
const customsMarked3 = spawnPoints.find(x=>x.template.Id==="Loot 135 (8)1207194");
// Pushing containers into the customs marked room loot pool.
customsMarked1.itemDistribution.push(...this.containers());
customsMarked2.itemDistribution.push(...this.containers());
customsMarked3.itemDistribution.push(...this.containers());
// Reserve Marked Room Loot.
spawnPoints = this.tables.getTables().locations.rezervbase.looseLoot.spawnpoints;
const rsrvRBBK1 = spawnPoints.find(x=>x.template.Id==="Loot 135 (10)51646628");
const rsrvRBBK2 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135 (8)"));
const rsrvRBBK3 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135 (9)"));
const rsrvRBBK1 = spawnPoints.find(x=>x.template.Id==="Loot 135 (10)2248454");
const rsrvRBBK2 = spawnPoints.find(x=>x.template.Id==="Loot 135 (8)2268052");
const rsrvRBBK3 = spawnPoints.find(x=>x.template.Id==="Loot 135 (9)2238562");
const rsrvRBPKPM1 = spawnPoints.find(x=>x.template.Id.startsWith("cult_Loot 135 (11)"));
const rsrvRBPKPM2 = spawnPoints.find(x=>x.template.Id.startsWith("cult_Loot 135 (12)"));
const rsrvRBPKPM1 = spawnPoints.find(x=>x.template.Id==="cult_Loot 135 (11)2255712");
const rsrvRBPKPM2 = spawnPoints.find(x=>x.template.Id==="cult_Loot 135 (12)2255152");
const rsrvRBVO1 = spawnPoints.find(x=>x.template.Id==="Loot 135 (10)51658080");
const rsrvRBVO2 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135 (11)"));
const rsrvRBVO3 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135 (12)"));
const rsrvRBVO1 = spawnPoints.find(x=>x.template.Id==="Loot 135 (10)2259670");
const rsrvRBVO2 = spawnPoints.find(x=>x.template.Id==="Loot 135 (11)2254476");
const rsrvRBVO3 = spawnPoints.find(x=>x.template.Id==="Loot 135 (12)2254420");
// Pushing containers into the reserve base marked room loot pool.
rsrvRBBK1.itemDistribution.push(...this.containers());
rsrvRBBK2.itemDistribution.push(...this.containers());
rsrvRBBK3.itemDistribution.push(...this.containers());
@ -88,45 +86,6 @@ export class Loot
rsrvRBVO1.itemDistribution.push(...this.containers());
rsrvRBVO2.itemDistribution.push(...this.containers());
rsrvRBVO3.itemDistribution.push(...this.containers());
// Streets Marked Room Loot.
spawnPoints = this.tables.getTables().locations.tarkovstreets.looseLoot.spawnpoints;
const streets = spawnPoints.find(x=>x.template.Id==="Loot 135_Leo_Rare5491814");
const streets1 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135_Leo_Rare (1)"));
const streets2 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135_Leo_Rare (2)"));
const streets3 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135_Leo_Rare (3)"));
const streets4 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135_Leo_Rare (4)"));
const streets5 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135_Leo_Rare (5)"));
const streets6 = spawnPoints.find(x=>x.template.Id==="Loot 135_Leo_Rare (6)3814146");
const streets6a = spawnPoints.find(x=>x.template.Id==="Loot 135_Leo_Rare (6)3955044");
const streets7 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135_Leo_Rare (7)"));
const streets8 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135_Leo_Rare (8)"));
const streets9 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135_Leo_Rare (9)"));
const streets10 = spawnPoints.find(x=>x.template.Id==="Loot 135_Leo_Rare (10)5484984");
const streets11 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135_Leo_Rare (11)"));
const streets12 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135_Leo_Rare (12)"));
const streets13 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135_Leo_Rare (13)"));
const streets14 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135_Leo_Rare (14)"));
const streets15 = spawnPoints.find(x=>x.template.Id.startsWith("Loot 135_Leo_Rare (15)"));
// Pushing containers into the streets marked room loot pool.
streets.itemDistribution.push(...this.containers());
streets1.itemDistribution.push(...this.containers());
streets2.itemDistribution.push(...this.containers());
streets3.itemDistribution.push(...this.containers());
streets4.itemDistribution.push(...this.containers());
streets5.itemDistribution.push(...this.containers());
streets6.itemDistribution.push(...this.containers());
streets6a.itemDistribution.push(...this.containers());
streets7.itemDistribution.push(...this.containers());
streets8.itemDistribution.push(...this.containers());
streets9.itemDistribution.push(...this.containers());
streets10.itemDistribution.push(...this.containers());
streets11.itemDistribution.push(...this.containers());
streets12.itemDistribution.push(...this.containers());
streets13.itemDistribution.push(...this.containers());
streets14.itemDistribution.push(...this.containers());
streets15.itemDistribution.push(...this.containers());
}
private containers(): any[]
@ -143,11 +102,7 @@ export class Loot
* Medicine case: 5aafbcd986f7745e590fff23
* Lucky scav junkbox: 5b7c710788a4506dec015957
* Grenade case: 5e2af55f86f7746d4159f07c
* Secure container Gamma: 5857a8bc2459772bad15db29
* Secure container Beta: 5857a8b324597729ab0a0e7d
* Secure container Alpha: 544a11ac4bdc2d470e8b456a
* Secure container Epsilon: 59db794186f77448bc595262
* Secure container Kappa: 5c093ca986f7740a1867ab12
* Secure container: 5448bf274bdc2dfc2f8b456a
*/
const lootItems = [];
@ -162,11 +117,7 @@ export class Loot
lootItems.push({"tpl": "5aafbcd986f7745e590fff23", "relativeProbability": 30});
lootItems.push({"tpl": "5b7c710788a4506dec015957", "relativeProbability": 15});
lootItems.push({"tpl": "5e2af55f86f7746d4159f07c", "relativeProbability": 23});
lootItems.push({"tpl": "5857a8bc2459772bad15db29", "relativeProbability": 3});
lootItems.push({"tpl": "5857a8b324597729ab0a0e7d", "relativeProbability": 3});
lootItems.push({"tpl": "544a11ac4bdc2d470e8b456a", "relativeProbability": 3});
lootItems.push({"tpl": "59db794186f77448bc595262", "relativeProbability": 3});
lootItems.push({"tpl": "5c093ca986f7740a1867ab12", "relativeProbability": 1});
lootItems.push({"tpl": "5448bf274bdc2dfc2f8b456a", "relativeProbability": 9});
return lootItems;
}

View File

@ -1,38 +1,38 @@
import { DependencyContainer } from "tsyringe";
import { IPostDBLoadMod } from "@spt-aki/models/external/IPostDBLoadMod";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
import { WeightedRandomHelper } from "@spt-aki/helpers/WeightedRandomHelper";
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
import { IPostDBLoadMod } from "@spt-aki/models/external/IPostDBLoadMod";
import { IAirdropConfig } from "@spt-aki/models/spt/config/IAirdropConfig";
import { IBotConfig } from "@spt-aki/models/spt/config/IBotConfig";
import { IHideoutConfig } from "@spt-aki/models/spt/config/IHideoutConfig";
import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
import { IInsuranceConfig } from "@spt-aki/models/spt/config/IInsuranceConfig";
import { ILocationConfig } from "@spt-aki/models/spt/config/ILocationConfig";
import { IRagfairConfig } from "@spt-aki/models/spt/config/IRagfairConfig";
import { ITraderConfig } from "@spt-aki/models/spt/config/ITraderConfig";
import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { DependencyContainer } from "tsyringe";
import { Config } from "../config/ts/config";
import { ILocationConfig } from "@spt-aki/models/spt/config/ILocationConfig";
import { IHideoutConfig } from "@spt-aki/models/spt/config/IHideoutConfig";
import { ITraderConfig } from "@spt-aki/models/spt/config/ITraderConfig";
import { IRagfairConfig } from "@spt-aki/models/spt/config/IRagfairConfig";
import { Airdrop } from "./airdrop";
import { Ammo } from "./ammo";
import { Armor } from "./armor";
import { Bots } from "./bots";
import { Containers } from "./containers";
import { Flea } from "./flea";
import { Globals } from "./globals";
import { Hideout } from "./hideout";
import { Insurance } from "./insurance";
import { Items } from "./items";
import { Locations } from "./locations";
import { Logger } from "./logger";
import { Loot } from "./loot";
import { Prewipe } from "./prewipe";
import { Quests } from "./quests";
import { Raid } from "./raid";
import { Skills } from "./skills";
import { Traders } from "./traders";
import { Globals } from "./globals";
import { Insurance } from "./insurance";
import { Logger } from "./logger";
import { Config } from "../config/ts/config";
import { Weapons } from "./weapons";
import { Containers } from "./containers";
import { Locations } from "./locations";
import { Quests } from "./quests";
import { Skills } from "./skills";
import { Prewipe } from "./prewipe";
import { Traders } from "./traders";
class ValensAIO implements IPostDBLoadMod
{

View File

@ -1,7 +1,7 @@
import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { RaidConfig } from "../config/ts/raid";
import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
import { Logger } from "./logger";
import { RaidConfig } from "../config/ts/raid";
export class Raid
{
@ -33,7 +33,7 @@ export class Raid
this.logger.info(`Chompies Boss Fix: ${mod.chompiesBossFix}.`)
}
if (mod.timeLimit.enabled)
if (mod.timeLimit)
{
const maps = this.tables.getTables().locations;
@ -41,14 +41,14 @@ export class Raid
{
if (this.tables.getTables().locations[map].base?.EscapeTimeLimit)
{
this.tables.getTables().locations[map].base.EscapeTimeLimit = this.modConfig.timeLimit.raidTime;
this.tables.getTables().locations[map].base.EscapeTimeLimit = this.modConfig.timeLimit;
}
}
this.logger.info(`Raid Time Limits set to ${mod.timeLimit.raidTime} minutes.`);
this.logger.info(`Raid Time Limits set to ${mod.timeLimit} minutes.`);
}
if (mod.aiAmount.toLowerCase() != this.inRaidConfig.raidMenuSettings.aiAmount || mod.aiDifficulty.toLowerCase() != this.inRaidConfig.raidMenuSettings.aiDifficulty || mod.bossEnabled != true
|| mod.scavWars != this.inRaidConfig.raidMenuSettings.scavWars || mod.taggedAndCursed != this.inRaidConfig.raidMenuSettings.taggedAndCursed || mod.enablePve != this.inRaidConfig.raidMenuSettings.enablePve)
if (mod.aiAmount.toLowerCase() != "asonline" ||mod.aiDifficulty.toLowerCase() != "asonline" ||mod.bossEnabled != true
||mod.scavWars != false ||mod.taggedAndCursed != false ||mod.enablePve != false)
{
const inRaidConfig = this.inRaidConfig;
@ -66,13 +66,13 @@ export class Raid
this.logger.info(`Enable PvE set to ${mod.enablePve}`);
}
if (mod.carExtractBaseStandingGain != this.inRaidConfig.carExtractBaseStandingGain)
if (mod.carExtractBaseStandingGain != 0.25)
{
this.inRaidConfig.carExtractBaseStandingGain = mod.carExtractBaseStandingGain;
this.logger.info(`Car Extract Base Standing Gain set to ${mod.carExtractBaseStandingGain}`);
}
if (mod.scavExtractGain != this.inRaidConfig.scavExtractGain)
if (mod.scavExtractGain != 0.01)
{
this.inRaidConfig.scavExtractGain = mod.scavExtractGain;
this.logger.info(`Scav Extract Gain set to ${mod.scavExtractGain}`);

View File

@ -20,34 +20,23 @@ export class Traders
public updateTraders(): void
{
const mod = this.modConfig;
const trader = this.traderConfig;
if (mod.updateTime.enabled)
{
this.updateTime();
}
if (trader.updateTimeDefault != mod.updateTimeDefault)
{
trader.updateTimeDefault = mod.updateTimeDefault;
}
if (trader.traderPriceMultipler != mod.traderPriceMultipler)
if (mod.traderPriceMultipler != 1)
{
this.traderPriceMultiplier();
}
if (trader.durabilityPurchaseThreshhold != mod.durabilityPurchaseThreshhold)
if (mod.minDurabilityForSale != 60)
{
this.minDurabilityForSale();
}
if (trader.persistPurchaseDataInProfile != mod.persistPurchaseDataInProfile)
{
trader.persistPurchaseDataInProfile = mod.persistPurchaseDataInProfile;
}
if (trader.fence != mod.fence)
if (mod.fence.partialRefreshTimeSeconds != 240 || mod.fence.partialRefreshChangePercent != 15 || mod.fence.assortSize != 100 || mod.fence.maxPresetsPercent != 5 || mod.fence.presetPriceMult != 2.5 || mod.fence.blacklist != this.traderConfig.fence.blacklist)
{
this.updateFence();
}
@ -73,27 +62,19 @@ export class Traders
{
const mod = this.modConfig;
const trader = this.traderConfig;
trader.durabilityPurchaseThreshhold = mod.durabilityPurchaseThreshhold;
this.logger.info(`Min Durability For Sale Set to ${mod.durabilityPurchaseThreshhold}`);
trader.minDurabilityForSale = mod.minDurabilityForSale;
this.logger.info(`Min Durability For Sale Set to ${mod.minDurabilityForSale}`);
}
private updateFence(): void
{
const mod = this.modConfig.fence;
const trader = this.traderConfig.fence;
// Start updating Fence config.
trader.partialRefreshTimeSeconds = mod.partialRefreshTimeSeconds;
trader.partialRefreshChangePercent = mod.partialRefreshChangePercent;
trader.discountOptions.assortSize = mod.assortSize;
trader.assortSize = mod.assortSize;
trader.maxPresetsPercent = mod.maxPresetsPercent;
trader.discountOptions.itemPriceMult = mod.itemPriceMult;
trader.discountOptions.presetPriceMult = mod.presetPriceMult;
trader.regenerateAssortsOnRefresh = mod.regenerateAssortsOnRefresh;
trader.itemTypeLimits = mod.itemTypeLimits;
trader.presetMaxDurabilityPercentMinMax = mod.presetMaxDurabilityPercentMinMax;
trader.armorMaxDurabilityPercentMinMax = mod.armorMaxDurabilityPercentMinMax;
trader.presetPriceMult = mod.presetPriceMult;
trader.blacklist = mod.blacklist;
this.logger.info("Fence Has Been Patched");
}

View File

@ -1,11 +1,8 @@
import { HideoutController } from "../controllers/HideoutController";
import { RagfairController } from "../controllers/RagfairController";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IGlobals } from "../models/eft/common/IGlobals";
import { ICustomizationItem } from "../models/eft/common/tables/ICustomizationItem";
import { IHandbookBase } from "../models/eft/common/tables/IHandbookBase";
import { IQuest } from "../models/eft/common/tables/IQuest";
import { IGetItemPricesResponse } from "../models/eft/game/IGetItemPricesResponse";
import { IHideoutArea } from "../models/eft/hideout/IHideoutArea";
import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction";
import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase";
@ -20,9 +17,7 @@ import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class DataCallbacks {
protected httpResponse: HttpResponseUtil;
protected databaseServer: DatabaseServer;
protected ragfairController: RagfairController;
protected hideoutController: HideoutController;
constructor(httpResponse: HttpResponseUtil, databaseServer: DatabaseServer, ragfairController: RagfairController, hideoutController: HideoutController);
constructor(httpResponse: HttpResponseUtil, databaseServer: DatabaseServer);
/**
* Handles client/settings
* @returns ISettingsBase
@ -61,14 +56,4 @@ export declare class DataCallbacks {
getLocalesLanguages(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<Record<string, string>>;
getLocalesMenu(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<string>;
getLocalesGlobal(url: string, info: IEmptyRequestData, sessionID: string): string;
/**
* Handle client/hideout/qte/list
*/
getQteList(url: string, info: IEmptyRequestData, sessionID: string): string;
/**
* Handle client/items/prices/
* Called when viewing a traders assorts
* TODO - fully implement this
*/
getItemPrices(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetItemPricesResponse>;
}

View File

@ -21,7 +21,7 @@ import { DialogueInfo } from "../models/eft/profile/IAkiProfile";
import { HashUtil } from "../utils/HashUtil";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class DialogueCallbacks implements OnUpdate {
export declare class DialogueCallbacks extends OnUpdate {
protected hashUtil: HashUtil;
protected timeUtil: TimeUtil;
protected httpResponse: HttpResponseUtil;

View File

@ -1,6 +1,6 @@
import { HandbookController } from "../controllers/HandbookController";
import { OnLoad } from "../di/OnLoad";
export declare class HandbookCallbacks implements OnLoad {
export declare class HandbookCallbacks extends OnLoad {
protected handbookController: HandbookController;
constructor(handbookController: HandbookController);
onLoad(): Promise<void>;

View File

@ -7,7 +7,6 @@ import { IOffraidHealRequestData } from "../models/eft/health/IOffraidHealReques
import { ISyncHealthRequestData } from "../models/eft/health/ISyncHealthRequestData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IWorkoutData } from "../models/eft/health/IWorkoutData";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class HealthCallbacks {
protected httpResponse: HttpResponseUtil;
@ -22,14 +21,6 @@ export declare class HealthCallbacks {
* @returns empty response, no data sent back to client
*/
syncHealth(url: string, info: ISyncHealthRequestData, sessionID: string): IGetBodyResponseData<string>;
/**
* Custom aki server request found in modules/QTEPatch.cs
* @param url
* @param info HealthListener.Instance.CurrentHealth class
* @param sessionID session id
* @returns empty response, no data sent back to client
*/
handleWorkoutEffects(url: string, info: IWorkoutData, sessionID: string): IGetBodyResponseData<string>;
/**
* Handle Eat
* @returns IItemEventRouterResponse

View File

@ -1,9 +1,7 @@
import { HideoutController } from "../controllers/HideoutController";
import { OnUpdate } from "../di/OnUpdate";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IHandleQTEEventRequestData } from "../models/eft/hideout/IHandleQTEEventRequestData";
import { IHideoutContinuousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinuousProductionStartRequestData";
import { IHideoutImproveAreaRequestData } from "../models/eft/hideout/IHideoutImproveAreaRequestData";
import { IHideoutContinousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinousProductionStartRequestData";
import { IHideoutPutItemInRequestData } from "../models/eft/hideout/IHideoutPutItemInRequestData";
import { IHideoutScavCaseStartRequestData } from "../models/eft/hideout/IHideoutScavCaseStartRequestData";
import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData";
@ -12,11 +10,10 @@ import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideou
import { IHideoutToggleAreaRequestData } from "../models/eft/hideout/IHideoutToggleAreaRequestData";
import { IHideoutUpgradeCompleteRequestData } from "../models/eft/hideout/IHideoutUpgradeCompleteRequestData";
import { IHideoutUpgradeRequestData } from "../models/eft/hideout/IHideoutUpgradeRequestData";
import { IRecordShootingRangePoints } from "../models/eft/hideout/IRecordShootingRangePoints";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IHideoutConfig } from "../models/spt/config/IHideoutConfig";
import { ConfigServer } from "../servers/ConfigServer";
export declare class HideoutCallbacks implements OnUpdate {
export declare class HideoutCallbacks extends OnUpdate {
protected hideoutController: HideoutController;
protected configServer: ConfigServer;
protected hideoutConfig: IHideoutConfig;
@ -24,52 +21,76 @@ export declare class HideoutCallbacks implements OnUpdate {
configServer: ConfigServer);
/**
* Handle HideoutUpgrade
* @param pmcData
* @param body
* @param sessionID
* @returns
*/
upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutUpgradeComplete
* @param pmcData
* @param body
* @param sessionID
* @returns
*/
upgradeComplete(pmcData: IPmcData, body: IHideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutPutItemsInAreaSlots
* @param pmcData
* @param body
* @param sessionID
* @returns
*/
putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutTakeItemsFromAreaSlots
* @param pmcData
* @param body
* @param sessionID
* @returns
*/
takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutToggleArea
* @param pmcData
* @param body
* @param sessionID
* @returns
*/
toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutSingleProductionStart
* @param pmcData
* @param body
* @param sessionID
* @returns
*/
singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutScavCaseProductionStart
* @param pmcData
* @param body
* @param sessionID
* @returns
*/
scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutContinuousProductionStart
* @param pmcData
* @param body
* @param sessionID
* @returns
*/
continuousProductionStart(pmcData: IPmcData, body: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
continuousProductionStart(pmcData: IPmcData, body: IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutTakeProduction
* @param pmcData
* @param body
* @param sessionID
* @returns
*/
takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutQuickTimeEvent
*/
handleQTEEvent(pmcData: IPmcData, request: IHandleQTEEventRequestData, sessionId: string): IItemEventRouterResponse;
/**
* Handle client/game/profile/items/moving - RecordShootingRangePoints
*/
recordShootingRangePoints(pmcData: IPmcData, request: IRecordShootingRangePoints, sessionId: string): IItemEventRouterResponse;
/**
* Handle client/game/profile/items/moving - RecordShootingRangePoints
*/
improveArea(pmcData: IPmcData, request: IHideoutImproveAreaRequestData, sessionId: string): IItemEventRouterResponse;
onUpdate(timeSinceLastRun: number): Promise<boolean>;
getRoute(): string;
}

View File

@ -1,6 +1,6 @@
import { OnLoad } from "../di/OnLoad";
import { HttpServer } from "../servers/HttpServer";
export declare class HttpCallbacks implements OnLoad {
export declare class HttpCallbacks extends OnLoad {
protected httpServer: HttpServer;
constructor(httpServer: HttpServer);
onLoad(): Promise<void>;

View File

@ -10,7 +10,7 @@ import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { InsuranceService } from "../services/InsuranceService";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class InsuranceCallbacks implements OnUpdate {
export declare class InsuranceCallbacks extends OnUpdate {
protected insuranceController: InsuranceController;
protected insuranceService: InsuranceService;
protected httpResponse: HttpResponseUtil;

View File

@ -7,10 +7,10 @@ import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequest
import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData";
import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData";
import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestData";
import { IGetRaidConfigurationRequestData } from "../models/eft/match/IGetRaidConfigurationRequestData";
import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData";
import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult";
import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData";
import { IStartOfflineRaidRequestData } from "../models/eft/match/IStartOffineRaidRequestData";
import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
@ -41,6 +41,6 @@ export declare class MatchCallbacks {
getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData<any>;
createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData<any>;
deleteGroup(url: string, info: any, sessionID: string): INullResponseData;
startOfflineRaid(url: string, info: IStartOfflineRaidRequestData, sessionID: string): INullResponseData;
endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData;
getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData;
}

View File

@ -6,7 +6,7 @@ import { ConfigServer } from "../servers/ConfigServer";
import { LocalisationService } from "../services/LocalisationService";
import { HttpFileUtil } from "../utils/HttpFileUtil";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
declare class ModCallbacks implements OnLoad {
declare class ModCallbacks extends OnLoad {
protected logger: ILogger;
protected httpResponse: HttpResponseUtil;
protected httpFileUtil: HttpFileUtil;
@ -17,5 +17,8 @@ declare class ModCallbacks implements OnLoad {
constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpFileUtil: HttpFileUtil, postAkiModLoader: PostAkiModLoader, localisationService: LocalisationService, configServer: ConfigServer);
onLoad(): Promise<void>;
getRoute(): string;
sendBundle(sessionID: string, req: any, resp: any, body: any): void;
getBundles(url: string, info: any, sessionID: string): string;
getBundle(url: string, info: any, sessionID: string): string;
}
export { ModCallbacks };

View File

@ -1,6 +1,6 @@
import { PresetController } from "../controllers/PresetController";
import { OnLoad } from "../di/OnLoad";
export declare class PresetCallbacks implements OnLoad {
export declare class PresetCallbacks extends OnLoad {
protected presetController: PresetController;
constructor(presetController: PresetController);
onLoad(): Promise<void>;

View File

@ -1,6 +1,5 @@
import { OnLoad } from "../di/OnLoad";
import { OnUpdate } from "../di/OnUpdate";
import { RagfairController } from "../controllers/RagfairController";
import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
@ -22,7 +21,7 @@ import { JsonUtil } from "../utils/JsonUtil";
/**
* Handle ragfair related callback events
*/
export declare class RagfairCallbacks implements OnLoad, OnUpdate {
export declare class RagfairCallbacks extends OnLoadOnUpdate {
protected httpResponse: HttpResponseUtil;
protected jsonUtil: JsonUtil;
protected ragfairServer: RagfairServer;
@ -34,14 +33,10 @@ export declare class RagfairCallbacks implements OnLoad, OnUpdate {
getRoute(): string;
search(url: string, info: ISearchRequestData, sessionID: string): IGetBodyResponseData<IGetOffersResult>;
getMarketPrice(url: string, info: IGetMarketPriceRequestData, sessionID: string): IGetBodyResponseData<IGetItemPriceResult>;
getItemPrices(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<Record<string, number>>;
addOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse;
removeOffer(pmcData: IPmcData, info: IRemoveOfferRequestData, sessionID: string): IItemEventRouterResponse;
extendOffer(pmcData: IPmcData, info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle /client/items/prices
* Called when clicking an item to list on flea
*/
getFleaPrices(url: string, request: IEmptyRequestData, sessionID: string): IGetBodyResponseData<Record<string, number>>;
onUpdate(timeSinceLastRun: number): Promise<boolean>;
sendReport(url: string, info: ISendRagfairReportRequestData, sessionID: string): INullResponseData;
}

View File

@ -1,7 +1,6 @@
import { OnLoad } from "../di/OnLoad";
import { OnUpdate } from "../di/OnUpdate";
import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate";
import { SaveServer } from "../servers/SaveServer";
export declare class SaveCallbacks implements OnLoad, OnUpdate {
export declare class SaveCallbacks extends OnLoadOnUpdate {
protected saveServer: SaveServer;
constructor(saveServer: SaveServer);
onLoad(): Promise<void>;

View File

@ -6,9 +6,6 @@ import { IProcessRagfairTradeRequestData } from "../models/eft/trade/IProcessRag
export declare class TradeCallbacks {
protected tradeController: TradeController;
constructor(tradeController: TradeController);
/**
* Handle client/game/profile/items/moving TradingConfirm
*/
processTrade(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse;
processRagfairTrade(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -1,11 +1,10 @@
import { OnLoad } from "../di/OnLoad";
import { OnUpdate } from "../di/OnUpdate";
import { TraderController } from "../controllers/TraderController";
import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class TraderCallbacks implements OnLoad, OnUpdate {
export declare class TraderCallbacks extends OnLoadOnUpdate {
protected httpResponse: HttpResponseUtil;
protected traderController: TraderController;
constructor(httpResponse: HttpResponseUtil, traderController: TraderController);

View File

@ -2,7 +2,7 @@ export declare enum ContextVariableType {
/** Logged in users session id */
SESSION_ID = 0,
/** Currently acive raid information */
RAID_CONFIGURATION = 1,
MATCH_INFO = 1,
/** Timestamp when client first connected */
CLIENT_START_TIMESTAMP = 2,
/** When player is loading into map and loot is requested */

View File

@ -3,6 +3,7 @@ import { BotGenerator } from "../generators/BotGenerator";
import { BotDifficultyHelper } from "../helpers/BotDifficultyHelper";
import { BotHelper } from "../helpers/BotHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData";
import { IBotBase } from "../models/eft/common/tables/IBotBase";
import { IBotCore } from "../models/eft/common/tables/IBotCore";
@ -22,13 +23,14 @@ export declare class BotController {
protected botDifficultyHelper: BotDifficultyHelper;
protected botGenerationCacheService: BotGenerationCacheService;
protected localisationService: LocalisationService;
protected weightedRandomHelper: WeightedRandomHelper;
protected profileHelper: ProfileHelper;
protected configServer: ConfigServer;
protected applicationContext: ApplicationContext;
protected jsonUtil: JsonUtil;
protected botConfig: IBotConfig;
static readonly pmcTypeLabel = "PMC";
constructor(logger: ILogger, databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, botGenerationCacheService: BotGenerationCacheService, localisationService: LocalisationService, profileHelper: ProfileHelper, configServer: ConfigServer, applicationContext: ApplicationContext, jsonUtil: JsonUtil);
constructor(logger: ILogger, databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, botGenerationCacheService: BotGenerationCacheService, localisationService: LocalisationService, weightedRandomHelper: WeightedRandomHelper, profileHelper: ProfileHelper, configServer: ConfigServer, applicationContext: ApplicationContext, jsonUtil: JsonUtil);
/**
* Return the number of bot loadout varieties to be generated
* @param type bot Type we want the loadout gen count for

View File

@ -1,5 +1,4 @@
import { ApplicationContext } from "../context/ApplicationContext";
import { HideoutHelper } from "../helpers/HideoutHelper";
import { HttpServerHelper } from "../helpers/HttpServerHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { PreAkiModLoader } from "../loaders/PreAkiModLoader";
@ -11,50 +10,27 @@ import { IServerDetails } from "../models/eft/game/IServerDetails";
import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IHttpConfig } from "../models/spt/config/IHttpConfig";
import { ILocationConfig } from "../models/spt/config/ILocationConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { CustomLocationWaveService } from "../services/CustomLocationWaveService";
import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService";
import { TimeUtil } from "../utils/TimeUtil";
export declare class GameController {
protected logger: ILogger;
protected databaseServer: DatabaseServer;
protected timeUtil: TimeUtil;
protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper;
protected hideoutHelper: HideoutHelper;
protected profileHelper: ProfileHelper;
protected profileFixerService: ProfileFixerService;
protected localisationService: LocalisationService;
protected customLocationWaveService: CustomLocationWaveService;
protected openZoneService: OpenZoneService;
protected seasonalEventService: SeasonalEventService;
protected applicationContext: ApplicationContext;
protected configServer: ConfigServer;
protected httpConfig: IHttpConfig;
protected coreConfig: ICoreConfig;
protected locationConfig: ILocationConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, applicationContext: ApplicationContext, configServer: ConfigServer);
constructor(logger: ILogger, databaseServer: DatabaseServer, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, seasonalEventService: SeasonalEventService, applicationContext: ApplicationContext, configServer: ConfigServer);
gameStart(_url: string, _info: IEmptyRequestData, sessionID: string, startTimeStampMS: number): void;
/**
* When player logs in, iterate over all active effects and reduce timer
* TODO - add body part HP regen
* @param pmcProfile
*/
protected updateProfileHealthValues(pmcProfile: IPmcData): void;
/**
* Waves with an identical min/max values spawn nothing, the number of bots that spawn is the difference between min and max
*/
protected fixBrokenOfflineMapWaves(): void;
/**
* Make Rogues spawn later to allow for scavs to spawn first instead of rogues filling up all spawn positions
*/
protected fixRoguesSpawningInstantlyOnLighthouse(): void;
/**
* Get a list of installed mods and save their details to the profile being used
* @param fullProfile Profile to add mod details to

View File

@ -6,23 +6,20 @@ import { IHealthTreatmentRequestData } from "../models/eft/health/IHealthTreatme
import { IOffraidEatRequestData } from "../models/eft/health/IOffraidEatRequestData";
import { IOffraidHealRequestData } from "../models/eft/health/IOffraidHealRequestData";
import { ISyncHealthRequestData } from "../models/eft/health/ISyncHealthRequestData";
import { IWorkoutData } from "../models/eft/health/IWorkoutData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { ILogger } from "../models/spt/utils/ILogger";
import { EventOutputHolder } from "../routers/EventOutputHolder";
import { LocalisationService } from "../services/LocalisationService";
import { PaymentService } from "../services/PaymentService";
import { JsonUtil } from "../utils/JsonUtil";
export declare class HealthController {
protected logger: ILogger;
protected jsonUtil: JsonUtil;
protected eventOutputHolder: EventOutputHolder;
protected itemHelper: ItemHelper;
protected paymentService: PaymentService;
protected inventoryHelper: InventoryHelper;
protected localisationService: LocalisationService;
protected healthHelper: HealthHelper;
constructor(logger: ILogger, jsonUtil: JsonUtil, eventOutputHolder: EventOutputHolder, itemHelper: ItemHelper, paymentService: PaymentService, inventoryHelper: InventoryHelper, localisationService: LocalisationService, healthHelper: HealthHelper);
constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, itemHelper: ItemHelper, paymentService: PaymentService, inventoryHelper: InventoryHelper, localisationService: LocalisationService, healthHelper: HealthHelper);
/**
* stores in-raid player health
* @param pmcData Player profile
@ -39,13 +36,6 @@ export declare class HealthController {
* @returns
*/
offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Consume food/water outside of a raid
* @param pmcData Player profile
* @param body request Object
* @param sessionID Session id
* @returns IItemEventRouterResponse
*/
offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Occurs on post-raid healing page
@ -56,18 +46,10 @@ export declare class HealthController {
*/
healthTreatment(pmcData: IPmcData, healthTreatmentRequest: IHealthTreatmentRequestData, sessionID: string): IItemEventRouterResponse;
/**
* applies skills from hideout workout.
* @param pmcData Player profile
* @param info Request data
* @param sessionID
*/
applyWorkoutChanges(pmcData: IPmcData, info: IWorkoutData, sessionId: string): void;
/**
* Iterate over treatment request diff and find effects to remove from player limbs
* iterate over treatment request diff and find effects to remove from player limbs
* @param sessionId
* @param profile Profile to update
* @param treatmentRequest client request
* @param output response to send to client
*/
protected removeEffectsAfterPostRaidHeal(sessionId: string, profile: IPmcData, treatmentRequest: IHealthTreatmentRequestData, output: IItemEventRouterResponse): void;
protected removeEffectsAfterPostRaidHeal(sessionId: string, profile: IPmcData, treatmentRequest: IHealthTreatmentRequestData): void;
}

View File

@ -7,9 +7,7 @@ import { ProfileHelper } from "../helpers/ProfileHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { HideoutArea, Product } from "../models/eft/common/tables/IBotBase";
import { HideoutUpgradeCompleteRequestData } from "../models/eft/hideout/HideoutUpgradeCompleteRequestData";
import { IHandleQTEEventRequestData } from "../models/eft/hideout/IHandleQTEEventRequestData";
import { IHideoutContinuousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinuousProductionStartRequestData";
import { IHideoutImproveAreaRequestData } from "../models/eft/hideout/IHideoutImproveAreaRequestData";
import { IHideoutContinousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinousProductionStartRequestData";
import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction";
import { IHideoutPutItemInRequestData } from "../models/eft/hideout/IHideoutPutItemInRequestData";
import { IHideoutScavCaseStartRequestData } from "../models/eft/hideout/IHideoutScavCaseStartRequestData";
@ -18,8 +16,6 @@ import { IHideoutTakeItemOutRequestData } from "../models/eft/hideout/IHideoutTa
import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideoutTakeProductionRequestData";
import { IHideoutToggleAreaRequestData } from "../models/eft/hideout/IHideoutToggleAreaRequestData";
import { IHideoutUpgradeRequestData } from "../models/eft/hideout/IHideoutUpgradeRequestData";
import { IQteData } from "../models/eft/hideout/IQteData";
import { IRecordShootingRangePoints } from "../models/eft/hideout/IRecordShootingRangePoints";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IHideoutConfig } from "../models/spt/config/IHideoutConfig";
import { ILogger } from "../models/spt/utils/ILogger";
@ -27,7 +23,6 @@ import { EventOutputHolder } from "../routers/EventOutputHolder";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { FenceService } from "../services/FenceService";
import { LocalisationService } from "../services/LocalisationService";
import { PlayerService } from "../services/PlayerService";
import { HashUtil } from "../utils/HashUtil";
@ -54,28 +49,12 @@ export declare class HideoutController {
protected localisationService: LocalisationService;
protected configServer: ConfigServer;
protected jsonUtil: JsonUtil;
protected fenceService: FenceService;
protected static nameBackendCountersCrafting: string;
protected hideoutConfig: IHideoutConfig;
constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, localisationService: LocalisationService, configServer: ConfigServer, jsonUtil: JsonUtil, fenceService: FenceService);
constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, localisationService: LocalisationService, configServer: ConfigServer, jsonUtil: JsonUtil);
upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse;
upgradeComplete(pmcData: IPmcData, body: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Start a hideout area upgrade
* @param pmcData Player profile
* @param request upgrade start request
* @param sessionID Session id
* @returns IItemEventRouterResponse
*/
startUpgrade(pmcData: IPmcData, request: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Complete a hideout area upgrade
* @param pmcData Player profile
* @param request Completed upgrade request
* @param sessionID Session id
* @returns IItemEventRouterResponse
*/
upgradeComplete(pmcData: IPmcData, request: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutPutItemsInAreaSlots
* Create item in hideout slot item array, remove item from player inventory
* @param pmcData Profile data
* @param addItemToHideoutRequest reqeust from client to place item in area slot
@ -83,14 +62,7 @@ export declare class HideoutController {
* @returns IItemEventRouterResponse object
*/
putItemsInAreaSlots(pmcData: IPmcData, addItemToHideoutRequest: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Remove item from hideout area and place into player inventory
* @param pmcData Player profile
* @param request Take item out of area request
* @param sessionID Session id
* @returns IItemEventRouterResponse
*/
takeItemsFromAreaSlots(pmcData: IPmcData, request: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse;
takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Find resource item in hideout area, add copy to player inventory, remove Item from hideout slot
* @param sessionID Session id
@ -101,21 +73,7 @@ export declare class HideoutController {
* @returns IItemEventRouterResponse response
*/
protected removeResourceFromArea(sessionID: string, pmcData: IPmcData, removeResourceRequest: IHideoutTakeItemOutRequestData, output: IItemEventRouterResponse, hideoutArea: HideoutArea): IItemEventRouterResponse;
/**
* Toggle area on/off
* @param pmcData Player profile
* @param request Toggle area request
* @param sessionID Session id
* @returns IItemEventRouterResponse
*/
toggleArea(pmcData: IPmcData, request: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Start production for an item from hideout area
* @param pmcData Player profile
* @param body Start prodution of single item request
* @param sessionID Session id
* @returns IItemEventRouterResponse
*/
toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse;
singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handles event after clicking 'start' on the scav case hideout page
@ -125,96 +83,24 @@ export declare class HideoutController {
* @returns item event router response
*/
scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Adjust scav case time based on fence standing
*
* @param pmcData Player profile
* @param productionTime Time to complete scav case in seconds
* @returns Adjusted scav case time in seconds
*/
protected getScavCaseTime(pmcData: IPmcData, productionTime: number): number;
/**
* Add generated scav case rewards to player profile
* @param pmcData player profile to add rewards to
* @param rewards reward items to add to profile
* @param recipieId recipie id to save into Production dict
*/
protected addScavCaseRewardsToProfile(pmcData: IPmcData, rewards: Product[], recipieId: string): void;
/**
* Start production of continuously created item
* @param pmcData Player profile
* @param request Continious production request
* @param sessionID Session id
* @returns IItemEventRouterResponse
*/
continuousProductionStart(pmcData: IPmcData, request: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Take completed item out of hideout area and place into player inventory
* @param pmcData Player profile
* @param request Remove production from area request
* @param sessionID Session id
* @returns IItemEventRouterResponse
*/
takeProduction(pmcData: IPmcData, request: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Take recipie-type production out of hideout area and place into player inventory
* @param sessionID Session id
* @param recipe Completed recipie of item
* @param pmcData Player profile
* @param request Remove production from area request
* @param output Output object to update
* @returns IItemEventRouterResponse
*/
protected handleRecipie(sessionID: string, recipe: IHideoutProduction, pmcData: IPmcData, request: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse;
protected addScavCaseRewardsToProfile(pmcData: IPmcData, rewards: Product[]): void;
continuousProductionStart(pmcData: IPmcData, body: IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
protected handleRecipie(sessionID: string, recipe: IHideoutProduction, pmcData: IPmcData, body: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse;
/**
* Handles giving rewards stored in player profile to player after clicking 'get rewards'
* @param sessionID Session id
* @param pmcData Player profile
* @param request Get rewards from scavcase craft request
* @param output Output object to update
* @returns IItemEventRouterResponse
*/
protected handleScavCase(sessionID: string, pmcData: IPmcData, request: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse;
/**
* Start area production for item
* @param pmcData Player profile
* @param request Start production request
* @param sessionID Session id
* @returns IItemEventRouterResponse
*/
registerProduction(pmcData: IPmcData, request: IHideoutSingleProductionStartRequestData | IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Get quick time event list for hideout
* // TODO - implement this
* @param sessionId Session id
* @returns IQteData array
*/
getQteList(sessionId: string): IQteData[];
/**
* Handle HideoutQuickTimeEvent on client/game/profile/items/moving
* Called after completing workout at gym
* @param sessionId Session id
* @param pmcData Profile to adjust
* @param request QTE result object
*/
handleQTEEventOutcome(sessionId: string, pmcData: IPmcData, request: IHandleQTEEventRequestData): IItemEventRouterResponse;
/**
* Record a high score from the shooting range into a player profiles overallcounters
* @param sessionId Session id
* @param pmcData Profile to update
* @param request shooting range score request
* @returns IItemEventRouterResponse
*/
recordShootingRangePoints(sessionId: string, pmcData: IPmcData, request: IRecordShootingRangePoints): IItemEventRouterResponse;
/**
* Handle client/game/profile/items/moving - HideoutImproveArea
* @param sessionId Session id
* @param pmcData profile to improve area in
* @param request improve area request data
*/
improveArea(sessionId: string, pmcData: IPmcData, request: IHideoutImproveAreaRequestData): IItemEventRouterResponse;
/**
* Function called every x seconds as part of onUpdate event
* @param sessionID
* @param pmcData
* @param body
* @param output
* @returns
*/
protected handleScavCase(sessionID: string, pmcData: IPmcData, body: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse;
registerProduction(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData | IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
update(): void;
}

View File

@ -31,23 +31,13 @@ export declare class InsuranceController {
protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig;
constructor(logger: ILogger, randomUtil: RandomUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, paymentService: PaymentService, insuranceService: InsuranceService, configServer: ConfigServer);
/**
* Process insurance items prior to being given to player in mail
*/
processReturn(): void;
/**
* Add insurance to an item
* @param pmcData Player profile
* @param body Insurance request
* @param sessionID Session id
* @returns IItemEventRouterResponse object to send to client
*/
insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Calculate insurance cost
* @param info request object
* @param sessionID session id
* @returns IGetInsuranceCostResponseData object to send to client
* @returns response object to send to client
*/
cost(info: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData;
}

View File

@ -129,14 +129,9 @@ export declare class InventoryController {
protected getExaminedItemTpl(body: IInventoryExamineRequestData): string;
readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle ApplyInventoryChanges
* Sorts supplied items.
* @param pmcData Player profile
* @param request sort request
* @param sessionID Session id
* @returns IItemEventRouterResponse
* Handles sorting of Inventory.
*/
sortInventory(pmcData: IPmcData, request: IInventorySortRequestData, sessionID: string): IItemEventRouterResponse;
sortInventory(pmcData: IPmcData, body: IInventorySortRequestData, sessionID: string): IItemEventRouterResponse;
createMapMarker(pmcData: IPmcData, body: IInventoryCreateMarkerRequestData, sessionID: string): IItemEventRouterResponse;
deleteMapMarker(pmcData: IPmcData, body: IInventoryDeleteMarkerRequestData, sessionID: string): IItemEventRouterResponse;
editMapMarker(pmcData: IPmcData, body: IInventoryEditMarkerRequestData, sessionID: string): IItemEventRouterResponse;

View File

@ -6,9 +6,10 @@ import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequest
import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData";
import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData";
import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestData";
import { IGetRaidConfigurationRequestData } from "../models/eft/match/IGetRaidConfigurationRequestData";
import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData";
import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult";
import { IStartOfflineRaidRequestData } from "../models/eft/match/IStartOffineRaidRequestData";
import { BotDifficulty } from "../models/enums/BotDifficulty";
import { IBotConfig } from "../models/spt/config/IBotConfig";
import { IInRaidConfig } from "../models/spt/config/IInRaidConfig";
import { IMatchConfig } from "../models/spt/config/IMatchConfig";
@ -17,7 +18,9 @@ import { ConfigServer } from "../servers/ConfigServer";
import { SaveServer } from "../servers/SaveServer";
import { BotGenerationCacheService } from "../services/BotGenerationCacheService";
import { BotLootCacheService } from "../services/BotLootCacheService";
import { CustomLocationWaveService } from "../services/CustomLocationWaveService";
import { MatchLocationService } from "../services/MatchLocationService";
import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileSnapshotService } from "../services/ProfileSnapshotService";
export declare class MatchController {
protected logger: ILogger;
@ -28,12 +31,14 @@ export declare class MatchController {
protected botLootCacheService: BotLootCacheService;
protected configServer: ConfigServer;
protected profileSnapshotService: ProfileSnapshotService;
protected customLocationWaveService: CustomLocationWaveService;
protected openZoneService: OpenZoneService;
protected botGenerationCacheService: BotGenerationCacheService;
protected applicationContext: ApplicationContext;
protected matchConfig: IMatchConfig;
protected inraidConfig: IInRaidConfig;
protected botConfig: IBotConfig;
constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, botGenerationCacheService: BotGenerationCacheService, applicationContext: ApplicationContext);
constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, botGenerationCacheService: BotGenerationCacheService, applicationContext: ApplicationContext);
getEnabled(): boolean;
getProfile(info: IGetProfileRequestData): IPmcData[];
createGroup(sessionID: string, info: ICreateGroupRequestData): any;
@ -41,17 +46,12 @@ export declare class MatchController {
joinMatch(info: IJoinMatchRequestData, sessionID: string): IJoinMatchResult[];
protected getMatch(location: string): any;
getGroupStatus(info: IGetGroupStatusRequestData): any;
/**
* Handle /client/raid/configuration
* @param request
* @param sessionID
*/
startOfflineRaid(request: IGetRaidConfigurationRequestData, sessionID: string): void;
startOfflineRaid(info: IStartOfflineRaidRequestData, sessionID: string): void;
/**
* Convert a difficulty value from pre-raid screen to a bot difficulty
* @param botDifficulty dropdown difficulty value
* @param botDifficulty dropdown difficulty
* @returns bot difficulty
*/
protected convertDifficultyDropdownIntoBotDifficulty(botDifficulty: string): string;
protected convertDifficultyDropdownIntoBotDifficulty(botDifficulty: BotDifficulty): string;
endOfflineRaid(info: IEndOfflineRaidRequestData, sessionID: string): void;
}

View File

@ -1,7 +1,6 @@
import { PlayerScavGenerator } from "../generators/PlayerScavGenerator";
import { ItemHelper } from "../helpers/ItemHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestHelper } from "../helpers/QuestHelper";
import { TraderHelper } from "../helpers/TraderHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IMiniProfile } from "../models/eft/launcher/IMiniProfile";
@ -25,9 +24,8 @@ export declare class ProfileController {
protected profileFixerService: ProfileFixerService;
protected playerScavGenerator: PlayerScavGenerator;
protected traderHelper: TraderHelper;
protected questHelper: QuestHelper;
protected profileHelper: ProfileHelper;
constructor(hashUtil: HashUtil, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileFixerService: ProfileFixerService, playerScavGenerator: PlayerScavGenerator, traderHelper: TraderHelper, questHelper: QuestHelper, profileHelper: ProfileHelper);
constructor(hashUtil: HashUtil, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileFixerService: ProfileFixerService, playerScavGenerator: PlayerScavGenerator, traderHelper: TraderHelper, profileHelper: ProfileHelper);
getMiniProfiles(): IMiniProfile[];
getMiniProfile(sessionID: string): any;
getCompleteProfile(sessionID: string): IPmcData[];

View File

@ -95,20 +95,13 @@ export declare class QuestController {
*/
completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Send a popup to player on successful completion of a quest
* Send a popup to player on completion of a quest
* @param sessionID session id
* @param pmcData Player profile
* @param completedQuestId Completed quest id
* @param questRewards Rewards given to player
* @param pmcData player profile
* @param completedQuestId completed quest id
* @param questRewards rewards given to player
*/
protected sendSuccessDialogMessageOnQuestComplete(sessionID: string, pmcData: IPmcData, completedQuestId: string, questRewards: Reward[]): void;
/**
* Look for newly available quests after completing a quest with a requirement to wait x minutes (time-locked) before being available and add data to profile
* @param pmcData Player profile to update
* @param quests Quests to look for wait conditions in
* @param completedQuestId Quest just completed
*/
protected addTimeLockedQuestsToProfile(pmcData: IPmcData, quests: IQuest[], completedQuestId: string): void;
protected sendDialogMessageOnQuestComplete(sessionID: string, pmcData: IPmcData, completedQuestId: string, questRewards: Reward[]): void;
/**
* Returns a list of quests that should be failed when a quest is completed
* @param completedQuestId quest completed id

View File

@ -103,11 +103,6 @@ export declare class RagfairController {
* @param profile full profile of player
*/
protected setTraderOfferPurchaseLimits(offer: IRagfairOffer, profile: IAkiProfile): void;
/**
* Adjust ragfair offer stack count to match same value as traders assort stack count
* @param offer Flea offer to adjust
*/
protected setTraderOfferStackSize(offer: IRagfairOffer): void;
protected isLinkedSearch(info: ISearchRequestData): boolean;
protected isRequiredSearch(info: ISearchRequestData): boolean;
update(): void;
@ -120,7 +115,6 @@ export declare class RagfairController {
addPlayerOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse;
createPlayerOffer(profile: IAkiProfile, requirements: Requirement[], items: Item[], sellInOnePiece: boolean, amountToSend: number): IRagfairOffer;
getAllFleaPrices(): Record<string, number>;
getStaticPrices(): Record<string, number>;
removeOffer(offerId: string, sessionID: string): IItemEventRouterResponse;
extendOffer(info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -1,4 +1,3 @@
import { HandbookHelper } from "../helpers/HandbookHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
@ -66,7 +65,6 @@ export declare class RepeatableQuestController {
protected presetHelper: PresetHelper;
protected profileHelper: ProfileHelper;
protected profileFixerService: ProfileFixerService;
protected handbookHelper: HandbookHelper;
protected ragfairServerHelper: RagfairServerHelper;
protected eventOutputHolder: EventOutputHolder;
protected localisationService: LocalisationService;
@ -75,7 +73,7 @@ export declare class RepeatableQuestController {
protected itemFilterService: ItemFilterService;
protected configServer: ConfigServer;
protected questConfig: IQuestConfig;
constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, httpResponse: HttpResponseUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, handbookHelper: HandbookHelper, ragfairServerHelper: RagfairServerHelper, eventOutputHolder: EventOutputHolder, localisationService: LocalisationService, paymentService: PaymentService, objectId: ObjectId, itemFilterService: ItemFilterService, configServer: ConfigServer);
constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, httpResponse: HttpResponseUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, ragfairServerHelper: RagfairServerHelper, eventOutputHolder: EventOutputHolder, localisationService: LocalisationService, paymentService: PaymentService, objectId: ObjectId, itemFilterService: ItemFilterService, configServer: ConfigServer);
/**
* This is the method reached by the /client/repeatalbeQuests/activityPeriods endpoint
* Returns an array of objects in the format of repeatable quests to the client.
@ -117,18 +115,17 @@ export declare class RepeatableQuestController {
/**
* Just for debug reasons. Draws dailies a random assort of dailies extracted from dumps
*/
generateDebugDailies(dailiesPool: any, factory: any, number: number): any;
generateDebugDailies(dailiesPool: any, factory: any, number: any): any;
/**
* Generates the base object of quest type format given as templates in assets/database/templates/repeatableQuests.json
* The templates include Elimination, Completion and Extraction quest types
*
* @param {string} type quest type: "Elimination", "Completion" or "Extraction"
* @param {string} traderId trader from which the quest will be provided
* @param {string} side scav daily or pmc daily/weekly quest
* @returns {object} a object which contains the base elements for repeatable quests of the requests type
* (needs to be filled with reward and conditions by called to make a valid quest)
*/
generateRepeatableTemplate(type: string, traderId: string, side: string): IRepeatableQuest;
generateRepeatableTemplate(type: string, traderId: string): IRepeatableQuest;
/**
* Generates a valid Exploration quest
*
@ -239,17 +236,16 @@ export declare class RepeatableQuestController {
generateRewardItem(tpl: string, value: number, index: number, preset?: any): IReward;
debugLogRepeatableQuestIds(pmcData: IPmcData): void;
probabilityObjectArray<K, V>(configArrayInput: ProbabilityObject<K, V>[]): ProbabilityObjectArray<K, V>;
changeRepeatableQuest(pmcData: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse;
changeRepeatableQuest(pmcDataIn: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse;
/**
* Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable)
* @param repeatableQuestConfig config file
* @returns a list of rewardable items [[_tpl, itemTemplate],...]
* Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable)
* @returns a list of rewardable items [[_tpl, itemTemplate],...]
*/
protected getRewardableItems(repeatableQuestConfig: IRepeatableQuestConfig): [string, ITemplateItem][];
/**
* Checks if an id is a valid item. Valid meaning that it's an item that may be a reward
* or content of bot loot. Items that are tested as valid may be in a player backpack or stash.
* @param {string} tpl template id of item to check
* @param {*} tpl template id of item to check
* @returns boolean: true if item is valid reward
*/
isValidRewardItem(tpl: string, repeatableQuestConfig: IRepeatableQuestConfig): boolean;

View File

@ -1,30 +1,22 @@
import { ItemHelper } from "../helpers/ItemHelper";
import { RagfairServer } from "../servers/RagfairServer";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { TradeHelper } from "../helpers/TradeHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { Upd } from "../models/eft/common/tables/IItem";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTradeRequestData";
import { IProcessRagfairTradeRequestData } from "../models/eft/trade/IProcessRagfairTradeRequestData";
import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { Upd } from "../models/eft/common/tables/IItem";
import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTradeRequestData";
import { EventOutputHolder } from "../routers/EventOutputHolder";
import { ConfigServer } from "../servers/ConfigServer";
import { RagfairServer } from "../servers/RagfairServer";
import { LocalisationService } from "../services/LocalisationService";
import { ILogger } from "../models/spt/utils/ILogger";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
declare class TradeController {
protected logger: ILogger;
protected eventOutputHolder: EventOutputHolder;
protected tradeHelper: TradeHelper;
protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper;
protected ragfairServer: RagfairServer;
protected httpResponse: HttpResponseUtil;
protected localisationService: LocalisationService;
protected configServer: ConfigServer;
protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, tradeHelper: TradeHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, ragfairServer: RagfairServer, httpResponse: HttpResponseUtil, localisationService: LocalisationService, configServer: ConfigServer);
constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, tradeHelper: TradeHelper, profileHelper: ProfileHelper, ragfairServer: RagfairServer, httpResponse: HttpResponseUtil);
confirmTrading(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string, foundInRaid?: boolean, upd?: Upd): IItemEventRouterResponse;
confirmRagfairTrading(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -42,13 +42,6 @@ export declare class TraderController {
* @returns array if ITraderBase objects
*/
getAllTraders(sessionID: string): ITraderBase[];
/**
* Order traders by their traderId (Ttid)
* @param traderA First trader to compare
* @param traderB Second trader to compare
* @returns 1,-1 or 0
*/
protected sortByTraderId(traderA: ITraderBase, traderB: ITraderBase): number;
getTrader(sessionID: string, traderID: string): ITraderBase;
getAssort(sessionId: string, traderId: string): ITraderAssort;
getPurchasesData(sessionID: string, traderID: string): Record<string, IBarterScheme[][]>;

View File

@ -1,7 +1,7 @@
import { EventOutputHolder } from "../routers/EventOutputHolder";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
export declare class WishlistController {
protected eventOutputHolder: EventOutputHolder;
constructor(eventOutputHolder: EventOutputHolder);

View File

@ -1,4 +1,4 @@
export interface OnLoad {
export declare class OnLoad {
onLoad(): Promise<void>;
getRoute(): string;
}

7
types/di/OnLoadOnUpdate.d.ts vendored Normal file
View File

@ -0,0 +1,7 @@
import { OnLoad } from "./OnLoad";
import { OnUpdate } from "./OnUpdate";
export declare class OnLoadOnUpdate implements OnLoad, OnUpdate {
onUpdate(timeSinceLastRun: number): Promise<boolean>;
onLoad(): Promise<void>;
getRoute(): string;
}

View File

@ -1,4 +1,4 @@
export interface OnUpdate {
export declare class OnUpdate {
onUpdate(timeSinceLastRun: number): Promise<boolean>;
getRoute(): string;
}

View File

@ -145,7 +145,7 @@ export declare class BotEquipmentModGenerator {
* @param modToAdd template of mod to check
* @param itemSlot slot the item will be placed in
* @param modSlot slot the mod will fill
* @param parentTemplate template of the mods parent item
* @param parentTemplate tempalte of the mods parent item
* @returns true if valid
*/
protected isModValidForSlot(modToAdd: [boolean, ITemplateItem], itemSlot: Slot, modSlot: string, parentTemplate: ITemplateItem): boolean;

View File

@ -2,7 +2,7 @@ import { BotDifficultyHelper } from "../helpers/BotDifficultyHelper";
import { BotHelper } from "../helpers/BotHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { Health as PmcHealth, IBotBase, Info, Skills } from "../models/eft/common/tables/IBotBase";
import { Health as PmcHealth, IBotBase, Skills } from "../models/eft/common/tables/IBotBase";
import { Health, IBotType } from "../models/eft/common/tables/IBotType";
import { BotGenerationDetails } from "../models/spt/bots/BotGenerationDetails";
import { IBotConfig } from "../models/spt/config/IBotConfig";
@ -14,14 +14,12 @@ import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil";
import { BotInventoryGenerator } from "./BotInventoryGenerator";
import { BotLevelGenerator } from "./BotLevelGenerator";
export declare class BotGenerator {
protected logger: ILogger;
protected hashUtil: HashUtil;
protected randomUtil: RandomUtil;
protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil;
protected profileHelper: ProfileHelper;
protected databaseServer: DatabaseServer;
@ -34,7 +32,7 @@ export declare class BotGenerator {
protected seasonalEventService: SeasonalEventService;
protected configServer: ConfigServer;
protected botConfig: IBotConfig;
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, configServer: ConfigServer);
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, configServer: ConfigServer);
/**
* Generate a player scav bot object
* @param role e.g. assault / pmcbot
@ -92,13 +90,6 @@ export declare class BotGenerator {
*/
protected generateId(bot: IBotBase): IBotBase;
protected generateInventoryID(profile: IBotBase): IBotBase;
/**
* Randomise a bots game version and account category
* Chooses from all the game versions (standard, eod etc)
* Chooses account type (default, Sherpa, etc)
* @param botInfo bot info object to update
*/
protected getRandomisedGameVersionAndCategory(botInfo: Info): void;
/**
* Add a side-specific (usec/bear) dogtag item to a bots inventory
* @param bot bot to add dogtag to

View File

@ -1,7 +1,6 @@
import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper";
import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper";
import { HandbookHelper } from "../helpers/HandbookHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase";
import { Chances, Inventory, ItemMinMax, ModsChances } from "../models/eft/common/tables/IBotType";
import { Item } from "../models/eft/common/tables/IItem";
@ -19,7 +18,6 @@ export declare class BotLootGenerator {
protected logger: ILogger;
protected hashUtil: HashUtil;
protected randomUtil: RandomUtil;
protected itemHelper: ItemHelper;
protected databaseServer: DatabaseServer;
protected handbookHelper: HandbookHelper;
protected botGeneratorHelper: BotGeneratorHelper;
@ -29,7 +27,7 @@ export declare class BotLootGenerator {
protected localisationService: LocalisationService;
protected configServer: ConfigServer;
protected botConfig: IBotConfig;
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botLootCacheService: BotLootCacheService, localisationService: LocalisationService, configServer: ConfigServer);
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botLootCacheService: BotLootCacheService, localisationService: LocalisationService, configServer: ConfigServer);
/**
* Add loot to bots containers
* @param sessionId Session id

View File

@ -89,10 +89,9 @@ export declare class BotWeaponGenerator {
/**
* Checks if all required slots are occupied on a weapon and all it's mods
* @param weaponItemArray Weapon + mods
* @param botRole role of bot weapon is for
* @returns true if valid
*/
protected isWeaponValid(weaponItemArray: Item[], botRole: string): boolean;
protected isWeaponValid(weaponItemArray: Item[]): boolean;
/**
* Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets.
* Additionally, adds extra bullets to SecuredContainer
@ -102,13 +101,6 @@ export declare class BotWeaponGenerator {
* @param botRole The bot type we're getting generating extra mags for
*/
addExtraMagazinesToInventory(generatedWeaponResult: GenerateWeaponResult, magCounts: MinMax, inventory: PmcInventory, botRole: string): void;
/**
* Add Grendaes for UBGL to bots vest and secure container
* @param weaponMods Weapon array with mods
* @param generatedWeaponResult result of weapon generation
* @param inventory bot inventory to add grenades to
*/
protected addUbglGrenadesToBotInventory(weaponMods: Item[], generatedWeaponResult: GenerateWeaponResult, inventory: PmcInventory): void;
/**
* Add ammo to the secure container
* @param stackCount How many stacks of ammo to add
@ -145,13 +137,6 @@ export declare class BotWeaponGenerator {
* @param ammoTpl
*/
protected fillExistingMagazines(weaponMods: Item[], magazine: Item, ammoTpl: string): void;
/**
* Add desired ammo tpl as item to weaponmods array, placed as child to UBGL
* @param weaponMods
* @param ubglMod
* @param ubglAmmoTpl
*/
protected fillUbgl(weaponMods: Item[], ubglMod: Item, ubglAmmoTpl: string): void;
/**
* Add cartridge item to weapon Item array, if it already exists, update
* @param weaponMods Weapon items array to amend

View File

@ -49,8 +49,7 @@ export declare class LocationGenerator {
* Add forced spawn point loot into loot parameter array
* @param loot array to add forced loot to
* @param forcedSpawnPoints forced loot to add
* @param name of map currently generating forced loot for
*/
protected addForcedLoot(loot: SpawnpointTemplate[], forcedSpawnPoints: SpawnpointsForced[], locationName: string): void;
protected addForcedLoot(loot: SpawnpointTemplate[], forcedSpawnPoints: SpawnpointsForced[]): void;
protected createItem(tpl: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, parentId?: string): IContainerItem;
}

View File

@ -1,10 +1,8 @@
import { ItemHelper } from "../helpers/ItemHelper";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { IBotConfig } from "../models/spt/config/IBotConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { ItemFilterService } from "../services/ItemFilterService";
import { SeasonalEventService } from "../services/SeasonalEventService";
/**
* Handle the generation of dynamic PMC loot in pockets and backpacks
* and the removal of blacklisted items
@ -14,32 +12,10 @@ export declare class PMCLootGenerator {
protected databaseServer: DatabaseServer;
protected configServer: ConfigServer;
protected itemFilterService: ItemFilterService;
protected seasonalEventService: SeasonalEventService;
protected pocketLootPool: string[];
protected vestLootPool: string[];
protected backpackLootPool: string[];
protected botConfig: IBotConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, seasonalEventService: SeasonalEventService);
/**
* Create an array of loot items a PMC can have in their pockets
* @returns string array of tpls
*/
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService);
generatePMCPocketLootPool(): string[];
/**
* Create an array of loot items a PMC can have in their vests
* @returns string array of tpls
*/
generatePMCVestLootPool(): string[];
/**
* Check if item has a width/hide that lets it fit into a 1x2 slot
* 1x1 / 1x2 / 2x1
* @param item Item to check size of
* @returns true if it fits
*/
protected itemFitsInto1By2Slot(item: ITemplateItem): boolean;
/**
* Create an array of loot items a PMC can have in their backpack
* @returns string array of tpls
*/
generatePMCBackpackLootPool(): string[];
}

View File

@ -1,7 +1,4 @@
import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper";
import { BotHelper } from "../helpers/BotHelper";
import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { Skills, Stats } from "../models/eft/common/tables/IBotBase";
@ -14,18 +11,11 @@ import { SaveServer } from "../servers/SaveServer";
import { BotLootCacheService } from "../services/BotLootCacheService";
import { FenceService } from "../services/FenceService";
import { LocalisationService } from "../services/LocalisationService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { BotGenerator } from "./BotGenerator";
export declare class PlayerScavGenerator {
protected logger: ILogger;
protected randomUtil: RandomUtil;
protected databaseServer: DatabaseServer;
protected hashUtil: HashUtil;
protected itemHelper: ItemHelper;
protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper;
protected botGeneratorHelper: BotGeneratorHelper;
protected saveServer: SaveServer;
protected profileHelper: ProfileHelper;
protected botHelper: BotHelper;
@ -36,7 +26,7 @@ export declare class PlayerScavGenerator {
protected botGenerator: BotGenerator;
protected configServer: ConfigServer;
protected playerScavConfig: IPlayerScavConfig;
constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer, hashUtil: HashUtil, itemHelper: ItemHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botGeneratorHelper: BotGeneratorHelper, saveServer: SaveServer, profileHelper: ProfileHelper, botHelper: BotHelper, jsonUtil: JsonUtil, fenceService: FenceService, botLootCacheService: BotLootCacheService, localisationService: LocalisationService, botGenerator: BotGenerator, configServer: ConfigServer);
constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, botHelper: BotHelper, jsonUtil: JsonUtil, fenceService: FenceService, botLootCacheService: BotLootCacheService, localisationService: LocalisationService, botGenerator: BotGenerator, configServer: ConfigServer);
/**
* Update a player profile to include a new player scav profile
* @param sessionID session id to specify what profile is updated

View File

@ -4,7 +4,6 @@ import { Item } from "../models/eft/common/tables/IItem";
import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
export declare class RagfairAssortGenerator {
@ -12,11 +11,10 @@ export declare class RagfairAssortGenerator {
protected hashUtil: HashUtil;
protected itemHelper: ItemHelper;
protected databaseServer: DatabaseServer;
protected seasonalEventService: SeasonalEventService;
protected configServer: ConfigServer;
protected generatedAssortItems: Item[];
protected ragfairConfig: IRagfairConfig;
constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, seasonalEventService: SeasonalEventService, configServer: ConfigServer);
constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer);
/**
* Get an array of unique items that can be sold on the flea
* @returns array of unique items

View File

@ -103,34 +103,7 @@ export declare class RagfairOfferGenerator {
* @param traderID Trader to generate offers for
*/
generateFleaOffersForTrader(traderID: string): void;
/**
* Get array of an item with its mods + condition properties (e.g durability)
* Apply randomisation adjustments to condition if item base is found in ragfair.json/dynamic/condition
* @param userID id of owner of item
* @param itemWithMods Item and mods, get condition of first item (only first array item is used)
* @param itemDetails db details of first item
* @returns
*/
protected getItemCondition(userID: string, itemWithMods: Item[], itemDetails: ITemplateItem): Item[];
/**
* Get the relevant condition id if item tpl matches in ragfair.json/condition
* @param tpl Item to look for matching condition object
* @returns condition id
*/
protected getDynamicConditionIdForTpl(tpl: string): string;
/**
* Alter an items condition based on its item base type
* @param conditionSettingsId also the parentId of item being altered
* @param item Item to adjust condition details of
* @param itemDetails db item details of first item in array
*/
protected randomiseItemCondition(conditionSettingsId: string, item: Item, itemDetails: ITemplateItem): void;
/**
* Adjust an items durability/maxDurability value
* @param item item (weapon/armor) to adjust
* @param multiplier Value to multiple durability by
*/
protected randomiseDurabilityValues(item: Item, multiplier: number): void;
protected getItemCondition(userID: string, items: Item[], itemDetails: ITemplateItem): Item[];
/**
* Add missing conditions to an item if needed
* Durabiltiy for repairable items
@ -138,7 +111,7 @@ export declare class RagfairOfferGenerator {
* @param item item to add conditions to
* @returns Item with conditions added
*/
protected addMissingConditions(item: Item): Item;
protected addMissingCondition(item: Item): Item;
/**
* Create a barter-based barter scheme, if not possible, fall back to making barter scheme currency based
* @param offerItems Items for sale in offer

View File

@ -2,6 +2,7 @@ import { ItemHelper } from "../helpers/ItemHelper";
import { Product } from "../models/eft/common/tables/IBotBase";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase";
import { IHideoutScavCaseStartRequestData } from "../models/eft/hideout/IHideoutScavCaseStartRequestData";
import { IScavCaseConfig } from "../models/spt/config/IScavCaseConfig";
import { RewardCountAndPriceDetails, ScavCaseRewardCountsAndPrices } from "../models/spt/hideout/ScavCaseRewardCountsAndPrices";
import { ILogger } from "../models/spt/utils/ILogger";
@ -27,10 +28,10 @@ export declare class ScavCaseRewardGenerator {
constructor(logger: ILogger, randomUtil: RandomUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, itemFilterService: ItemFilterService, configServer: ConfigServer);
/**
* Create an array of rewards that will be given to the player upon completing their scav case build
* @param recipeId recipe of the scav case craft
* @param body client request
* @returns Product array
*/
generate(recipeId: string): Product[];
generate(body: IHideoutScavCaseStartRequestData): Product[];
/**
* Get all db items that are not blacklisted in scavcase config
* @returns filtered array of db items

View File

@ -1,10 +0,0 @@
import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper";
import { IInventoryMagGen } from "../IInventoryMagGen";
import { InventoryMagGen } from "../InventoryMagGen";
export declare class UbglExternalMagGen implements IInventoryMagGen {
protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper;
constructor(botWeaponGeneratorHelper: BotWeaponGeneratorHelper);
getPriority(): number;
canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean;
process(inventoryMagGen: InventoryMagGen): void;
}

View File

@ -1,6 +1,5 @@
import { IPmcData } from "../models/eft/common/IPmcData";
import { ITraderAssort } from "../models/eft/common/tables/ITrader";
import { QuestStatus } from "../models/enums/QuestStatus";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
import { LocalisationService } from "../services/LocalisationService";
@ -16,28 +15,17 @@ export declare class AssortHelper {
/**
* Remove assorts from a trader that have not been unlocked yet
* @param pmcProfile player profile
* @param traderId traders id the assort belongs to
* @param traderAssorts All assort items from same trader
* @param mergedQuestAssorts Dict of quest assort to quest id unlocks for all traders
* @param traderId traders id
* @param assort assort items from a trader
* @returns assort items minus locked quest assorts
*/
stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, traderAssorts: ITraderAssort, mergedQuestAssorts: Record<string, Record<string, string>>, flea?: boolean): ITraderAssort;
/**
* Get a quest id + the statuses quest can be in to unlock assort
* @param mergedQuestAssorts quest assorts to search for assort id
* @param assortId Assort to look for linked quest id
* @returns quest id + array of quest status the assort should show for
*/
protected getQuestIdAndStatusThatShowAssort(mergedQuestAssorts: Record<string, Record<string, string>>, assortId: string): {
questId: string;
status: QuestStatus[];
};
stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort, flea?: boolean): ITraderAssort;
/**
* Remove assorts from a trader that have not been unlocked yet
* @param pmcProfile player profile
* @param traderId traders id
* @param assort traders assorts
* @returns traders assorts minus locked loyalty assorts
* @returns traders assorts minus locked loyality assorts
*/
stripLockedLoyaltyAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort): ITraderAssort;
/**

View File

@ -20,7 +20,7 @@ export declare class BotDifficultyHelper {
getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string, usecType: string, bearType: string): Difficulty;
/**
* Get difficulty settings for desired bot type, if not found use assault bot types
* @param type bot type to retrieve difficulty of
* @param type bot type to retreive difficulty of
* @param difficulty difficulty to get settings for (easy/normal etc)
* @returns Difficulty object
*/

View File

@ -23,7 +23,7 @@ export declare class BotGeneratorHelper {
* Adds properties to an item
* e.g. Repairable / HasHinge / Foldable / MaxDurability
* @param itemTemplate Item extra properties are being generated for
* @param botRole Used by weapons to randomize the durability values. Null for non-equipped items
* @param botRole Used by weapons to randomise the durability values. Null for non-equipped items
* @returns Item Upd object with extra properties
*/
generateExtraPropertiesForItem(itemTemplate: ITemplateItem, botRole?: string): {
@ -53,10 +53,10 @@ export declare class BotGeneratorHelper {
protected generateArmorRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable;
/**
* Can item be added to another item without conflict
* @param items Items to check compatibilities with
* @param items Items to check compatiblilities with
* @param tplToCheck Tpl of the item to check for incompatibilities
* @param equipmentSlot Slot the item will be placed into
* @returns false if no incompatibilities, also has incompatibility reason
* @returns false if no incompatibilties, also has incompatibility reason
*/
isItemIncompatibleWithCurrentItems(items: Item[], tplToCheck: string, equipmentSlot: string): {
incompatible: boolean;

View File

@ -23,11 +23,11 @@ export declare class BotHelper {
*/
getBotTemplate(role: string): IBotType;
/**
* Randomize the chance the PMC will attack their own side
* Randomise the chance the PMC will attack their own side
* Look up value in bot.json/chanceSameSideIsHostilePercent
* @param difficultySettings pmc difficulty settings
*/
randomizePmcHostility(difficultySettings: Difficulty): void;
randomisePmcHostility(difficultySettings: Difficulty): void;
/**
* Is the passed in bot role a PMC (usec/bear/pmc)
* @param botRole bot role to check
@ -63,26 +63,26 @@ export declare class BotHelper {
rollChanceToBePmc(role: string, botConvertMinMax: MinMax): boolean;
botRoleIsPmc(botRole: string): boolean;
/**
* Get randomization settings for bot from config/bot.json
* Get randomisation settings for bot from config/bot.json
* @param botLevel level of bot
* @param botEquipConfig bot equipment json
* @returns RandomisationDetails
*/
getBotRandomizationDetails(botLevel: number, botEquipConfig: EquipmentFilters): RandomisationDetails;
getBotRandomisationDetails(botLevel: number, botEquipConfig: EquipmentFilters): RandomisationDetails;
/**
* Choose between sptBear and sptUsec at random based on the % defined in botConfig.pmc.isUsec
* @returns pmc role
*/
getRandomizedPmcRole(): string;
getRandomisedPmcRole(): string;
/**
* Get the corresponding side when sptBear or sptUsec is passed in
* Get the corrisponding side when sptBear or sptUsec is passed in
* @param botRole role to get side for
* @returns side (usec/bear)
*/
getPmcSideByRole(botRole: string): string;
/**
* Get a randomized PMC side based on bot config value 'isUsec'
* Get a randomised PMC side based on bot config value 'isUsec'
* @returns pmc side as string
*/
protected getRandomizedPmcSide(): string;
protected getRandomisedPmcSide(): string;
}

View File

@ -2,7 +2,6 @@ import { MinMax } from "../models/common/MinMax";
import { Inventory } from "../models/eft/common/tables/IBotBase";
import { Item } from "../models/eft/common/tables/IItem";
import { Grid, ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { EquipmentSlots } from "../models/enums/EquipmentSlots";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
import { LocalisationService } from "../services/LocalisationService";
@ -22,18 +21,18 @@ export declare class BotWeaponGeneratorHelper {
protected containerHelper: ContainerHelper;
constructor(logger: ILogger, databaseServer: DatabaseServer, itemHelper: ItemHelper, randomUtil: RandomUtil, hashUtil: HashUtil, inventoryHelper: InventoryHelper, localisationService: LocalisationService, containerHelper: ContainerHelper);
/**
* Get a randomized number of bullets for a specific magazine
* Get a randomised number of bullets for a specific magazine
* @param magCounts min and max count of magazines
* @param magTemplate magazine to generate bullet count for
* @returns bullet count number
*/
getRandomizedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number;
getRandomisedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number;
/**
* Get a randomized count of magazines
* Get a randomised count of magazines
* @param magCounts min and max value returned value can be between
* @returns numerical value of magazine count
* @returns numberical value of magazine count
*/
getRandomizedMagazineCount(magCounts: MinMax): number;
getRandomisedMagazineCount(magCounts: MinMax): number;
/**
* Is this magazine cylinder related (revolvers and grenade launchers)
* @param magazineParentName the name of the magazines parent
@ -49,13 +48,12 @@ export declare class BotWeaponGeneratorHelper {
*/
createMagazine(magazineTpl: string, ammoTpl: string, magTemplate: ITemplateItem): Item[];
/**
* Add a specific number of cartridges to a bots inventory (defaults to vest and pockets)
* Add a specific number of cartrdiges to a bots inventory (vest/pocket)
* @param ammoTpl Ammo tpl to add to vest/pockets
* @param cartridgeCount number of cartridges to add to vest/pockets
* @param inventory bot inventory to add cartridges to
* @param equipmentSlotsToAddTo what equipment slots should bullets be added into
*/
addAmmoIntoEquipmentSlots(ammoTpl: string, cartridgeCount: number, inventory: Inventory, equipmentSlotsToAddTo?: EquipmentSlots[]): void;
addBulletsToVestAndPockets(ammoTpl: string, cartridgeCount: number, inventory: Inventory): void;
/**
* Get a weapons default magazine template id
* @param weaponTemplate weapon to get default magazine for
@ -63,8 +61,7 @@ export declare class BotWeaponGeneratorHelper {
*/
getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string;
/**
* TODO - move into BotGeneratorHelper, this is not the class for it
* Adds an item with all its children into specified equipmentSlots, wherever it fits.
* Adds an item with all its childern into specified equipmentSlots, wherever it fits.
* @param equipmentSlots
* @param parentId
* @param parentTpl

View File

@ -9,10 +9,10 @@ export declare class DurabilityLimitsHelper {
protected configServer: ConfigServer;
protected botConfig: IBotConfig;
constructor(randomUtil: RandomUtil, botHelper: BotHelper, configServer: ConfigServer);
getRandomizedMaxWeaponDurability(itemTemplate: ITemplateItem, botRole: string): number;
getRandomizedMaxArmorDurability(itemTemplate: ITemplateItem, botRole: string): number;
getRandomizedWeaponDurability(itemTemplate: ITemplateItem, botRole: string, maxDurability: number): number;
getRandomizedArmorDurability(itemTemplate: ITemplateItem, botRole: string, maxDurability: number): number;
getRandomisedMaxWeaponDurability(itemTemplate: ITemplateItem, botRole: string): number;
getRandomisedMaxArmorDurability(itemTemplate: ITemplateItem, botRole: string): number;
getRandomisedWeaponDurability(itemTemplate: ITemplateItem, botRole: string, maxDurability: number): number;
getRandomisedArmorDurability(itemTemplate: ITemplateItem, botRole: string, maxDurability: number): number;
protected generateMaxWeaponDurability(botRole: string): number;
protected generateMaxPmcArmorDurability(itemMaxDurability: number): number;
protected getLowestMaxWeaponFromConfig(botRole: string): number;
@ -23,6 +23,4 @@ export declare class DurabilityLimitsHelper {
protected getMaxWeaponDeltaFromConfig(botRole: string): number;
protected getMinArmorDeltaFromConfig(botRole: string): number;
protected getMaxArmorDeltaFromConfig(botRole: string): number;
protected getMinArmorLimitPercentFromConfig(botRole: string): number;
protected getMinWeaponLimitPercentFromConfig(botRole: string): number;
}

View File

@ -1,6 +1,7 @@
import { IPmcData } from "../models/eft/common/IPmcData";
import { Effect } from "../models/eft/health/Effect";
import { ISyncHealthRequestData } from "../models/eft/health/ISyncHealthRequestData";
import { Effects, IAkiProfile } from "../models/eft/profile/IAkiProfile";
import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
import { IHealthConfig } from "../models/spt/config/IHealthConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
@ -16,7 +17,7 @@ export declare class HealthHelper {
protected healthConfig: IHealthConfig;
constructor(jsonUtil: JsonUtil, logger: ILogger, timeUtil: TimeUtil, saveServer: SaveServer, configServer: ConfigServer);
/**
* Resets the profiles vitality/health and vitality/effects properties to their defaults
* Resets the profiles vitality/healh and vitality/effects properties to their defaults
* @param sessionID Session Id
* @returns updated profile
*/
@ -24,34 +25,28 @@ export declare class HealthHelper {
/**
* Update player profile with changes from request object
* @param pmcData Player profile
* @param request Heal request
* @param info Request object
* @param sessionID Session id
* @param addEffects Should effects be added or removed (default - add)
*/
saveVitality(pmcData: IPmcData, request: ISyncHealthRequestData, sessionID: string, addEffects?: boolean, deleteExistingEffects?: boolean): void;
/**
* Adjust hydration/energy/temperate and body part hp values in player profile to values in profile.vitality
* @param pmcData Profile to update
* @param sessionId Session id
*/
saveVitality(pmcData: IPmcData, info: ISyncHealthRequestData, sessionID: string, addEffects?: boolean, deleteExistingEffects?: boolean): void;
protected saveHealth(pmcData: IPmcData, sessionID: string): void;
/**
* Save effects to profile
* Works by removing all effects and adding them back from profile
* Removes empty 'Effects' objects if found
* Remoces empty 'Effects' objects if found
* @param pmcData Player profile
* @param sessionId Session id
* @param bodyPartsWithEffects dict of body parts with effects that should be added to profile
* @param sessionID Session id
* @param addEffects Should effects be added back to profile
* @returns
*/
protected saveEffects(pmcData: IPmcData, sessionId: string, bodyPartsWithEffects: Effects, deleteExistingEffects?: boolean): void;
protected saveEffects(pmcData: IPmcData, sessionID: string, addEffects: boolean, deleteExistingEffects?: boolean): void;
/**
* Add effect to body part in profile
* @param pmcData Player profile
* @param effectBodyPart body part to edit
* @param effectType Effect to add to body part
* @param duration How long the effect has left in seconds (-1 by default, no duration).
*/
protected addEffect(pmcData: IPmcData, effectBodyPart: string, effectType: string, duration?: number): void;
protected addEffect(pmcData: IPmcData, effectBodyPart: string, effectType: Effect): void;
protected isEmpty(map: any): boolean;
}

View File

@ -1,9 +1,8 @@
import { IPmcData } from "../models/eft/common/IPmcData";
import { Common, HideoutArea, IHideoutImprovement, Production, Productive } from "../models/eft/common/tables/IBotBase";
import { Common, HideoutArea, Production, Productive } from "../models/eft/common/tables/IBotBase";
import { Upd } from "../models/eft/common/tables/IItem";
import { StageBonus } from "../models/eft/hideout/IHideoutArea";
import { IHideoutContinuousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinuousProductionStartRequestData";
import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction";
import { IHideoutContinousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinousProductionStartRequestData";
import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData";
import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideoutTakeProductionRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
@ -16,6 +15,7 @@ import { LocalisationService } from "../services/LocalisationService";
import { PlayerService } from "../services/PlayerService";
import { HashUtil } from "../utils/HashUtil";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil";
import { InventoryHelper } from "./InventoryHelper";
import { ProfileHelper } from "./ProfileHelper";
@ -23,6 +23,7 @@ export declare class HideoutHelper {
protected logger: ILogger;
protected hashUtil: HashUtil;
protected timeUtil: TimeUtil;
protected randomUtil: RandomUtil;
protected databaseServer: DatabaseServer;
protected eventOutputHolder: EventOutputHolder;
protected httpResponse: HttpResponseUtil;
@ -35,13 +36,11 @@ export declare class HideoutHelper {
static waterCollector: string;
static bitcoin: string;
static expeditionaryFuelTank: string;
static maxSkillPoint: number;
private static generatorOffMultipler;
protected hideoutConfig: IHideoutConfig;
constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, inventoryHelper: InventoryHelper, playerService: PlayerService, localisationService: LocalisationService, configServer: ConfigServer);
registerProduction(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData | IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, inventoryHelper: InventoryHelper, playerService: PlayerService, localisationService: LocalisationService, configServer: ConfigServer);
registerProduction(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData | IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
* This convenience function initializes new Production Object
* This convinience function intialies new Production Object
* with all the constants.
*/
initProduction(recipeId: string, productionTime: number): Production;
@ -82,26 +81,6 @@ export declare class HideoutHelper {
isGeneratorOn: boolean;
waterCollectorHasFilter: boolean;
}): void;
/**
* Update a productions progress value based on the amount of time that has passed
* @param pmcData Player profile
* @param prodId Production id being crafted
* @param recipe Recipe data being crafted
* @param hideoutProperties
*/
protected updateProductionProgress(pmcData: IPmcData, prodId: string, recipe: IHideoutProduction, hideoutProperties: {
btcFarmCGs?: number;
isGeneratorOn: boolean;
waterCollectorHasFilter?: boolean;
}): void;
/**
* Check if a productions progress value matches its corresponding recipes production time value
* @param pmcData Player profile
* @param prodId Production id
* @param recipe Recipe being crafted
* @returns progress matches productionTime from recipe
*/
protected doesProgressMatchProductionTime(pmcData: IPmcData, prodId: string): boolean;
/**
* Update progress timer for scav case
* @param pmcData Profile to update
@ -126,7 +105,7 @@ export declare class HideoutHelper {
* Adjust water filter objects resourceValue or delete when they reach 0 resource
* @param waterFilterArea water filter area to update
* @param production production object
* @param isGeneratorOn is generator enabled
* @param isGeneratorOn is generatory enabled
* @param pmcData Player profile
* @returns Updated HideoutArea object
*/
@ -134,53 +113,11 @@ export declare class HideoutHelper {
protected getAreaUpdObject(stackCount: number, resourceValue: number, resourceUnitsConsumed: number): Upd;
protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData): void;
protected updateBitcoinFarm(pmcData: IPmcData, btcFarmCGs: number, isGeneratorOn: boolean): Production;
/**
* Get a count of how many BTC can be gathered by the profile
* @param pmcData Profile to look up
* @returns coin slot count
*/
protected getBTCSlots(pmcData: IPmcData): number;
protected getManagementSkillsSlots(): number;
protected hasManagementSkillSlots(pmcData: IPmcData): boolean;
protected getHideoutManagementSkill(pmcData: IPmcData): Common;
protected getHideoutManagementConsumptionBonus(pmcData: IPmcData): number;
/**
* Get the crafting skill details from player profile
* @param pmcData Player profile
* @returns crafting skill, null if not found
*/
protected getCraftingSkill(pmcData: IPmcData): Common;
/**
* Adjust craft time based on crafting skill level found in player profile
* @param pmcData Player profile
* @param productionTime Time to complete hideout craft in seconds
* @returns Adjusted craft time in seconds
*/
protected getCraftingSkillProductionTimeReduction(pmcData: IPmcData, productionTime: number): number;
isProduction(productive: Productive): productive is Production;
/**
* Gather crafted BTC from hideout area and add to inventory
* Reset production start timestamp if hideout area at full coin capacity
* @param pmcData Player profile
* @param request Take production request
* @param sessionId Session id
* @returns IItemEventRouterResponse
*/
getBTC(pmcData: IPmcData, request: IHideoutTakeProductionRequestData, sessionId: string): IItemEventRouterResponse;
/**
* Upgrade hideout wall from starting level to interactable level if enough time has passed
* @param pmcProfile Profile to upgrade wall in
*/
unlockHideoutWallInProfile(pmcProfile: IPmcData): void;
/**
* Hideout improvement is flagged as complete
* @param improvement hideout improvement object
* @returns true if complete
*/
protected hideoutImprovementIsComplete(improvement: IHideoutImprovement): boolean;
/**
* Iterate over hideout improvements not completed and check if they need to be adjusted
* @param pmcProfile Profile to adjust
*/
setHideoutImprovementsToCompleted(pmcProfile: IPmcData): void;
getBTC(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -40,15 +40,10 @@ export declare class InRaidHelper {
* Remove Labs keycard
* @param profileData Profile to update
* @param saveProgressRequest post raid save data request data
* @param sessionID Session id
* @param sessionID Sessino id
* @returns Reset profile object
*/
updateProfileBaseStats(profileData: IPmcData, saveProgressRequest: ISaveProgressRequestData, sessionID: string): IPmcData;
/**
* Take body part effects from client profile and apply to server profile
* @param saveProgressRequest post-raid request
* @param profileData player profile on server
*/
protected transferPostRaidLimbEffectsToProfile(saveProgressRequest: ISaveProgressRequestData, profileData: IPmcData): void;
/**
* Some maps have one-time-use keys (e.g. Labs
@ -66,7 +61,7 @@ export declare class InRaidHelper {
* Adds SpawnedInSession property to items found in a raid
* Removes SpawnedInSession for non-scav players if item was taken into raid with SpawnedInSession = true
* @param preRaidProfile profile to update
* @param postRaidProfile profile to update inventory contents of
* @param postRaidProfile profile to upate inventory contents of
* @param isPlayerScav Was this a p scav raid
* @returns
*/

View File

@ -1,7 +1,6 @@
import { IPmcData } from "../models/eft/common/IPmcData";
import { Item } from "../models/eft/common/tables/IItem";
import { AddItem, IAddItemRequestData } from "../models/eft/inventory/IAddItemRequestData";
import { IAddItemTempObject } from "../models/eft/inventory/IAddItemTempObject";
import { IAddItemRequestData } from "../models/eft/inventory/IAddItemRequestData";
import { IInventoryMergeRequestData } from "../models/eft/inventory/IInventoryMergeRequestData";
import { IInventoryMoveRequestData } from "../models/eft/inventory/IInventoryMoveRequestData";
import { IInventorySplitRequestData } from "../models/eft/inventory/IInventorySplitRequestData";
@ -47,41 +46,15 @@ export declare class InventoryHelper {
/**
* BUG: Passing the same item multiple times with a count of 1 will cause multiples of that item to be added (e.g. x3 separate objects of tar cola with count of 1 = 9 tarcolas being added to inventory)
* @param pmcData Profile to add items to
* @param request request data to add items
* @param body request data to add items
* @param output response to send back to client
* @param sessionID Session id
* @param callback Code to execute later (function)
* @param callback
* @param foundInRaid Will results added to inventory be set as found in raid
* @param addUpd Additional upd properties for items being added to inventory
* @returns IItemEventRouterResponse
*/
addItem(pmcData: IPmcData, request: IAddItemRequestData, output: IItemEventRouterResponse, sessionID: string, callback: {
(): void;
}, foundInRaid?: boolean, addUpd?: any): IItemEventRouterResponse;
/**
* Add ammo to ammo boxes
* @param itemToAdd Item to check is ammo box
* @param toDo
* @param output IItemEventRouterResponse object
* @param sessionID Session id
* @param pmcData Profile to add ammobox to
*/
protected hydrateAmmoBoxWithAmmo(pmcData: IPmcData, itemToAdd: IAddItemTempObject, toDo: string[][], sessionID: string, output: IItemEventRouterResponse): void;
/**
*
* @param assortItems Items to add to inventory
* @param requestItem Details of purchased item to add to inventory
* @param result Array split stacks are added to
*/
protected splitStackIntoSmallerStacks(assortItems: Item[], requestItem: AddItem, result: IAddItemTempObject[]): void;
/**
* Remove item from player inventory
* @param pmcData Profile to remove item from
* @param itemId Items id to remove
* @param sessionID Session id
* @param output Existing IItemEventRouterResponse object to append data to, creates new one by default if not supplied
* @param addUpd Additional upd propertys for items being added to inventory
* @returns IItemEventRouterResponse
*/
addItem(pmcData: IPmcData, body: IAddItemRequestData, output: IItemEventRouterResponse, sessionID: string, callback: any, foundInRaid?: boolean, addUpd?: any): IItemEventRouterResponse;
removeItem(pmcData: IPmcData, itemId: string, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse;
removeItemByCount(pmcData: IPmcData, itemId: string, count: number, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse;
getItemSize(itemTpl: string, itemID: string, inventoryItem: Item[]): Record<number, number>;

View File

@ -30,7 +30,7 @@ declare class ItemHelper {
/**
* Checks if an id is a valid item. Valid meaning that it's an item that be stored in stash
* @param {string} tpl the template id / tpl
* @returns boolean; true for items that may be in player possession and not quest items
* @returns boolean; true for items that may be in player posession and not quest items
*/
isValidItem(tpl: string, invalidBaseTypes?: string[]): boolean;
/**
@ -42,7 +42,7 @@ declare class ItemHelper {
*/
isOfBaseclass(tpl: string, baseClassTpl: string): boolean;
/**
* Check if item has any of the supplied base classes
* Check if item has any of the supplied base clases
* @param tpl Item to check base classes of
* @param baseClassTpls base classes to check for
* @returns true if any supplied base classes match
@ -165,7 +165,7 @@ declare class ItemHelper {
*/
getChildId(item: Item): string;
/**
* Can the passed in item be stacked
* Can the pased in item be stacked
* @param tpl item to check
* @returns true if it can be stacked
*/
@ -192,7 +192,7 @@ declare class ItemHelper {
*/
replaceIDs(pmcData: IPmcData, items: Item[], insuredItems?: InsuredItem[], fastPanel?: any): any[];
/**
* WARNING, SLOW. Recursively loop down through an items hierarchy to see if any of the ids match the supplied list, return true if any do
* WARNING, SLOW. Recursivly loop down through an items hierarchy to see if any of the ids match the supplied list, return true if any do
* @param {string} tpl
* @param {Array} tplsToCheck
* @returns boolean
@ -220,15 +220,7 @@ declare class ItemHelper {
createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, caliber?: string): Item;
protected getRandomValidCaliber(magTemplate: ITemplateItem): string;
protected drawAmmoTpl(caliber: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>): string;
/**
*
* @param parentId container cartridges will be placed in
* @param ammoTpl Cartridge to insert
* @param stackCount Count of cartridges inside parent
* @param location Location inside parent (e.g. 0, 1)
* @returns Item
*/
createCartridges(parentId: string, ammoTpl: string, stackCount: number, location: number): Item;
createCartidges(parentId: string, ammoTpl: string, stackCount: number): Item;
/**
* Get the size of a stack, return 1 if no stack object count property found
* @param item Item to get stack size of

View File

@ -6,7 +6,7 @@ export declare class NotificationSendHelper {
protected notificationService: NotificationService;
constructor(webSocketServer: WebSocketServer, notificationService: NotificationService);
/**
* Send notification message to the appropriate channel
* Send notification message to the appropiate channel
*/
sendMessage(sessionID: string, notificationMessage: INotification): void;
}

View File

@ -44,7 +44,7 @@ export declare class ProfileHelper {
/**
* Add experience to a PMC inside the players profile
* @param sessionID Session id
* @param experienceToAdd Experience to add to PMC character
* @param experienceToAdd Experiecne to add to PMC character
*/
addExperienceToPmc(sessionID: string, experienceToAdd: number): void;
getProfileByPmcId(pmcId: string): IPmcData;

View File

@ -1,9 +1,8 @@
import { IPmcData } from "../models/eft/common/IPmcData";
import { Quest } from "../models/eft/common/tables/IBotBase";
import { AvailableForConditions, AvailableForProps, IQuest, Reward } from "../models/eft/common/tables/IQuest";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData";
import { IFailQuestRequestData } from "../models/eft/quests/IFailQuestRequestData";
import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData";
import { QuestStatus } from "../models/enums/QuestStatus";
import { IQuestConfig } from "../models/spt/config/IQuestConfig";
import { ILogger } from "../models/spt/utils/ILogger";
@ -40,10 +39,10 @@ export declare class QuestHelper {
protected questConfig: IQuestConfig;
constructor(logger: ILogger, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, traderHelper: TraderHelper, configServer: ConfigServer);
/**
* Get status of a quest in player profile by its id
* Get status of a quest by quest id
* @param pmcData Profile to search
* @param questID Quest id to look up
* @returns QuestStatus enum
* @returns QuestStauts enum
*/
getQuestStatus(pmcData: IPmcData, questID: string): QuestStatus;
/**
@ -55,7 +54,7 @@ export declare class QuestHelper {
doesPlayerLevelFulfilCondition(playerLevel: number, condition: AvailableForConditions): boolean;
/**
* Get the quests found in both arrays (inner join)
* @param before Array of quests #1
* @param before Array of qeusts #1
* @param after Array of quests #2
* @returns Reduction of cartesian product between two quest arrays
*/
@ -64,10 +63,11 @@ export declare class QuestHelper {
* Increase skill points of a skill on player profile
* @param sessionID Session id
* @param pmcData Player profile
* @param output output object to send back to client
* @param skillName Name of skill to increase skill points of
* @param progressAmount Amount of skill points to add to skill
*/
rewardSkillPoints(sessionID: string, pmcData: IPmcData, skillName: string, progressAmount: number): void;
rewardSkillPoints(sessionID: string, pmcData: IPmcData, output: IItemEventRouterResponse, skillName: string, progressAmount: number): void;
/**
* Get quest name by quest id
* @param questId id to get
@ -75,10 +75,10 @@ export declare class QuestHelper {
*/
getQuestNameFromLocale(questId: string): string;
/**
* Check if trader has sufficient loyalty to fulfill quest requirement
* Check if trader has sufficient loyalty to fullfill quest requirement
* @param questProperties Quest props
* @param profile Player profile
* @returns true if loyalty is high enough to fulfill quest requirement
* @returns true if loyalty is high enough to fulfil quest requirement
*/
traderStandingRequirementCheck(questProperties: AvailableForProps, profile: IPmcData): boolean;
protected processReward(reward: Reward): Reward[];
@ -90,12 +90,12 @@ export declare class QuestHelper {
*/
getQuestRewardItems(quest: IQuest, state: QuestStatus): Reward[];
/**
* Look up quest in db by accepted quest id and construct a profile-ready object ready to store in profile
* @param pmcData Player profile
* @param newState State the new quest should be in when returned
* @param acceptedQuest Details of accepted quest from client
* Update player profile with quest status (e.g. Fail/Success)
* @param pmcData profile to add quest to
* @param newState state the new quest should be in when added
* @param acceptedQuest Details of quest being added
*/
getQuestReadyForProfile(pmcData: IPmcData, newState: QuestStatus, acceptedQuest: IAcceptQuestRequestData): Quest;
addQuestToPMCData(pmcData: IPmcData, newState: QuestStatus, acceptedQuest: IAcceptQuestRequestData): void;
/**
* TODO: what is going on here
* @param acceptedQuestId Quest to add to profile
@ -111,12 +111,12 @@ export declare class QuestHelper {
*/
failedUnlocked(failedQuestId: string, sessionID: string): IQuest[];
/**
* Adjust quest money rewards by passed in multiplier
* Adjust quest money rewards by passed in multipler
* @param quest Quest to multiple money rewards
* @param multiplier Value to adjust money rewards by
* @param multipler Value to adjust money rewards by
* @returns Updated quest
*/
applyMoneyBoost(quest: IQuest, multiplier: number): IQuest;
applyMoneyBoost(quest: IQuest, multipler: number): IQuest;
/**
* Sets the item stack to new value, or delete the item if value <= 0
* // TODO maybe merge this function and the one from customization
@ -127,6 +127,12 @@ export declare class QuestHelper {
* @param output ItemEvent router response
*/
changeItemStack(pmcData: IPmcData, itemId: string, newStackSize: number, sessionID: string, output: IItemEventRouterResponse): void;
/**
* Get List of All Quests from db
* NOT CLONED
* @returns Array of IQuest objects
*/
getQuestsFromDb(): IQuest[];
/**
* Get quests, strip all requirement conditions except level
* @param quests quests to process
@ -141,62 +147,45 @@ export declare class QuestHelper {
getQuestWithOnlyLevelRequirementStartCondition(quest: IQuest): IQuest;
/**
* Fail a quest in a player profile
* @param pmcData Player profile
* @param failRequest Fail quest request data
* @param pmcData Profile
* @param failRequest fail quest request data
* @param sessionID Session id
* @returns Item event router response
*/
failQuest(pmcData: IPmcData, failRequest: IFailQuestRequestData, sessionID: string): IItemEventRouterResponse;
failQuest(pmcData: IPmcData, failRequest: any, sessionID: string): IItemEventRouterResponse;
/**
* Get List of All Quests from db
* NOT CLONED
* @returns Array of IQuest objects
*/
getQuestsFromDb(): IQuest[];
/**
* Get quest by id from database (repeatables are stored in profile, check there if questId not found)
* @param questId Id of quest to find
* @param pmcData Player profile
* Get quest by id from database
* @param questId questid to look for
* @param pmcData player profile
* @returns IQuest object
*/
getQuestFromDb(questId: string, pmcData: IPmcData): IQuest;
/**
* Get the locale Id from locale db for a quest message
* @param questMessageId Quest message id to look up
* @param questMessageId Quest mesage id to look up
* @returns Locale Id from locale db
*/
getQuestLocaleIdFromDb(questMessageId: string): string;
/**
* Alter a quests state + Add a record to its status timers object
* Alter a quests state + Add a record to tis status timers object
* @param pmcData Profile to update
* @param newQuestState New state the quest should be in
* @param questId Id of the quest to alter the status of
* @param newQuestState new state the qeust should be in
* @param questId id of the quest to alter the status of
*/
updateQuestState(pmcData: IPmcData, newQuestState: QuestStatus, questId: string): void;
/**
* Give player quest rewards - Skills/exp/trader standing/items/assort unlocks - Returns reward items player earned
* Give player quest rewards - Skills/exp/trader standing/items/assort unlocks
* @param pmcData Player profile
* @param questId questId of quest to get rewards for
* @param state State of the quest to get rewards for
* @param sessionId Session id
* @param questResponse Response to send back to client
* @returns Array of reward objects
* @param body complete quest request
* @param state State of the quest now its complete
* @param sessionID Seession id
* @returns array of reward objects
*/
applyQuestReward(pmcData: IPmcData, questId: string, state: QuestStatus, sessionId: string, questResponse: IItemEventRouterResponse): Reward[];
applyQuestReward(pmcData: IPmcData, body: ICompleteQuestRequestData, state: QuestStatus, sessionID: string): Reward[];
/**
* WIP - Find hideout craft id and add to unlockedProductionRecipe array in player profile
* also update client response recipeUnlocked array with craft id
* @param pmcData Player profile
* @param craftUnlockReward Reward item from quest with craft unlock details
* @param questDetails Quest with craft unlock reward
* @param sessionID Session id
* @param response Response to send back to client
*/
protected findAndAddHideoutProductionIdToProfile(pmcData: IPmcData, craftUnlockReward: Reward, questDetails: IQuest, sessionID: string, response: IItemEventRouterResponse): void;
/**
* Get players intel center bonus from profile
* Get the intel center bonus a player has
* @param pmcData player profile
* @returns bonus as a percent
* @returns bonus in percent
*/
protected getIntelCenterRewardBonus(pmcData: IPmcData): number;
/**
@ -205,10 +194,4 @@ export declare class QuestHelper {
* @returns 'FindItem' condition id
*/
getFindItemIdForQuestHandIn(itemTpl: string): string;
/**
* Add all quests to a profile with the provided statuses
* @param pmcProfile profile to update
* @param statuses statuses quests should have
*/
addAllQuestsToProfile(pmcProfile: IPmcData, statuses: QuestStatus[]): void;
}

View File

@ -47,28 +47,7 @@ export declare class RagfairOfferHelper {
protected questConfig: IQuestConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, traderHelper: TraderHelper, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer);
getValidOffers(searchRequest: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record<string, ITraderAssort>, pmcProfile: IPmcData): IRagfairOffer[];
/**
* Get offers from flea/traders specifically when building weapon preset
* @param searchRequest Search request data
* @param itemsToAdd string array of item tpls to search for
* @param traderAssorts All trader assorts player can access/buy
* @param pmcProfile Player profile
* @returns ITraderAssort
*/
getOffersForBuild(searchRequest: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record<string, ITraderAssort>, pmcProfile: IPmcData): IRagfairOffer[];
/**
* Check if offer item is quest locked for current player by looking at sptQuestLocked property in traders barter_scheme
* @param offer Offer to check is quest locked
* @param traderAssorts all trader assorts for player
* @returns true if quest locked
*/
traderOfferItemQuestLocked(offer: IRagfairOffer, traderAssorts: Record<string, ITraderAssort>): boolean;
/**
* Has a traders offer ran out of stock to sell to player
* @param offer Offer to check stock of
* @returns true if out of stock
*/
protected traderOutOfStock(offer: IRagfairOffer): boolean;
getOffersForBuild(info: ISearchRequestData, itemsToAdd: string[], assorts: Record<string, ITraderAssort>, pmcProfile: IPmcData): IRagfairOffer[];
/**
* Check if trader offers' BuyRestrictionMax value has been reached
* @param offer offer to check restriction properties of

View File

@ -30,7 +30,7 @@ export declare class RagfairSellHelper {
* Determine if the offer being listed will be sold
* @param sellChancePercent chance item will sell
* @param itemSellCount count of items to sell
* @returns Array of purchases of item(s) listed
* @returns Array of purchases of item(s) lsited
*/
rollForSale(sellChancePercent: number, itemSellCount: number): SellResult[];
}

View File

@ -7,7 +7,7 @@ export declare class RagfairSortHelper {
protected localeService: LocaleService;
constructor(databaseServer: DatabaseServer, localeService: LocaleService);
/**
* Sort a list of ragfair offers by something (id/rating/offer name/price/expiry time)
* Sort a list of ragfair offers by something (id/rating/offer name/price/expirty time)
* @param offers Offers to sort
* @param type How to sort it
* @param direction Ascending/descending

View File

@ -24,12 +24,7 @@ export declare class RepairHelper {
* @param applyMaxDurabilityDegradation should item have max durability reduced
*/
updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit: boolean, traderQualityMultipler: number, applyMaxDurabilityDegradation?: boolean): void;
protected getRandomisedArmorRepairDegradationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number, traderQualityMultipler: number): number;
protected getRandomisedWeaponRepairDegradationValue(itemProps: Props, isRepairKit: boolean, weaponMax: number, traderQualityMultipler: number): number;
/**
* Is the supplied tpl a weapon
* @param tpl tplId to check is a weapon
* @returns true if tpl is a weapon
*/
protected getRandomisedArmorRepairDegredationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number, traderQualityMultipler: number): number;
protected getRandomisedWeaponRepairDegredationValue(itemProps: Props, isRepairKit: boolean, weaponMax: number, traderQualityMultipler: number): number;
isWeaponTemplate(tpl: string): boolean;
}

View File

@ -27,10 +27,10 @@ export declare class TradeHelper {
constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, traderHelper: TraderHelper, itemHelper: ItemHelper, paymentService: PaymentService, fenceService: FenceService, inventoryHelper: InventoryHelper, ragfairServer: RagfairServer, configServer: ConfigServer);
/**
* Buy item from flea or trader
* @param pmcData Player profile
* @param pmcData
* @param buyRequestData data from client
* @param sessionID Session id
* @param foundInRaid Should item be found in raid
* @param sessionID
* @param foundInRaid
* @param upd optional item details used when buying from flea
* @returns
*/
@ -38,14 +38,14 @@ export declare class TradeHelper {
/**
* Sell item to trader
* @param pmcData Profile to update
* @param sellRequest request data
* @param sessionID Session id
* @returns IItemEventRouterResponse
* @param body
* @param sessionID
* @returns
*/
sellItem(pmcData: IPmcData, sellRequest: IProcessSellTradeRequestData, sessionID: string): IItemEventRouterResponse;
sellItem(pmcData: IPmcData, body: IProcessSellTradeRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Increment the assorts buy count by number of items purchased
* Show error on screen if player attempts to buy more than what the buy max allows
* Show error on screen if player attepts to buy more than what the buy max allows
* @param assortBeingPurchased assort being bought
* @param itemsPurchasedCount number of items being bought
*/

View File

@ -35,8 +35,6 @@ export declare class TraderAssortHelper {
protected fenceService: FenceService;
protected configServer: ConfigServer;
protected traderConfig: ITraderConfig;
protected mergedQuestAssorts: Record<string, Record<string, string>>;
protected createdMergedQuestAssorts: boolean;
constructor(logger: ILogger, jsonUtil: JsonUtil, mathUtil: MathUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, profileHelper: ProfileHelper, assortHelper: AssortHelper, paymentHelper: PaymentHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferGenerator: RagfairOfferGenerator, traderAssortService: TraderAssortService, localisationService: LocalisationService, traderPurchasePersisterService: TraderPurchasePersisterService, traderHelper: TraderHelper, fenceService: FenceService, configServer: ConfigServer);
/**
* Get a traders assorts
@ -47,10 +45,6 @@ export declare class TraderAssortHelper {
* @returns a traders' assorts
*/
getAssort(sessionId: string, traderId: string, flea?: boolean): ITraderAssort;
/**
* Create a dict of all assort id = quest id mappings used to work out what items should be shown to player based on the quests they've started/completed/failed
*/
protected hydrateMergedQuestAssorts(): void;
/**
* Reset a traders assorts and move nextResupply value to future
* Flag trader as needing a flea offer reset to be picked up by flea update() function
@ -67,7 +61,7 @@ export declare class TraderAssortHelper {
* Iterate over all assorts barter_scheme values, find barters selling for money and multiply by multipler in config
* @param traderAssort Assorts to multiple price of
*/
protected multiplyItemPricesByConfigMultiplier(traderAssort: ITraderAssort): void;
protected multiplyItemPricesByConfigMultipler(traderAssort: ITraderAssort): void;
/**
* Get an array of pristine trader items prior to any alteration by player (as they were on server start)
* @param traderId trader id

View File

@ -29,8 +29,6 @@ export declare class TraderHelper {
protected timeUtil: TimeUtil;
protected configServer: ConfigServer;
protected traderConfig: ITraderConfig;
/** Dictionary of item tpl and the highest trader rouble price */
protected highestTraderPriceItems: Record<string, number>;
constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemHelper: ItemHelper, handbookHelper: HandbookHelper, playerService: PlayerService, localisationService: LocalisationService, fenceService: FenceService, timeUtil: TimeUtil, configServer: ConfigServer);
getTrader(traderID: string, sessionID: string): ITraderBase;
getTraderAssortsById(traderId: string): ITraderAssort;
@ -43,11 +41,11 @@ export declare class TraderHelper {
resetTrader(sessionID: string, traderID: string): void;
/**
* Alter a traders unlocked status
* @param traderId Trader to alter
* @param traderID Trader to alter
* @param status New status to use
* @param sessionId Session id
* @param sessionID Session id
*/
setTraderUnlockedState(traderId: string, status: boolean, sessionId: string): void;
setTraderUnlockedState(traderID: string, status: boolean, sessionID: string): void;
/**
* Get a list of items and their prices from player inventory that can be sold to a trader
* @param traderID trader id being traded with
@ -78,8 +76,8 @@ export declare class TraderHelper {
*/
protected getTraderDurabiltyPurchaseThreshold(traderId: string): number;
/**
* Get the price of passed in item and all of its attached children (mods)
* Take into account bonuses/adjustments e.g. discounts
* Get the price of an item and all of its attached children
* Take into account bonuses/adjsutments e.g. discounts
* @param pmcData profile data
* @param item item to calculate price of
* @param buyPriceCoefficient
@ -96,21 +94,14 @@ export declare class TraderHelper {
* @returns price as number
*/
protected getRawItemPrice(pmcData: IPmcData, item: Item): number;
/**
* Get discount modifier for desired trader
* @param trader Trader to get discount for
* @param buyPriceCoefficient
* @param fenceInfo fence info, needed if getting fence modifier value
* @returns discount modifier value
*/
protected getTraderDiscount(trader: ITraderBase, buyPriceCoefficient: number, fenceInfo: FenceLevel): number;
protected getTraderDiscount(trader: ITraderBase, buyPriceCoefficient: number, fenceInfo: FenceLevel, traderID: string): number;
/**
* Add standing to a trader and level them up if exp goes over level threshold
* @param sessionId Session id
* @param traderId Traders id
* @param sessionID Session id
* @param traderId traders id
* @param standingToAdd Standing value to add to trader
*/
addStandingToTrader(sessionId: string, traderId: string, standingToAdd: number): void;
addStandingToTrader(sessionID: string, traderId: string, standingToAdd: number): void;
/**
* Calculate traders level based on exp amount and increments level if over threshold
* @param traderID trader to process
@ -149,10 +140,4 @@ export declare class TraderHelper {
}[];
tid: string;
}): void;
/**
* Get the highest rouble price for an item from traders
* @param tpl Item to look up highest pride for
* @returns highest rouble cost for item
*/
getHighestTraderPriceRouble(tpl: string): number;
}

View File

@ -19,11 +19,4 @@ export declare class BundleLoader {
getBundle(key: string, local: boolean): BundleInfo;
addBundles(modpath: string): void;
}
export interface BundleManifest {
manifest: Array<BundleManifestEntry>;
}
export interface BundleManifestEntry {
key: string;
path: string;
}
export {};

View File

@ -1,43 +0,0 @@
import { IPostAkiLoadMod } from "../models/external/IPostAkiLoadMod";
import { IPostAkiLoadModAsync } from "../models/external/IPostAkiLoadModAsync";
import { IPostDBLoadMod } from "../models/external/IPostDBLoadMod";
import { IPostDBLoadModAsync } from "../models/external/IPostDBLoadModAsync";
import { IPreAkiLoadMod } from "../models/external/IPreAkiLoadMod";
import { IPreAkiLoadModAsync } from "../models/external/IPreAkiLoadModAsync";
export declare class ModTypeCheck {
/**
* Use defined safe guard to check if the mod is a IPreAkiLoadMod
* @returns boolean
*/
isPreAkiLoad(mod: any): mod is IPreAkiLoadMod;
/**
* Use defined safe guard to check if the mod is a IPostAkiLoadMod
* @returns boolean
*/
isPostAkiLoad(mod: any): mod is IPostAkiLoadMod;
/**
* Use defined safe guard to check if the mod is a IPostDBLoadMod
* @returns boolean
*/
isPostDBAkiLoad(mod: any): mod is IPostDBLoadMod;
/**
* Use defined safe guard to check if the mod is a IPreAkiLoadModAsync
* @returns boolean
*/
isPreAkiLoadAsync(mod: any): mod is IPreAkiLoadModAsync;
/**
* Use defined safe guard to check if the mod is a IPostAkiLoadModAsync
* @returns boolean
*/
isPostAkiLoadAsync(mod: any): mod is IPostAkiLoadModAsync;
/**
* Use defined safe guard to check if the mod is a IPostDBLoadModAsync
* @returns boolean
*/
isPostDBAkiLoadAsync(mod: any): mod is IPostDBLoadModAsync;
/**
* Checks for mod to be compatible with 3.X+
* @returns boolean
*/
isPostV3Compatible(mod: any): boolean;
}

View File

@ -1,17 +1,21 @@
import { DependencyContainer } from "tsyringe";
import { HandbookController } from "../controllers/HandbookController";
import { IModLoader } from "../models/spt/mod/IModLoader";
import { ModCompilerService } from "../services/ModCompilerService";
import { VFS } from "../utils/VFS";
import { BundleLoader } from "./BundleLoader";
import { ModTypeCheck } from "./ModTypeCheck";
import { PreAkiModLoader } from "./PreAkiModLoader";
export declare class PostAkiModLoader implements IModLoader {
protected bundleLoader: BundleLoader;
protected handbookController: HandbookController;
protected vfs: VFS;
protected modCompilerService: ModCompilerService;
protected preAkiModLoader: PreAkiModLoader;
protected modTypeCheck: ModTypeCheck;
constructor(bundleLoader: BundleLoader, vfs: VFS, preAkiModLoader: PreAkiModLoader, modTypeCheck: ModTypeCheck);
constructor(bundleLoader: BundleLoader, handbookController: HandbookController, vfs: VFS, modCompilerService: ModCompilerService, preAkiModLoader: PreAkiModLoader);
getBundles(local: boolean): string;
getBundle(key: string, local: boolean): void;
getModPath(mod: string): string;
load(): Promise<void>;
protected executeMods(container: DependencyContainer): Promise<void>;
load(): void;
protected executeMods(container: DependencyContainer): void;
protected addBundles(): void;
}

View File

@ -1,13 +1,11 @@
import { DependencyContainer } from "tsyringe";
import { OnLoad } from "../di/OnLoad";
import { ModTypeCheck } from "./ModTypeCheck";
import { PreAkiModLoader } from "./PreAkiModLoader";
export declare class PostDBModLoader implements OnLoad {
protected preAkiModLoader: PreAkiModLoader;
protected modTypeCheck: ModTypeCheck;
constructor(preAkiModLoader: PreAkiModLoader, modTypeCheck: ModTypeCheck);
constructor(preAkiModLoader: PreAkiModLoader);
onLoad(): Promise<void>;
getRoute(): string;
getModPath(mod: string): string;
protected executeMods(container: DependencyContainer): Promise<void>;
protected executeMods(container: DependencyContainer): void;
}

View File

@ -1,5 +1,9 @@
import { DependencyContainer } from "tsyringe";
import { IPostAkiLoadMod } from "../models/external/IPostAkiLoadMod";
import { IPostDBLoadMod } from "../models/external/IPostDBLoadMod";
import { IPreAkiLoadMod } from "../models/external/IPreAkiLoadMod";
import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { ModLoader } from "../models/spt/mod/IMod";
import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
import { ILogger } from "../models/spt/utils/ILogger";
@ -9,7 +13,6 @@ import { ModCompilerService } from "../services/ModCompilerService";
import { JsonUtil } from "../utils/JsonUtil";
import { VFS } from "../utils/VFS";
import { BundleLoader } from "./BundleLoader";
import { ModTypeCheck } from "./ModTypeCheck";
export declare class PreAkiModLoader implements IModLoader {
protected logger: ILogger;
protected vfs: VFS;
@ -18,22 +21,22 @@ export declare class PreAkiModLoader implements IModLoader {
protected bundleLoader: BundleLoader;
protected localisationService: LocalisationService;
protected configServer: ConfigServer;
protected modTypeCheck: ModTypeCheck;
protected static container: DependencyContainer;
protected readonly basepath = "user/mods/";
protected readonly modOrderPath = "user/mods/order.json";
protected order: Record<string, number>;
protected imported: Record<string, IPackageJsonData>;
protected imported: Record<string, ModLoader.IMod>;
protected akiConfig: ICoreConfig;
constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, modCompilerService: ModCompilerService, bundleLoader: BundleLoader, localisationService: LocalisationService, configServer: ConfigServer, modTypeCheck: ModTypeCheck);
constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, modCompilerService: ModCompilerService, bundleLoader: BundleLoader, localisationService: LocalisationService, configServer: ConfigServer);
load(container: DependencyContainer): Promise<void>;
getBundles(local: boolean): string;
getBundle(key: string, local: boolean): void;
/**
* Returns a list of mods with preserved load order
* @returns Array of mod names in load order
*/
getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>;
getImportedModDetails(): Record<string, ModLoader.IMod>;
getModPath(mod: string): string;
protected importClass(name: string, filepath: string, container: DependencyContainer): void;
protected importMods(): Promise<void>;
/**
* Check for duplciate mods loaded, show error if duplicate mod found
@ -58,8 +61,29 @@ export declare class PreAkiModLoader implements IModLoader {
* @returns dictionary <modName - package.json>
*/
protected getModsPackageData(mods: string[]): Record<string, IPackageJsonData>;
/**
* Use defined safe guard to check if the mod is a IPreAkiLoadMod
* @returns boolean
*/
protected isPreAkiLoad(mod: any): mod is IPreAkiLoadMod;
/**
* Use defined safe guard to check if the mod is a IPostAkiLoadMod
* @returns boolean
*/
protected isPostAkiLoad(mod: any): mod is IPostAkiLoadMod;
/**
* Use defined safe guard to check if the mod is a IPostDBLoadMod
* @returns boolean
*/
protected isPostDBAkiLoad(mod: any): mod is IPostDBLoadMod;
/**
* Check that the mod is compatible with SPT 3.X.X
* @param mod the mod to check
* @returns boolean
*/
protected isModSpt3XXCompatible(mod: any): boolean;
protected isModCombatibleWithAki(mod: IPackageJsonData): boolean;
protected executeMods(container: DependencyContainer): Promise<void>;
protected executeMods(container: DependencyContainer): void;
sortModsLoadOrder(): string[];
protected addMod(mod: string): Promise<void>;
protected areModDependenciesFulfilled(pkg: IPackageJsonData, loadedMods: Record<string, IPackageJsonData>): boolean;
@ -71,6 +95,6 @@ export declare class PreAkiModLoader implements IModLoader {
*/
protected validMod(modName: string): boolean;
protected getLoadOrderRecursive(mod: string, result: Record<string, string>, visited: Record<string, string>): void;
protected getLoadOrder(mods: Record<string, IPackageJsonData>): Record<string, string>;
protected getLoadOrder(mods: Record<string, ModLoader.IMod>): Record<string, string>;
getContainer(): DependencyContainer;
}

View File

@ -29,9 +29,6 @@ export interface Config {
GlobalLootChanceModifier: number;
TimeBeforeDeploy: number;
TimeBeforeDeployLocal: number;
TradingSetting: number;
TradingSettings: ITradingSettings;
ItemsCommonSettings: IItemsCommonSettings;
LoadTimeSpeedProgress: number;
BaseLoadTime: number;
BaseUnloadTime: number;
@ -39,7 +36,6 @@ export interface Config {
Customization: Customization;
UncheckOnShot: boolean;
BotsEnabled: boolean;
BufferZone: IBufferZone;
ArmorMaterials: ArmorMaterials;
LegsOverdamage: number;
HandsOverdamage: number;
@ -59,6 +55,7 @@ export interface Config {
StaminaRestoration: StaminaRestoration;
StaminaDrain: StaminaDrain;
RequirementReferences: RequirementReferences;
RepairKitSettings: RepairKitSettings;
RestrictionsInRaid: RestrictionsInRaid[];
SkillMinEffectiveness: number;
SkillFatiguePerPoint: number;
@ -85,23 +82,6 @@ export interface Config {
TestValue: number;
Inertia: Inertia;
Ballistic: Ballistic;
RepairSettings: RepairSettings;
}
export interface IBufferZone {
CustomerAccessTime: number;
CustomerCriticalTimeStart: number;
CustomerKickNotifTime: number;
}
export interface IItemsCommonSettings {
ItemRemoveAfterInterruptionTime: number;
}
export interface ITradingSettings {
BuyoutRestrictions: IBuyoutRestrictions;
}
export interface IBuyoutRestrictions {
MinDurability: number;
MinFoodDrinkResource: number;
MinMedsResource: number;
}
export interface Content {
ip: string;
@ -341,8 +321,6 @@ export interface Effects {
Pain: Pain;
PainKiller: PainKiller;
SandingScreen: SandingScreen;
MildMusclePain: IMusclePainEffect;
SevereMusclePain: IMusclePainEffect;
Stimulator: Stimulator;
Tremor: Tremor;
ChronicStaminaFatigue: ChronicStaminaFatigue;
@ -479,12 +457,6 @@ export interface PainKiller {
export interface SandingScreen {
Dummy: number;
}
export interface IMusclePainEffect {
GymEffectivity: number;
OfflineDurationMax: number;
OfflineDurationMin: number;
TraumaChance: number;
}
export interface Stimulator {
BuffLoopTime: number;
Buffs: Buffs;
@ -831,7 +803,7 @@ export interface SkillsSettings {
HMG: any[];
Launcher: any[];
AttachedLauncher: any[];
Melee: IMeleeSkill;
Melee: any[];
DMR: WeaponSkills;
BearAssaultoperations: any[];
BearAuthority: any[];
@ -875,25 +847,10 @@ export interface SkillsSettings {
BotSound: any[];
TroubleShooting: TroubleShooting;
}
export interface IMeleeSkill {
BuffSettings: IBuffSettings;
}
export interface ArmorSkills {
BuffMaxCount: number;
BuffSettings: IBuffSettings;
Counters: IArmorCounters;
MoveSpeedPenaltyReductionHVestsReducePerLevel: number;
RicochetChanceHVestsCurrentDurabilityThreshold: number;
RicochetChanceHVestsEliteLevel: number;
RicochetChanceHVestsMaxDurabilityThreshold: number;
MeleeDamageLVestsReducePerLevel: number;
MoveSpeedPenaltyReductionLVestsReducePerLevel: number;
WearAmountRepairLVestsReducePerLevel: number;
WearChanceRepairLVestsReduceEliteLevel: number;
}
export interface IArmorCounters {
armorDurability: ISkillCounter;
}
export interface HideoutManagement {
SkillPointsPerAreaUpgrade: number;
SkillPointsPerCraft: number;
@ -950,7 +907,6 @@ export interface Endurance {
MovementAction: number;
SprintAction: number;
GainPerFatigueStack: number;
QTELevelMultipliers: Record<string, Record<string, number>>;
}
export interface Strength {
SprintActionMin: number;
@ -959,14 +915,9 @@ export interface Strength {
MovementActionMax: number;
PushUpMin: number;
PushUpMax: number;
QTELevelMultipliers: IQTELevelMultiplier[];
FistfightAction: number;
ThrowAction: number;
}
export interface IQTELevelMultiplier {
Level: number;
Multiplier: number;
}
export interface Vitality {
DamageTakenAction: number;
HealthNegativeEffect: number;
@ -999,42 +950,22 @@ export interface Search {
FindAction: number;
}
export interface WeaponTreatment {
BuffMaxCount: number;
BuffSettings: IBuffSettings;
Counters: IWeaponTreatmentCounters;
DurLossReducePerLevel: number;
SkillPointsPerRepair: number;
Filter: any[];
WearAmountRepairGunsReducePerLevel: number;
WearChanceRepairGunsReduceEliteLevel: number;
}
export interface IWeaponTreatmentCounters {
firearmsDurability: ISkillCounter;
}
export interface IBuffSettings {
CommonBuffChanceLevelBonus: number;
CommonBuffMinChanceValue: number;
CurrentDurabilityLossToRemoveBuff?: number;
MaxDurabilityLossToRemoveBuff?: number;
RareBuffChanceCoff: number;
ReceivedDurabilityMaxPercent: number;
}
export interface MagDrills {
RaidLoadedAmmoAction: number;
RaidUnloadedAmmoAction: number;
MagazineCheckAction: number;
}
export interface Perception {
DependentSkillRatios: ISkillRatio[];
OnlineAction: number;
UniqueLoot: number;
}
export interface ISkillRatio {
Ratio: number;
SkillId: string;
}
export interface Intellect {
Counters: IIntellectCounters;
ExamineAction: number;
SkillProgress: number;
RepairAction: number;
@ -1042,52 +973,16 @@ export interface Intellect {
WearChanceReduceEliteLevel: number;
RepairPointsCostReduction: number;
}
export interface IIntellectCounters {
armorDurability: ISkillCounter;
firearmsDurability: ISkillCounter;
meleeWeaponDurability: ISkillCounter;
}
export interface ISkillCounter {
divisor: number;
points: number;
}
export interface Attention {
DependentSkillRatios: ISkillRatio[];
ExamineWithInstruction: number;
FindActionFalse: number;
FindActionTrue: number;
}
export interface Charisma {
BonusSettings: IBonusSettings;
Counters: ICharismaSkillCounters;
SkillProgressInt: number;
SkillProgressAtn: number;
SkillProgressPer: number;
}
export interface ICharismaSkillCounters {
insuranceCost: ISkillCounter;
repairCost: ISkillCounter;
repeatableQuestCompleteCount: ISkillCounter;
restoredHealthCost: ISkillCounter;
scavCaseCost: ISkillCounter;
}
export interface IBonusSettings {
EliteBonusSettings: IEliteBonusSettings;
LevelBonusSettings: ILevelBonusSettings;
}
export interface IEliteBonusSettings {
FenceStandingLossDiscount: number;
RepeatableQuestExtraCount: number;
ScavCaseDiscount: number;
}
export interface ILevelBonusSettings {
HealthRestoreDiscount: number;
HealthRestoreTraderDiscount: number;
InsuranceDiscount: number;
InsuranceTraderDiscount: number;
PaidExitDiscount: number;
RepeatableQuestChangeDiscount: number;
}
export interface Memory {
AnySkillUp: number;
SkillProgress: number;
@ -1250,30 +1145,11 @@ export interface xyz {
export interface Ballistic {
GlobalDamageDegradationCoefficient: number;
}
export interface RepairSettings {
ItemEnhancementSettings: IItemEnhancementSettings;
MinimumLevelToApplyBuff: number;
RepairStrategies: IRepairStrategies;
export interface RepairKitSettings {
armorClassDivisor: number;
durabilityPointCostArmor: number;
durabilityPointCostGuns: number;
}
export interface IItemEnhancementSettings {
DamageReduction: IPriceModifier;
MalfunctionProtections: IPriceModifier;
WeaponSpread: IPriceModifier;
}
export interface IPriceModifier {
PriceModifier: number;
}
export interface IRepairStrategies {
Armor: IRepairStrategy;
Firearms: IRepairStrategy;
}
export interface IRepairStrategy {
BuffTypes: string[];
Filter: string[];
}
export interface BotPreset {
UseThis: boolean;
Role: string;

View File

@ -118,7 +118,6 @@ export interface BossLocationSpawn {
TriggerName: string;
Delay?: number;
Supports?: BossSupport[];
sptId?: string;
}
export interface BossSupport {
BossEscortAmount: string;
@ -180,7 +179,6 @@ export interface Exit {
EntryPoints: string;
ExfiltrationTime: number;
ExfiltrationType: string;
RequiredSlot?: string;
Id: string;
MaxTime: number;
MinTime: number;
@ -204,7 +202,6 @@ export interface Wave {
slots_min: number;
time_max: number;
time_min: number;
sptId?: string;
}
export declare enum WildSpawnType {
ASSAULT = "assault",

View File

@ -21,7 +21,6 @@ export interface IBotBase {
Hideout: Hideout;
Quests: Quest[];
TradersInfo: Record<string, TraderInfo>;
UnlockedInfo: IUnlockedInfo;
RagfairInfo: RagfairInfo;
RepeatableQuests: IPmcDataRepeatableQuest[];
Bonuses: Bonus[];
@ -32,9 +31,6 @@ export interface IBotBase {
/** SPT specific property used during bot generation in raid */
sptIsPmc?: boolean;
}
export interface IUnlockedInfo {
unlockedProductionRecipe: string[];
}
export interface Info {
EntryPoint: string;
Nickname: string;
@ -104,10 +100,7 @@ export interface BodyPartsHealth {
}
export interface BodyPartHealth {
Health: CurrentMax;
Effects?: Record<string, BodyPartEffectProperties>;
}
export interface BodyPartEffectProperties {
Time: number;
Effects?: Record<string, number>;
}
export interface CurrentMax {
Current: number;
@ -127,6 +120,7 @@ export interface FastPanel {
export interface Skills {
Common: Common[];
Mastering: Mastering[];
Bonuses?: any[];
Points: number;
}
export interface Common {
@ -271,24 +265,12 @@ export interface InsuredItem {
export interface Hideout {
Production: Record<string, Productive>;
Areas: HideoutArea[];
Improvements: Record<string, IHideoutImprovement>;
sptUpdateLastRunTimestamp: number;
}
export interface IHideoutImprovement {
completed: boolean;
improveCompleteTimestamp: number;
}
export interface Productive {
Products: Product[];
/** Seconds passed of production */
Progress?: number;
/** Is craft in some state of being worked on by client (crafting/ready to pick up) */
inProgress?: boolean;
StartTimestamp?: number;
SkipTime?: number;
/** Seconds needed to fully craft */
ProductionTime?: number;
sptIsScavCase?: boolean;
}
export interface Production extends Productive {
RecipeId: string;
@ -345,12 +327,10 @@ export interface Quest {
statusTimers?: Record<string, number>;
/** SPT specific property */
completedConditions?: string[];
availableAfter?: number;
}
export interface TraderInfo {
loyaltyLevel: number;
salesSum: number;
disabled: boolean;
standing: number;
nextResupply: number;
unlocked: boolean;

View File

@ -7,7 +7,6 @@ export interface Item {
upd?: Upd;
}
export interface Upd {
Buff?: Buff;
OriginalStackObjectsCount?: number;
Togglable?: Togglable;
Map?: Map;
@ -17,7 +16,6 @@ export interface Upd {
StackObjectsCount?: number;
UnlimitedCount?: boolean;
Repairable?: Repairable;
RecodableComponent?: RecodableComponent;
FireMode?: FireMode;
SpawnedInSession?: boolean;
Light?: Light;
@ -33,12 +31,6 @@ export interface Upd {
SideEffect?: SideEffect;
RepairKit?: RepairKit;
}
export interface Buff {
rarity: string;
buffType: string;
value: number;
thresholdDurability?: number;
}
export interface Togglable {
On: boolean;
}
@ -60,9 +52,6 @@ export interface Repairable {
Durability: number;
MaxDurability: number;
}
export interface RecodableComponent {
IsEncoded: boolean;
}
export interface MedKit {
HpResource: number;
}
@ -109,8 +98,7 @@ export interface Location {
y: number;
r: string | number;
isSearched?: boolean;
/** SPT property? */
rotation?: string | boolean;
rotation?: string;
}
export interface SideEffect {
Value: number;

View File

@ -19,8 +19,6 @@ export interface TemplateSide {
}
export interface ProfileTraderTemplate {
initialLoyaltyLevel: number;
setQuestsAvailableForStart?: boolean;
setQuestsAvailableForFinish?: boolean;
initialStanding: number;
initialSalesSum: number;
jaegerUnlocked: boolean;

View File

@ -2,7 +2,7 @@ import { QuestRewardType } from "../../../enums/QuestRewardType";
import { QuestStatus } from "../../../enums/QuestStatus";
import { Item } from "./IItem";
export interface IQuest {
QuestName?: string;
QuestName: string;
_id: string;
canShowNotificationsInGame: boolean;
conditions: Conditions;
@ -15,7 +15,6 @@ export interface IQuest {
image: string;
type: string;
isKey: boolean;
questStatus: any;
restartable: boolean;
instantComplete: boolean;
secretQuest: boolean;
@ -23,7 +22,7 @@ export interface IQuest {
successMessageText: string;
templateId: string;
rewards: Rewards;
status: string | number;
status: string;
KeyQuest: boolean;
changeQuestMessageText: string;
side: string;
@ -44,15 +43,12 @@ export interface AvailableForProps {
id: string;
index: number;
parentId: string;
isEncoded: boolean;
dynamicLocale: boolean;
value?: number;
compareMethod?: string;
visibilityConditions?: VisibilityCondition[];
target?: string | string[];
status?: QuestStatus[];
availableAfter?: number;
dispersion?: number;
onlyFoundInRaid?: boolean;
oneSessionOnly?: boolean;
doNotResetIfCounterCompleted?: boolean;

Some files were not shown because too many files have changed in this diff Show More