Compare commits

..

50 Commits
1.3.0 ... main

Author SHA1 Message Date
509cdff8b6 Fix marked room loot for AKI 3.5.1 2023-02-16 13:21:06 -05:00
30744551f0 Preliminary update for SPT-AKI 3.5.1 compatibility 2023-02-15 14:00:15 -05:00
23ab7efadf Fix chanceSameSideIsHostilePercent 2023-02-14 21:18:10 -05:00
c3866d0360 Finally, actually fixing the ConvertIntoPmcChance function. 2023-02-14 20:52:30 -05:00
a1f8fe37a1 Hotfixes for update to v1.8.3/ Compatible with AKI 3.5.0
* Bots.json
* Insurance.json
* Traders.json
2023-02-13 17:55:10 -05:00
cc58998345 Hotfixes for update to v1.8.3/ Compatible with AKI 3.5.0
* Bots.json
* Insurance.json
* Traders.json
2023-02-13 17:53:02 -05:00
90db74d535 Update package to v1.8.1 2023-02-13 03:03:57 -05:00
cce9f573ba Update to v1.8.1
* Fixed secure containers in marked room; removed the category and added the individual containers. All containers except Kappa are a probability of 3//Kappa is a probability of 1.
2023-02-13 03:03:26 -05:00
37d356736c Updates for v1.8.0 of Valens-AIO; compatible with SPT-AKI V3.5.0
* Added additional items to Airdrop Blacklist into the airdrop.json
* Added botGenerationBatchSizePerType and reworked maxBotCap to current defaults and to include Streets into bots.json
* Added botRelativeLevelDeltaMax into bots.json
* Added runIntervalSeconds into flea.json; affects how often flea will refresh in-game (so selling faster or slower - is taxing on CPU resources as it calls more often or less often pending how you set it; default is 45 seconds) into flea.json
* Reworked Ragfair Conditions to take current server values into flea.json
* Removed airFilterUnitFlowRate, generatorFuelFlowRate, and gpuBoostRate from hideout.json; these may return in the future however, as of now they have been removed from the server config and I would need to dive deep into server code.
* Consolidated timeLimit into its own boolean and raidTime settings. Restructured AiAmount and AiDifficulty to match the server config in raid.json
* Added new types into the bots.ts config file
* Added new types into the flea.ts config file
* Removed types no longer being used in the hideout.ts config file
* Added new types into the raid.ts config file
* Added Streets Marked Room Loot into the Containers In Marked Room Loot Pool
* General rework and cleanup of code
2023-02-13 01:07:28 -05:00
41c3dd6c83 Types update for 3.5.0 2023-02-12 23:21:14 -05:00
df9a522516 3.5.0 type updates 2023-01-15 00:21:22 -05:00
c145035717 Added coopExtracts 2023-01-14 12:22:28 -05:00
1fc77d6bdf Changes and additions for v1.7.1 2023-01-13 00:20:15 -05:00
7d9783d7b5 Trader config fixes and updates. Update locations to add lighthouse to all extractions available. 2023-01-08 03:55:21 -05:00
4f863a37b0 Bots changes 2023-01-08 03:28:14 -05:00
5ec21767c5 Update bots config to include more of the new additions. 2023-01-08 03:09:19 -05:00
74de872205 Changes to bring airdrop config in line with current airdrops. 2023-01-08 02:33:11 -05:00
a4d907a76b Update types to 3.5.0 2023-01-08 01:06:33 -05:00
2c7493853f Update V-AIO to v1.7.0 compatible with latest SPT-AKI v3.4.0 2022-12-25 19:38:44 -05:00
96301881d1 Upate types for 3.4.0 2022-12-25 18:45:37 -05:00
b9c77b1c13 Remove a 7z file lol 2022-09-11 21:49:37 -04:00
c85b851a38 Final changes for v1.6.1 2022-09-11 21:49:08 -04:00
efb5872836 Changes for SPT-Aki v3.2.3 compatibility, and updating Types. 2022-09-11 20:07:37 -04:00
280c1c6021 Typo correction. 2022-09-10 23:02:58 -04:00
e6765e8c5b Add Zeroing Default Ammo to each individual weapon and caliber. 2022-09-06 03:14:56 -04:00
8d67fcf901 Airdrops. >^) 2022-09-05 19:31:13 -04:00
49455958e9 v1.6.0 Release Ready.
v1.6.0 Changelog
* Compatible with SPT-Aki v3.2.2
* Updated Readme with new features.
* Combined armorPlusArmorVests into removeGearRestrictions so that it now removes all gear restrictions. Located in config/armor.json
* Adjusted PMC Difficulty Weights to be 0/40/30/30 by default. Located in config/bots.json
* Removed Remove Backpack Filter. Located in config/items.json
* Added Remove Backpack, Container, In Raid Items, and Secured Container Restrictions. Located in config/items.json
* Added the ability to adjust the time it takes to examine items. Located in config/items.json/examineTime
* Added the ability to enable/disable updateTime for traders. Located in config/traders.json If you have custom traders they will need to be added to the updateTime array (Simply copy/paste one of the lines including the {} and add in the traderId for your custom trader.)
* Fixed logic for Fence blacklist because JS sucks /s. Located in config/traders.json
* Cleaned up armor.ts code and moved a lot of the armor materials to their own individual functions.
* Fixed types in items.ts, and cleaned up a lot of functions, and general code.
2022-09-05 17:31:19 -04:00
49cdcbc984 Smol fix for bad logic because JS sucks. 2022-09-05 13:52:10 -04:00
fff75ca63e Readme update. 2022-09-03 21:14:49 -04:00
1a80b7b26e v1.5.3 including new recoil tweaks, and the ability to wear both armor, and armor vests. 2022-09-03 21:10:23 -04:00
2c37fd2276 Package json and Readme updates for v1.5.2 2022-09-03 20:47:26 -04:00
a85fd833b9 Fixing onlyFoundInRaid Function to properly work for reals this fucking time. Also changed nomenclature in items.ts for a for loop. 2022-09-03 20:33:16 -04:00
34bcd62d14 Fix logic in removeItemRestrictions function.
if (filters.ExcludedFilter != [])
to
if (!filters.ExcludedFilter)
as the first will always return true in JS.
2022-09-03 19:33:59 -04:00
53cd6cc232 Raedme changes. 2022-09-03 19:12:02 -04:00
8a0e32a251 Added ability to configure traders via configs/traders.ts for v1.5.1 2022-08-31 21:27:26 -04:00
3d56c6119c v1.5.0 compatible with SPT-Aki v3.2.2 2022-08-29 17:07:55 -04:00
053294c48a Hotfix for 86x70 AmmoType. 2022-08-28 23:48:57 -04:00
2488092fc9 Final commits for v1.4.5 2022-08-26 17:10:13 -04:00
070beec63b Fix for Fuel in Generator setting itself to 0. 2022-08-26 17:08:22 -04:00
5201f75fd7 Fix some open zone stuff. 2022-08-20 15:38:40 -04:00
b6cd8d20c1 Fix Therapist Insurance options. 2022-08-18 18:30:12 -04:00
fd596acbb6 Fix the Ammo oopsie. 2022-08-18 16:17:57 -04:00
37e9e9becb Fix docs case height/width typo. 2022-08-18 13:10:35 -04:00
bfe7c598bd Changes for SPT-Aki v3.2.1 compatibility 2022-08-18 12:21:03 -04:00
76f406baa5 ReadMe for v1.4.1 2022-08-17 23:20:07 -04:00
de120ff607 Fix for DiscardItem and ItemRestrictions features. 2022-08-17 23:09:04 -04:00
065c5098b9 v1.4.0 Changelog
* Bugfixes for non-working features
* Code Refactor, and cleanup
* Separated out all instances of the config files to their own separate entities. DebugMode is the only entity existing within the original config.json which will enable logging in the server for every feature enabled.
* Removed Progression from the AIO and separated it out to its own individual modification.

New Features
* Added SMG In Holsters to Weapons.json
* Added Skill Progression/Fatigue rates to Skills.json
* Added Remove Discard Limit, and Remove Item Restrictions to Items.json
* Reworked Insurance, and added minHr, maxHr, and storageMaxHr alongside the previously existing priceCoefficient, and returnChance in Insurance.json
* Added Armor Materials to Armor.json
2022-08-17 17:51:28 -04:00
c932d2b1e0 Remove the default readme as it is not needed. 2022-08-17 02:19:22 -04:00
245754fe4a Fixing an oopsie from the very beginning. 2022-08-17 02:18:04 -04:00
b7107e1a0e Separated containers from config.json to its own containers.json in the /config directory. 2022-08-09 19:51:08 -04:00
691 changed files with 11143 additions and 4881 deletions

4
.gitignore vendored
View File

@ -29,5 +29,5 @@ config.json.bk
desktop.ini desktop.ini
*.zip *.zip
*.js *.js
/Valens-AIO/Valens-AIO_*/**/*.* /Valens-AIO_*/**/*.*
/Valens-AIO/Valens-AIO_*/*.* /Valens-AIO_*/*.*

View File

@ -1,64 +0,0 @@
This project was created to automate most parts of building and setting up an environment.
## **NodeJS 14.15.3:**
The first step would be to install nodejs on your pc, the version you NEED is **14.15.3**
That version is the one that has been used to test the mod templates and build scripts.
It can be downloaded from here: https://nodejs.org/download/release/v14.15.3/
A system reboot may be needed after install.
## **IDE:**
The second step is having an IDE ready. For the currect purpose we've setup a VSCodium workspace file.
You CAN use Visual Studio Code if you so desire, just keep in mind that our dev tests on the mod files was done using VSCodium.
You can get VSCodium here: https://vscodium.com/#install
## **Workspace:**
Once you have NodeJS and VSCodium ready, open the mod.code-workspace file with VSCodium (File->Open Worspace from File...).
Once the project loads into VSCodium you will be recommended to install the ESLint plugin. This is HIGHLY recommended.
## **Environment Setup:**
There is a task that will automatically setup your environment to use typescript.
To run it, you just need to go to:
> Terminal->Run Task...->Show All Tasks...->npm: install
After running this task, your environment will be ready to start coding.
DO NOT remove the node_modules folder, this is an auto generated directory that has the required dependencies to be able to use typescript and more.
## **IMPORTANT:**
Before starting to work on your mod, we suggest you read about Dependency Injection and Inversion of Control as this is the adopted architecture SPT-AKI has adopted.
It will be difficult to understand some of the problems you may be having if you dont understand the basics of it.
A guide explaining all the essentials will be available on the hub on release for you to read about.
## **Coding:**
All your work should be centered around the mod.ts file as an entry point.
You can ONLY change the following properties from the package.json file: `"name"`, `"version"`, `"license"`: `"MIT"`, `"author"`, `"akiVersion"`.
If you have never used typescript before, you can read about it here: https://www.typescriptlang.org/docs/
## **Distributing your mod:**
The project has been set up with an automatic task that will copy and zip ALL required files for your mod to work on SPT-AKI.
To run this task you just need to go to:
> Terminal->Run Task...->Show All Tasks...->npm: build:zip
The output will be a mod.zip file that will appear on the root of the project.
Always verify that all files were included into the zip file.

View File

@ -1,484 +0,0 @@
{
"DebugMode": false,
"ammo":
{
"ammoStacks":
{
"grenadeCartridges": 1,
"marksmanCartridges": 40,
"pistolCartridges": 50,
"rifleCartridges": 60,
"shotgunCartridges": 20
}
},
"bots":
{
"bossChance":
{
"activated": false,
"chance": 100
},
"maxBotCap": 20,
"pmc":
{
"chanceSameSideIsHostile": 50,
"containersOnPMCs": true,
"isUsec": 50,
"lootNValue": 3,
"maxBackpackLootTotalRub": 150000,
"maxPocketLootTotalRub": 50000,
"maxVestLootTotalRub": 50000,
"convertIntoPmcChance":
{
"assault":
{
"min": 15,
"max": 40
},
"cursedAssault":
{
"min": 15,
"max": 40
},
"pmcBot":
{
"min": 15,
"max": 30
},
"exUsec":
{
"min": 5,
"max": 20
}
},
"difficultyWeights":
{
"difficulty": "asonline",
"useWeights": false,
"weights":
{
"easy": 20,
"normal": 58,
"hard": 15,
"impossible": 7
}
},
"looseWeaponInBackpackChance": 15,
"looseWeaponInBackpackLoot":
{
"min": 1,
"max": 1
}
},
"scav":
{
"lootNValue": 4
}
},
"containers":
{
"commonContainers":
{
"enabled": false,
"AMMO_CASE":
{
"width": 2,
"height": 2,
"cellsH": 7,
"cellsV": 7
},
"DOCUMENTS_CASE":
{
"width": 2,
"height": 1,
"cellsH": 4,
"cellsV": 4
},
"DOGTAG_CASE":
{
"width": 1,
"height": 1,
"cellsH": 10,
"cellsV": 10
},
"GRENADE_CASE":
{
"width": 3,
"height": 3,
"cellsH": 8,
"cellsV": 8
},
"INJECTOR_CASE":
{
"width": 1,
"height": 1,
"cellsH": 3,
"cellsV": 3
},
"ITEM_CASE":
{
"width": 4,
"height": 4,
"cellsH": 8,
"cellsV": 8
},
"KEY_TOOL":
{
"width": 1,
"height": 1,
"cellsH": 4,
"cellsV": 4
},
"KEYCARD_HOLDER":
{
"width": 1,
"height": 1,
"cellsH": 3,
"cellsV": 3
},
"SCAV_JUNKBOX":
{
"width": 4,
"height": 4,
"cellsH": 14,
"cellsV": 14
},
"MAGAZINE_CASE":
{
"width": 3,
"height": 2,
"cellsH": 7,
"cellsV": 7
},
"MEDICINE_CASE":
{
"width": 3,
"height": 3,
"cellsH": 7,
"cellsV": 7
},
"MONEY_CASE":
{
"width": 3,
"height": 2,
"cellsH": 7,
"cellsV": 7
},
"HOLODILNICK_THERMAL_BAG":
{
"width": 3,
"height": 3,
"cellsH": 8,
"cellsV": 8
},
"PISTOL_CASE":
{
"width": 2,
"height": 2,
"cellsH": 4,
"cellsV": 3
},
"SICC_ORGANIZATIONAL_POUCH":
{
"width": 2,
"height": 1,
"cellsH": 5,
"cellsV": 5
},
"SIMPLE_WALLET":
{
"width": 1,
"height": 1,
"cellsH": 2,
"cellsV": 2
},
"THICC_ITEM_CASE":
{
"width": 5,
"height": 3,
"cellsH": 14,
"cellsV": 14
},
"THICC_WEAPON_CASE":
{
"width": 5,
"height": 2,
"cellsH": 6,
"cellsV": 15
},
"WEAPON_CASE":
{
"width": 5,
"height": 2,
"cellsH": 5,
"cellsV": 10
},
"WZ_WALLET":
{
"width": 1,
"height": 1,
"cellsH": 2,
"cellsV": 2
}
},
"securedContainers":
{
"enabled": false,
"ALPHA":
{
"width": 2,
"height": 2,
"cellsH": 2,
"cellsV": 2
},
"BETA":
{
"width": 3,
"height": 2,
"cellsH": 3,
"cellsV": 2
},
"EPSILON":
{
"width": 4,
"height": 2,
"cellsH": 4,
"cellsV": 2
},
"GAMMA":
{
"width": 3,
"height": 3,
"cellsH": 3,
"cellsV": 3
},
"KAPPA":
{
"width": 3,
"height": 3,
"cellsH": 3,
"cellsV": 4
}
}
},
"flea":
{
"minUserLevel": 15,
"blacklist":
{
"enableBsgList": true,
"enableQuestList": true
},
"condition":
{
"conditionChance": 0.2,
"min": 0.6,
"max": 1.0
},
"currencies":
{
"roubles": 78,
"dollars": 20,
"euros": 2
},
"offerItemCount":
{
"min": 8,
"max": 15
},
"reputation":
{
"gain": 0.0000002,
"loss": 0.0000002
},
"time":
{
"baseSellTime": 15,
"minSellTime": 5,
"maxSellTime": 15
}
},
"globals":
{
"damagePerMeter": 9,
"safeHeight": 3,
"maxLoyaltyTraders": false,
"timeBeforeDeployLocal": 10,
"matchEnd":
{
"survivedExpRequirement": 200,
"survivedSecondsRequirement": 420,
"survivedExpReward": 300,
"miaExpReward": 200,
"runnerExpReward": 200,
"leftMult": 0,
"miaMult": 1,
"survivedMult": 1.3,
"runnerMult": 0.5,
"killedMult": 1,
"headShotMult": 1.2,
"expOnDamageAllHealth": 50
}
},
"hideout":
{
"airFilterUnitFlowRate": 0.0047222222222222,
"constructionTime": 1,
"generatorFuelFlowRate": 0.0013194444444444,
"gpuBoostRate": 0.041225,
"productionTime": 1,
"scavCaseTime": 1
},
"insurance":
{
"insuranceMultiplier":
{
"prapor": 0.16,
"therapist": 0.25
},
"returnChancePercent":
{
"prapor": 80,
"therapist": 85
}
},
"items":
{
"standardStash":
{
"vertical": 28,
"horizontal": 10
},
"behindStash":
{
"vertical": 38,
"horizontal": 10
},
"escapeStash":
{
"vertical": 48,
"horizontal": 10
},
"eodStash":
{
"vertical": 68,
"horizontal": 10
},
"examinedByDefault": false,
"removeBackpackFilter": true,
"removeKeyUsageMax": false,
"roublesMaxStack": 500000,
"dollarsMaxStack": 50000,
"eurosMaxStack": 50000,
"weightModifier": 1
},
"locations":
{
"allExtractsAvailable": false,
"exfilTime": 8,
"extractionsExtended": false,
"noExtractRestrictions": false
},
"loot":
{
"containersInMarkedRoom": true,
"looseLootMultiplier": 1,
"staticLootMultiplier": 1
},
"progression":
{
"enabled": true
},
"quests":
{
"onlyFoundInRaid": true
},
"raid":
{
"carExtractBaseStandingGain": 0.25,
"chompiesBossFix": true,
"fixOpenZones": true,
"scavExtractGain": 0.01,
"timeLimit": 60,
"aiAmount": "asonline",
"aiDifficulty": "asonline",
"bossEnabled": true,
"scavWars": false,
"taggedAndCursed": false,
"enablePve": true
},
"prewipeEvents":
{
"allBossesOnReserve": false,
"allTradersSellCheapItems": false,
"gluharOnLabs": false,
"killaOnFactory": false,
"makeObdolbosPowerful": false
},
"weapons":
{
"jam": false,
"misfeed": false,
"misfire": false,
"overheat": false,
"slide": false
}
}

View File

@ -1,334 +0,0 @@
export interface Config
{
DebugMode: boolean
ammo: Ammo
bots: Bots
containers: Containers
flea: Flea
globals: Globals
hideout: Hideout
insurance: Insurance
items: Items
locations: Locations
loot: Loot
progression: Progression
raid: Raid
quests: Quests
prewipeEvents: PrewipeEvents
weapons: Weapons
}
export interface Ammo
{
ammoStacks: AmmoStacks
}
export interface AmmoStacks
{
grenadeCartridges: number
marksmanCartridges: number
pistolCartridges: number
rifleCartridges: number
shotgunCartridges: number
}
export interface Bots
{
bossChance: BossChance
maxBotCap: number
pmc: Pmc
scav: Scav
}
export interface BossChance
{
activated: boolean
chance: number
}
export interface Pmc
{
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: Weights
}
export interface Weights
{
easy: number
normal: number
hard: number
impossible: number
}
export interface ConvertIntoPmcChance
{
assault: PmcChance
cursedAssault: PmcChance
pmcBot : PmcChance
exUsec : PmcChance
}
export interface PmcChance
{
min: number
max: number
}
export interface LooseWeapon
{
min: number
max: number
}
export interface Scav
{
lootNValue: number
}
export interface Containers
{
commonContainers: CommonContainers
securedContainers: SecuredContainers
}
export interface CommonContainers
{
enabled: boolean
ammoCase: Case
docsCase: Case
dogsCase: Case
grenadeCase: Case
injectorCase: Case
itemCase: Case
keyTool: Case
keycardHolder: Case
scavJunkbox: Case
magsCase: Case
medsCase: Case
moneyCase: Case
holodilnick: Case
pistolCase: Case
siccCase: Case
wallet: Case
thiccItemCase: Case
thiccWeaponCase: Case
weaponCase: Case
wzWallet: Case
}
export interface SecuredContainers
{
enabled: boolean
alpha: Case
beta: Case
epsilon: Case
gamma: Case
kappa: Case
}
export interface Case
{
width: number
height: number
cellsH: number
cellsV: number
}
export interface Flea
{
minUserLevel: number
blacklist: Blacklist
condition: Condition
currencies: Currencies
offerItemCount: OfferItemCount
reputation: Reputation
time: Time
}
export interface Blacklist
{
enableBsgList: boolean
enableQuestList: boolean
}
export interface Condition
{
conditionChance: number
min: number
max: number
}
export interface Currencies
{
roubles: number
dollars: number
euros: number
}
export interface OfferItemCount
{
min: number
max: number
}
export interface Reputation
{
gain: number
loss: number
}
export interface Time
{
baseSellTime: number
minSellTime: number
maxSellTime: number
}
export interface Globals
{
damagePerMeter: number
safeHeight: number
maxLoyaltyTraders: boolean
timeBeforeDeployLocal: number
matchEnd: MatchEnd
}
export interface MatchEnd
{
survivedExpRequirement: number
survivedSecondsRequirement: number
survivedExpReward: number
miaExpReward: number
runnerExpReward: number
leftMult: number
miaMult: number
survivedMult: number
runnerMult: number
killedMult: number
headShotMult: number
expOnDamageAllHealth: number
}
export interface Hideout
{
airFilterUnitFlowRate: number
constructionTime: number
generatorFuelFlowRate: number
gpuBoostRate: number
productionTime: number
scavCaseTime: number
}
export interface Insurance
{
insuranceMultiplier: InsuranceMultiplier
returnChancePercent: ReturnChancePercent
}
export interface InsuranceMultiplier
{
prapor: number
therapist: number
}
export interface ReturnChancePercent
{
prapor: number
therapist: number
}
export interface Items
{
standardStash: Stash
behindStash: Stash
escapeStash: Stash
eodStash: Stash
examinedByDefault: boolean
removeBackpackFilter: boolean
removeKeyUsageMax: boolean
dollarsMaxStack: number
eurosMaxStack: number
roublesMaxStack: number
weightModifier: number
}
export interface Stash
{
vertical: number
horizontal: number
}
export interface Locations
{
allExtractsAvailable: boolean
exfilTime: number
extractionsExtended: boolean
noExtractRestrictions: boolean
}
export interface Loot
{
containersInMarkedRoom: boolean
looseLootMultiplier: number
staticLootMultiplier: number
}
export interface Progression
{
enabled: boolean
}
export interface Quests
{
onlyFoundInRaid: boolean
}
export interface Raid
{
carExtractBaseStandingGain: number
chompiesBossFix: boolean
fixOpenZones: boolean
scavExtractGain: number
timeLimit: number
aiAmount: string
aiDifficulty: string
bossEnabled: boolean
scavWars: boolean
taggedAndCursed: boolean
enablePve: boolean
}
export interface PrewipeEvents
{
allBossesOnReserve: boolean
allTradersSellCheapItems: boolean
gluharOnLabs: boolean
killaOnFactory: boolean
makeObdolbosPowerful: boolean
}
export interface Weapons
{
jam: boolean
misfeed: boolean
misfire: boolean
overheat: boolean
slide: boolean
}

View File

@ -1,39 +0,0 @@
/*import { Config } from "../config/config";
import { Logger } from "./logger";
import { IAirdropConfig } from "@spt-aki/models/spt/config/IAirdropConfig";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
export class Airdrop
{
private modConfig: Config = require("../config/config.jsonc");
private logger: Logger;
private databaseServer: IDatabaseTables;
private airdropConfig: IAirdropConfig;
constructor(logger: Logger, databaseServer: DatabaseServer, airdropConfig: IAirdropConfig)
{
this.logger = logger;
this.tables = databaseServer.getTables();
this.airdropConfig = airdropConfig;
}
public updateAirdrops();
{
if (this.modConfig.airdropChancePercent != 25)
{
this.airdropConfig.airdropChancePercent["bigmap"] = this.modConfig.airdrop.airdropChancePercent.bigmap;
this.airdropConfig.airdropChancePercent["woods"] = this.modConfig.airdrop.airdropChancePercent.woods;
this.airdropConfig.airdropChancePercent["lighthouse"] = this.modConfig.airdrop.airdropChancePercent.lighthouse;
this.airdropConfig.airdropChancePercent["shoreline"] = this.modConfig.airdrop.airdropChancePercent.shoreline;
this.airdropConfig.airdropChancePercent["interchange"] = this.modConfig.airdrop.airdropChancePercent.interchange;
this.airdropConfig.airdropChancePercent["reserve"] = this.modConfig.airdrop.airdropChancePercent.reserve;
this.logger.info(`Customs Airdrop Chance is ${this.modConfig.airdrop.airdropChancePercent.bigmap}`);
this.logger.info(`Woods Airdrop Chance is ${this.modConfig.airdrop.airdropChancePercent.woods}`);
this.logger.info(`Lighthouse Airdrop Chance is ${this.modConfig.airdrop.airdropChancePercent.lighthouse}`);
this.logger.info(`Shoreline Airdrop Chance is ${this.modConfig.airdrop.airdropChancePercent.shoreline}`);
this.logger.info(`Interchange Airdrop Chance is ${this.modConfig.airdrop.airdropChancePercent.interchange}`);
this.logger.info(`Reserve Airdrop Chance is ${this.modConfig.airdrop.airdropChancePercent.reserve}`);
}
}
}
*/

View File

@ -1,68 +0,0 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { Logger } from "./logger";
import { Grenade, MarksmanCaliber, PistolCaliber, RifleCaliber, Shotguns } from "./ammotypes";
import { Config } from "../config/config";
export class Ammo
{
private modConfig: Config = require("../config/config.json")
private logger: Logger;
private tables: DatabaseServer;
constructor(logger: Logger, databaseServer: DatabaseServer)
{
this.logger = logger;
this.tables = databaseServer.getTables();
}
public updateAmmo(): void
{
const items = this.tables.templates.items;
const mod = this.modConfig.ammo;
if (mod.ammoStacks.grenadeCartridges != 1)
{
for (const value of Object.values(Grenade))
{
items[value]._props.StackMaxSize = mod.ammoStacks.grenadeCartridges
this.logger.info(`Grenade Cartridges Max Stacks set to ${mod.ammoStacks.grenadeCartridges}`);
}
}
if (mod.ammoStacks.marksmanCartridges != 40)
{
for (const value of Object.values(MarksmanCaliber))
{
items[value]._props.StackMaxSize = mod.ammoStacks.marksmanCartridges
this.logger.info(`Marksman Cartridges Max Stacks set to ${mod.ammoStacks.marksmanCartridges}`);
}
}
if (mod.ammoStacks.pistolCartridges != 50)
{
for (const value of Object.values(PistolCaliber))
{
items[value]._props.StackMaxSize = mod.ammoStacks.pistolCartridges
this.logger.info(`Pistol Cartridges Max Stacks set to ${mod.ammoStacks.pistolCartridges}`);
}
}
if (mod.ammoStacks.rifleCartridges != 60)
{
for (const value of Object.values(RifleCaliber))
{
items[value]._props.StackMaxSize = mod.ammoStacks.rifleCartridges
this.logger.info(`Rifle Cartridges Max Stacks set to ${mod.ammoStacks.rifleCartridges}`);
}
}
if (mod.ammoStacks.shotgunCartridges != 20)
{
for (const value of Object.values(Shotguns))
{
items[value]._props.StackMaxSize = mod.ammoStacks.shotgunCartridges
this.logger.info(`Shotgun Cartridges Max Stacks set to ${mod.ammoStacks.shotgunCartridges}`);
}
}
}
}

View File

@ -1,189 +0,0 @@
export enum Grenade
{
M386_HE_GRENADE = "5ede475b549eed7c6d5c18fb",
M576_MP_APERS_GRENADE = "5ede475339ee016e8c534742",
M433_HEDP_GRENADE = "5f0c892565703e5c461894e9",
M406_HE_GRENADE = "5ede4739e0350d05467f73e8",
M381_HE_GRENADE = "5ede474b0c226a66f5402622",
M441_HE_GRENADE = "5ede47405b097655935d7d16"
}
export enum MarksmanCaliber
{
M62_TRACER = "5a608bf24f39f98ffc77720e",
M80 = "58dd3ad986f77403051cba8f",
M61 = "5a6086ea4f39f99cd479502f",
BCP_FMJ = "5e023e53d4353e3302577c4c",
ULTRA_NOSLER = "5e023e88277cce2b522ff2b1",
TCW_SP = "5e023e6e34d52a55c3304f71",
M993 = "5efb0c1bd79ff02a1f5e68d9",
TAC_X = "5fc382b6d6fa9c00c571bbc3",
UCW = "5fc382c1016cce60e8341b20",
AP = "5fc382a9d724d907e2077dab",
FMJ = "5fc275cf85fd526b824a571a",
SNB_GZH = "560d61e84bdc2da74d8b4571",
LPS_GZH = "5887431f2459777e1612938f",
PS_GZH = "59e77a2386f7742ee578960a",
T46M_GZH = "5e023cf8186a883be655e54f",
BT_GZH = "5e023d34e8a400319a28ed44",
BS_GZH = "5e023d48186a883be655e551"
}
export enum PistolCaliber
{
AP_SX = "5ba26835d4351e0035628ff5",
ACTION_SX = "5ba26812d4351e003201fef1",
FMJ_SX = "5ba2678ad4351e44f824b344",
SUBSONIC_SX = "5ba26844d4351e00334c9475",
SS198LF = "5cc80f79e4a949033c7343b2",
R37_F = "5cc86832d7f00c000d3a6e6c",
SS190 = "5cc80f38e4a949001152b560",
R37_X = "5cc86840d7f00c002412c56c",
L191 = "5cc80f53e4a949000e1ea4f8",
SS197SR = "5cc80f8fe4a949033b0224a2",
SB193 = "5cc80f67e4a949035e43bbba",
FMJ43 = "5735ff5c245977640e39ba7e",
LRN = "573601b42459776410737435",
P_GL = "5736026a245977644601dc61",
PST_GZH762 = "573603562459776430731618",
LRNPC = "573602322459776445391df1",
AKBS = "5735fdcd2459776445391d61",
PT_GZH = "573603c924597764442bd9cb",
PM_SP8_GZH = "5737218f245977612125ba51",
P_GZH18 = "573719762459775a626ccbc1",
PSTM_GZH = "57371aab2459775a77142f22",
RG028_GZH = "573720e02459776143012541",
BZHT_GZH = "573718ba2459775a75491131",
PM_PSV = "5737207f24597760ff7b25f2",
SP7_GZH = "57372140245977611f70ee91",
PBM_GZH = "573719df2459775a626ccbc2",
PSO_GZH18 = "57371f8d24597761006c6a81",
PST_GZH18 = "5737201124597760fc4431f1",
PS_GS_PPO = "57371f2b24597761224311f1",
PRS_GS = "57371eb62459776125652ac1",
PPT_GZH = "57371e4124597760ff7b25f1",
PPE_GZH = "57371b192459775a9f58a5e0",
PSO_GZH = "58864a4f2459770fcc257101",
PST_GZH19 = "56d59d3ad2720bdb418b4577",
GREEN_TRACER = "5c3df7d588a4501f290594e5",
RIP19 = "5c0d56a986f774449d5de529",
AP_63 = "5c925fa22e221601da359b7b",
LUGER_CCI = "5a3c16fe86f77452b62de32a",
PBP_GZH = "5efb0da7a29a85116f6ea05f",
QUAKEMAKER = "5efb0e16aeb21837e749c7ff",
P_GZH = "5a26abfac4a28232980eabff",
PS_GZH = "5a269f97c4a282000b151807",
PE_GZH = "5a26ac06c4a282000c5a90a8",
BT_GZH = "5a26ac0ec4a28200741e1e18",
FMJ = "62330b3ed4dc74626d570b95",
HOLLOW_POINT = "62330bfadc5883093563729b",
SOFT_POINT = "62330c40bdd19b369e1e53d1",
JACKET_HP = "62330c18744e5e31df12f516",
MATCH_FMJ = "5e81f423763d9f754677bf2e",
HYDRA_SHOK = "5efb0fc6aeb21837e749c801",
LASERMATCH_FMJ = "5efb0d4f4bc50b58e81710f3",
AP = "5efb0cabfb3e451d70735af5",
RIP45 = "5ea2a8e200685063ec28c05a"
}
export enum RifleCaliber
{
PS_GS = "56dff3afd2720bba668b4567",
SP = "56dff421d2720b5f5a8b4567",
PPBS_GS_IGOLNIK = "5c0d5e4486f77478390952fe",
BS_7N40 = "61962b617c6c7b169525f168",
PRS_GS = "56dff338d2720bbd668b4569",
BT_GS = "56dff061d2720bb5668b4567",
US_GS = "56dff4ecd2720b5f5a8b4568",
BP_GS_545 = "56dfef82d2720bbd668b4567",
HP_545 = "56dff216d2720bbd668b4568",
BS_GS = "56dff026d2720bb8668b4567",
T_GS = "56dff4a2d2720bbd668b456a",
PP_GS = "56dff2ced2720bb4668b4567",
FMJ_545 = "56dff0bed2720bb0668b4567",
M856 = "59e68f6f86f7746c9f75e846",
MK255_MOD_0_RRLP = "59e6918f86f7746c9f75e849",
M995 = "59e690b686f7746c9f75e848",
M855A1 = "54527ac44bdc2d36668b4567",
M856A1 = "59e6906286f7746c9f75e847",
M855 = "54527a984bdc2d4e668b4567",
HP_556 = "59e6927d86f77411da468256",
FMJ_556 = "59e6920f86f77411d82aa167",
WARMAGEDDON = "5c0d5ae286f7741e46554302",
MK_318_MOD_0_SOST = "60194943740c5d77f6705eea",
SSA_AP = "601949593ae8f707c4608daa",
M62_TRACER = "619636be6db0f2477964e710",
BCP_FMJ = "5fbe3ffdf8b6a877a729ea82",
AP = "5fd20ff893a8961fc660a954",
V_MAX = "6196364158ef8c428c287d9f",
WHISPER = "6196365d58ef8c428c287da1",
PS_GZH = "5656d7c34bdc2d9d198b4587",
HP_762 = "59e4d3d286f774176a36250a",
US_GZH = "59e4d24686f7741776641ac7",
T45M1_GZH = "59e4cf5286f7741778269d8a",
BP_GZH = "59e0d99486f7744a32234762",
MAI_AP = "601aa3d2b2bcb34913271e6d",
SP5_GS = "57a0dfb82459774d3078b56c",
BP_GS = "5c0d688c86f77413ae3407b2",
SP6_GS = "57a0e5022459774d1673f889",
SPP_GS = "5c0d668f86f7747ccb7f13b2",
PAB9_GS = "61962d879bb3d20b0946d385",
FMJ_366 = "59e6542b86f77411dc52a77a",
GEKSA = "59e6658b86f77411d949b250",
EKO = "59e655cb86f77411dc52a77b",
APM = "5f0596629e22f464da6bbdd9",
PS12 = "5cadf6ddae9215051e1c23b2",
PS12B = "5cadf6eeae921500134b2799",
PS12A = "5cadf6e5ae921500113bb973"
}
export enum Shotguns
{
BUCKSHOT_7MM = "560d5e524bdc2d25448b4571",
MAGNUM_85MM = "5d6e6806a4b936088465b17e",
RIP = "5c0d591486f7744c505b416f",
BMG_SLUG_50CAL = "5d6e68c4a4b9361b93413f79",
BUCKSHOT_525MM = "5d6e6772a4b936088465b17c",
EXPRESS_65MM = "5d6e67fba4b9361bc73bc779",
FLECHETTE = "5d6e6911a4b9361bd5780d52",
FTX_CUSTOM_LITE_SLUG = "5d6e68e6a4b9361c140bcfe0",
AP20_ARMOR_PIERCING_SLUG = "5d6e68a8a4b9360b6c0d54e2",
DUAL_SABOT_SLUG = "5d6e68dea4b9361bcc29e659",
POLEVA_6U_SLUG_12GA = "5d6e689ca4b9361bc8618956",
POLEVA_3_SLUG_12GA = "5d6e6891a4b9361bd473feea",
GRIZZLY_40_SLUG = "5d6e6869a4b9361c140bcfde",
SUPERFORMANCE_HP_SLUG = "5d6e68d1a4b93622fe60e845",
COPPER_SABOT_PREMIER_HP_SLUG = "5d6e68b3a4b9361bca7e50b5",
LEAD_SLUG = "58820d1224597753c90aeb13",
BUCKSHOT_75MM = "5a38ebd9c4a282000d722a5b",
STAR_SLUG = "5d6e6a05a4b93618084f58d0",
BUCKSHOT_73MM = "5d6e69c7a4b9360b6c0d54e4",
DEVASTATOR_SLUG = "5d6e6a5fa4b93614ec501745",
BUCKSHOT_56MM = "5d6e695fa4b936359b35d852",
POLEVA_6U_SLUG_20GA = "5d6e6a42a4b9364f07165f52",
POLEVA_3_SLUG_20GA = "5d6e6a53a4b9361bd473feec",
BUCKSHOT_62MM = "5d6e69b9a4b9361bc8618958",
SHRAPNEL10_BUCKSHOT = "5e85a9a6eacf8c039e4e2ac1",
SHRAPNEL25_BUCKSHOT = "5f647f31b6238e5dd066e196",
ZVEZDA_FLASHBANG = "5e85a9f4add9fe03027d9bf1",
BARRIKADA_SLUG = "5e85aa1a988a8701445df1f5"
}
export enum Ammo30x29
{
VOG_30 = "5d70e500a4b9364de70d38ce"
}
export enum Ammo127x108
{
B32 = "5cde8864d7f00c0010373be1",
BZT_44M = "5d2f2ab648f03550091993ca"
}
export enum Ammo26x75
{
GREEN_FLARE = "62389aaba63f32501b1b444f",
RED_FLARE = "62389ba9a63f32501b1b4451",
WHITE_FLARE = "62389bc9423ed1685422dc57",
YELLOW_FLARE = "62389be94d5d474bf712e709"
}

View File

@ -1,32 +0,0 @@
export enum CommonContainers
{
AMMO_CASE = "5aafbde786f774389d0cbc0f",
DOCUMENTS_CASE = "590c60fc86f77412b13fddcf",
DOGTAG_CASE = "5c093e3486f77430cb02e593",
GRENADE_CASE = "5e2af55f86f7746d4159f07c",
INJECTOR_CASE = "619cbf7d23893217ec30b689",
ITEM_CASE = "59fb042886f7746c5005a7b2",
KEY_TOOL = "59fafd4b86f7745ca07e1232",
KEYCARD_HOLDER = "619cbf9e0a7c3a1a2731940a",
SCAV_JUNKBOX = "5b7c710788a4506dec015957",
MAGAZINE_CASE = "5c127c4486f7745625356c13",
MEDICINE_CASE = "5aafbcd986f7745e590fff23",
MONEY_CASE = "59fb016586f7746d0d4b423a",
HOLODILNICK_THERMAL_BAG = "5c093db286f7740a1b2617e3",
PISTOL_CASE = "567143bf4bdc2d1a0f8b4567",
SICC_ORGANIZATIONAL_POUCH = "5d235bb686f77443f4331278",
SIMPLE_WALLET = "5783c43d2459774bbe137486",
THICC_ITEM_CASE = "5c0a840b86f7742ffa4f2482",
THICC_WEAPON_CASE = "5b6d9ce188a4501afc1b2b25",
WEAPON_CASE = "59fb023c86f7746d0d4b423c",
WZ_WALLET = "60b0f6c058e0b0481a09ad11"
}
export enum SecuredContainers
{
ALPHA = "544a11ac4bdc2d470e8b456a",
BETA = "5857a8b324597729ab0a0e7d",
EPSILON = "59db794186f77448bc595262",
GAMMA = "5857a8bc2459772bad15db29",
KAPPA = "5c093ca986f7740a1867ab12"
}

View File

@ -1,82 +0,0 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { IRagfairConfig } from "@spt-aki/models/spt/config/IRagfairConfig";
import { Logger } from "./logger";
import { Config } from "../config/config";
export class Flea
{
private modConfig: Config = require("../config/config.json");
private logger: Logger;
private ragfairConfig: IRagfairConfig;
private tables: DatabaseServer;
constructor (logger: Logger, ragfairConfig: IRagfairConfig, databaseServer: DatabaseServer)
{
this.logger = logger;
this.ragfairConfig = ragfairConfig;
this.tables = databaseServer.getTables();
}
public updateFlea(): void
{
const mod = this.modConfig.flea;
const global = this.tables.globals.config.RagFair;
const ragfair = this.ragfairConfig.dynamic;
if (mod.minUserLevel != 15)
{
global.minUserLevel = mod.minUserLevel;
this.logger.info(`Fleamarket unlocked at level ${mod.minUserLevel}`)
}
if (!mod.blacklist.enableBsgList || !mod.blacklist.enableQuestList)
{
ragfair.blacklist.enableBsgList = mod.blacklist.enableBsgList;
ragfair.blacklist.enableQuestList = mod.blacklist.enableQuestList;
this.logger.info("Fleamarket Blacklists patched");
}
if (mod.condition.conditionChance != 0.2 || mod.condition.min != 0.6 || mod.condition.max != 1)
{
ragfair.condition.conditionChance = mod.conditionChance;
ragfair.condition.min = mod.min;
ragfair.condition.max = mod.max;
this.logger.info("Fleamarket Condition patched");
}
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;
ragfair.currencies["569668774bdc2da2298b4568"] = mod.currencies.euros;
this.logger.info("Fleamarket Currencies patched")
}
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 != 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 != 15 || mod.time.minSellTime != 5 || mod.time.maxSellTime != 15)
{
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,81 +0,0 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { Logger } from "./logger";
import { Config } from "../config/config";
export class Hideout
{
private modConfig: Config = require("../config/config.json")
private logger: Logger;
private tables: DatabaseServer;
constructor(logger: Logger, databaseServer: DatabaseServer)
{
this.logger = logger;
this.tables = databaseServer.getTables();
}
public updateHideout(): void
{
const mod = this.modConfig.hideout;
if (mod.constructionTime != 1)
{
this.updateConstructionTime();
this.logger.info(`Construction Time Patched to ${mod.constructionTime} `);
}
if (mod.productionTime != 1)
{
this.updateProductionTime();
this.logger.info(`Production Time Patched to ${mod.productionTime} `);
}
if (mod.scavCaseTime != 1)
{
this.updateScavCase();
this.logger.info(`Scav Case TIme Patched to ${mod.scavCaseTime}`);
}
if (mod.airFilterUnitFlowRate != 0.0047222222222222
||mod.generatorFuelFlowRate != 0.0013194444444444
||mod.gpuBoostRate != 0.041225)
{
const settings = this.tables.hideout.settings;
settings.airFilterUnitFlowRate = mod.airFilterUnitFlowRate;
settings.generatorFuelFlowRate = mod.generatorFuelFlowRate;
settings.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()
{
for (const area of this.tables.hideout.areas)
{
for (const stage in area.stages)
{
const stageData = area.stages[stage];
stageData.constructionTime *= this.modConfig.hideout.constructionTime;
}
}
}
private updateProductionTime()
{
for (const production of this.tables.hideout.production)
{
production.productionTime *= this.modConfig.hideout.productionTime;
}
}
private updateScavCase()
{
for (const scavCase of this.tables.hideout.scavcase)
{
scavCase.ProductionTime *= this.modConfig.hideout.scavCaseTime;
}
}
}

View File

@ -1,37 +0,0 @@
import { IInsuranceConfig } from "@spt-aki/models/spt/config/IInsuranceConfig";
import { Config } from "../config/config";
import { Logger } from "./logger";
export class Insurance
{
private modConfig: Config = require("../config/config.json");
private logger: Logger;
private insuranceConfig: IInsuranceConfig;
constructor(logger:Logger, insuranceConfig: IInsuranceConfig)
{
this.logger = logger;
this.insuranceConfig = insuranceConfig;
}
public updateInsurance(): void
{
const mod = this.modConfig.insurance;
if (mod.insuranceMultiplier.prapor != 0.16 || mod.insuranceMultiplier.therapist != 0.25)
{
this.insuranceConfig.insuranceMultiplier["54cb50c76803fa8b248b4571"] = mod.insuranceMultiplier.prapor;
this.insuranceConfig.insuranceMultiplier["54cb57776803fa99248b456e"] = mod.insuranceMultiplier.therapist;
this.logger.info(`Prapor Insurance Price Multiplier Set to ${mod.insuranceMultiplier.prapor}`);
} this.logger.info(`Therapist Insurance Price Multiplier Set to ${mod.insuranceMultiplier.therapist}`);
if (mod.returnChancePercent.prapor != 80 || mod.returnChancePercent.therapist != 85)
{
this.insuranceConfig.returnChancePercent["54cb50c76803fa8b248b4571"] = mod.returnChancePercent.prapor;
this.insuranceConfig.returnChancePercent["54cb57776803fa99248b456e"] = mod.returnChancePercent.therapist;
this.logger.info(`Prapor Insurance Return Chance Set to ${mod.returnChancePercent.prapor}`);
this.logger.info(`Therapist Insurance Return Chance set to ${mod.returnChancePercent.therapist}`);
}
}
}

View File

@ -1,157 +0,0 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { Config } from "../config/config";
import { Logger } from "./logger";
export class Items
{
private modConfig: Config = require("../config/config.json")
private logger: Logger;
private tables: DatabaseServer;
private mod: any;
private items: any;
constructor(logger: Logger, databaseServer: DatabaseServer)
{
this.logger = logger;
this.tables = databaseServer.getTables();
}
public updateItems(): void
{
this.items = this.tables.templates.items;
this.mod = this.modConfig.items;
if (this.mod.removeKeyUsageMax)
{
this.removeKeyUsageMax();
this.logger.info("Key Usage Limit Removed");
}
// Weight Modifier. Multiplier of Weight *= modConfig.weightModifier
if (this.mod.weightModifier != 1)
{
this.updateWeight();
this.logger.info(`Weight Multipler patched to ${this.mod.weightModifier}`);
}
// Removes the ExcludedFilter on Backpacks
// which in turn enables common containers to spawn in the loot pool of AI.
if (this.mod.removeBackpackFilter)
{
this.updateBackpacks();
this.logger.info(`Backpack Restrictions Removed: ${this.mod.removeBackpackFilter}`)
}
// Standard Stash Size Changes
if (this.mod.standardStash.vertical != 28 || this.mod.standardStash.horizontal != 10)
{
this.items["566abbc34bdc2d92178b4576"]._props.Grids[0]._props.cellsV = this.mod.standardStash.vertical;
this.items["566abbc34bdc2d92178b4576"]._props.Grids[0]._props.cellsH = this.mod.standardStash.horizontal;
this.logger.info(`Standard Stash Vertical changed to ${this.mod.standardStash.vertical}`);
this.logger.info(`Standard Stash Horizontal changed to ${this.mod.standardStash.horizontal}`);
}
// Left Behind Stash Size Changes
if (this.mod.behindStash.vertical != 38 || this.mod.behindStash.horizontal != 10)
{
this.items["5811ce572459770cba1a34ea"]._props.Grids[0]._props.cellsV = this.mod.behindStash.vertical;
this.items["5811ce572459770cba1a34ea"]._props.Grids[0]._props.cellsH = this.mod.behindStash.horizontal;
this.logger.info(`Left Behind Stash Vertical changed to ${this.mod.behindStash.vertical}`);
this.logger.info(`Left Behind Stash Horizontal changed to ${this.mod.behindStash.horizontal}`);
}
// Prepare for Escape Stash Size Changes
if (this.mod.escapeStash.vertical != 48 || this.mod.escapeStash.horizontal != 10)
{
this.items["5811ce662459770f6f490f32"]._props.Grids[0]._props.cellsV = this.mod.escapeStash.vertical;
this.items["5811ce662459770f6f490f32"]._props.Grids[0]._props.cellsH = this.mod.escapeStash.horizontal;
this.logger.info(`Prepare for Escape Stash Vertical changed to ${this.mod.escapeStash.vertical}`);
this.logger.info(`Prepare for Escape Stash Horizontal changed to ${this.mod.escapeStash.horizontal}`);
}
// Edge of Darkness Stash Size Changes
if (this.mod.eodStash.vertical != 68 || this.mod.eodStash.horizontal != 10)
{
this.items["5811ce772459770e9e5f9532"]._props.Grids[0]._props.cellsV = this.mod.eodStash.vertical;
this.items["5811ce772459770e9e5f9532"]._props.Grids[0]._props.cellsH = this.mod.eodStash.horizontal;
this.logger.info(`Edge of Darkness Stash Vertical changed to ${this.mod.eodStash.vertical}`);
this.logger.info(`Edge of Darkness Stash Horizontal changed to ${this.mod.eodStash.horizontal}`);
}
// Toggles true/false the Examined By Default config on all items in database/templates/items.json
if (this.mod.examinedByDefault)
{
this.examinedByDefault();
this.logger.info(`Examined By Default is ${this.mod.examinedByDefault}`);
}
// Roubles Max Stack
if (this.mod.roublesMaxStack != 500000)
{
this.items["5449016a4bdc2d6f028b456f"]._props.StackMaxSize = this.modConfig.items.roublesMaxStack;
this.logger.info(`Rouble Max Stack set to ${this.mod.roublesMaxStack}`, true);
}
// Dollars Max Stack
if (this.mod.dollarsMaxStack != 50000)
{
this.items["5696686a4bdc2da3298b456a"]._props.StackMaxSize = this.modConfig.items.dollarsMaxStack;
this.logger.info(`Dollar Max Stack set to ${this.mod.dollarsMaxStack}`, true);
}
// Euros Max Stack
if (this.mod.eurosMaxStack != 50000)
{
this.items["569668774bdc2da2298b4568"]._props.StackMaxSize = this.modConfig.items.eurosMaxStack;
this.logger.info(`Euro Max Stack set to ${this.mod.eurosMaxStack}`, true);
}
}
// Functions Functions.
// Updates the weight modifier (as a multiplier) for all items in database/templates/items.json
private updateWeight(): void
{
for (const item in this.items)
{
if (this.items[item]._props?.Weight)
{
this.items[item]._props.Weight *= this.mod.weightModifier;
}
}
}
// Updates backpacks and removes any values in the ExcludedFilter under props > Grids > props > filters > ExcludedFilter in database/templates/items.json
private updateBackpacks(): void
{
for (const item in this.items)
{
if (this.items[item]._parent === "5448e53e4bdc2d60728b4567")
{
this.items[item]._props.Grids[0]._props.filters[0].ExcludedFilter = [];
}
}
}
// Updates the Examined By Default modifier for all items in database/templates/items.json to either True or False depending on the config value.
private examinedByDefault(): void
{
for (const item in this.items)
{
this.items[item]._props.ExaminedByDefault = this.mod.examinedByDefault;
}
}
private removeKeyUsageMax(): void
{
for (const item in this.items)
{
if (this.items[item]._parent === "5c99f98d86f7745c314214b3")
{
this.items[item]._props.MaximumNumberOfUsage = 0;
}
}
}
}

View File

@ -1,130 +0,0 @@
import { ILocationConfig } from "@spt-aki/models/spt/config/ILocationConfig";
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { Config } from "../config/config";
import { Logger } from "./logger";
export class Loot
{
private modConfig: Config = require("../config/config.json");
private logger: Logger;
private tables: DatabaseServer;
private locationConfig: ILocationConfig;
constructor (logger: Logger, databaseServer: DatabaseServer, locationConfig: ILocationConfig)
{
this.logger = logger;
this.locationConfig = locationConfig;
this.tables = databaseServer.getTables();
}
public updateLoot(): void
{
const mod = this.modConfig.loot;
if (mod.looseLootMultiplier > 1)
{
for (const map in this.locationConfig.looseLootMultiplier)
{
this.locationConfig.looseLootMultiplier[map] = mod.looseLootMultiplier;
}
this.logger.info(`Loose Loot Multiplier: ${mod.looseLootMultiplier}`);
}
if (mod.staticLootMultiplier > 1)
{
for (const map in this.locationConfig.staticLootMultiplier)
{
this.locationConfig.staticLootMultiplier[map] = mod.staticLootMultiplier;
}
this.logger.info(`Static Loot Multiplier: ${mod.staticLootMultiplier}`);
}
if (mod.containersInMarkedRoom)
{
this.containersInMarkedRoom();
this.logger.info(`Containers In Marked Room: ${mod.containersInMarkedRoom}`);
}
}
/**
* Changes the loot database/tables to include containers in marked rooms.
*
* @variable containersInMarkedRoom Enables common containers (items case, weapon case, etc.) in Marked Rooms.
*/
private containersInMarkedRoom(): void
{
// Customs Marked Room Loot.
let spawnPoints = this.tables.locations.bigmap.looseLoot.spawnpoints;
const cstmsmarked1 = spawnPoints.find(x=>x.template.Id==="Loot 135 (10)1203364");
const cstmsmarked2 = spawnPoints.find(x=>x.template.Id==="Loot 135 (9)1198014");
const cstmsmarked3 = spawnPoints.find(x=>x.template.Id==="Loot 135 (8)1207194");
cstmsmarked1.itemDistribution.push(...this.containers());
cstmsmarked2.itemDistribution.push(...this.containers());
cstmsmarked3.itemDistribution.push(...this.containers());
// Reserve Marked Room Loot.
spawnPoints = this.tables.locations.rezervbase.looseLoot.spawnpoints;
const rsrvRBBK1 = spawnPoints.find(x=>x.template.Id==="Loot 135 (10)49516");
const rsrvRBBK2 = spawnPoints.find(x=>x.template.Id==="Loot 135 (8)69186");
const rsrvRBBK3 = spawnPoints.find(x=>x.template.Id==="Loot 135 (9)39600");
const rsrvRBPKPM1 = spawnPoints.find(x=>x.template.Id==="cult_Loot 135 (11)56822");
const rsrvRBPKPM2 = spawnPoints.find(x=>x.template.Id==="cult_Loot 135 (12)56254");
const rsrvRBVO1 = spawnPoints.find(x=>x.template.Id==="Loot 135 (10)60780");
const rsrvRBVO2 = spawnPoints.find(x=>x.template.Id==="Loot 135 (11)55578");
const rsrvRBVO3 = spawnPoints.find(x=>x.template.Id==="Loot 135 (12)55522");
rsrvRBBK1.itemDistribution.push(...this.containers());
rsrvRBBK2.itemDistribution.push(...this.containers());
rsrvRBBK3.itemDistribution.push(...this.containers());
rsrvRBPKPM1.itemDistribution.push(...this.containers());
rsrvRBPKPM2.itemDistribution.push(...this.containers());
rsrvRBVO1.itemDistribution.push(...this.containers());
rsrvRBVO2.itemDistribution.push(...this.containers());
rsrvRBVO3.itemDistribution.push(...this.containers());
// Lighthouse Marked Room Loot ... Lighthouse Marked Has No Cases; Only Jewelry/Electronics.
/*const lhouseBdrm = spawnPoints.find(x=>x.template.Id==="");
lhouseBdrm.itemDistribution.push(...this.containers());*/
}
private containers(): any[]
{
/* Container "id"s
* S I C C pouch: 5d235bb686f77443f4331278
* Magazine Case: 5c127c4486f7745625356c13
* Weapon Case: 59fb023c86f7746d0d4b423c
* T H I C C Weapon Case: 5b6d9ce188a4501afc1b2b25
* Item Case: 59fb042886f7746c5005a7b2
* T H I C C Item Case: 5c0a840b86f7742ffa4f2482
* Money case: 59fb016586f7746d0d4b423a
* Mr Holodilnick Thermal Bag: 5c093db286f7740a1b2617e3
* Medicine case: 5aafbcd986f7745e590fff23
* Lucky scav junkbox: 5b7c710788a4506dec015957
* Grenade case: 5e2af55f86f7746d4159f07c
* Secure container: 5448bf274bdc2dfc2f8b456a
*/
const lootItems = [];
lootItems.push({"tpl": "5d235bb686f77443f4331278", "relativeProbability": 12});
lootItems.push({"tpl": "5c127c4486f7745625356c13", "relativeProbability": 25});
lootItems.push({"tpl": "59fb023c86f7746d0d4b423c", "relativeProbability": 13});
lootItems.push({"tpl": "5b6d9ce188a4501afc1b2b25", "relativeProbability": 10});
lootItems.push({"tpl": "59fb042886f7746c5005a7b2", "relativeProbability": 13});
lootItems.push({"tpl": "5c0a840b86f7742ffa4f2482", "relativeProbability": 10});
lootItems.push({"tpl": "59fb016586f7746d0d4b423a", "relativeProbability": 25});
lootItems.push({"tpl": "5c093db286f7740a1b2617e3", "relativeProbability": 30});
lootItems.push({"tpl": "5aafbcd986f7745e590fff23", "relativeProbability": 30});
lootItems.push({"tpl": "5b7c710788a4506dec015957", "relativeProbability": 15});
lootItems.push({"tpl": "5e2af55f86f7746d4159f07c", "relativeProbability": 23});
lootItems.push({"tpl": "5448bf274bdc2dfc2f8b456a", "relativeProbability": 9});
return lootItems;
}
}

View File

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

View File

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

View File

@ -1,67 +0,0 @@
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
import { Config } from "../config/config";
import { Logger } from "./logger";
export class Weapons
{
private modConfig: Config = require("../config/config.json")
private logger: Logger;
private tables: DatabaseServer;
private mod: any;
private weapons: any;
constructor(logger:Logger, databaseServer: DatabaseServer)
{
this.logger = logger;
this.tables = databaseServer.getTables();
}
public updateWeapons(): void
{
this.mod = this.modConfig.weapons;
if (this.mod.overheat || this.mod.jam || this.mod.slide || this.mod.misfeed || this.mod.misfire)
{
this.weaponMalfunctions();
this.logger.info("Weapon Malfunctions Patched", true);
}
}
private weaponMalfunctions(): void
{
const items = this.tables.templates.items;
for (const id in items)
{
const base = items[id];
//Weapons malfunctions
if (this.mod.jam && base._props.AllowJam)
{
base._props.AllowJam = false;
}
if (this.mod.misfire && base._props.AllowMisfire)
{
base._props.AllowMisfire = false;
}
if (this.mod.feed && base._props.AllowFeed)
{
base._props.AllowFeed = false;
}
if (this.mod.overheat && base._props.AllowOverheat)
{
base._props.AllowOverheat = false;
}
if (this.mod.slide && base._props.AllowSlide)
{
base._props.AllowSlide = false;
}
}
}
}

View File

@ -1,9 +0,0 @@
import { OnLoad } from "../di/OnLoad";
import { IHttpServer } from "../models/spt/server/IHttpServer";
export declare class HttpCallbacks extends OnLoad {
protected httpServer: IHttpServer;
constructor(httpServer: IHttpServer);
onLoad(): void;
getRoute(): string;
getImage(): string;
}

View File

@ -1,23 +0,0 @@
import { InraidController } from "../controllers/InraidController";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData";
import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData";
import { IAirdropConfig } from "../models/spt/config/IAirdropConfig";
import { IInRaidConfig } from "../models/spt/config/IInRaidConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class InraidCallbacks {
protected inraidController: InraidController;
protected httpResponse: HttpResponseUtil;
protected configServer: ConfigServer;
protected airdropConfig: IAirdropConfig;
protected inraidConfig: IInRaidConfig;
constructor(inraidController: InraidController, httpResponse: HttpResponseUtil, configServer: ConfigServer);
registerPlayer(url: string, info: IRegisterPlayerRequestData, sessionID: string): INullResponseData;
saveProgress(url: string, info: ISaveProgressRequestData, sessionID: string): INullResponseData;
getRaidEndState(): string;
getRaidMenuSettings(url: string, info: IEmptyRequestData, sessionID: string): string;
getWeaponDurability(url: string, info: any, sessionID: string): string;
getAirdropConfig(url: string, info: any, sessionID: string): string;
}

View File

@ -1,9 +0,0 @@
import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate";
import { SaveServer } from "../servers/SaveServer";
export declare class SaveCallbacks extends OnLoadOnUpdate {
protected saveServer: SaveServer;
constructor(saveServer: SaveServer);
onLoad(): void;
getRoute(): string;
onUpdate(secondsSinceLastRun: number): boolean;
}

View File

@ -1,4 +0,0 @@
export declare enum ContextVariableType {
SESSION_ID = 0,
MATCH_INFO = 1
}

View File

@ -1,35 +0,0 @@
import { BotGenerator } from "../generators/BotGenerator";
import { BotHelper } from "../helpers/BotHelper";
import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData";
import { IBotBase } from "../models/eft/common/tables/IBotBase";
import { IBotCore } from "../models/eft/common/tables/IBotCore";
import { Difficulty } from "../models/eft/common/tables/IBotType";
import { IBotConfig } from "../models/spt/config/IBotConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class BotController {
protected databaseServer: DatabaseServer;
protected botGenerator: BotGenerator;
protected botHelper: BotHelper;
protected configServer: ConfigServer;
protected botConfig: IBotConfig;
constructor(databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, configServer: ConfigServer);
/**
* Return the number of bot loadout varieties to be generated
* @param type bot Type we want the loadout gen count for
* @returns
*/
getBotPresetGenerationLimit(type: string): number;
getBotCoreDifficulty(): IBotCore;
/**
* Get bot difficulty settings
* adjust PMC settings to ensure they engage the correct bot types
* @param type what bot the server is requesting settings for
* @param difficulty difficulty level server requested settings for
* @returns Difficulty object
*/
getBotDifficulty(type: string, difficulty: string): Difficulty;
protected getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string): Difficulty;
generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[];
getBotCap(): number;
}

View File

@ -1,25 +0,0 @@
import { DialogueHelper } from "../helpers/DialogueHelper";
import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse";
import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { DialogueInfo, Message } from "../models/eft/profile/IAkiProfile";
import { SaveServer } from "../servers/SaveServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class DialogueController {
protected httpResponse: HttpResponseUtil;
protected saveServer: SaveServer;
protected dialogueHelper: DialogueHelper;
constructor(httpResponse: HttpResponseUtil, saveServer: SaveServer, dialogueHelper: DialogueHelper);
getFriendList(sessionID: string): IGetFriendListDataResponse;
generateDialogueList(sessionID: string): IGetBodyResponseData<DialogueInfo[]>;
getDialogueInfo(dialogueID: string, sessionID: string): DialogueInfo;
generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData;
removeDialogue(dialogueID: string, sessionID: string): void;
setDialoguePin(dialogueID: string, shouldPin: boolean, sessionID: string): void;
setRead(dialogueIDs: string[], sessionID: string): void;
getAllAttachments(dialogueID: string, sessionID: string): IGetAllAttachmentsResponse;
protected messagesHaveUncollectedRewards(messages: Message[]): boolean;
protected removeExpiredItems(sessionID: string): void;
update(): void;
}

View File

@ -1,28 +0,0 @@
import { HttpServerHelper } from "../helpers/HttpServerHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IHttpConfig } from "../models/spt/config/IHttpConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { LocaleService } from "../services/LocaleService";
import { ProfileFixerService } from "../services/ProfileFixerService";
import { Watermark } from "../utils/Watermark";
export declare class GameController {
protected logger: ILogger;
protected watermark: Watermark;
protected httpServerHelper: HttpServerHelper;
protected localeService: LocaleService;
protected profileHelper: ProfileHelper;
protected profileFixerService: ProfileFixerService;
protected configServer: ConfigServer;
protected httpConfig: IHttpConfig;
protected coreConfig: ICoreConfig;
constructor(logger: ILogger, watermark: Watermark, httpServerHelper: HttpServerHelper, localeService: LocaleService, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, configServer: ConfigServer);
gameStart(_url: string, _info: IEmptyRequestData, sessionID: string): void;
protected logProfileDetails(fullProfile: IAkiProfile): void;
getGameConfig(sessionID: string): IGameConfigResponse;
getServer(): any[];
}

View File

@ -1,102 +0,0 @@
import { ScavCaseRewardGenerator } from "../generators/ScavCaseRewardGenerator";
import { HideoutHelper } from "../helpers/HideoutHelper";
import { InventoryHelper } from "../helpers/InventoryHelper";
import { PaymentHelper } from "../helpers/PaymentHelper";
import { PresetHelper } from "../helpers/PresetHelper";
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 { 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";
import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData";
import { IHideoutTakeItemOutRequestData } from "../models/eft/hideout/IHideoutTakeItemOutRequestData";
import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideoutTakeProductionRequestData";
import { IHideoutToggleAreaRequestData } from "../models/eft/hideout/IHideoutToggleAreaRequestData";
import { IHideoutUpgradeRequestData } from "../models/eft/hideout/IHideoutUpgradeRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IHideoutConfig } from "../models/spt/config/IHideoutConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
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";
export declare class HideoutController {
protected logger: ILogger;
protected hashUtil: HashUtil;
protected timeUtil: TimeUtil;
protected databaseServer: DatabaseServer;
protected randomUtil: RandomUtil;
protected inventoryHelper: InventoryHelper;
protected saveServer: SaveServer;
protected playerService: PlayerService;
protected presetHelper: PresetHelper;
protected paymentHelper: PaymentHelper;
protected itemEventRouter: ItemEventRouter;
protected httpResponse: HttpResponseUtil;
protected profileHelper: ProfileHelper;
protected hideoutHelper: HideoutHelper;
protected scavCaseRewardGenerator: ScavCaseRewardGenerator;
protected configServer: ConfigServer;
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, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, configServer: ConfigServer);
upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse;
upgradeComplete(pmcData: IPmcData, body: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse;
/**
* 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
* @param sessionID Session id
* @returns IItemEventRouterResponse object
*/
putItemsInAreaSlots(pmcData: IPmcData, addItemToHideoutRequest: IHideoutPutItemInRequestData, 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
* @param pmcData Profile to update
* @param removeResourceRequest client request
* @param output response to send to client
* @param hideoutArea Area fuel is being removed from
* @returns IItemEventRouterResponse response
*/
protected removeResourceFromArea(sessionID: string, pmcData: IPmcData, removeResourceRequest: IHideoutTakeItemOutRequestData, output: IItemEventRouterResponse, hideoutArea: HideoutArea): 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
* @param pmcData player profile
* @param body client request object
* @param sessionID session id
* @returns item event router response
*/
scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Add generated scav case rewards to player profile
* @param pmcData player profile to add rewards to
* @param rewards reward items to add to profile
*/
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
* @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

@ -1,44 +0,0 @@
import { PlayerScavGenerator } from "../generators/PlayerScavGenerator";
import { HealthHelper } from "../helpers/HealthHelper";
import { InRaidHelper } from "../helpers/InRaidHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestHelper } from "../helpers/QuestHelper";
import { TraderHelper } from "../helpers/TraderHelper";
import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData";
import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData";
import { IInRaidConfig } from "../models/spt/config/IInRaidConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { InsuranceService } from "../services/InsuranceService";
import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class InraidController {
protected saveServer: SaveServer;
protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil;
protected databaseServer: DatabaseServer;
protected questHelper: QuestHelper;
protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper;
protected playerScavGenerator: PlayerScavGenerator;
protected healthHelper: HealthHelper;
protected traderHelper: TraderHelper;
protected insuranceService: InsuranceService;
protected inRaidHelper: InRaidHelper;
protected configServer: ConfigServer;
protected inraidConfig: IInRaidConfig;
constructor(saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, configServer: ConfigServer);
addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void;
saveProgress(offraidData: ISaveProgressRequestData, sessionID: string): void;
/**
* Mark inventory items as FiR if player survived raid, otherwise remove FiR from them
* @param offraidData Save Progress Request
* @param pmcData player profile
* @param isPlayerScav Was the player a pScav
*/
private markOrRemoveFoundInRaidItems;
private handlePostRaidPlayerScavProcess;
private handlePostRaidPlayerScavKarmaChanges;
}

View File

@ -1,18 +0,0 @@
import { LocationGenerator } from "../generators/LocationGenerator";
import { ILocationBase } from "../models/eft/common/ILocationBase";
import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class LocationController {
protected jsonUtil: JsonUtil;
protected logger: ILogger;
protected locationGenerator: LocationGenerator;
protected databaseServer: DatabaseServer;
protected timeUtil: TimeUtil;
constructor(jsonUtil: JsonUtil, logger: ILogger, locationGenerator: LocationGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil);
get(location: string): ILocationBase;
generate(name: string): ILocationBase;
generateAll(): ILocationsGenerateAllResponse;
}

View File

@ -1,76 +0,0 @@
import { DialogueHelper } from "../helpers/DialogueHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestConditionHelper } from "../helpers/QuestConditionHelper";
import { QuestHelper } from "../helpers/QuestHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IQuest, Reward } from "../models/eft/common/tables/IQuest";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData";
import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData";
import { IHandoverQuestRequestData } from "../models/eft/quests/IHandoverQuestRequestData";
import { IQuestConfig } from "../models/spt/config/IQuestConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { LocaleService } from "../services/LocaleService";
import { PlayerService } from "../services/PlayerService";
import { TimeUtil } from "../utils/TimeUtil";
export declare class QuestController {
protected logger: ILogger;
protected timeUtil: TimeUtil;
protected itemEventRouter: ItemEventRouter;
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected dialogueHelper: DialogueHelper;
protected profileHelper: ProfileHelper;
protected questHelper: QuestHelper;
protected questConditionHelper: QuestConditionHelper;
protected playerService: PlayerService;
protected localeService: LocaleService;
protected configServer: ConfigServer;
protected questConfig: IQuestConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, itemHelper: ItemHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, questHelper: QuestHelper, questConditionHelper: QuestConditionHelper, playerService: PlayerService, localeService: LocaleService, configServer: ConfigServer);
/**
* Get all quests visible to player
* Exclude quests with incomplete preconditions (level/loyalty)
* @param sessionID session id
* @returns array of IQuest
*/
getClientQuests(sessionID: string): IQuest[];
acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
acceptRepeatableQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Remove completed quest from profile
* Add newly unlocked quests to profile
* Also recalculate thier level due to exp rewards
* @param pmcData Player profile
* @param body completed quest request
* @param sessionID session id
* @returns ItemEvent response
*/
completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
/**
* 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
*/
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
* @returns array of quests
*/
protected getQuestsFailedByCompletingQuest(completedQuestId: string): IQuest[];
/**
* Fail the quests provided
* @param sessionID session id
* @param pmcData player profile
* @param questsToFail quests to fail
*/
protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[]): void;
handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -1,26 +0,0 @@
import { ProfileHelper } from "../helpers/ProfileHelper";
import { TraderAssortHelper } from "../helpers/TraderAssortHelper";
import { TraderHelper } from "../helpers/TraderHelper";
import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
import { TraderAssortService } from "../services/TraderAssortService";
import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class TraderController {
protected logger: ILogger;
protected databaseServer: DatabaseServer;
protected traderAssortHelper: TraderAssortHelper;
protected profileHelper: ProfileHelper;
protected traderHelper: TraderHelper;
protected timeUtil: TimeUtil;
protected traderAssortService: TraderAssortService;
protected jsonUtil: JsonUtil;
constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, jsonUtil: JsonUtil);
load(): void;
getTrader(traderID: string, sessionID: string): ITraderBase;
getAllTraders(sessionID: string): ITraderBase[];
updateTraders(): boolean;
getAssort(sessionId: string, traderId: string): ITraderAssort;
getPurchasesData(traderID: string, sessionID: string): Record<string, IBarterScheme[][]>;
}

View File

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

View File

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

View File

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

View File

@ -1,5 +0,0 @@
import { IHttpServer } from "../models/spt/server/IHttpServer";
export declare class Serializer {
serialize(sessionID: string, req: any, resp: any, body: any, httpServer: IHttpServer): void;
canHandle(something: string): boolean;
}

View File

@ -1,96 +0,0 @@
import { BotHelper } from "../helpers/BotHelper";
import { GameEventHelper } from "../helpers/GameEventHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData";
import { Health as PmcHealth, IBotBase, Skills } from "../models/eft/common/tables/IBotBase";
import { Health, IBotType, Inventory } from "../models/eft/common/tables/IBotType";
import { IBotConfig } from "../models/spt/config/IBotConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { BotInventoryGenerator } from "./BotInventoryGenerator";
declare namespace BotGenerator {
interface IRandomisedBotLevelResult {
level: number;
exp: number;
}
}
export declare class BotGenerator {
protected logger: ILogger;
protected hashUtil: HashUtil;
protected randomUtil: RandomUtil;
protected jsonUtil: JsonUtil;
protected profileHelper: ProfileHelper;
protected databaseServer: DatabaseServer;
protected botInventoryGenerator: BotInventoryGenerator;
protected botEquipmentFilterService: BotEquipmentFilterService;
protected botHelper: BotHelper;
protected gameEventHelper: GameEventHelper;
protected configServer: ConfigServer;
protected botConfig: IBotConfig;
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botEquipmentFilterService: BotEquipmentFilterService, botHelper: BotHelper, gameEventHelper: GameEventHelper, configServer: ConfigServer);
/**
* Generate a player scav bot object
* @param role e.g. assault / pmcbot
* @param difficulty easy/normal/hard/impossible
* @param botTemplate base bot template to use (e.g. assault/pmcbot)
* @returns
*/
generatePlayerScav(role: string, difficulty: string, botTemplate: IBotType): IBotBase;
generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[];
/**
* Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check
* @param botRole the bot role to check if should be a pmc
* @returns true if should be a pmc
*/
protected shouldBotBePmc(botRole: string): boolean;
/**
* Get a randomised PMC side based on bot config value 'isUsec'
* @returns pmc side as string
*/
protected getRandomisedPmcSide(): string;
/**
* Get a clone of the database\bots\base.json file
* @returns IBotBase object
*/
protected getCloneOfBotBase(): IBotBase;
protected generateBot(bot: IBotBase, role: string, node: IBotType, isPmc: boolean, isPlayerScav?: boolean): IBotBase;
/**
* Log the number of PMCs generated to the debug console
*/
protected logPmcGeneratedCount(output: IBotBase[]): void;
protected generateRandomLevel(min: number, max: number): BotGenerator.IRandomisedBotLevelResult;
/**
* Converts health object to the required format
* @param healthObj health object from bot json
* @param playerScav Is a pscav bot being generated
* @returns PmcHealth object
*/
protected generateHealth(healthObj: Health, playerScav?: boolean): PmcHealth;
protected generateSkills(skillsObj: Skills): Skills;
/**
* Convert from pmc side (usec/bear) to the side as defined in the bot config (usecType/bearType)
* @param pmcSide eft side (usec/bear)
* @returns pmc side as defined in config
*/
protected getPmcRole(pmcSide: string): string;
/**
* Iterate through bots inventory and loot to find and remove christmas items (as defined in GameEventHelper)
* @param nodeInventory Bots inventory to iterate over
*/
protected removeChristmasItemsFromBotInventory(nodeInventory: Inventory): void;
protected generateId(bot: IBotBase): IBotBase;
protected generateInventoryID(profile: IBotBase): IBotBase;
protected getPMCDifficulty(requestedDifficulty: string): string;
/**
* Add a side-specific (usec/bear) dogtag item to a bots inventory
* @param bot bot to add dogtag to
* @returns Bot with dogtag added
*/
protected generateDogtag(bot: IBotBase): IBotBase;
}
export {};

View File

@ -1,24 +0,0 @@
import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase";
import { Inventory, Chances, Generation, Mods } from "../models/eft/common/tables/IBotType";
import { HashUtil } from "../utils/HashUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper";
import { BotWeaponGenerator } from "./BotWeaponGenerator";
import { BotLootGenerator } from "./BotLootGenerator";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
export declare class BotInventoryGenerator {
protected logger: ILogger;
protected hashUtil: HashUtil;
protected randomUtil: RandomUtil;
protected databaseServer: DatabaseServer;
protected botWeaponGenerator: BotWeaponGenerator;
protected botLootGenerator: BotLootGenerator;
protected botGeneratorHelper: BotGeneratorHelper;
protected weightedRandomHelper: WeightedRandomHelper;
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, weightedRandomHelper: WeightedRandomHelper);
generateInventory(templateInventory: Inventory, equipmentChances: Chances, generation: Generation, botRole: string, isPmc: boolean): PmcInventory;
protected generateEquipment(equipmentSlot: string, equipmentPool: Record<string, number>, modPool: Mods, spawnChances: Chances, botRole: string, inventory: PmcInventory): void;
protected generateInventoryBase(): PmcInventory;
}

View File

@ -1,15 +0,0 @@
import { ItemHelper } from "../helpers/ItemHelper";
import { DatabaseServer } from "../servers/DatabaseServer";
import { ConfigServer } from "../servers/ConfigServer";
import { IBotConfig } from "../models/spt/config/IBotConfig";
export declare class PMCLootGenerator {
protected itemHelper: ItemHelper;
protected databaseServer: DatabaseServer;
protected configServer: ConfigServer;
protected pocketLootPool: string[];
protected backpackLootPool: string[];
protected botConfig: IBotConfig;
constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer);
generatePMCPocketLootPool(): string[];
generatePMCBackpackLootPool(): string[];
}

View File

@ -1,25 +0,0 @@
import { ItemHelper } from "../helpers/ItemHelper";
import { Item } from "../models/eft/common/tables/IItem";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
export declare class RagfairAssortGenerator {
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected itemHelper: ItemHelper;
protected databaseServer: DatabaseServer;
protected generatedAssortItems: Item[];
constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer);
/**
* Get an array of unique items that can be sold on the flea
* @returns array of unique items
*/
getAssortItems(): Item[];
protected assortsAreGenerated(): boolean;
/**
* Generate an array of items the flea can sell
* @returns array of unique items
*/
protected generateRagfairAssortItems(): Item[];
protected createRagfairAssortItem(tplId: string, id?: string): Item;
}

View File

@ -1,62 +0,0 @@
import { ItemHelper } from "../helpers/ItemHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { RagfairServerHelper } from "../helpers/RagfairServerHelper";
import { Item } from "../models/eft/common/tables/IItem";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { IBarterScheme } from "../models/eft/common/tables/ITrader";
import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer";
import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { FenceService } from "../services/FenceService";
import { RagfairCategoriesService } from "../services/RagfairCategoriesService";
import { RagfairOfferService } from "../services/RagfairOfferService";
import { RagfairPriceService } from "../services/RagfairPriceService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil";
import { RagfairAssortGenerator } from "./RagfairAssortGenerator";
export declare class RagfairOfferGenerator {
protected logger: ILogger;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected randomUtil: RandomUtil;
protected timeUtil: TimeUtil;
protected databaseServer: DatabaseServer;
protected ragfairServerHelper: RagfairServerHelper;
protected saveServer: SaveServer;
protected presetHelper: PresetHelper;
protected ragfairAssortGenerator: RagfairAssortGenerator;
protected ragfairOfferService: RagfairOfferService;
protected ragfairPriceService: RagfairPriceService;
protected ragfairCategoriesService: RagfairCategoriesService;
protected fenceService: FenceService;
protected itemHelper: ItemHelper;
protected configServer: ConfigServer;
protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, ragfairServerHelper: RagfairServerHelper, saveServer: SaveServer, presetHelper: PresetHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferService: RagfairOfferService, ragfairPriceService: RagfairPriceService, ragfairCategoriesService: RagfairCategoriesService, fenceService: FenceService, itemHelper: ItemHelper, configServer: ConfigServer);
createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer;
protected getTraderId(userID: string): string;
protected getRating(userID: string): number;
protected getRatingGrowing(userID: string): boolean;
protected getOfferEndTime(userID: string, time: number): number;
/**
* Create multiple offers for items by using a unique list of items we've generated previously
* @param expiredOffers
*/
generateDynamicOffers(expiredOffers?: Item[]): void;
generateTraderOffers(traderID: string): void;
protected getItemCondition(userID: string, items: Item[], itemDetails: ITemplateItem): Item[];
protected addMissingCondition(item: Item): Item;
protected getOfferRequirements(items: Item[]): {
count: number;
_tpl: string;
}[];
/**
* Create a flea offer and store it in the Ragfair server offers array
*/
createFleaOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer;
}

View File

@ -1,33 +0,0 @@
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { ConfigServer } from "../servers/ConfigServer";
import { IWeatherData } from "../models/eft/weather/IWeatherData";
import { IWeatherConfig } from "../models/spt/config/IWeatherConfig";
import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class WeatherGenerator {
protected weightedRandomHelper: WeightedRandomHelper;
protected randomUtil: RandomUtil;
protected timeUtil: TimeUtil;
protected configServer: ConfigServer;
protected weatherConfig: IWeatherConfig;
constructor(weightedRandomHelper: WeightedRandomHelper, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer);
calculateTime(data: IWeatherData): IWeatherData;
/**
* Get server uptime seconds multiplied by a multiplier and add to current time as seconds
* Format to BSGs requirements
* @param computedDate current date
* @returns formatted time
*/
protected getAcceleratedTime(computedDate: Date): string;
/**
* Get current time formatted to fit BSGs requirement
* @param computedDate
* @returns
*/
protected getNormalTime(computedDate: Date): string;
generateWeather(data: IWeatherData): IWeatherData;
protected getWeightedFog(): string;
protected getWeightedRain(): number;
protected getRandomFloat(node: string): number;
protected getRandomInt(node: string): number;
}

View File

@ -1,131 +0,0 @@
import { DurabilityLimitsHelper } from "../helpers/DurabilityLimitsHelper";
import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase";
import { Mods, ModsChances } from "../models/eft/common/tables/IBotType";
import { Item, Repairable, Upd } from "../models/eft/common/tables/IItem";
import { Grid, ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem";
import { IBotConfig } from "../models/spt/config/IBotConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { ContainerHelper } from "./ContainerHelper";
import { InventoryHelper } from "./InventoryHelper";
import { ItemHelper } from "./ItemHelper";
import { ProbabilityHelper } from "./ProbabilityHelper";
export declare class BotGeneratorHelper {
protected logger: ILogger;
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected randomUtil: RandomUtil;
protected probabilityHelper: ProbabilityHelper;
protected databaseServer: DatabaseServer;
protected durabilityLimitsHelper: DurabilityLimitsHelper;
protected itemHelper: ItemHelper;
protected inventoryHelper: InventoryHelper;
protected containerHelper: ContainerHelper;
protected configServer: ConfigServer;
protected botConfig: IBotConfig;
constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, configServer: ConfigServer);
generateModsForItem(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances): Item[];
/**
* Is this magazine cylinder related (revolvers and grenade launchers)
* @param magazineParentName the name of the magazines parent
* @returns true if it is cylinder related
*/
magazineIsCylinderRelated(magazineParentName: string): boolean;
/**
* randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot
* never return true for an item that has 0% spawn chance
* @param itemSlot slot the item sits in
* @param modSlot slot the mod sits in
* @param modSpawnChances Chances for various mod spawns
* @returns boolean true if it should spawn
*/
protected shouldModBeSpawned(itemSlot: Slot, modSlot: string, modSpawnChances: ModsChances): boolean;
/**
* Get a list of containers that hold ammo
* e.g. mod_magazine
* @returns string array
*/
protected getAmmoContainers(): string[];
/**
* Get the slot details for an item (chamber/cartridge/slot)
* @param modSlot e.g patron_in_weapon
* @param parentTemplate item template
* @returns
*/
protected getModItemSlot(modSlot: string, parentTemplate: ITemplateItem): Slot;
/**
* With the shotgun revolver (60db29ce99594040e04c4a27) 12.12 introduced CylinderMagazines.
* Those magazines (e.g. 60dc519adf4c47305f6d410d) have a "Cartridges" entry with a _max_count=0.
* Ammo is not put into the magazine directly but assigned to the magazine's slots: The "camora_xxx" slots.
* This function is a helper called by generateModsForItem for mods with parent type "CylinderMagazine"
*
* @param {object} items The items where the CylinderMagazine's camora are appended to
* @param {object} modPool modPool which should include available cartrigdes
* @param {string} parentId The CylinderMagazine's UID
* @param {object} parentTemplate The CylinderMagazine's template
*/
protected fillCamora(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem): void;
/**
* Take a record of camoras and merge the compatable shells into one array
* @param camorasWithShells camoras we want to merge into one array
* @returns string array of shells fro luitple camora sources
*/
protected mergeCamoraPoolsTogether(camorasWithShells: Record<string, string[]>): string[];
generateExtraPropertiesForItem(itemTemplate: ITemplateItem, botRole?: any): {
upd?: Upd;
};
/**
* Create a repairable object for a weapon that containers durability + max durability properties
* @param itemTemplate weapon object being generated for
* @param botRole type of bot being generated for
* @returns Repairable object
*/
protected generateWeaponRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable;
/**
* Create a repairable object for an armor that containers durability + max durability properties
* @param itemTemplate weapon object being generated for
* @param botRole type of bot being generated for
* @returns Repairable object
*/
protected generateArmorRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable;
protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string;
/**
* Sort by spawn chance, highest to lowest, higher is more common
* @param unsortedModArray String array to sort
* @returns Sorted string array
*/
protected sortModArray(unsortedModArray: string[]): string[];
/**
* Can an item be added to an item without issue
* @param items
* @param tplToCheck
* @param equipmentSlot
* @returns true if possible
*/
isItemIncompatibleWithCurrentItems(items: Item[], tplToCheck: string, equipmentSlot: string): boolean;
/**
* Adds an item with all its childern into specified equipmentSlots, wherever it fits.
* @param equipmentSlots
* @param parentId
* @param parentTpl
* @param itemWithChildren
* @param inventory
* @returns a `boolean` indicating item was added
*/
addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: PmcInventory): boolean;
protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean;
}
export declare class ExhaustableArray<T> {
private itemPool;
private randomUtil;
private jsonUtil;
private pool;
constructor(itemPool: T[], randomUtil: RandomUtil, jsonUtil: JsonUtil);
getRandomValue(): T;
getFirstValue(): T;
hasValues(): boolean;
}

View File

@ -1,45 +0,0 @@
import { Difficulty, IBotType } from "../models/eft/common/tables/IBotType";
import { IBotConfig } from "../models/spt/config/IBotConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
export declare class BotHelper {
protected logger: ILogger;
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected randomUtil: RandomUtil;
protected configServer: ConfigServer;
protected botConfig: IBotConfig;
constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, configServer: ConfigServer);
getBotDifficultySettings(type: string, difficulty: string): Difficulty;
getBotTemplate(role: string): IBotType;
getPmcDifficultySettings(type: string, difficulty: string): Difficulty;
/**
* Randomise the chance the PMC will attack their own side
* @param difficultySettings pmc difficulty settings
*/
randomisePmcHostility(difficultySettings: Difficulty): void;
isBotPmc(botRole: string): boolean;
isBotBoss(botRole: string): boolean;
isBotFollower(botRole: string): boolean;
/**
* Add a bot to the FRIENDLY_BOT_TYPES array
* @param difficultySettings bot settings to alter
* @param typeToAdd bot type to add to friendly list
*/
addBotToFriendlyList(difficultySettings: Difficulty, typeToAdd: string): void;
/**
* Add a bot to the ENEMY_BOT_TYPES array
* @param difficultySettings bot settings to alter
* @param typesToAdd bot type to add to enemy list
*/
addBotToEnemyList(difficultySettings: Difficulty, typesToAdd: string[], typeBeingEdited: string): void;
/**
* Add a bot to the REVENGE_BOT_TYPES array
* @param difficultySettings bot settings to alter
* @param typesToAdd bot type to add to revenge list
*/
addBotToRevengeList(difficultySettings: Difficulty, typesToAdd: string[]): void;
}

View File

@ -1,9 +0,0 @@
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class GameEventHelper {
protected databaseServer: DatabaseServer;
constructor(databaseServer: DatabaseServer);
get events(): Record<string, string>;
get christmasEventItems(): string[];
itemIsChristmasRelated(itemId: string): boolean;
christmasEventEnabled(): boolean;
}

View File

@ -1,33 +0,0 @@
declare class LookupItem {
byId: Record<number, string>;
byParent: Record<string, string[]>;
constructor();
}
export declare class LookupCollection {
items: LookupItem;
categories: LookupItem;
constructor();
}
export declare class HandbookHelper {
protected lookup: LookupCollection;
hydrateLookup(lookup: LookupCollection): void;
getTemplatePrice(x: string): number;
templatesWithParent(x: string): string[];
isCategory(x: string): boolean;
childrenCategories(x: string): string[];
/**
* Gets Currency to Ruble conversion Value
* @param {number} value
* @param {string} currencyFrom
* @returns number
*/
inRUB(value: number, currencyFrom: string): number;
/**
* Gets Ruble to Currency conversion Value
* @param {number} value
* @param {string} currencyTo
* @returns number
*/
fromRUB(value: number, currencyTo: string): number;
}
export {};

View File

@ -1,63 +0,0 @@
import { IPmcData } from "../models/eft/common/IPmcData";
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 { 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";
import { IHideoutConfig } from "../models/spt/config/IHideoutConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
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";
export declare class HideoutHelper {
protected logger: ILogger;
protected hashUtil: HashUtil;
protected timeUtil: TimeUtil;
protected randomUtil: RandomUtil;
protected databaseServer: DatabaseServer;
protected itemEventRouter: ItemEventRouter;
protected httpResponse: HttpResponseUtil;
protected profileHelper: ProfileHelper;
protected inventoryHelper: InventoryHelper;
protected playerService: PlayerService;
protected configServer: ConfigServer;
static bitcoinFarm: string;
static waterCollector: string;
static bitcoin: string;
static expeditionaryFuelTank: string;
protected hideoutConfig: IHideoutConfig;
constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, inventoryHelper: InventoryHelper, playerService: PlayerService, configServer: ConfigServer);
registerProduction(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData | IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
* This convinience function intialies new Production Object
* with all the constants.
*/
initProduction(recipeId: string, productionTime: number): Production;
isProductionType(productive: Productive): productive is Production;
applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void;
updatePlayerHideout(sessionID: string): void;
protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): HideoutArea;
protected updateWaterFilters(waterFilterArea: HideoutArea, pwProd: Production, isGeneratorOn: boolean, pmcData: IPmcData): HideoutArea;
protected getAreaUpdObject(stackCount: number, resourceValue: number, resourceUnitsConsumed: number): Upd;
protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData): HideoutArea;
protected updateBitcoinFarm(pmcData: IPmcData, btcFarmCGs: number, isGeneratorOn: boolean): Production;
protected getBTCSlots(pmcData: IPmcData): number;
protected getManagementSkillsSlots(): number;
protected hasManagementSkillSlots(pmcData: IPmcData): boolean;
protected getHideoutManagementSkill(pmcData: IPmcData): Common;
protected getHideoutManagementConsumptionBonus(pmcData: IPmcData): number;
isProduction(productive: Productive): productive is Production;
getBTC(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -1,115 +0,0 @@
import { IPmcData } from "../models/eft/common/IPmcData";
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 { 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";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { LocaleService } from "../services/LocaleService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil";
import { DialogueHelper } from "./DialogueHelper";
import { ItemHelper } from "./ItemHelper";
import { PaymentHelper } from "./PaymentHelper";
import { ProfileHelper } from "./ProfileHelper";
import { RagfairServerHelper } from "./RagfairServerHelper";
import { TraderHelper } from "./TraderHelper";
export declare class QuestHelper {
protected logger: ILogger;
protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected itemHelper: ItemHelper;
protected itemEventRouter: ItemEventRouter;
protected databaseServer: DatabaseServer;
protected localeService: LocaleService;
protected ragfairServerHelper: RagfairServerHelper;
protected dialogueHelper: DialogueHelper;
protected profileHelper: ProfileHelper;
protected paymentHelper: PaymentHelper;
protected traderHelper: TraderHelper;
protected configServer: ConfigServer;
protected questConfig: IQuestConfig;
constructor(logger: ILogger, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, traderHelper: TraderHelper, configServer: ConfigServer);
questStatus(pmcData: IPmcData, questID: string): QuestStatus;
/**
* returns true is the condition is satisfied
*/
evaluateLevel(pmcProfile: IPmcData, cond: AvailableForConditions): boolean;
getDeltaQuests(before: IQuest[], after: IQuest[]): IQuest[];
rewardSkillPoints(sessionID: string, pmcData: IPmcData, output: IItemEventRouterResponse, skillName: string, progress: number): void;
getQuestLocale(questId: string): any;
/**
* Debug Routine for showing some information on the
* quest list in question.
*/
dumpQuests(quests: any): void;
loyaltyRequirementCheck(loyaltyRequirementProperties: AvailableForProps, profile: IPmcData): boolean;
protected processReward(reward: Reward): any[];
getQuestRewardItems(quest: IQuest, state: QuestStatus): Reward[];
/**
* Add quest with new state value to pmc profile
* @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
*/
addQuestToPMCData(pmcData: IPmcData, newState: QuestStatus, acceptedQuest: IAcceptQuestRequestData): void;
acceptedUnlocked(acceptedQuestId: string, sessionID: string): IQuest[];
failedUnlocked(failedQuestId: string, sessionID: string): IQuest[];
applyMoneyBoost(quest: IQuest, moneyBoost: number): IQuest;
changeItemStack(pmcData: IPmcData, id: string, value: number, sessionID: string, output: any): void;
/**
* Get List of All Quests as an array
* @returns Array of IQuest objects
*/
questValues(): IQuest[];
/**
* Reest AvailableForStart conditions for quests
* @param quests queststo clean
* @returns quest array without conditions
*/
protected cleanQuestList(quests: IQuest[]): IQuest[];
/**
* Reset AvailableForStart conditions on a quest
* @param quest quest to clean
* @returns reset IQuest object
*/
cleanQuestConditions(quest: IQuest): IQuest;
failQuest(pmcData: IPmcData, body: any, sessionID: string): any;
/**
* 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;
getQuestLocaleIdFromDb(messageId: string): string;
/**
* Alter a quests state + Add a record to tis status timers object
* @param pmcData Profile to update
* @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
* @param pmcData Player profile
* @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, body: ICompleteQuestRequestData, state: QuestStatus, sessionID: string): Reward[];
/**
* Get the intel center bonus a player has
* @param pmcData player profile
* @returns bonus in percent
*/
protected getIntelCenterRewardBonus(pmcData: IPmcData): number;
getFindItemIdForQuestItem(itemTpl: string): string;
}

View File

@ -1,54 +0,0 @@
import { IPmcData } from "../models/eft/common/IPmcData";
import { ITraderAssort } from "../models/eft/common/tables/ITrader";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer";
import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData";
import { IQuestConfig } from "../models/spt/config/IQuestConfig";
import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { LocaleService } from "../services/LocaleService";
import { RagfairOfferService } from "../services/RagfairOfferService";
import { HashUtil } from "../utils/HashUtil";
import { TimeUtil } from "../utils/TimeUtil";
import { DialogueHelper } from "./DialogueHelper";
import { ItemHelper } from "./ItemHelper";
import { PaymentHelper } from "./PaymentHelper";
import { PresetHelper } from "./PresetHelper";
import { ProfileHelper } from "./ProfileHelper";
import { RagfairHelper } from "./RagfairHelper";
import { RagfairServerHelper } from "./RagfairServerHelper";
import { RagfairSortHelper } from "./RagfairSortHelper";
export declare class RagfairOfferHelper {
protected logger: ILogger;
protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected itemEventRouter: ItemEventRouter;
protected databaseServer: DatabaseServer;
protected saveServer: SaveServer;
protected dialogueHelper: DialogueHelper;
protected itemHelper: ItemHelper;
protected paymentHelper: PaymentHelper;
protected presetHelper: PresetHelper;
protected profileHelper: ProfileHelper;
protected ragfairServerHelper: RagfairServerHelper;
protected ragfairSortHelper: RagfairSortHelper;
protected ragfairHelper: RagfairHelper;
protected ragfairOfferService: RagfairOfferService;
protected localeService: LocaleService;
protected configServer: ConfigServer;
protected static goodSoldTemplate: string;
protected ragfairConfig: IRagfairConfig;
protected questConfig: IQuestConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, 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(info: ISearchRequestData, itemsToAdd: string[], assorts: Record<string, ITraderAssort>, pmcProfile: IPmcData): IRagfairOffer[];
getOffersForBuild(info: ISearchRequestData, itemsToAdd: string[], assorts: Record<string, ITraderAssort>, pmcProfile: IPmcData): IRagfairOffer[];
processOffers(sessionID: string): boolean;
protected getProfileOffers(sessionID: string): IRagfairOffer[];
protected deleteOfferByOfferId(sessionID: string, offerId: string): void;
protected completeOffer(sessionID: string, offer: IRagfairOffer, boughtAmount: number): IItemEventRouterResponse;
isDisplayableOffer(info: ISearchRequestData, itemsToAdd: string[], assorts: Record<string, ITraderAssort>, offer: IRagfairOffer, pmcProfile: IPmcData): boolean;
}

View File

@ -1,16 +0,0 @@
import { SellResult } from "../models/eft/ragfair/IRagfairOffer";
import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class RagfairSellHelper {
protected logger: ILogger;
protected randomUtil: RandomUtil;
protected timeUtil: TimeUtil;
protected configServer: ConfigServer;
protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer);
calculateSellChance(baseChance: number, offerPrice: number, requirementsPriceInRub: number): number;
rollForSale(sellChance: number, count: number): SellResult[];
}

View File

@ -1 +0,0 @@
import "reflect-metadata";

View File

@ -1,21 +0,0 @@
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 { PreAkiModLoader } from "./PreAkiModLoader";
export declare class PostAkiModLoader implements IModLoader {
protected bundleLoader: BundleLoader;
protected handbookController: HandbookController;
protected vfs: VFS;
protected modCompilerService: ModCompilerService;
protected preAkiModLoader: PreAkiModLoader;
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(): void;
protected executeMods(container: DependencyContainer): void;
protected addBundles(): void;
}

View File

@ -1,5 +0,0 @@
export declare enum Effect {
Fracture = "Fracture",
LightBleeding = "LightBleeding",
HeavyBleeding = "HeavyBleeding"
}

View File

@ -1,40 +0,0 @@
export interface IHideoutArea {
_id: string;
type: number;
enabled: boolean;
needsFuel: boolean;
takeFromSlotLocked: boolean;
craftGivesExp: boolean;
stages: Record<string, Stage>;
}
export interface Stage {
requirements: Requirement[];
bonuses: StageBonus[];
slots: number;
constructionTime: number;
description: string;
}
export interface Requirement {
areaType?: number;
requiredLevel?: number;
type: string;
templateId?: string;
count?: number;
isFunctional?: boolean;
traderId?: string;
loyaltyLevel?: number;
skillName?: string;
skillLevel?: number;
}
export interface StageBonus {
value: number;
passive: boolean;
production: boolean;
visible: boolean;
skillType?: string;
type: string;
filter?: string[];
icon?: string;
id?: string;
templateId?: string;
}

View File

@ -1 +0,0 @@
export declare type IGetInsuranceCostResponseData = Record<string, Record<string, number>>;

View File

@ -1,4 +0,0 @@
export interface IAddItemRequestData {
tid: string;
items: any[];
}

View File

@ -1,2 +0,0 @@
import { ILoginRequestData } from "./ILoginRequestData";
export declare type IRemoveProfileData = ILoginRequestData;

View File

@ -1,28 +0,0 @@
import { BotAmount } from "../../enums/BotAmount";
import { BotDifficulty } from "../../enums/BotDifficulty";
export interface IStartOfflineRaidRequestData {
locationName: string;
startTime: number;
dateTime: string;
gameSettings: GameSettings;
}
export interface GameSettings {
timeAndWeatherSettings: TimeAndWeatherSettings;
botsSettings: BotsSettings;
wavesSettings: WavesSettings;
}
export interface TimeAndWeatherSettings {
isRandomTime: boolean;
isRandomWeather: boolean;
}
export interface BotsSettings {
isEnabled: boolean;
isScavWars: boolean;
botAmount: BotAmount;
}
export interface WavesSettings {
botDifficulty: BotDifficulty;
isBosses: boolean;
isTaggedAndCursed: boolean;
wavesBotAmount: BotAmount;
}

View File

@ -1,7 +0,0 @@
export declare enum BotAmount {
AsOnline = "AsOnline",
Low = "Low",
Medium = "Medium",
High = "High",
Horde = "Horde"
}

View File

@ -1,8 +0,0 @@
export declare enum BotDifficulty {
AsOnline = "AsOnline",
Easy = "Easy",
Medium = "Medium",
Hard = "Hard",
Impossible = "Impossible",
Random = "Random"
}

View File

@ -1,13 +0,0 @@
export declare enum MemberCategory {
Default = 0,
Developer = 1,
UniqueId = 2,
Trader = 4,
Group = 8,
System = 16,
ChatModerator = 32,
ChatModeratorWithPermanentBan = 64,
UnitTest = 128,
Sherpa = 256,
Emissary = 512
}

View File

@ -1,8 +0,0 @@
export declare enum QuestRewardType {
Skill = "Skill",
Experience = "Experience",
TraderStanding = "TraderStanding",
TraderUnlock = "TraderUnlock",
Item = "Item",
AssortmentUnlock = "AssortmentUnlock"
}

View File

@ -1,5 +0,0 @@
export declare enum RaidMode {
Online = "Online",
Local = "Local",
Coop = "Coop"
}

View File

@ -1,25 +0,0 @@
import { IStartOfflineRaidRequestData } from "../../eft/match/IStartOffineRaidRequestData";
import { IEndOfflineRaidRequestData } from "../../eft/match/IEndOfflineRaidRequestData";
import { INullResponseData } from "../../eft/httpResponse/INullResponseData";
import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData";
import { IPmcData } from "../../eft/common/IPmcData";
export interface IMatchCallbacks {
updatePing(url: string, info: any, sessionID: string): INullResponseData;
exitMatch(url: string, info: any, sessionID: string): INullResponseData;
exitToMenu(url: string, info: any, sessionID: string): INullResponseData;
startGroupSearch(url: string, info: any, sessionID: string): INullResponseData;
stopGroupSearch(url: string, info: any, sessionID: string): INullResponseData;
sendGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
acceptGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
cancelGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
putMetrics(url: string, info: any, sessionID: string): INullResponseData;
getProfile(url: string, info: any, sessionID: string): IGetBodyResponseData<IPmcData[]>;
serverAvailable(url: string, info: any, sessionID: string): IGetBodyResponseData<any> | IGetBodyResponseData<true>;
joinMatch(url: string, info: any, sessionID: string): IGetBodyResponseData<any>;
getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData<string>;
getGroupStatus(url: string, info: any, sessionID: string): IGetBodyResponseData<any>;
createGroup(url: string, info: any, 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;
}

View File

@ -1,124 +0,0 @@
import { MinMax } from "../../common/MinMax";
import { IBaseConfig } from "./IBaseConfig";
export interface IBotConfig extends IBaseConfig {
kind: "aki-bot";
presetBatch: PresetBatch;
bosses: string[];
durability: Durability;
lootNValue: LootNvalue;
revenge: Record<string, string[]>;
pmc: PmcConfig;
itemSpawnLimits: Record<string, Record<string, number>>;
equipment: Record<string, Equipment>;
showTypeInNickname: boolean;
maxBotCap: number;
secureContainerAmmoStackCount: number;
}
export interface PresetBatch {
assault: number;
bossBully: number;
bossGluhar: number;
bossKilla: number;
bossKojaniy: number;
bossSanitar: number;
bossTagilla: number;
bossKnight: number;
bossTest: number;
cursedAssault: number;
followerBully: number;
followerGluharAssault: number;
followerGluharScout: number;
followerGluharSecurity: number;
followerGluharSnipe: number;
followerKojaniy: number;
followerSanitar: number;
followerTagilla: number;
followerBirdEye: number;
followerBigPipe: number;
followerTest: number;
marksman: number;
pmcBot: number;
sectantPriest: number;
sectantWarrior: number;
gifter: number;
test: number;
exUsec: number;
}
export interface Durability {
default: DefaultDurability;
pmc: PmcDurability;
boss: BotDurability;
follower: BotDurability;
assault: BotDurability;
cursedassault: BotDurability;
marksman: BotDurability;
pmcbot: BotDurability;
exusec: BotDurability;
sectantpriest: BotDurability;
sectantwarrior: BotDurability;
}
export interface DefaultDurability {
armor: DefaultArmor;
weapon: WeaponDurability;
}
export interface DefaultArmor {
maxDelta: number;
minDelta: number;
}
export interface WeaponDurability {
lowestMax: number;
highestMax: number;
maxDelta: number;
minDelta: number;
}
export interface PmcDurability {
armor: PmcDurabilityArmor;
weapon: WeaponDurability;
}
export interface PmcDurabilityArmor {
lowestMaxPercent: number;
highestMaxPercent: number;
maxDelta: number;
minDelta: number;
}
export interface BotDurability {
armor: ArmorDurability;
weapon: WeaponDurability;
}
export interface ArmorDurability {
maxDelta: number;
minDelta: number;
}
export interface LootNvalue {
scav: number;
pmc: number;
}
export interface PmcConfig {
dynamicLoot: PmcDynamicLoot;
difficulty: string;
looseWeaponInBackpackChancePercent: number;
looseWeaponInBackpackLootMinMax: MinMax;
isUsec: number;
chanceSameSideIsHostilePercent: number;
usecType: string;
bearType: string;
maxBackpackLootTotalRub: number;
maxPocketLootTotalRub: number;
maxVestLootTotalRub: number;
convertIntoPmcChance: Record<string, MinMax>;
enemyTypes: string[];
}
export interface PmcDynamicLoot {
whitelist: string[];
blacklist: string[];
moneyStackLimits: Record<string, number>;
}
export interface Equipment {
blacklist: EquipmentFilterDetails[];
whitelist: EquipmentFilterDetails[];
}
export interface EquipmentFilterDetails {
levelRange: MinMax;
equipment: Record<string, string[]>;
cartridge: Record<string, string[]>;
}

View File

@ -1,5 +0,0 @@
import { IBaseConfig } from "./IBaseConfig";
export interface IInventoryConfig extends IBaseConfig {
kind: "aki-inventory";
newItemsMarkedFound: boolean;
}

View File

@ -1,5 +0,0 @@
import { IBaseConfig } from "./IBaseConfig";
export interface ILocaleConfig extends IBaseConfig {
kind: "aki-locale";
desiredLocale: string;
}

View File

@ -1,7 +0,0 @@
import { IBaseConfig } from "./IBaseConfig";
export interface IRepairConfig extends IBaseConfig {
kind: "aki-repair";
priceMultiplier: number;
applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number;
}

View File

@ -1,19 +0,0 @@
import { IBaseConfig } from "./IBaseConfig";
export interface ITraderConfig extends IBaseConfig {
kind: "aki-trader";
updateTime: UpdateTime[];
updateTimeDefault: number;
traderPriceMultipler: number;
minDurabilityForSale: number;
fence: FenceConfig;
}
export interface UpdateTime {
traderId: string;
seconds: number;
}
export interface FenceConfig {
assortSize: number;
maxPresetsCount: number;
presetPriceMult: number;
blacklist: string[];
}

View File

@ -1,11 +0,0 @@
export declare enum LogBackgroundColor {
default = "",
black = "blackBG",
red = "redBG",
green = "greenBG",
yellow = "yellowBG",
blue = "blueBG",
magenta = "magentaBG",
cyan = "cyanBG",
white = "whiteBG"
}

View File

@ -1,11 +0,0 @@
export declare enum LogTextColor {
black = "black",
red = "red",
green = "green",
yellow = "yellow",
blue = "blue",
magenta = "magenta",
cyan = "cyan",
white = "white",
gray = ""
}

View File

@ -1,10 +0,0 @@
export declare namespace ModLoader {
interface IMod {
name: string;
version: string;
main?: string;
author?: string;
license: string;
dependencies?: Record<string, string>;
}
}

View File

@ -1,12 +0,0 @@
/// <reference types="node" />
/// <reference types="node" />
import http, { ServerResponse } from "http";
import { INotification } from "../../eft/notifier/INotifier";
export interface IHttpServer {
load(): void;
getCookies(req: http.IncomingMessage): any;
sendFile(resp: ServerResponse, file: any): void;
isConnectionWebSocket(sessionID: string): boolean;
sendResponse(sessionID: string, req: any, resp: any, body: Buffer): void;
sendMessage(sessionID: string, output: INotification): void;
}

View File

@ -1,61 +0,0 @@
export interface ILocaleBase {
global: Record<string, ILocaleGlobalBase>;
menu: Record<string, string>;
languages: ILanguageBase[];
}
export interface ILocaleGlobalBase {
interface: Record<string, string>;
enum: any[];
mail: Record<string, string>;
quest: Record<string, ILocaleQuest>;
preset: Record<string, ILocalePreset>;
handbook: Record<string, string>;
season: Record<string, string>;
customization: Record<string, ILocaleProps>;
repeatableQuest: Record<string, string>;
templates: ILocaleTemplateBase;
locations: ILocaleLocationsBase;
banners: ILocaleBannersBase;
trading: ILocaleTradingBase;
}
export interface ILocaleQuest {
name: string;
description: string;
note: string;
failMessageText: string;
startedMessageText: string;
successMessageText: string;
conditions: Record<string, string>;
location: string;
}
export interface ILocalePreset {
Name: string;
}
export interface ILocaleTemplateBase {
templates: Record<string, ILocaleProps>;
}
export interface ILocaleLocationsBase {
locations: Record<string, ILocaleProps>;
}
export interface ILocaleBannersBase {
locations: Record<string, ILocaleProps>;
}
export interface ILocaleProps {
Name: string;
ShortName: string;
Description: string;
}
export interface ILocaleTradingBase {
locations: Record<string, ILocaleTradingProps>;
}
export interface ILocaleTradingProps {
FullName: string;
FirstName: string;
Nickname: string;
Location: string;
Description: string;
}
export interface ILanguageBase {
ShortName: string;
Name: string;
}

View File

@ -1,11 +0,0 @@
import { Serializer } from "../../di/Serializer";
import { BundleLoader } from "../../loaders/BundleLoader";
import { IHttpServer } from "../../models/spt/server/IHttpServer";
import { ILogger } from "../../models/spt/utils/ILogger";
export declare class BundleSerializer extends Serializer {
protected logger: ILogger;
protected bundleLoader: BundleLoader;
constructor(logger: ILogger, bundleLoader: BundleLoader);
serialize(sessionID: string, req: any, resp: any, body: any, httpServer: IHttpServer): void;
canHandle(route: string): boolean;
}

View File

@ -1,51 +0,0 @@
/// <reference types="node" />
/// <reference types="node" />
import http, { ServerResponse } from "http";
import { ApplicationContext } from "../context/ApplicationContext";
import { Serializer } from "../di/Serializer";
import { HttpServerHelper } from "../helpers/HttpServerHelper";
import { NotifierHelper } from "../helpers/NotifierHelper";
import { INotification } from "../models/eft/notifier/INotifier";
import { IHttpConfig } from "../models/spt/config/IHttpConfig";
import { IHttpServer } from "../models/spt/server/IHttpServer";
import { ILogger } from "../models/spt/utils/ILogger";
import { HttpRouter } from "../routers/HttpRouter";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { ConfigServer } from "./ConfigServer";
import { DatabaseServer } from "./DatabaseServer";
export declare class HttpServer implements IHttpServer {
protected httpRouter: HttpRouter;
protected logger: ILogger;
protected randomUtil: RandomUtil;
protected jsonUtil: JsonUtil;
protected httpResponse: HttpResponseUtil;
protected databaseServer: DatabaseServer;
protected notifierHelper: NotifierHelper;
protected httpServerHelper: HttpServerHelper;
protected serializers: Serializer[];
protected configServer: ConfigServer;
protected applicationContext: ApplicationContext;
constructor(httpRouter: HttpRouter, // TODO: delay required
logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, httpResponse: HttpResponseUtil, databaseServer: DatabaseServer, notifierHelper: NotifierHelper, httpServerHelper: HttpServerHelper, serializers: Serializer[], configServer: ConfigServer, applicationContext: ApplicationContext);
protected buffers: {};
protected onReceive: {};
protected onRespond: {};
protected httpConfig: IHttpConfig;
protected webSockets: {};
protected websocketPingHandler: any;
getCookies(req: http.IncomingMessage): any;
resetBuffer(sessionID: string): void;
putInBuffer(sessionID: any, data: any, bufLength: number): boolean;
getFromBuffer(sessionID: string): any;
sendZlibJson(resp: any, output: any, sessionID: string): void;
sendMessage(sessionID: string, output: INotification): void;
sendFile(resp: ServerResponse, file: any): void;
isConnectionWebSocket(sessionID: string): boolean;
sendResponse(sessionID: string, req: any, resp: any, body: Buffer): void;
handleRequest(req: http.IncomingMessage, resp: http.ServerResponse): void;
load(): void;
protected getRandomisedMessage(): string;
wsOnConnection(ws: any, req: any): void;
}

View File

@ -1,28 +0,0 @@
import { IAkiProfile, Info } from "../models/eft/profile/IAkiProfile";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { VFS } from "../utils/VFS";
import { SaveLoadRouter } from "../di/Router";
import { ILogger } from "../models/spt/utils/ILogger";
export declare class SaveServer {
protected vfs: VFS;
protected saveLoadRouters: SaveLoadRouter[];
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected logger: ILogger;
protected profileFilepath: string;
protected profiles: {};
protected onSave: {};
protected saveMd5: {};
constructor(vfs: VFS, saveLoadRouters: SaveLoadRouter[], jsonUtil: JsonUtil, hashUtil: HashUtil, logger: ILogger);
load(): void;
save(): void;
getProfile(sessionId: string): IAkiProfile;
getProfiles(): Record<string, IAkiProfile>;
deleteProfileById(sessionID: string): boolean;
createProfile(profileInfo: Info): void;
addProfile(profileDetails: IAkiProfile): void;
loadProfile(sessionID: string): void;
saveProfile(sessionID: string): void;
removeProfile(sessionID: string): boolean;
}

View File

@ -1,50 +0,0 @@
import { IBotType } from "../models/eft/common/tables/IBotType";
import { Equipment, EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
export declare class BotEquipmentFilterService {
protected logger: ILogger;
protected configServer: ConfigServer;
protected botConfig: IBotConfig;
protected botEquipmentFilterlists: Record<string, Equipment>;
constructor(logger: ILogger, configServer: ConfigServer);
/**
* Filter a bots data to exclude equipment and cartridges defines in the botConfig
* @param baseBotNode bots json data to filter
* @param playerLevel Level of the currently playing player
* @param isPmc Is the bot we're filtering a PMC
* @param role Role of the bot we're filtering
*/
filterBotEquipment(baseBotNode: IBotType, playerLevel: number, isPmc: boolean, role: string): void;
/**
* Get an object that contains equipment and cartridge blacklists for a specified bot type
* @param botRole Role of the bot we want the blacklist for
* @param playerLevel Level of the player
* @returns EquipmentBlacklistDetails object
*/
protected getBotEquipmentBlacklist(botRole: string, playerLevel: number): EquipmentFilterDetails;
/**
* Get the whitelist for a specific bot type that's within the players level
* @param botRole Bot type
* @param playerLevel Players level
* @returns EquipmentFilterDetails object
*/
protected getBotEquipmentWhitelist(botRole: string, playerLevel: number): EquipmentFilterDetails;
/**
* Filter bot equipment based on blacklist and whitelist from config/bot.json
* Prioritises whitelist first, if one is found blacklist is ignored
* @param baseBotNode bot .json file to update
* @param blacklist equipment blacklist
* @returns Filtered bot file
*/
protected filterEquipment(baseBotNode: IBotType, blacklist: EquipmentFilterDetails, whitelist: EquipmentFilterDetails): void;
/**
* Filter bot cartridges based on blacklist and whitelist from config/bot.json
* Prioritises whitelist first, if one is found blacklist is ignored
* @param baseBotNode bot .json file to update
* @param blacklist equipment on this list should be excluded from the bot
* @param whitelist equipment on this list should be used exclusivly
* @returns Filtered bot file
*/
protected filterCartridges(baseBotNode: IBotType, blacklist: EquipmentFilterDetails, whitelist: EquipmentFilterDetails): void;
}

View File

@ -1,39 +0,0 @@
import { HandbookHelper } from "../helpers/HandbookHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { FenceLevel } from "../models/eft/common/IGlobals";
import { IPmcData } from "../models/eft/common/IPmcData";
import { ITraderAssort } from "../models/eft/common/tables/ITrader";
import { ITraderConfig } from "../models/spt/config/ITraderConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
export declare class FenceService {
protected logger: ILogger;
protected hashUtil: HashUtil;
protected jsonUtil: JsonUtil;
protected randomUtil: RandomUtil;
protected databaseServer: DatabaseServer;
protected handbookHelper: HandbookHelper;
protected itemHelper: ItemHelper;
protected presetHelper: PresetHelper;
protected configServer: ConfigServer;
protected fenceAssort: ITraderAssort;
protected traderConfig: ITraderConfig;
constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, presetHelper: PresetHelper, configServer: ConfigServer);
protected setFenceAssort(fenceAssort: ITraderAssort): void;
getFenceAssorts(): ITraderAssort;
hasExpiredCache(refreshAssort: boolean): boolean;
generateFenceAssortCache(pmcData: IPmcData): void;
/**
* Get the fence level the passed in profile has
* @param pmcData Player profile
* @returns FenceLevel
*/
getFenceInfo(pmcData: IPmcData): FenceLevel;
removeFenceOffer(assortIdToRemove: string): void;
updateFenceOffers(pmcData: IPmcData): void;
}

View File

@ -1,14 +0,0 @@
import { ILocaleConfig } from "../models/spt/config/ILocaleConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
export declare class LocaleService {
protected logger: ILogger;
protected configServer: ConfigServer;
protected localeConfig: ILocaleConfig;
constructor(logger: ILogger, configServer: ConfigServer);
/**
* Gets the locale key from the locale.json file
* @returns locale e.g en/ge/cz/cn
*/
getDesiredLocale(): string;
}

View File

@ -1,10 +0,0 @@
import { DatabaseServer } from "../servers/DatabaseServer";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
export declare class RagfairLinkedItemService {
protected databaseServer: DatabaseServer;
protected linkedItemsCache: Record<string, Iterable<string>>;
constructor(databaseServer: DatabaseServer);
getLinkedItems(linkedSearchId: string): Iterable<string>;
protected buildLinkedItemTable(): void;
protected getFilters(item: ITemplateItem, slot: string): string[];
}

View File

@ -1,55 +0,0 @@
import { HandbookHelper } from "../helpers/HandbookHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { Preset } from "../models/eft/common/IGlobals";
import { Item } from "../models/eft/common/tables/IItem";
import { IBarterScheme } from "../models/eft/common/tables/ITrader";
import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { IRagfairServerPrices } from "../models/spt/ragfair/IRagfairServerPrices";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { RandomUtil } from "../utils/RandomUtil";
export declare class RagfairPriceService {
protected handbookHelper: HandbookHelper;
protected databaseServer: DatabaseServer;
protected logger: ILogger;
protected itemHelper: ItemHelper;
protected presetHelper: PresetHelper;
protected randomUtil: RandomUtil;
protected configServer: ConfigServer;
protected ragfairConfig: IRagfairConfig;
protected prices: IRagfairServerPrices;
constructor(handbookHelper: HandbookHelper, databaseServer: DatabaseServer, logger: ILogger, itemHelper: ItemHelper, presetHelper: PresetHelper, randomUtil: RandomUtil, configServer: ConfigServer);
generateStaticPrices(): void;
generateDynamicPrices(): void;
hasDynamicPrices(): boolean;
getDynamicPrice(itemTpl: string): number;
getAllFleaPrices(): Record<string, number>;
getFleaPriceForItem(tplId: string): number;
getStaticPriceForItem(tplId: string): number;
getBarterPrice(barterScheme: IBarterScheme[]): number;
getDynamicOfferPrice(items: Item[], desiredCurrency: string): number;
/**
* Multiply the price by a randomised curve where n = 2, shift = 2
* @param existingPrice price to alter
* @param isPreset is the item we're multiplying a preset
* @returns multiplied price
*/
protected randomisePrice(existingPrice: number, isPreset: boolean): number;
/**
* Calculate the cost of a weapon preset by adding together the price of its mods + base price of default weapon preset
* @param item base weapon
* @param items weapon plus mods
* @param existingPrice price of existing base weapon
* @returns
*/
getWeaponPresetPrice(item: Item, items: Item[], existingPrice: number): number;
/**
* Attempt to get the default preset for a weapon, failing that get the first preset in the array
* (assumes default = has encyclopedia entry)
* @param presets weapon presets to choose from
* @returns Default preset object
*/
protected getDefaultWeaponPreset(presets: Preset[], weapon: Item): Preset;
}

View File

@ -1,24 +0,0 @@
import { OnLoad } from "../di/OnLoad";
import { IDatabaseTables } from "../models/spt/server/IDatabaseTables";
import { ILogger } from "../models/spt/utils/ILogger";
import { ImageRouter } from "../routers/ImageRouter";
import { DatabaseServer } from "../servers/DatabaseServer";
import { JsonUtil } from "./JsonUtil";
import { VFS } from "./VFS";
export declare class DatabaseImporter extends OnLoad {
protected logger: ILogger;
protected vfs: VFS;
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected imageRouter: ImageRouter;
constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, databaseServer: DatabaseServer, imageRouter: ImageRouter);
onLoad(): void;
/**
* Read all json files in database folder and map into a json object
* @param filepath path to database folder
*/
protected hydrateDatabase(filepath: string): void;
getRoute(): string;
loadRecursive(filepath: string): IDatabaseTables;
loadImages(filepath: string): void;
}

View File

@ -1,4 +0,0 @@
import type constructor from "./constructor";
import { InjectionToken } from "tsyringe";
declare function singleton<T>(token?: InjectionToken<T>): (target: constructor<T>) => void;
export default singleton;

View File

@ -1,4 +0,0 @@
declare type constructor<T> = {
new (...args: any[]): T;
};
export default constructor;

118
config/airdrop.json Normal file
View File

@ -0,0 +1,118 @@
{
"airdropChancePercent":
{
"bigmap": 20,
"woods": 25,
"lighthouse": 20,
"shoreline": 20,
"interchange": 20,
"reserve": 10,
"tarkovStreets": 12
},
"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]
}
}

54
config/ammo.json Normal file
View File

@ -0,0 +1,54 @@
{
"stacks":
{
"grenades": 1,
"a86x70": 30,
"a127x55": 30,
"a762x54": 40,
"a762x51": 40,
"a9x39": 50,
"a366TKM": 50,
"a762x39": 60,
"a762x35": 60,
"a556x45": 60,
"a545x39": 60,
"a57x28": 60,
"a46x30": 70,
"a9x33R": 30,
"a1143x23ACP": 50,
"a762x25": 50,
"a9x21": 50,
"a9x19": 50,
"a9x18": 50,
"a23x75": 15,
"a12Gauge": 20,
"a20Gauge": 20,
"a30x29": 1,
"a26x75": 1
},
"zero":
{
"g127x55": "5cadf6ddae9215051e1c23b2",
"g86x70": "5fc275cf85fd526b824a571a",
"g762x54": "5887431f2459777e1612938f",
"g762x51": "58dd3ad986f77403051cba8f",
"g9x39": "57a0dfb82459774d3078b56c",
"g366TKM": "59e655cb86f77411dc52a77b",
"g762x39": "5656d7c34bdc2d9d198b4587",
"g762x35": "5fbe3ffdf8b6a877a729ea82",
"g556x45": "54527a984bdc2d4e668b4567",
"g545x39": "56dff3afd2720bba668b4567",
"g57x28": "5cc80f38e4a949001152b560",
"g46x30": "5ba2678ad4351e44f824b344",
"g9x33R": "62330b3ed4dc74626d570b95",
"g1143x23ACP": "5e81f423763d9f754677bf2e",
"g762x25": "5736026a245977644601dc61",
"g9x21": "5a269f97c4a282000b151807",
"g9x19": "56d59d3ad2720bdb418b4577",
"g9x18": "573719762459775a626ccbc1",
"g23x75": "5e85aa1a988a8701445df1f5",
"g12Gauge": "560d5e524bdc2d25448b4571",
"g20Gauge": "5a38ebd9c4a282000d722a5b"
}
}

86
config/armor.json Normal file
View File

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

84
config/bots.json Normal file
View File

@ -0,0 +1,84 @@
{
"bossChance":
{
"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
},
"pmc":
{
"chanceSameSideIsHostilePercent": 80,
"containersOnPMCs": true,
"isUsec": 50,
"lootNValue": 3,
"maxBackpackLootTotalRub": 150000,
"maxPocketLootTotalRub": 50000,
"maxVestLootTotalRub": 50000,
"convertIntoPmcChance":
{
"assault":
{
"min": 20,
"max": 30
},
"cursedassault":
{
"min": 15,
"max": 30
},
"pmcbot":
{
"min": 15,
"max": 25
},
"exusec":
{
"min": 5,
"max": 5
}
},
"useDifficultyOverride": false,
"difficulty": "AsOnline",
"botRelativeLevelDeltaMax": 10,
"difficultyWeights":
{
"useWeights": false,
"weights":
{
"easy": 0,
"normal": 40,
"hard": 30,
"impossible": 30
}
},
"looseWeaponInBackpackChance": 15,
"looseWeaponInBackpackLootMinMax":
{
"min": 1,
"max": 1
}
},
"scav":
{
"lootNValue": 4
}
}

3
config/config.json Normal file
View File

@ -0,0 +1,3 @@
{
"DebugMode": false
}

209
config/containers.json Normal file
View File

@ -0,0 +1,209 @@
{
"commonContainers":
{
"enabled": false,
"AMMO_CASE":
{
"width": 2,
"height": 2,
"cellsH": 7,
"cellsV": 7
},
"DOCUMENTS_CASE":
{
"width": 1,
"height": 2,
"cellsH": 4,
"cellsV": 4
},
"DOGTAG_CASE":
{
"width": 1,
"height": 1,
"cellsH": 10,
"cellsV": 10
},
"GRENADE_CASE":
{
"width": 3,
"height": 3,
"cellsH": 8,
"cellsV": 8
},
"INJECTOR_CASE":
{
"width": 1,
"height": 1,
"cellsH": 3,
"cellsV": 3
},
"ITEM_CASE":
{
"width": 4,
"height": 4,
"cellsH": 8,
"cellsV": 8
},
"KEY_TOOL":
{
"width": 1,
"height": 1,
"cellsH": 4,
"cellsV": 4
},
"KEYCARD_HOLDER":
{
"width": 1,
"height": 1,
"cellsH": 3,
"cellsV": 3
},
"SCAV_JUNKBOX":
{
"width": 4,
"height": 4,
"cellsH": 14,
"cellsV": 14
},
"MAGAZINE_CASE":
{
"width": 3,
"height": 2,
"cellsH": 7,
"cellsV": 7
},
"MEDICINE_CASE":
{
"width": 3,
"height": 3,
"cellsH": 7,
"cellsV": 7
},
"MONEY_CASE":
{
"width": 3,
"height": 2,
"cellsH": 7,
"cellsV": 7
},
"HOLODILNICK_THERMAL_BAG":
{
"width": 3,
"height": 3,
"cellsH": 8,
"cellsV": 8
},
"PISTOL_CASE":
{
"width": 2,
"height": 2,
"cellsH": 4,
"cellsV": 3
},
"SICC_ORGANIZATIONAL_POUCH":
{
"width": 2,
"height": 1,
"cellsH": 5,
"cellsV": 5
},
"SIMPLE_WALLET":
{
"width": 1,
"height": 1,
"cellsH": 2,
"cellsV": 2
},
"THICC_ITEM_CASE":
{
"width": 5,
"height": 3,
"cellsH": 14,
"cellsV": 14
},
"THICC_WEAPON_CASE":
{
"width": 5,
"height": 2,
"cellsH": 6,
"cellsV": 15
},
"WEAPON_CASE":
{
"width": 5,
"height": 2,
"cellsH": 5,
"cellsV": 10
},
"WZ_WALLET":
{
"width": 1,
"height": 1,
"cellsH": 2,
"cellsV": 2
}
},
"securedContainers":
{
"enabled": false,
"ALPHA":
{
"width": 2,
"height": 2,
"cellsH": 2,
"cellsV": 2
},
"BETA":
{
"width": 3,
"height": 2,
"cellsH": 3,
"cellsV": 2
},
"EPSILON":
{
"width": 4,
"height": 2,
"cellsH": 4,
"cellsV": 2
},
"GAMMA":
{
"width": 3,
"height": 3,
"cellsH": 3,
"cellsV": 3
},
"KAPPA":
{
"width": 3,
"height": 3,
"cellsH": 3,
"cellsV": 4
}
}
}

82
config/flea.json Normal file
View File

@ -0,0 +1,82 @@
{
"minUserLevel": 15,
"runIntervalSeconds": 45,
"blacklist":
{
"enableBsgList": true,
"enableQuestList": true
},
"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
}
},
"currencies":
{
"roubles": 78,
"dollars": 20,
"euros": 2
},
"offerItemCount":
{
"min": 8,
"max": 15
},
"reputation":
{
"gain": 0.0000002,
"loss": 0.0000002
},
"time":
{
"baseSellTime": 15,
"minSellTime": 5,
"maxSellTime": 15
}
}

22
config/globals.json Normal file
View File

@ -0,0 +1,22 @@
{
"damagePerMeter": 9,
"safeHeight": 3,
"maxLoyaltyTraders": false,
"timeBeforeDeployLocal": 10,
"matchEnd":
{
"survivedExpRequirement": 200,
"survivedSecondsRequirement": 420,
"survivedExpReward": 300,
"miaExpReward": 200,
"runnerExpReward": 200,
"leftMult": 0,
"miaMult": 1,
"survivedMult": 1.3,
"runnerMult": 0.5,
"killedMult": 1,
"headShotMult": 1.2,
"expOnDamageAllHealth": 50
}
}

5
config/hideout.json Normal file
View File

@ -0,0 +1,5 @@
{
"constructionTime": 1,
"productionTime": 1,
"scavCaseTime": 1
}

21
config/insurance.json Normal file
View File

@ -0,0 +1,21 @@
{
"blacklistedEquipment": ["Scabbard", "SecuredContainer", "Compass", "ArmBand"],
"prapor":
{
"minHr": 24,
"maxHr": 36,
"storageMaxHr": 96,
"priceCoef": 0.16,
"returnChance": 75
},
"therapist":
{
"minHr": 10,
"maxHr": 20,
"storageMaxHr": 144,
"priceCoef": 0.25,
"returnChance": 85
}
}

43
config/items.json Normal file
View File

@ -0,0 +1,43 @@
{
"standardStash":
{
"vertical": 28,
"horizontal": 10
},
"behindStash":
{
"vertical": 38,
"horizontal": 10
},
"escapeStash":
{
"vertical": 48,
"horizontal": 10
},
"eodStash":
{
"vertical": 68,
"horizontal": 10
},
"examinedByDefault": false,
"examineTime":
{
"enabled": false,
"examineTime": 1
},
"removeBackpacksRestrictions": true,
"removeContainersRestrictions": true,
"removeDiscardLimit": true,
"removeInRaidItemRestrictions": true,
"removeKeyUsageMax": true,
"removeSecureContainersRestrictions": true,
"roublesMaxStack": 500000,
"dollarsMaxStack": 50000,
"eurosMaxStack": 50000,
"weightModifier": 1
}

8
config/locations.json Normal file
View File

@ -0,0 +1,8 @@
{
"allExtractsAvailable": false,
"freeLabsEntry": false,
"exfilTime": 8,
"extractionsExtended": false,
"enableCoopExtracts": false,
"noExtractRestrictions": false
}

5
config/loot.json Normal file
View File

@ -0,0 +1,5 @@
{
"containersInMarkedRoom": true,
"looseLootMultiplier": 1,
"staticLootMultiplier": 1
}

7
config/prewipe.json Normal file
View File

@ -0,0 +1,7 @@
{
"allBossesOnReserve": false,
"allTradersSellCheapItems": false,
"gluharOnLabs": false,
"killaOnFactory": false,
"makeObdolbosPowerful": false
}

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