WIP - Ready for testing

This commit is contained in:
George Gaulin 2022-06-27 00:31:46 -04:00
parent 0ccced9915
commit e308ac55ca
460 changed files with 14228 additions and 15 deletions

Binary file not shown.

64
Ereshkigal-AkiConfig/dist/README.md vendored Normal file
View File

@ -0,0 +1,64 @@
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

@ -0,0 +1,335 @@
{
"Server values": {
"HTTP": {
"ip": "127.0.0.1",
"port": 6969
},
"Health": {
"healthMultipliers": {
"death": 0.3,
"blacked": 0.1
},
"save": {
"health": true,
"effects": true
}
},
"Hideout": {
"runIntervalSeconds": 900,
"scavCase": {
"rewardParentBlacklist": [
"5485a8684bdc2da71d8b4567",
"543be5dd4bdc2deb348b4569"
],
"rewardItemBlacklist": [],
"ammoRewards": {
"giveMultipleOfTen": true,
"minAmount": 10
},
"moneyRewards": {
"enabled": false,
"rub": {
"min": 1000,
"max": 200000
},
"usd": {
"min": 100,
"max": 2000
},
"eur": {
"min": 100,
"max": 2000
}
}
},
"fuelDrainRateMultipler": 1
}
},
"Raids values": {
"Loot values": {
"looseLootMultiplier": {
"bigmap": 1,
"develop": 1,
"factory4_day": 1,
"factory4_night": 1,
"interchange": 1,
"laboratory": 1,
"rezervbase": 1,
"shoreline": 1,
"woods": 1,
"hideout": 0,
"lighthouse": 1,
"privatearea": 1,
"suburbs": 1,
"tarkovstreets": 1,
"terminal": 1,
"town": 1
},
"staticLootMultiplier": {
"bigmap": 1,
"develop": 1,
"factory4_day": 1,
"factory4_night": 1,
"interchange": 1,
"laboratory": 1,
"rezervbase": 1,
"shoreline": 1,
"woods": 1,
"hideout": 0,
"lighthouse": 1,
"privatearea": 1,
"suburbs": 1,
"tarkovstreets": 1,
"terminal": 1,
"town": 1
}
},
"Airdrop values": {
"airdropChancePercent": {
"bigmap": 25,
"woods": 25,
"lighthouse": 25,
"shoreline": 25,
"interchange": 25,
"reserve": 25
},
"airdropMinStartTimeSeconds": 60,
"airdropMaxStartTimeSeconds": 300,
"airdropMinOpenHeight": 350,
"airdropMaxOpenHeight": 400,
"planeMinFlyHeight": 400,
"planeMaxFlyHeight": 500,
"planeVolume": 1
},
"MIAOnRaidEnd": false,
"raidMenuSettings": {
"aiAmount": "AsOnline",
"aiDifficulty": "AsOnline",
"bossEnabled": true,
"scavWars": false,
"taggedAndCursed": false
},
"save": {
"loot": true,
"durability": true
},
"carExtracts": [
"Dorms V-Ex",
"PP Exfil",
"V-Ex_light",
"South V-Ex"
],
"carExtractBaseStandingGain": 0.25,
"scavExtractGain": 0.01
},
"Traders values": {
"Traders": {
"updateTime": [
{
"traderId": "54cb50c76803fa8b248b4571",
"seconds": 3600
},
{
"traderId": "54cb57776803fa99248b456e",
"seconds": 3600
},
{
"traderId": "579dc571d53a0658a154fbec",
"seconds": 3600
},
{
"traderId": "58330581ace78e27b8b10cee",
"seconds": 3600
},
{
"traderId": "5935c25fb3acc3127c3d8cd9",
"seconds": 3600
},
{
"traderId": "5a7c2eca46aef81a7ca2145d",
"seconds": 3600
},
{
"traderId": "5ac3b934156ae10c4430e83c",
"seconds": 3600
},
{
"traderId": "5c0647fdd443bc2504c2d371",
"seconds": 3600
},
{
"traderId": "ragfair",
"seconds": 3600
}
],
"updateTimeDefault": 3600,
"fenceAssortSize": 100,
"fenceMaxPresetsCount": 5,
"fencePresetPriceMult": 2.5,
"minDurabilityForSale": 60,
"fenceItemIgnoreList": [
"58ac60eb86f77401897560ff",
"59e8936686f77467ce798647",
"56e294cdd2720b603a8b4575",
"5661632d4bdc2d903d8b456b",
"543be5e94bdc2df1348b4568",
"543be6674bdc2df1348b4569",
"5448bf274bdc2dfc2f8b456a",
"543be5664bdc2dd4348b4569",
"5447bedf4bdc2d87278b4568"
]
},
"Repair": {
"priceMultiplier": 1
},
"Insurances": {
"insuranceMultiplier": {
"54cb50c76803fa8b248b4571": 0.16,
"54cb57776803fa99248b456e": 0.25
},
"returnChancePercent": {
"54cb50c76803fa8b248b4571": 80,
"54cb57776803fa99248b456e": 85
},
"runIntervalSeconds": 600
},
"Trading": {
"newItemsMarkedFound": false
}
},
"FleaMarket configuration": {
"runIntervalSeconds": 60,
"sell": {
"fees": true,
"chance": {
"base": 50,
"overprices": 0.5,
"underpriced": 2
},
"time": {
"base": 15,
"min": 5,
"max": 15
},
"reputation": {
"gain": 2e-7,
"loss": 2e-7
}
},
"traders": {
"EnablePraporOffers": true,
"EnableTheRapistOffers": true,
"EnableFenceOffers": false,
"EnableSkierOffers": true,
"EnablePeacekeeperOffers": true,
"EnableMechanicOffers": true,
"EnableRagmanOffers": true,
"EnableJaegerOffers": true,
"EnableAllAvailableOffers": false
},
"dynamic": {
"expiredOfferThreshold": 1500,
"offerItemCount": {
"min": 7,
"max": 15
},
"price": {
"min": 0.8,
"max": 1.2
},
"endTimeSeconds": {
"min": 180,
"max": 1800
},
"condition": {
"conditionChance": 0.2,
"min": 0.6,
"max": 1
},
"stackablePercent": {
"min": 10,
"max": 500
},
"nonStackableCount": {
"min": 1,
"max": 10
},
"rating": {
"min": 0.1,
"max": 0.95
},
"currencies": {
"5449016a4bdc2d6f028b456f": 75,
"5696686a4bdc2da3298b456a": 23,
"569668774bdc2da2298b4568": 2
},
"showAsSingleStack": [
"5422acb9af1c889c16000029",
"5448e54d4bdc2dcc718b4568",
"5795f317245977243854e041",
"5448e53e4bdc2d60728b4567",
"5448bf274bdc2dfc2f8b456a",
"543be5e94bdc2df1348b4568",
"5448f39d4bdc2d0a728b4568"
],
"blacklist": {
"custom": [
"5cdeb229d7f00c000e7ce174",
"5996f6d686f77467977ba6cc",
"5996f6cb86f774678763a6ca",
"5943d9c186f7745a13413ac9",
"5996f6fc86f7745e585b4de3",
"5cde8864d7f00c0010373be1",
"5d2f2ab648f03550091993ca"
],
"enableBsgList": true,
"enableQuestList": true
}
}
},
"Weather values": {
"acceleration": 2,
"weather": {
"clouds": {
"min": -1.5,
"max": 1.5
},
"windSpeed": {
"min": 0,
"max": 3
},
"windDirection": {
"min": 0,
"max": 3
},
"windGustiness": {
"min": 0,
"max": 1
},
"rain": {
"min": 1,
"max": 4
},
"rainIntensity": {
"min": 0.1,
"max": 1
},
"fog": {
"min": 0.001,
"max": 0.03
},
"temp": {
"min": 0,
"max": 16
},
"pressure": {
"min": 760,
"max": 764
}
}
},
"other": {
"hideWarningMessage": true,
"showModLogs": true
}
}

View File

@ -0,0 +1,537 @@
{
"redeemTime": 48,
"repeatableQuests": [
{
"name": "Daily",
"types": [
"Elimination",
"Completion",
"Exploration"
],
"resetTime": 86400,
"numQuests": 3,
"minPlayerLevel": 5,
"rewardScaling": {
"levels": [
1,
20,
45,
100
],
"experience": [
2000,
4000,
20000,
80000
],
"roubles": [
6000,
10000,
100000,
250000
],
"items": [
1,
2,
4,
4
],
"reputation": [
0.01,
0.01,
0.01,
0.01
],
"rewardSpread": 0.5
},
"locations": {
"any": [
"any"
],
"factory4_day": [
"factory4_day",
"factory4_night"
],
"bigmap": [
"bigmap"
],
"Woods": [
"Woods"
],
"Shoreline": [
"Shoreline"
],
"Interchange": [
"Interchange"
],
"Lighthouse": [
"Lighthouse"
],
"laboratory": [
"laboratory"
],
"RezervBase": [
"RezervBase"
]
},
"traderWhitelist": [
{
"traderId": "54cb50c76803fa8b248b4571",
"questTypes": [
"Completion",
"Exploration",
"Elimination"
]
},
{
"traderId": "54cb57776803fa99248b456e",
"questTypes": [
"Completion",
"Exploration",
"Elimination"
]
},
{
"traderId": "58330581ace78e27b8b10cee",
"questTypes": [
"Completion",
"Exploration",
"Elimination"
]
},
{
"traderId": "5935c25fb3acc3127c3d8cd9",
"questTypes": [
"Completion",
"Exploration",
"Elimination"
]
},
{
"traderId": "5a7c2eca46aef81a7ca2145d",
"questTypes": [
"Completion",
"Exploration"
]
},
{
"traderId": "5ac3b934156ae10c4430e83c",
"questTypes": [
"Completion",
"Exploration",
"Elimination"
]
},
{
"traderId": "5c0647fdd443bc2504c2d371",
"questTypes": [
"Completion",
"Exploration",
"Elimination"
]
}
],
"questConfig": {
"Exploration": {
"maxExtracts": 3,
"specificExits": {
"probability": 0.25,
"passageRequirementWhitelist": [
"None",
"TransferItem",
"WorldEvent",
"Train",
"Reference",
"Empty"
]
}
},
"Completion": {
"minRequestedAmount": 1,
"maxRequestedAmount": 5,
"minRequestedBulletAmount": 20,
"maxRequestedBulletAmount": 60,
"useWhitelist": true,
"useBlacklist": false
},
"Elimination": {
"targets": [
{
"key": "Savage",
"relativeProbability": 7,
"data": {
"isBoss": false
}
},
{
"key": "AnyPmc",
"relativeProbability": 2,
"data": {
"isBoss": false
}
},
{
"key": "bossBully",
"relativeProbability": 0.5,
"data": {
"isBoss": true
}
},
{
"key": "bossGluhar",
"relativeProbability": 0.5,
"data": {
"isBoss": true
}
},
{
"key": "bossKilla",
"relativeProbability": 0.5,
"data": {
"isBoss": true
}
},
{
"key": "bossSanitar",
"relativeProbability": 0.5,
"data": {
"isBoss": true
}
},
{
"key": "bossTagilla",
"relativeProbability": 0.5,
"data": {
"isBoss": true
}
},
{
"key": "bossKojaniy",
"relativeProbability": 0.5,
"data": {
"isBoss": true
}
}
],
"bodyPartProb": 0.4,
"bodyParts": [
{
"key": "Head",
"relativeProbability": 1,
"data": [
"Head"
]
},
{
"key": "Stomach",
"relativeProbability": 3,
"data": [
"Stomach"
]
},
{
"key": "Chest",
"relativeProbability": 5,
"data": [
"Chest"
]
},
{
"key": "Arms",
"relativeProbability": 0.5,
"data": [
"LeftArm",
"RightArm"
]
},
{
"key": "Legs",
"relativeProbability": 1,
"data": [
"LeftLeg",
"RightLeg"
]
}
],
"specificLocationProb": 0.25,
"distLocationBlacklist": [
"laboratory",
"factory4_day",
"factory4_night"
],
"distProb": 0.25,
"maxDist": 200,
"minDist": 20,
"maxKills": 5,
"minKills": 2
}
}
},
{
"name": "Weekly",
"types": [
"Elimination",
"Completion",
"Exploration"
],
"resetTime": 604800,
"numQuests": 1,
"minPlayerLevel": 15,
"rewardScaling": {
"levels": [
1,
20,
45,
100
],
"experience": [
4000,
8000,
40000,
160000
],
"roubles": [
12000,
20000,
200000,
500000
],
"items": [
3,
3,
4,
4
],
"reputation": [
0.02,
0.03,
0.03,
0.03
],
"rewardSpread": 0.5
},
"locations": {
"any": [
"any"
],
"factory4_day": [
"factory4_day",
"factory4_night"
],
"bigmap": [
"bigmap"
],
"Woods": [
"Woods"
],
"Shoreline": [
"Shoreline"
],
"Interchange": [
"Interchange"
],
"Lighthouse": [
"Lighthouse"
],
"laboratory": [
"laboratory"
],
"RezervBase": [
"RezervBase"
]
},
"traderWhitelist": [
{
"traderId": "54cb50c76803fa8b248b4571",
"questTypes": [
"Completion",
"Exploration",
"Elimination"
]
},
{
"traderId": "54cb57776803fa99248b456e",
"questTypes": [
"Completion",
"Exploration",
"Elimination"
]
},
{
"traderId": "58330581ace78e27b8b10cee",
"questTypes": [
"Completion",
"Exploration",
"Elimination"
]
},
{
"traderId": "5935c25fb3acc3127c3d8cd9",
"questTypes": [
"Completion",
"Exploration",
"Elimination"
]
},
{
"traderId": "5a7c2eca46aef81a7ca2145d",
"questTypes": [
"Completion",
"Exploration"
]
},
{
"traderId": "5ac3b934156ae10c4430e83c",
"questTypes": [
"Completion",
"Exploration",
"Elimination"
]
},
{
"traderId": "5c0647fdd443bc2504c2d371",
"questTypes": [
"Completion",
"Exploration",
"Elimination"
]
}
],
"questConfig": {
"Exploration": {
"maxExtracts": 10,
"specificExits": {
"probability": 0.5,
"passageRequirementWhitelist": [
"None",
"TransferItem",
"WorldEvent",
"Train",
"Reference",
"Empty"
]
}
},
"Completion": {
"minRequestedAmount": 2,
"maxRequestedAmount": 10,
"minRequestedBulletAmount": 20,
"maxRequestedBulletAmount": 60,
"useWhitelist": true,
"useBlacklist": false
},
"Elimination": {
"targets": [
{
"key": "Savage",
"relativeProbability": 7,
"data": {
"isBoss": false
}
},
{
"key": "AnyPmc",
"relativeProbability": 2,
"data": {
"isBoss": false
}
},
{
"key": "bossBully",
"relativeProbability": 0.5,
"data": {
"isBoss": true
}
},
{
"key": "bossGluhar",
"relativeProbability": 0.5,
"data": {
"isBoss": true
}
},
{
"key": "bossKilla",
"relativeProbability": 0.5,
"data": {
"isBoss": true
}
},
{
"key": "bossSanitar",
"relativeProbability": 0.5,
"data": {
"isBoss": true
}
},
{
"key": "bossTagilla",
"relativeProbability": 0.5,
"data": {
"isBoss": true
}
},
{
"key": "bossKojaniy",
"relativeProbability": 0.5,
"data": {
"isBoss": true
}
}
],
"bodyPartProb": 0.4,
"bodyParts": [
{
"key": "Head",
"relativeProbability": 1,
"data": [
"Head"
]
},
{
"key": "Stomach",
"relativeProbability": 3,
"data": [
"Stomach"
]
},
{
"key": "Chest",
"relativeProbability": 5,
"data": [
"Chest"
]
},
{
"key": "Arms",
"relativeProbability": 0.5,
"data": [
"LeftArm",
"RightArm"
]
},
{
"key": "Legs",
"relativeProbability": 1,
"data": [
"LeftLeg",
"RightLeg"
]
}
],
"specificLocationProb": 0.25,
"distLocationBlacklist": [
"laboratory",
"factory4_day",
"factory4_night"
],
"distProb": 0.25,
"maxDist": 200,
"minDist": 20,
"maxKills": 15,
"minKills": 5
}
}
}
]
}

View File

@ -0,0 +1,296 @@
{
"presetBatch": {
"assault": 120,
"bossBully": 1,
"bossGluhar": 1,
"bossKilla": 1,
"bossKojaniy": 1,
"bossSanitar": 1,
"bossTagilla": 1,
"bossTest": 40,
"cursedAssault": 120,
"followerBully": 4,
"followerGluharAssault": 2,
"followerGluharScout": 2,
"followerGluharSecurity": 2,
"followerGluharSnipe": 2,
"followerKojaniy": 2,
"followerSanitar": 2,
"followerTagilla": 2,
"followerTest": 4,
"marksman": 30,
"pmcBot": 120,
"sectantPriest": 1,
"sectantWarrior": 5,
"gifter": 1,
"test": 40,
"exUsec": 15
},
"bosses": [
"bossbully",
"bossgluhar",
"bosskilla",
"bosskojaniy",
"bosssanitar",
"bosstagilla"
],
"durability": {
"default": {
"armor": {
"maxDelta": 10,
"minDelta": 0
},
"weapon": {
"lowestMax": 50,
"highestMax": 100,
"maxDelta": 10,
"minDelta": 0
}
},
"pmc": {
"armor": {
"lowestMaxPercent": 90,
"highestMaxPercent": 100,
"maxDelta": 10,
"minDelta": 0
},
"weapon": {
"lowestMax": 95,
"highestMax": 100,
"maxDelta": 5,
"minDelta": 0
}
},
"boss": {
"armor": {
"maxDelta": 10,
"minDelta": 0
},
"weapon": {
"lowestMax": 80,
"highestMax": 100,
"maxDelta": 10,
"minDelta": 0
}
},
"follower": {
"armor": {
"maxDelta": 10,
"minDelta": 0
},
"weapon": {
"lowestMax": 80,
"highestMax": 100,
"maxDelta": 10,
"minDelta": 0
}
},
"assault": {
"armor": {
"maxDelta": 10,
"minDelta": 0
},
"weapon": {
"lowestMax": 48,
"highestMax": 70,
"maxDelta": 10,
"minDelta": 0
}
},
"cursedassault": {
"armor": {
"maxDelta": 10,
"minDelta": 0
},
"weapon": {
"lowestMax": 50,
"highestMax": 70,
"maxDelta": 10,
"minDelta": 0
}
},
"marksman": {
"armor": {
"maxDelta": 10,
"minDelta": 0
},
"weapon": {
"lowestMax": 50,
"highestMax": 70,
"maxDelta": 10,
"minDelta": 0
}
},
"pmcbot": {
"armor": {
"maxDelta": 10,
"minDelta": 0
},
"weapon": {
"lowestMax": 80,
"highestMax": 100,
"maxDelta": 10,
"minDelta": 0
}
},
"exusec": {
"armor": {
"maxDelta": 10,
"minDelta": 0
},
"weapon": {
"lowestMax": 79,
"highestMax": 100,
"maxDelta": 10,
"minDelta": 0
}
},
"sectantpriest": {
"armor": {
"maxDelta": 10,
"minDelta": 0
},
"weapon": {
"lowestMax": 90,
"highestMax": 100,
"maxDelta": 10,
"minDelta": 0
}
},
"sectantwarrior": {
"armor": {
"maxDelta": 10,
"minDelta": 0
},
"weapon": {
"lowestMax": 90,
"highestMax": 100,
"maxDelta": 10,
"minDelta": 0
}
}
},
"lootNValue": {
"scav": 3,
"pmc": 1.8
},
"pmc": {
"dynamicLoot": {
"whitelist": [
"57864a3d24597754843f8721",
"57864a66245977548f04a81f",
"57864ada245977548638de91",
"57864bb7245977548b3b66c2",
"57864c322459775490116fbf",
"57864c8c245977548867e7f1",
"57864e4c24597754843f8723",
"57864ee62459775490116fc1",
"5c164d2286f774194c5e69fa",
"5c99f98d86f7745c314214b3",
"55818add4bdc2d5b648b456f",
"55818ad54bdc2ddc698b4569",
"55818aeb4bdc2ddc698b456a",
"55818ae44bdc2dde698b456c",
"55818b164bdc2ddc698b456c",
"5448bc234bdc2d3c308b4569",
"5447e1d04bdc2dff2f8b4567",
"5448eb774bdc2d0a728b4567",
"550aa4cd4bdc2dd8348b456c",
"55818af64bdc2d5b648b4570",
"5448ecbe4bdc2d60728b4568",
"5448e8d04bdc2ddf718b4569",
"5d650c3e815116009f6201d2",
"5448e8d64bdc2dce718b4568",
"5448f3a14bdc2d27728b4569",
"5448e54d4bdc2dcc718b4568",
"5448f3a64bdc2d60728b456a",
"543be5cb4bdc2deb348b4568",
"5485a8684bdc2da71d8b4567",
"543be5dd4bdc2deb348b4569",
"590c745b86f7743cc433c5f2",
"5448f39d4bdc2d0a728b4568",
"543be6564bdc2df4348b4568"
],
"blacklist": [
"5fca13ca637ee0341a484f46",
"59f32c3b86f77472a31742f0",
"59f32bb586f774757e1e8442",
"617aa4dd8166f034d57de9c5",
"5a2a57cfc4a2826c6e06d44a",
"619256e5f8af2c1a4e1f5d92",
"5a0c27731526d80618476ac4"
],
"spawnLimits": {
"5c99f98d86f7745c314214b3": 1,
"5c164d2286f774194c5e69fa": 1,
"550aa4cd4bdc2dd8348b456c": 2,
"55818add4bdc2d5b648b456f": 1,
"55818ad54bdc2ddc698b4569": 1,
"55818aeb4bdc2ddc698b456a": 1,
"55818ae44bdc2dde698b456c": 1,
"55818af64bdc2d5b648b4570": 1,
"5448e54d4bdc2dcc718b4568": 1,
"5448f3a64bdc2d60728b456a": 2,
"5447e1d04bdc2dff2f8b4567": 1,
"5a341c4686f77469e155819e": 1,
"55818b164bdc2ddc698b456c": 2,
"5448bc234bdc2d3c308b4569": 2,
"543be5dd4bdc2deb348b4569": 2,
"543be5cb4bdc2deb348b4568": 2,
"5485a8684bdc2da71d8b4567": 2,
"5d650c3e815116009f6201d2": 2,
"5448f39d4bdc2d0a728b4568": 2,
"543be6564bdc2df4348b4568": 1
},
"moneyStackLimits": {
"5449016a4bdc2d6f028b456f": 4000,
"5696686a4bdc2da3298b456a": 50,
"569668774bdc2da2298b4568": 50
}
},
"cartridgeBlacklist": [
"56dff421d2720b5f5a8b4567",
"56dff216d2720bbd668b4568",
"56dff338d2720bbd668b4569",
"56dff4ecd2720b5f5a8b4568",
"59e6918f86f7746c9f75e849",
"5c0d5ae286f7741e46554302",
"5c0d56a986f774449d5de529",
"5efb0e16aeb21837e749c7ff",
"5737218f245977612125ba51",
"57372140245977611f70ee91",
"57371aab2459775a77142f22",
"573719762459775a626ccbc1",
"573601b42459776410737435",
"573602322459776445391df1",
"59e4d3d286f774176a36250a",
"5e023e88277cce2b522ff2b1",
"59e6658b86f77411d949b250",
"5c0d591486f7744c505b416f",
"5d6e68d1a4b93622fe60e845",
"5d6e6869a4b9361c140bcfde",
"5e85a9f4add9fe03027d9bf1",
"5cadf6e5ae921500113bb973",
"5cadf6ddae9215051e1c23b2",
"6196365d58ef8c428c287da1",
"5ba26812d4351e003201fef1",
"5cc80f79e4a949033c7343b2"
],
"difficulty": "AsOnline",
"isUsec": 50,
"chanceSameSideIsHostilePercent": 50,
"usecType": "bosstest",
"bearType": "test",
"maxBackpackLootTotalRub": 150000,
"maxPocketLootTotalRub": 50000,
"maxVestLootTotalRub": 50000,
"types": {
"assault": 25,
"cursedAssault": 25,
"pmcBot": 25,
"exUsec": 10
}
},
"showTypeInNickname": false,
"maxBotCap": 20
}

View File

@ -0,0 +1,4 @@
{
"redeemTime": "",
"repeatableQuests": ""
}

View File

@ -0,0 +1,195 @@
{
"presetBatch": {
"assault": "",
"bossBully": "",
"bossGluhar": "",
"bossKilla": "",
"bossKojaniy": "",
"bossSanitar": "",
"bossTagilla": "",
"bossTest": "",
"cursedAssault": "",
"followerBully": "",
"followerGluharAssault": "",
"followerGluharScout": "",
"followerGluharSecurity": "",
"followerGluharSnipe": "",
"followerKojaniy": "",
"followerSanitar": "",
"followerTagilla": "",
"followerTest": "",
"marksman": "",
"pmcBot": "",
"sectantPriest": "",
"sectantWarrior": "",
"gifter": "",
"test": "",
"exUsec": ""
},
"bosses": "",
"durability": {
"default": {
"armor": {
"maxDelta": "",
"minDelta": ""
},
"weapon": {
"lowestMax": "",
"highestMax": "",
"maxDelta": "",
"minDelta": ""
}
},
"pmc": {
"armor": {
"lowestMaxPercent": "",
"highestMaxPercent": "",
"maxDelta": "",
"minDelta": ""
},
"weapon": {
"lowestMax": "",
"highestMax": "",
"maxDelta": "",
"minDelta": ""
}
},
"boss": {
"armor": {
"maxDelta": "",
"minDelta": ""
},
"weapon": {
"lowestMax": "",
"highestMax": "",
"maxDelta": "",
"minDelta": ""
}
},
"follower": {
"armor": {
"maxDelta": "",
"minDelta": ""
},
"weapon": {
"lowestMax": "",
"highestMax": "",
"maxDelta": "",
"minDelta": ""
}
},
"assault": {
"armor": {
"maxDelta": "",
"minDelta": ""
},
"weapon": {
"lowestMax": "",
"highestMax": "",
"maxDelta": "",
"minDelta": ""
}
},
"cursedassault": {
"armor": {
"maxDelta": "",
"minDelta": ""
},
"weapon": {
"lowestMax": "",
"highestMax": "",
"maxDelta": "",
"minDelta": ""
}
},
"marksman": {
"armor": {
"maxDelta": "",
"minDelta": ""
},
"weapon": {
"lowestMax": "",
"highestMax": "",
"maxDelta": "",
"minDelta": ""
}
},
"pmcbot": {
"armor": {
"maxDelta": "",
"minDelta": ""
},
"weapon": {
"lowestMax": "",
"highestMax": "",
"maxDelta": "",
"minDelta": ""
}
},
"exusec": {
"armor": {
"maxDelta": "",
"minDelta": ""
},
"weapon": {
"lowestMax": "",
"highestMax": "",
"maxDelta": "",
"minDelta": ""
}
},
"sectantpriest": {
"armor": {
"maxDelta": "",
"minDelta": ""
},
"weapon": {
"lowestMax": "",
"highestMax": "",
"maxDelta": "",
"minDelta": ""
}
},
"sectantwarrior": {
"armor": {
"maxDelta": "",
"minDelta": ""
},
"weapon": {
"lowestMax": "",
"highestMax": "",
"maxDelta": "",
"minDelta": ""
}
}
},
"lootNValue": {
"scav": "",
"pmc": ""
},
"pmc": {
"dynamicLoot": {
"whitelist": "",
"blacklist": "",
"spawnLimits": "",
"moneyStackLimits": ""
},
"cartridgeBlacklist": "",
"difficulty": "",
"isUsec": "",
"chanceSameSideIsHostilePercent": "",
"usecType": "",
"bearType": "",
"maxBackpackLootTotalRub": "",
"maxPocketLootTotalRub": "",
"maxVestLootTotalRub": "",
"types": {
"assault": "",
"cursedAssault": "",
"pmcBot": "",
"exUsec": ""
}
},
"showTypeInNickname": "",
"maxBotCap": ""
}

View File

@ -0,0 +1,254 @@
{
"Server values": {
"HTTP": {
"ip": "",
"port": ""
},
"Health": {
"healthMultipliers": {
"death": "",
"blacked": ""
},
"save": {
"health": "",
"effects": ""
}
},
"Hideout": {
"runIntervalSeconds": "",
"scavCase": {
"rewardParentBlacklist": "",
"rewardItemBlacklist": "",
"ammoRewards": {
"giveMultipleOfTen": "",
"minAmount": ""
},
"moneyRewards": {
"enabled": "",
"rub": {
"min": "",
"max": ""
},
"usd": {
"min": "",
"max": ""
},
"eur": {
"min": "",
"max": ""
}
}
}
},
"enableChristmasGifts": ""
},
"Raids values": {
"Loot values": {
"looseLootMultiplier": {
"bigmap": "",
"develop": "",
"factory4day": "",
"factory4night": "",
"interchange": "",
"laboratory": "",
"rezervbase": "",
"shoreline": "",
"woods": "",
"hideout": "",
"lighthouse": "",
"privatearea": "",
"suburbs": "",
"tarkovstreets": "",
"terminal": "",
"town": ""
},
"staticLootMultiplier": {
"bigmap": "",
"develop": "",
"factory4day": "",
"factory4night": "",
"interchange": "",
"laboratory": "",
"rezervbase": "",
"shoreline": "",
"woods": "",
"hideout": "",
"lighthouse": "",
"privatearea": "",
"suburbs": "",
"tarkovstreets": "",
"terminal": "",
"town": ""
}
},
"Airdrop values": {
"airdropChancePercent": {
"bigmap": "",
"woods": "",
"lighthouse": "",
"shoreline": "",
"interchange": "",
"reserve": ""
},
"airdropMinStartTimeSeconds": "",
"airdropMaxStartTimeSeconds": "",
"airdropMinOpenHeight": "",
"airdropMaxOpenHeight": "",
"planeMinFlyHeight": "",
"planeMaxFlyHeight": "",
"planeVolume": ""
},
"MIAOnRaidEnd": "",
"raidMenuSettings": {
"aiAmount": "",
"aiDifficulty": "",
"bossEnabled": "",
"scavWars": "",
"taggedAndCursed": ""
},
"save": {
"loot": "",
"durability": ""
},
"carExtracts": "",
"carExtractBaseStandingGain": "",
"scavExtractGain": ""
},
"Traders values": {
"Traders": {
"updateTime": "",
"updateTimeDefault": "",
"fenceAssortSize": "",
"fenceMaxPresetsCount": "",
"fencePresetPriceMult": "",
"minDurabilityForSale": "",
"fenceItemIgnoreList": ""
},
"Repair": {
"priceMultiplier": ""
},
"Insurances": {
"insuranceMultiplier": "",
"returnChancePercent": "",
"runIntervalSeconds": ""
},
"Trading": {
"newItemsMarkedFound": ""
}
},
"FleaMarket configuration": {
"runIntervalSeconds": "",
"sell": {
"fees": "",
"chance": {
"base": "",
"overprices": "",
"underpriced": ""
},
"time": {
"base": "",
"min": "",
"max": ""
},
"reputation": {
"gain": "",
"loss": ""
}
},
"traders": {
"EnablePraporOffers": "",
"EnableTheRapistOffers": "",
"EnableFenceOffers": "",
"EnableSkierOffers": "",
"EnablePeacekeeperOffers": "",
"EnableMechanicOffers": "",
"EnableRagmanOffers": "",
"EnableJaegerOffers": "",
"EnableAllAvailableOffers": ""
},
"dynamic": {
"expiredOfferThreshold": "",
"offerItemCount": {
"min": "",
"max": ""
},
"price": {
"min": "",
"max": ""
},
"endTimeSeconds": {
"min": "",
"max": ""
},
"condition": {
"conditionChance": "",
"min": "",
"max": ""
},
"stackablePercent": {
"min": "",
"max": ""
},
"nonStackableCount": {
"min": "",
"max": ""
},
"rating": {
"min": "",
"max": ""
},
"currencies": "",
"showAsSingleStack": "",
"blacklist": {
"custom": "",
"enableBsgList": "",
"enableQuestList": ""
}
}
},
"Weather values": {
"acceleration": "",
"weather": {
"clouds": {
"min": "",
"max": ""
},
"windSpeed": {
"min": "",
"max": ""
},
"windDirection": {
"min": "",
"max": ""
},
"windGustiness": {
"min": "",
"max": ""
},
"rain": {
"min": "",
"max": ""
},
"rainIntensity": {
"min": "",
"max": ""
},
"fog": {
"min": "",
"max": ""
},
"temp": {
"min": "",
"max": ""
},
"pressure": {
"min": "",
"max": ""
}
}
},
"other": {
"hideWarningMessage": "",
"showModLogs": ""
}
}

View File

@ -0,0 +1,289 @@
export interface HTTP
{
ip: string;
port: number;
}
export interface HealthMultipliers
{
death: number;
blacked: number;
}
export interface HealthSave
{
health: boolean;
effects: boolean;
}
export interface Health
{
healthMultipliers: HealthMultipliers;
save: HealthSave;
}
export interface AmmoRewards
{
giveMultipleOfTen: boolean;
minAmount: number;
}
export interface MinMax
{
min: number;
max: number;
}
export interface MoneyRewards
{
enabled: boolean;
rub: MinMax;
usd: MinMax;
eur: MinMax
}
export interface ScavCase
{
rewardParentBlacklist: any;
rewardItemBlacklist: any;
ammoRewards: AmmoRewards;
moneyRewards: MoneyRewards;
}
export interface Hideout
{
runIntervalSeconds: number;
scavCase: ScavCase;
fuelDrainRateMultipler: number;
}
export interface LootMultiplier
{
bigmap: number;
develop: number;
factory4day: number;
factory4night: number;
interchange: number;
laboratory: number;
rezervbase: number;
shoreline: number;
woods: number;
hideout: number;
lighthouse: number;
privatearea: number;
suburbs: number;
tarkovstreets: number;
terminal: number;
town: number;
}
export interface LootValues
{
looseLootMultiplier: LootMultiplier;
staticLootMultiplier: LootMultiplier;
}
export interface AirdropChancePercent
{
bigmap: number;
woods: number;
lighthouse: number;
shoreline: number;
interchange: number;
reserve: number;
}
export interface AirdropValues
{
airdropChancePercent: AirdropChancePercent;
airdropMinOpenHeight: number;
airdropMaxOpenHeight: number;
planeMinFlyHeight: number;
planeMaxFlyHeight: number;
planeVolume: number;
airdropMinStartTimeSeconds: number;
airdropMaxStartTimeSeconds: number;
}
export interface RaidMenuSettings
{
aiAmount: string;
aiDifficulty: string;
bossEnabled: boolean;
scavWars: boolean;
taggedAndCursed: boolean;
}
export interface RaidsValuesSave
{
loot: boolean;
durability: boolean;
}
export interface Traders
{
updateTime: any;
updateTimeDefault: number;
fenceAssortSize: number;
fenceMaxPresetsCount: number;
fencePresetPriceMult: number;
minDurabilityForSale: number;
fenceItemIgnoreList: any;
}
export interface Repair
{
priceMultiplier: number;
}
export interface Insurances
{
insuranceMultiplier: any;
returnChancePercent: any;
runIntervalSeconds: number;
}
export interface Trading
{
newItemsMarkedFound: boolean;
}
export interface Chance
{
base: number;
overprices: number;
underpriced: number;
}
export interface Time
{
base: number;
min: number;
max: number;
}
export interface Reputation
{
gain: number;
loss: number;
}
export interface Sell
{
fees: boolean;
chance: Chance;
time: Time;
reputation: Reputation;
}
export interface FleaMarketTraders
{
EnablePraporOffers: boolean;
EnableTheRapistOffers: boolean;
EnableFenceOffers: false,
EnableSkierOffers: boolean;
EnablePeacekeeperOffers: boolean;
EnableMechanicOffers: boolean;
EnableRagmanOffers: boolean;
EnableJaegerOffers: boolean;
EnableAllAvailableOffers: boolean;
}
export interface Condition
{
conditionChance: number;
min: number;
max: number;
}
export interface Blacklist
{
custom: any;
enableBsgList: boolean;
enableQuestList: boolean;
}
export interface Dynamic
{
expiredOfferThreshold: number;
offerItemCount: MinMax;
price: MinMax;
endTimeSeconds: MinMax;
condition: Condition;
stackablePercent: MinMax;
nonStackableCount: MinMax;
rating: MinMax;
currencies: any;
showAsSingleStack: any;
blacklist: Blacklist;
}
export interface Weather
{
clouds: MinMax;
windSpeed: MinMax;
windDirection: MinMax;
windGustiness: MinMax;
rain: MinMax;
rainIntensity: MinMax;
fog: MinMax;
temp: MinMax;
pressure: MinMax;
}
export interface Other
{
hideWarningMessage: boolean;
showModLogs: boolean;
}
export interface ServerValues
{
http: HTTP;
health: Health;
hideout: Hideout;
}
export interface RaidsValues
{
lootValues: LootValues;
airdropValues: AirdropValues;
miaOnRaidEnd: boolean;
raidMenuSettings: RaidMenuSettings;
save: RaidsValuesSave;
carExtracts: any;
carExtractBaseStandingGain: number;
scavExtractGain: number;
}
export interface TradersValues
{
traders: Traders;
repair: Repair;
insurances: Insurances;
trading: Trading;
}
export interface FleaMarketConfiguration
{
runIntervalSeconds: number;
sell: Sell;
traders: FleaMarketTraders;
dynamic: Dynamic;
}
export interface WeatherValues
{
acceleration: number;
weather: Weather;
}
export interface IConfig
{
serverValues: ServerValues;
raidsValues: RaidsValues;
tradersValues: TradersValues;
fleaMarketConfiguration: FleaMarketConfiguration;
weatherValues: WeatherValues;
other: Other;
}

View File

@ -0,0 +1,5 @@
export interface IDailyConfig
{
redeemTime: number;
repeatableQuests: any;
}

View File

@ -0,0 +1,5 @@
export interface IDailyLocale
{
redeemTime: string;
repeatableQuests: string;
}

View File

@ -0,0 +1,289 @@
export interface HTTP
{
ip: string;
port: string;
}
export interface HealthMultipliers
{
death: string;
blacked: string;
}
export interface HealthSave
{
health: boolean;
effects: boolean;
}
export interface Health
{
healthMultipliers: HealthMultipliers;
save: HealthSave;
}
export interface AmmoRewards
{
giveMultipleOfTen: boolean;
minAmount: string;
}
export interface MinMax
{
min: string;
max: string;
}
export interface MoneyRewards
{
enabled: boolean;
rub: MinMax;
usd: MinMax;
eur: MinMax
}
export interface ScavCase
{
rewardParentBlacklist: string;
rewardItemBlacklist: string;
ammoRewards: AmmoRewards;
moneyRewards: MoneyRewards;
}
export interface Hideout
{
runIntervalSeconds: string;
scavCase: ScavCase;
fuelDrainRateMultipler: number;
}
export interface LootMultiplier
{
bigmap: string;
develop: string;
factory4day: string;
factory4night: string;
interchange: string;
laboratory: string;
rezervbase: string;
shoreline: string;
woods: string;
hideout: string;
lighthouse: string;
privatearea: string;
suburbs: string;
tarkovstreets: string;
terminal: string;
town: string;
}
export interface LootValues
{
looseLootMultiplier: LootMultiplier;
staticLootMultiplier: LootMultiplier;
}
export interface AirdropChancePercent
{
bigmap: number;
woods: number;
lighthouse: number;
shoreline: number;
interchange: number;
reserve: number;
}
export interface AirdropValues
{
airdropChancePercent: AirdropChancePercent;
airdropMinOpenHeight: number;
airdropMaxOpenHeight: number;
planeMinFlyHeight: number;
planeMaxFlyHeight: number;
planeVolume: number;
airdropMinStartTimeSeconds: number;
airdropMaxStartTimeSeconds: number;
}
export interface RaidMenuSettings
{
aiAmount: string;
aiDifficulty: string;
bossEnabled: boolean;
scavWars: boolean;
taggedAndCursed: boolean;
}
export interface RaidsValuesSave
{
loot: boolean;
durability: boolean;
}
export interface Traders
{
updateTime: string;
updateTimeDefault: string;
fenceAssortSize: string;
fenceMaxPresetsCount: string;
fencePresetPriceMult: string;
minDurabilityForSale: string;
fenceItemIgnoreList: string;
}
export interface Repair
{
priceMultiplier: string;
}
export interface Insurances
{
insuranceMultiplier: string;
returnChancePercent: string;
runIntervalSeconds: string;
}
export interface Trading
{
newItemsMarkedFound: boolean;
}
export interface Chance
{
base: string;
overprices: string;
underpriced: string;
}
export interface Time
{
base: string;
min: string;
max: string;
}
export interface Reputation
{
gain: string;
loss: string;
}
export interface Sell
{
fees: boolean;
chance: Chance;
time: Time;
reputation: Reputation;
}
export interface FleaMarketTraders
{
EnablePraporOffers: boolean;
EnableTheRapistOffers: boolean;
EnableFenceOffers: false,
EnableSkierOffers: boolean;
EnablePeacekeeperOffers: boolean;
EnableMechanicOffers: boolean;
EnableRagmanOffers: boolean;
EnableJaegerOffers: boolean;
EnableAllAvailableOffers: boolean;
}
export interface Condition
{
conditionChance: string;
min: string;
max: string;
}
export interface Blacklist
{
custom: string;
enableBsgList: boolean;
enableQuestList: boolean;
}
export interface Dynamic
{
expiredOfferThreshold: string;
offerItemCount: MinMax;
price: MinMax;
endTimeSeconds: MinMax;
condition: Condition;
stackablePercent: MinMax;
nonStackableCount: MinMax;
rating: MinMax;
currencies: string;
showAsSingleStack: string;
blacklist: Blacklist;
}
export interface Weather
{
clouds: MinMax;
windSpeed: MinMax;
windDirection: MinMax;
windGustiness: MinMax;
rain: MinMax;
rainIntensity: MinMax;
fog: MinMax;
temp: MinMax;
pressure: MinMax;
}
export interface Other
{
hideWarningMessage: boolean;
showModLogs: boolean;
}
export interface ServerValues
{
http: HTTP;
health: Health;
hideout: Hideout;
}
export interface RaidsValues
{
lootValues: LootValues;
airdropValues: AirdropValues;
miaOnRaidEnd: boolean;
raidMenuSettings: RaidMenuSettings;
save: RaidsValuesSave;
carExtracts: string;
carExtractBaseStandingGain: string;
scavExtractGain: string;
}
export interface TradersValues
{
traders: Traders;
repair: Repair;
insurances: Insurances;
trading: Trading;
}
export interface FleaMarketConfiguration
{
runIntervalSeconds: string;
sell: Sell;
traders: FleaMarketTraders;
dynamic: Dynamic;
}
export interface WeatherValues
{
acceleration: string;
weather: Weather;
}
export interface ILocale
{
serverValues: ServerValues;
raidsValues: RaidsValues;
tradersValues: TradersValues;
fleaMarketConfiguration: FleaMarketConfiguration;
weatherValues: WeatherValues;
other: Other;
}

View File

@ -0,0 +1,125 @@
export interface PresetBatch
{
assault: number;
bossBully: number;
bossGluhar: number;
bossKilla: number;
bossKojaniy: number;
bossSanitar: number;
bossTagilla: number;
bossTest: number;
cursedAssault: number;
followerBully: number;
followerGluharAssault: number;
followerGluharScout: number;
followerGluharSecurity: number;
followerGluharSnipe: number;
followerKojaniy: number;
followerSanitar: number;
followerTagilla: number;
followerTest: number;
marksman: number;
pmcBot: number;
sectantPriest: number;
sectantWarrior: number;
gifter: number;
test: number;
exUsec: number;
}
export interface DefaultArmor
{
maxDelta: number;
minDelta: number;
}
export interface PmcArmor
{
lowestMaxPercent: number;
highestMaxPercent: number;
maxDelta: number;
minDelta: number;
}
export interface Weapon
{
lowestMax: number;
highestMax: number;
maxDelta: number;
minDelta: number;
}
export interface Bot
{
armor: DefaultArmor;
weapon: Weapon;
}
export interface PMC
{
armor: PmcArmor;
weapon: Weapon;
}
export interface LootNValue
{
scav: number;
pmc: number;
}
export interface Durability
{
default: Bot;
pmc: PMC;
boss: Bot;
follower: Bot;
assault: Bot;
cursedassault: Bot;
marksman: Bot;
pmcbot: Bot;
exusec: Bot;
sectantpriest: Bot;
sectantwarrior: Bot;
}
export interface DynamicLoot
{
whitelist: any;
blacklist: any;
spawnLimits: any;
moneyStackLimits: any;
}
export interface Types
{
assault: number;
cursedAssault: number;
pmcBot: number;
exUsec: number;
}
export interface PMCConfig
{
dynamicLoot: DynamicLoot;
cartridgeBlacklist: any;
difficulty: string;
isUsec: number;
chanceSameSideIsHostilePercent: number;
usecType: string;
bearType: string;
maxBackpackLootTotalRub: number;
maxPocketLootTotalRub: number;
maxVestLootTotalRub: number;
types: Types;
}
export interface IPmcConfig
{
presetBatch: PresetBatch;
bosses: any;
durability: Durability;
lootNValue: LootNValue;
pmc: PMCConfig;
showTypeInNickname: boolean;
maxBotCap: number;
}

View File

@ -0,0 +1,125 @@
export interface PresetBatch
{
assault: string;
bossBully: string;
bossGluhar: string;
bossKilla: string;
bossKojaniy: string;
bossSanitar: string;
bossTagilla: string;
bossTest: string;
cursedAssault: string;
followerBully: string;
followerGluharAssault: string;
followerGluharScout: string;
followerGluharSecurity: string;
followerGluharSnipe: string;
followerKojaniy: string;
followerSanitar: string;
followerTagilla: string;
followerTest: string;
marksman: string;
pmcBot: string;
sectantPriest: string;
sectantWarrior: string;
gifter: string;
test: string;
exUsec: string;
}
export interface DefaultArmor
{
maxDelta: string;
minDelta: string;
}
export interface PmcArmor
{
lowestMaxPercent: string;
highestMaxPercent: string;
maxDelta: string;
minDelta: string;
}
export interface Weapon
{
lowestMax: string;
highestMax: string;
maxDelta: string;
minDelta: string;
}
export interface Bot
{
armor: DefaultArmor;
weapon: Weapon;
}
export interface PMC
{
armor: PmcArmor;
weapon: Weapon;
}
export interface LootNValue
{
scav: string;
pmc: string;
}
export interface Durability
{
default: Bot;
pmc: PMC;
boss: Bot;
follower: Bot;
assault: Bot;
cursedassault: Bot;
marksman: Bot;
pmcbot: Bot;
exusec: Bot;
sectantpriest: Bot;
sectantwarrior: Bot;
}
export interface DynamicLoot
{
whitelist: string;
blacklist: string;
spawnLimits: string;
moneyStackLimits: string;
}
export interface Types
{
assault: string;
cursedAssault: string;
pmcBot: string;
exUsec: string;
}
export interface PMCConfig
{
dynamicLoot: DynamicLoot;
cartridgeBlacklist: string;
difficulty: string;
isUsec: string;
chanceSameSideIsHostilePercent: string;
usecType: string;
bearType: string;
maxBackpackLootTotalRub: string;
maxPocketLootTotalRub: string;
maxVestLootTotalRub: string;
types: Types;
}
export interface IPmcLocale
{
presetBatch: PresetBatch;
bosses: string;
durability: Durability;
lootNValue: LootNValue;
pmc: PMCConfig;
showTypeInNickname: boolean;
maxBotCap: string;
}

26
Ereshkigal-AkiConfig/dist/package.json vendored Normal file
View File

@ -0,0 +1,26 @@
{
"name": "AkiConfig",
"version": "3.0.0",
"main": "src/mod.js",
"license": "CC-BY-NC-ND 4.0",
"author": "Ereshkigal",
"akiVersion": "3.0.0",
"updated by": "CWX, Valens, GGaulin",
"scripts": {
"setup:environment": "npm i",
"build:unzipped": "copyfiles -e \"./node_modules/**/*.*\" -e \"./dist/**/*.*\" -e \"./package-lock.json\" -e \"./tsconfig.json\" -e \"./README.txt\" -e \"./mod.code-workspace\" ./**/*.* ./dist",
"zip:files": "cd dist/ && bestzip ../mod.zip *",
"build:zip": "npm run clean:environment && npm run build:unzipped && npm run zip:files",
"clean:environment": "node -e \"require('fs').rm('mod.zip', ()=>{})\" && node -e \"require('fs').rmdir('./dist/',{recursive:true},()=>{})\""
},
"devDependencies": {
"@types/node": "^14.15.3",
"@typescript-eslint/eslint-plugin": "^4.33.0",
"@typescript-eslint/parser": "^4.33.0",
"copyfiles": "2.4.1",
"eslint": "7.26.0",
"tsyringe": "4.6.0",
"typescript": "4.6.4",
"bestzip": "2.2.1"
}
}

View File

@ -0,0 +1,58 @@
import { injectable } from "tsyringe";
import { IConfig } from "../models/IConfig";
import { IDailyConfig } from "../models/IDailyConfig";
import { IPmcConfig } from "../models/IPmcConfig";
import { ILocale } from "../models/ILocale";
import { IDailyLocale } from "../models/IDailyLocale";
import { IPmcLocale } from "../models/IPmcLocale";
@injectable()
export class AkiConfigHandler
{
private config: IConfig;
private dailyConfig: IDailyConfig;
private pmcConfig: IPmcConfig;
private locales: ILocale;
private dailyLocales: IDailyLocale;
private pmcLocales: IPmcLocale;
constructor()
{
this.config = require("../config/config.json");
this.dailyConfig = require("../config/dailyConfig.json");
this.pmcConfig = require("../config/pmcConfig.json");
this.locales = require("../locale/locale.json");
this.dailyLocales = require("../locale/dailyLocale.json");
this.pmcLocales = require("../locale/pmcLocale.json");
}
public getConfig(): IConfig
{
return this.config;
}
public getDailyConfig(): IDailyConfig
{
return this.dailyConfig;
}
public getPmcConfig(): IPmcConfig
{
return this.pmcConfig;
}
public getLocales(): ILocale
{
return this.locales;
}
public getDailyLocales(): IDailyLocale
{
return this.dailyLocales;
}
public getPmcLocales(): IPmcLocale
{
return this.pmcLocales;
}
}

50
Ereshkigal-AkiConfig/dist/src/bots.ts vendored Normal file
View File

@ -0,0 +1,50 @@
import { inject, injectable } from "tsyringe";
import type { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { IBotConfig } from "@spt-aki/models/spt/config/IBotConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
import { AkiConfigHandler } from "./AkiConfigHandler";
@injectable()
export class Bots
{
constructor(
@inject("AkiConfigHandler") protected configHandler: AkiConfigHandler,
@inject("ConfigServer") protected configServer: ConfigServer,
@inject("WinstonLogger") private logger: ILogger
)
{}
public applyChanges(): void
{
const pmcConfig = this.configHandler.getPmcConfig();
const bots = this.configServer.getConfig<IBotConfig>(ConfigTypes.BOT);
for (const bot in pmcConfig.pmc.types)
{
switch (bot)
{
default:
bots.pmc.types[bot] = pmcConfig.pmc.types[bot];
break;
}
}
for (const options in pmcConfig.pmc)
{
switch (options)
{
case "types":
break;
default:
bots.pmc[options] = pmcConfig.pmc[options];
break;
}
}
for (const bot in pmcConfig.presetBatch)
{
bots.presetBatch[bot] = pmcConfig.presetBatch[bot];
}
}
}

View File

@ -0,0 +1,240 @@
import { inject, injectable } from "tsyringe";
import type { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { IBotConfig } from "@spt-aki/models/spt/config/IBotConfig";
import { IHealthConfig } from "@spt-aki/models/spt/config/IHealthConfig";
import { IHideoutConfig } from "@spt-aki/models/spt/config/IHideoutConfig";
import { IHttpConfig } from "@spt-aki/models/spt/config/IHttpConfig";
import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
import { IInsuranceConfig } from "@spt-aki/models/spt/config/IInsuranceConfig";
import { IInventoryConfig } from "@spt-aki/models/spt/config/IInventoryConfig";
import { ILocationConfig } from "@spt-aki/models/spt/config/ILocationConfig";
import { IQuestConfig } from "@spt-aki/models/spt/config/IQuestConfig";
import { IRagfairConfig } from "@spt-aki/models/spt/config/IRagfairConfig";
import { IRepairConfig } from "@spt-aki/models/spt/config/IRepairConfig";
import { ITraderConfig } from "@spt-aki/models/spt/config/ITraderConfig";
import { IWeatherConfig } from "@spt-aki/models/spt/config/IWeatherConfig";
import { IAirdropConfig } from "@spt-aki/models/spt/config/IAirdropConfig";
import { VFS } from "@spt-aki/utils/VFS";
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
import { JsonUtil } from "@spt-aki/utils/JsonUtil";
@injectable()
export class Generator
{
private pkg = require("../package.json");
constructor(
@inject("VFS") protected vfs: VFS,
@inject("JsonUtil") protected jsonUtil: JsonUtil,
@inject("ConfigServer") protected configServer: ConfigServer,
@inject("WinstonLogger") private logger: ILogger
)
{}
private createConfig(modPath: string, file: string): void
{
let config = null;
let dailyConfig = null;
let pmcConfig = null;
/*
Generate the whole configuration on first run
This way the default values are always up to date to AKI.
*/
//The default file type must be an object
config = {
"Server values": {
//"Enable Christmas Gifts": false,
"HTTP": {},
"Health": {},
"Hideout": {}
},
"Raids values": {
"Loot values": {},
"Airdrop values": {}
},
"Traders values": {
"Traders": {},
"Repair": {},
"Insurances": {},
"Trading": {}
},
"FleaMarket configuration": {},
"Weather values": {}
};
dailyConfig = {};
pmcConfig = {};
//We will have to gather every config that exists atm and throw them together into the object
const bots = this.configServer.getConfig<IBotConfig>(ConfigTypes.BOT);
const health = this.configServer.getConfig<IHealthConfig>(ConfigTypes.HEALTH);
const hideout = this.configServer.getConfig<IHideoutConfig>(ConfigTypes.HIDEOUT);
const http = this.configServer.getConfig<IHttpConfig>(ConfigTypes.HTTP);
const inraid = this.configServer.getConfig<IInRaidConfig>(ConfigTypes.IN_RAID);
const insurance = this.configServer.getConfig<IInsuranceConfig>(ConfigTypes.INSURANCE);
const inventory = this.configServer.getConfig<IInventoryConfig>(ConfigTypes.INVENTORY);
const location = this.configServer.getConfig<ILocationConfig>(ConfigTypes.LOCATION);
const quest = this.configServer.getConfig<IQuestConfig>(ConfigTypes.QUEST);
const ragfair = this.configServer.getConfig<IRagfairConfig>(ConfigTypes.RAGFAIR);
const repair = this.configServer.getConfig<IRepairConfig>(ConfigTypes.REPAIR);
const trader = this.configServer.getConfig<ITraderConfig>(ConfigTypes.TRADER);
const weather = this.configServer.getConfig<IWeatherConfig>(ConfigTypes.WEATHER);
const airdrops = this.configServer.getConfig<IAirdropConfig>(ConfigTypes.AIRDROP);
//Sorting the http values
Object.assign(config["Server values"]["HTTP"], http);
//Sorting the health config
Object.assign(config["Server values"]["Health"], health);
//Sorting the hideout values
Object.assign(config["Server values"]["Hideout"], hideout);
//Sorting the inraid values
Object.assign(config["Raids values"], inraid);
//Sorting location values
Object.assign(config["Raids values"]["Loot values"], location);
//Sorting airdrop values
//Object.assign(config["Raids values"]["Airdrop values"], airdrops)
//Sorting trader values
Object.assign(config["Traders values"]["Traders"], trader);
//Sorting repair values
Object.assign(config["Traders values"]["Repair"], repair);
//Sorting insurance values
Object.assign(config["Traders values"]["Insurances"], insurance);
//Sorting inventory values
Object.assign(config["Traders values"]["Trading"], inventory);
//Sorting quest values
Object.assign(dailyConfig, quest);
//Sorting the bots config now
Object.assign(pmcConfig, bots);
//Sorting ragfair values
Object.assign(config["FleaMarket configuration"], ragfair);
//Weather values
Object.assign(config["Weather values"], weather);
//Some personnal changes for end-user
config["FleaMarket configuration"].traders = {
EnablePraporOffers: true,
EnableTheRapistOffers: true,
EnableFenceOffers: false,
EnableSkierOffers: true,
EnablePeacekeeperOffers: true,
EnableMechanicOffers: true,
EnableRagmanOffers: true,
EnableJaegerOffers: true,
EnableAllAvailableOffers: false,
};
if (file === null) {
//Write the config in the folder
this.vfs.writeFile(
`${modPath}config/config.json`,
this.jsonUtil.serialize(config, true)
);
this.vfs.writeFile(
`${modPath}config/dailyConfig.json`,
this.jsonUtil.serialize(dailyConfig, true)
);
this.vfs.writeFile(
`${modPath}config/pmcConfig.json`,
this.jsonUtil.serialize(pmcConfig, true)
);
}
else
{
this.logger.warning(`[AKI-CONFIG] - Generating ${file} file`)
let toWrite = null
if (file === "config")
{
toWrite = config
}
else if (file === 'dailyConfig')
{
toWrite = dailyConfig
}
else if (file === 'pmcConfig')
{
toWrite = pmcConfig
}
this.vfs.writeFile(
`${modPath}config/${file}.json`,
this.jsonUtil.serialize(toWrite, true)
);
}
this.logger.error("[AKI-Config]: New configuration file created, please restart your server to use it.");
}
public checkConfigExisting(modPath: string): void
{
const validation = [];
//Check if config folder exists
if (this.vfs.exists(`${modPath}config`))
{
//Check if all the config folder exists
const fileList = this.vfs.getFiles(`${modPath}config/`);
for (const file in fileList)
{
const fileName = fileList[file];
if (fileName === "config.json")
{
validation.push("config");
}
if (fileName === "dailyConfig.json")
{
validation.push("dailyConfig");
}
if (fileName === "pmcConfig.json")
{
validation.push("pmcConfig");
}
}
//All configurations files existing
if ((validation.length === 3))
{
this.logger.success(
"[AKI-CONFIG] - All configurations files already created, all green."
);
}
else
{
//One of the 3 file is missing, we only want to regenerate the missing one
this.logger.error(
"[AKI-CONFIG] - A config file is missing. Generating the missing file"
);
if (!validation.includes("config"))
{
this.createConfig(modPath, "config");
}
if (!validation.includes("dailyConfig"))
{
this.createConfig(modPath, "dailyConfig");
}
if (!validation.includes("pmcConfig"))
{
this.createConfig(modPath, "pmcConfig");
}
}
}
else
{
this.logger.warning(
"First time AKI-Configurator is run, generating the config file..."
);
this.createConfig(modPath, null);
}
}
}

61
Ereshkigal-AkiConfig/dist/src/mod.ts vendored Normal file
View File

@ -0,0 +1,61 @@
import { DependencyContainer, Lifecycle } from "tsyringe";
import type { IMod } from "@spt-aki/models/external/mod";
import type { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { InitialModLoader } from "@spt-aki/loaders/InitialModLoader";
import { Generator } from "./generator";
import { Ragfair } from "./ragfair";
import { Weather } from "./weather";
import { Bots } from "./bots";
import { Raids } from "./raids";
import { Server } from "./server";
import { Traders } from "./traders";
import { Quests } from "./quests";
import { Notifications } from "./notifications";
import { AkiConfigHandler } from "./AkiConfigHandler";
class AkiConfig implements IMod
{
private logger: ILogger;
private pkg;
public load(container: DependencyContainer): void
{
container.register<AkiConfigHandler>("AkiConfigHandler", AkiConfigHandler, {lifecycle:Lifecycle.Singleton});
container.register<Generator>("Generator", Generator);
container.register<Ragfair>("Ragfair", Ragfair);
container.register<Weather>("Weather", Weather);
container.register<Bots>("Bots", Bots);
container.register<Raids>("Raids", Raids);
container.register<Server>("Server", Server);
container.register<Traders>("Traders", Traders);
container.register<Quests>("Quests", Quests);
container.register<Notifications>("Notifications", Notifications);
this.logger = container.resolve<ILogger>("WinstonLogger");
this.pkg = require("../package.json");
this.logger.info(`Loading: ${this.pkg.name} ${this.pkg.version}`);
}
public delayedLoad(container: DependencyContainer): void
{
const initialModLoader = container.resolve<InitialModLoader>("InitialModLoader");
const modPath = `./${initialModLoader.getModPath(this.pkg.name)}`;
container.resolve<Generator>("Generator").checkConfigExisting(modPath);
container.resolve<Ragfair>("Ragfair").applyChanges();
container.resolve<Weather>("Weather").applyChanges();
container.resolve<Bots>("Bots").applyChanges();
container.resolve<Raids>("Raids").applyChanges();
container.resolve<Server>("Server").applyChanges();
container.resolve<Traders>("Traders").applyChanges();
container.resolve<Quests>("Quests").applyChanges();
if (container.resolve<AkiConfigHandler>("AkiConfigHandler").getConfig().other.showModLogs)
{
container.resolve<Notifications>("Notifications").sendNotifications()
}
}
}
module.exports = { mod: new AkiConfig() };

View File

@ -0,0 +1,28 @@
import { inject, injectable } from "tsyringe";
import type { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { AkiConfigHandler } from "./AkiConfigHandler";
@injectable()
export class Notifications
{
constructor(
@inject("WinstonLogger") private logger: ILogger,
@inject("AkiConfigHandler") private configHandler: AkiConfigHandler
)
{}
public sendNotifications(): void
{
const config = this.configHandler.getConfig();
const locale = this.configHandler.getLocales();
if (!config.other.hideWarningMessage)
{
this.logger.log("[AIO Config INFORMATION]", "yellow");
this.logger.info("Please read the AKICONFIG README.pdf carefully as this has all the information you need.");
this.logger.log("[AIO Config INFORMATION]", "yellow");
}
}
}

26
Ereshkigal-AkiConfig/dist/src/quests.ts vendored Normal file
View File

@ -0,0 +1,26 @@
import { inject, injectable } from "tsyringe";
import type { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { IQuestConfig } from "@spt-aki/models/spt/config/IQuestConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
import { AkiConfigHandler } from "./AkiConfigHandler";
@injectable()
export class Quests
{
constructor(
@inject("AkiConfigHandler") protected configHandler: AkiConfigHandler,
@inject("ConfigServer") protected configServer: ConfigServer,
@inject("WinstonLogger") private logger: ILogger
)
{}
public applyChanges(): void
{
const dailyConfig = this.configHandler.getDailyConfig();
const questConfig = this.configServer.getConfig<IQuestConfig>(ConfigTypes.QUEST);
questConfig.redeemTime = dailyConfig.redeemTime;
questConfig.repeatableQuests = dailyConfig.repeatableQuests;
}
}

View File

@ -0,0 +1,72 @@
import { inject, injectable } from "tsyringe";
import type { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { IRagfairConfig } from "@spt-aki/models/spt/config/IRagfairConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
import { Traders } from "@spt-aki/models/enums/Traders";
import { AkiConfigHandler } from "./AkiConfigHandler";
@injectable()
export class Ragfair
{
constructor(
@inject("AkiConfigHandler") protected configHandler: AkiConfigHandler,
@inject("ConfigServer") protected configServer: ConfigServer,
@inject("WinstonLogger") private logger: ILogger
)
{}
public applyChanges(): void
{
const config = this.configHandler.getConfig();
const ragfair = this.configServer.getConfig<IRagfairConfig>(ConfigTypes.RAGFAIR);
for (const options in ragfair.sell)
{
ragfair.sell[options] = config["FleaMarket configuration"].sell[options];
}
for (const options in ragfair.dynamic)
{
ragfair.dynamic[options] = config["FleaMarket configuration"].dynamic[options];
}
const traderList = config["FleaMarket configuration"].traders;
for (const trader in config["FleaMarket configuration"].traders)
{
switch (trader)
{
case "EnablePraporOffers":
ragfair.traders[Traders.PRAPOR] = traderList.EnablePraporOffers;
break;
case "EnableTheRapistOffers":
ragfair.traders[Traders.THERAPIST] = traderList.EnableTheRapistOffers;
break;
case "EnableFenceOffers":
ragfair.traders[Traders.FENCE] = traderList.EnableFenceOffers;
break;
case "EnableSkierOffers":
ragfair.traders[Traders.SKIER] = traderList.EnableSkierOffers;
break;
case "EnablePeacekeeperOffers":
ragfair.traders[Traders.PEACEKEEPER] = traderList.EnablePeacekeeperOffers;
break;
case "EnableMechanicOffers":
ragfair.traders[Traders.MECHANIC] = traderList.EnableMechanicOffers;
break;
case "EnableRagmanOffers":
ragfair.traders[Traders.RAGMAN] = traderList.EnableRagmanOffers;
break;
case "EnableJaegerOffers":
ragfair.traders[Traders.JAEGER] = traderList.EnableJaegerOffers;
break;
case "EnableAllAvailableOffers":
ragfair.traders["ragfair"] = traderList.EnableAllAvailableOffers;
break;
default:
ragfair.traders[trader] = traderList[trader];
break;
}
}
}
}

40
Ereshkigal-AkiConfig/dist/src/raids.ts vendored Normal file
View File

@ -0,0 +1,40 @@
import { inject, injectable } from "tsyringe";
import type { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { IInRaidConfig } from "@spt-aki/models/spt/config/IInRaidConfig";
import { ILocationConfig } from "@spt-aki/models/spt/config/ILocationConfig";
import { IAirdropConfig } from "@spt-aki/models/spt/config/IAirdropConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
import { AkiConfigHandler } from "./AkiConfigHandler";
@injectable()
export class Raids
{
constructor(
@inject("AkiConfigHandler") protected configHandler: AkiConfigHandler,
@inject("ConfigServer") protected configServer: ConfigServer,
@inject("WinstonLogger") private logger: ILogger
)
{}
public applyChanges(): void
{
const config = this.configHandler.getConfig();
const locationConfig = this.configServer.getConfig<ILocationConfig>(ConfigTypes.LOCATION);
const airdropConfig = this.configServer.getConfig<IAirdropConfig>(ConfigTypes.AIRDROP);
const inRaidConfig = this.configServer.getConfig<IInRaidConfig>(ConfigTypes.IN_RAID);
locationConfig.looseLootMultiplier = config["Raids values"]["Loot values"].looseLootMultiplier;
locationConfig.staticLootMultiplier = config["Raids values"]["Loot values"].staticLootMultiplier;
for (const options in airdropConfig)
{
airdropConfig[options] = config["Raids values"]["Airdrop values"][options];
}
for (const options in inRaidConfig)
{
inRaidConfig[options] = config["Raids values"][options];
}
}
}

37
Ereshkigal-AkiConfig/dist/src/server.ts vendored Normal file
View File

@ -0,0 +1,37 @@
import { inject, injectable } from "tsyringe";
import type { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { IHealthConfig } from "@spt-aki/models/spt/config/IHealthConfig";
import { IHideoutConfig } from "@spt-aki/models/spt/config/IHideoutConfig";
import { IHttpConfig } from "@spt-aki/models/spt/config/IHttpConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
import { AkiConfigHandler } from "./AkiConfigHandler";
@injectable()
export class Server
{
constructor(
@inject("AkiConfigHandler") protected configHandler: AkiConfigHandler,
@inject("ConfigServer") protected configServer: ConfigServer,
@inject("WinstonLogger") private logger: ILogger
)
{}
public applyChanges(): void
{
const config = this.configHandler.getConfig();
const serverConfig = this.configServer.getConfig<IHttpConfig>(ConfigTypes.HTTP);
const healthConfig = this.configServer.getConfig<IHealthConfig>(ConfigTypes.HEALTH);
const hideoutConfig = this.configServer.getConfig<IHideoutConfig>(ConfigTypes.HIDEOUT);
serverConfig.ip = config["Server values"].HTTP.ip;
serverConfig.port = config["Server values"].HTTP.port;
healthConfig.healthMultipliers = config["Server values"].Health.healthMultipliers;
healthConfig.save = config["Server values"].Health.save;
hideoutConfig.runIntervalSeconds = config["Server values"].Hideout.runIntervalSeconds;
hideoutConfig.scavCase = config["Server values"].Hideout.scavCase;
hideoutConfig.fuelDrainRateMultipler = config["Server values"].Hideout.fuelDrainRateMultipler;
}
}

View File

@ -0,0 +1,49 @@
import { inject, injectable } from "tsyringe";
import type { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { IInsuranceConfig } from "@spt-aki/models/spt/config/IInsuranceConfig";
import { IInventoryConfig } from "@spt-aki/models/spt/config/IInventoryConfig";
import { IRepairConfig } from "@spt-aki/models/spt/config/IRepairConfig";
import { ITraderConfig } from "@spt-aki/models/spt/config/ITraderConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
import { AkiConfigHandler } from "./AkiConfigHandler";
@injectable()
export class Traders
{
constructor(
@inject("AkiConfigHandler") protected configHandler: AkiConfigHandler,
@inject("ConfigServer") protected configServer: ConfigServer,
@inject("WinstonLogger") private logger: ILogger
)
{}
public applyChanges(): void
{
const config = this.configHandler.getConfig();
const insurance = this.configServer.getConfig<IInsuranceConfig>(ConfigTypes.INSURANCE);
const inventory = this.configServer.getConfig<IInventoryConfig>(ConfigTypes.INVENTORY);
const repair = this.configServer.getConfig<IRepairConfig>(ConfigTypes.REPAIR);
const trader = this.configServer.getConfig<ITraderConfig>(ConfigTypes.TRADER);
for (const options in insurance)
{
insurance[options] = config["Traders values"].Insurances[options];
}
for (const options in inventory)
{
inventory[options] = config["Traders values"].Trading[options];
}
for (const options in repair)
{
repair[options] = config["Traders values"].Repair[options];
}
for (const options in trader)
{
trader[options] = config["Traders values"].Traders[options];
}
}
}

View File

@ -0,0 +1,43 @@
import { inject, injectable } from "tsyringe";
import type { ILogger } from "@spt-aki/models/spt/utils/ILogger";
import { IWeatherConfig } from "@spt-aki/models/spt/config/IWeatherConfig";
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
import { AkiConfigHandler } from "./AkiConfigHandler";
@injectable()
export class Weather
{
constructor(
@inject("AkiConfigHandler") protected configHandler: AkiConfigHandler,
@inject("ConfigServer") protected configServer: ConfigServer,
@inject("WinstonLogger") private logger: ILogger
)
{}
public applyChanges(): void
{
const config = this.configHandler.getConfig();
const weatherValues = this.configServer.getConfig<IWeatherConfig>(ConfigTypes.WEATHER);
weatherValues.acceleration = config["Weather values"].acceleration;
weatherValues.weather.clouds.min = config["Weather values"].weather.clouds.min;
weatherValues.weather.clouds.max = config["Weather values"].weather.clouds.max;
weatherValues.weather.windSpeed.min = config["Weather values"].weather.windSpeed.min;
weatherValues.weather.windSpeed.max = config["Weather values"].weather.windSpeed.max;
weatherValues.weather.windDirection.min = config["Weather values"].weather.windDirection.min;
weatherValues.weather.windDirection.max = config["Weather values"].weather.windDirection.max;
weatherValues.weather.windGustiness.min = config["Weather values"].weather.windGustiness.min;
weatherValues.weather.windGustiness.max = config["Weather values"].weather.windGustiness.max;
weatherValues.weather.rain.min = config["Weather values"].weather.rain.min;
weatherValues.weather.rain.max = config["Weather values"].weather.rain.max;
weatherValues.weather.rainIntensity.min = config["Weather values"].weather.rainIntensity.min;
weatherValues.weather.rainIntensity.max = config["Weather values"].weather.rainIntensity.max;
weatherValues.weather.fog.min = config["Weather values"].weather.fog.min;
weatherValues.weather.fog.max = config["Weather values"].weather.fog.max;
weatherValues.weather.temp.min = config["Weather values"].weather.temp.min;
weatherValues.weather.temp.max = config["Weather values"].weather.temp.max;
weatherValues.weather.pressure.min = config["Weather values"].weather.pressure.min;
weatherValues.weather.pressure.max = config["Weather values"].weather.pressure.max;
}
}

View File

@ -0,0 +1,4 @@
export declare class Program {
constructor();
start(): void;
}

View File

@ -0,0 +1,3 @@
export declare const TYPES: {
[name: string]: symbol;
};

View File

@ -0,0 +1,15 @@
import { BotController } from "../controllers/BotController";
import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IBotBase } from "../models/eft/common/tables/IBotBase";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class BotCallbacks {
protected botController: BotController;
protected httpResponse: HttpResponseUtil;
constructor(botController: BotController, httpResponse: HttpResponseUtil);
getBotLimit(url: string, info: IEmptyRequestData, sessionID: string): string;
getBotDifficulty(url: string, info: IEmptyRequestData, sessionID: string): string;
generateBots(url: string, info: IGenerateBotsRequestData, sessionID: string): IGetBodyResponseData<IBotBase[]>;
getBotCap(): string;
}

View File

@ -0,0 +1,18 @@
import { BundleLoader } from "../loaders/BundleLoader";
import { IHttpConfig } from "../models/spt/config/IHttpConfig";
import { IHttpServer } from "../models/spt/server/IHttpServer";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class BundleCallbacks {
protected logger: ILogger;
protected httpResponse: HttpResponseUtil;
protected httpServer: IHttpServer;
protected bundleLoader: BundleLoader;
protected configServer: ConfigServer;
protected httpConfig: IHttpConfig;
constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpServer: IHttpServer, bundleLoader: BundleLoader, configServer: ConfigServer);
sendBundle(sessionID: string, req: any, resp: any, body: any): any;
getBundles(url: string, info: any, sessionID: string): string;
getBundle(url: string, info: any, sessionID: string): string;
}

View File

@ -0,0 +1,23 @@
import { CustomizationController } from "../controllers/CustomizationController";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IPmcData } from "../models/eft/common/IPmcData";
import { ISuit } from "../models/eft/common/tables/ITrader";
import { IBuyClothingRequestData } from "../models/eft/customization/IBuyClothingRequestData";
import { IWearClothingRequestData } from "../models/eft/customization/IWearClothingRequestData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { SaveServer } from "../servers/SaveServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class CustomizationCallbacks {
protected customizationController: CustomizationController;
protected saveServer: SaveServer;
protected httpResponse: HttpResponseUtil;
constructor(customizationController: CustomizationController, saveServer: SaveServer, httpResponse: HttpResponseUtil);
getSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<{
_id: string;
suites: string[];
}>;
getTraderSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ISuit[]>;
wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse;
buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,32 @@
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IGlobals } from "../models/eft/common/IGlobals";
import { ICustomizationItem } from "../models/eft/common/tables/ICustomizationItem";
import { IQuest } from "../models/eft/common/tables/IQuest";
import { IHideoutArea } from "../models/eft/hideout/IHideoutArea";
import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction";
import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase";
import { IHideoutSettingsBase } from "../models/eft/hideout/IHideoutSettingsBase";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { ILanguageBase } from "../models/spt/server/ILocaleBase";
import { ISettingsBase } from "../models/spt/server/ISettingsBase";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class DataCallbacks {
protected httpResponse: HttpResponseUtil;
protected databaseServer: DatabaseServer;
constructor(httpResponse: HttpResponseUtil, databaseServer: DatabaseServer);
getSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ISettingsBase>;
getGlobals(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGlobals>;
getTemplateItems(url: string, info: IEmptyRequestData, sessionID: string): string;
getTemplateHandbook(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
getTemplateSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<Record<string, ICustomizationItem>>;
getTemplateCharacter(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<string[]>;
getTemplateQuests(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IQuest[]>;
getHideoutSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutSettingsBase>;
getHideoutAreas(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutArea[]>;
gethideoutProduction(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutProduction[]>;
getHideoutScavcase(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutScavCase[]>;
getLocalesLanguages(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ILanguageBase[]>;
getLocalesMenu(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
getLocalesGlobal(url: string, info: IEmptyRequestData, sessionID: string): string;
}

View File

@ -0,0 +1,45 @@
import { DialogueController } from "../controllers/DialogueController";
import { OnUpdate } from "../di/OnUpdate";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IFriendRequestData } from "../models/eft/dialog/IFriendRequestData";
import { IGetAllAttachmentsRequestData } from "../models/eft/dialog/IGetAllAttachmentsRequestData";
import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
import { IGetChatServerListRequestData } from "../models/eft/dialog/IGetChatServerListRequestData";
import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse";
import { IGetMailDialogInfoRequestData } from "../models/eft/dialog/IGetMailDialogInfoRequestData";
import { IGetMailDialogListRequestData } from "../models/eft/dialog/IGetMailDialogListRequestData";
import { IGetMailDialogViewRequestData } from "../models/eft/dialog/IGetMailDialogViewRequestData";
import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
import { IPinDialogRequestData } from "../models/eft/dialog/IPinDialogRequestData";
import { IRemoveDialogRequestData } from "../models/eft/dialog/IRemoveDialogRequestData";
import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest";
import { ISetDialogReadRequestData } from "../models/eft/dialog/ISetDialogReadRequestData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
import { DialogueInfo } from "../models/eft/profile/IAkiProfile";
import { HashUtil } from "../utils/HashUtil";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class DialogueCallbacks extends OnUpdate {
protected hashUtil: HashUtil;
protected timeUtil: TimeUtil;
protected httpResponse: HttpResponseUtil;
protected dialogueController: DialogueController;
constructor(hashUtil: HashUtil, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, dialogueController: DialogueController);
getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>;
getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<any[]>;
getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>;
getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>;
getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<any>;
removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
setRead(url: string, info: ISetDialogReadRequestData, sessionID: string): IGetBodyResponseData<any[]>;
getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>;
listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData;
sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>;
onUpdate(timeSinceLastRun: number): boolean;
getRoute(): string;
}

View File

@ -0,0 +1,24 @@
import { GameController } from "../controllers/GameController";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
import { IGameEmptyCrcRequestData } from "../models/eft/game/IGameEmptyCrcRequestData";
import { IVersionValidateRequestData } from "../models/eft/game/IVersionValidateRequestData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { Watermark } from "../utils/Watermark";
declare class GameCallbacks {
protected httpResponse: HttpResponseUtil;
protected watermark: Watermark;
protected gameController: GameController;
constructor(httpResponse: HttpResponseUtil, watermark: Watermark, gameController: GameController);
versionValidate(url: string, info: IVersionValidateRequestData, sessionID: string): INullResponseData;
gameStart(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
gameLogout(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
getGameConfig(url: string, info: IGameEmptyCrcRequestData, sessionID: string): IGetBodyResponseData<IGameConfigResponse>;
getServer(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
validateGameVersion(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
gameKeepalive(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
getVersion(url: string, info: IEmptyRequestData, sessionID: string): string;
}
export { GameCallbacks };

View File

@ -0,0 +1,8 @@
import { HandbookController } from "../controllers/HandbookController";
import { OnLoad } from "../di/OnLoad";
export declare class HandbookCallbacks extends OnLoad {
protected handbookController: HandbookController;
constructor(handbookController: HandbookController);
onLoad(): void;
getRoute(): string;
}

View File

@ -0,0 +1,20 @@
import { HealthController } from "../controllers/HealthController";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IHealthTreatmentRequestData } from "../models/eft/health/IHealthTreatmentRequestData";
import { IOffraidEatRequestData } from "../models/eft/health/IOffraidEatRequestData";
import { IOffraidHealRequestData } from "../models/eft/health/IOffraidHealRequestData";
import { ISyncHealthRequestData } from "../models/eft/health/ISyncHealthRequestData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class HealthCallbacks {
protected httpResponse: HttpResponseUtil;
protected profileHelper: ProfileHelper;
protected healthController: HealthController;
constructor(httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, healthController: HealthController);
syncHealth(url: string, info: ISyncHealthRequestData, sessionID: string): IGetBodyResponseData<string>;
offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse;
offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse;
healthTreatment(pmcData: IPmcData, info: IHealthTreatmentRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,33 @@
import { HideoutController } from "../controllers/HideoutController";
import { OnUpdate } from "../di/OnUpdate";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IHideoutContinousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinousProductionStartRequestData";
import { IHideoutPutItemInRequestData } from "../models/eft/hideout/IHideoutPutItemInRequestData";
import { IHideoutScavCaseStartRequestData } from "../models/eft/hideout/IHideoutScavCaseStartRequestData";
import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData";
import { IHideoutTakeItemOutRequestData } from "../models/eft/hideout/IHideoutTakeItemOutRequestData";
import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideoutTakeProductionRequestData";
import { IHideoutToggleAreaRequestData } from "../models/eft/hideout/IHideoutToggleAreaRequestData";
import { IHideoutUpgradeCompleteRequestData } from "../models/eft/hideout/IHideoutUpgradeCompleteRequestData";
import { IHideoutUpgradeRequestData } from "../models/eft/hideout/IHideoutUpgradeRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IHideoutConfig } from "../models/spt/config/IHideoutConfig";
import { ConfigServer } from "../servers/ConfigServer";
export declare class HideoutCallbacks extends OnUpdate {
protected hideoutController: HideoutController;
protected configServer: ConfigServer;
protected hideoutConfig: IHideoutConfig;
constructor(hideoutController: HideoutController, // TODO: delay needed
configServer: ConfigServer);
upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse;
upgradeComplete(pmcData: IPmcData, body: IHideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse;
putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse;
takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse;
toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse;
singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse;
continuousProductionStart(pmcData: IPmcData, body: IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
onUpdate(timeSinceLastRun: number): boolean;
getRoute(): string;
}

View File

@ -0,0 +1,9 @@
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

@ -0,0 +1,23 @@
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

@ -0,0 +1,24 @@
import { InsuranceController } from "../controllers/InsuranceController";
import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { IGetInsuranceCostRequestData } from "../models/eft/insurance/IGetInsuranceCostRequestData";
import { IInsureRequestData } from "../models/eft/insurance/IInsureRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { InsuranceService } from "../services/InsuranceService";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class InsuranceCallbacks extends OnLoadOnUpdate {
protected insuranceController: InsuranceController;
protected insuranceService: InsuranceService;
protected httpResponse: HttpResponseUtil;
protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig;
constructor(insuranceController: InsuranceController, insuranceService: InsuranceService, httpResponse: HttpResponseUtil, configServer: ConfigServer);
onLoad(): void;
getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): IGetBodyResponseData<any>;
insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse;
onUpdate(secondsSinceLastRun: number): boolean;
getRoute(): string;
}

View File

@ -0,0 +1,39 @@
import { InventoryController } from "../controllers/InventoryController";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IInventoryBindRequestData } from "../models/eft/inventory/IInventoryBindRequestData";
import { IInventoryCreateMarkerRequestData } from "../models/eft/inventory/IInventoryCreateMarkerRequestData";
import { IInventoryDeleteMarkerRequestData } from "../models/eft/inventory/IInventoryDeleteMarkerRequestData";
import { IInventoryEditMarkerRequestData } from "../models/eft/inventory/IInventoryEditMarkerRequestData";
import { IInventoryExamineRequestData } from "../models/eft/inventory/IInventoryExamineRequestData";
import { IInventoryFoldRequestData } from "../models/eft/inventory/IInventoryFoldRequestData";
import { IInventoryMergeRequestData } from "../models/eft/inventory/IInventoryMergeRequestData";
import { IInventoryMoveRequestData } from "../models/eft/inventory/IInventoryMoveRequestData";
import { IInventoryReadEncyclopediaRequestData } from "../models/eft/inventory/IInventoryReadEncyclopediaRequestData";
import { IInventoryRemoveRequestData } from "../models/eft/inventory/IInventoryRemoveRequestData";
import { IInventorySortRequestData } from "../models/eft/inventory/IInventorySortRequestData";
import { IInventorySplitRequestData } from "../models/eft/inventory/IInventorySplitRequestData";
import { IInventorySwapRequestData } from "../models/eft/inventory/IInventorySwapRequestData";
import { IInventoryTagRequestData } from "../models/eft/inventory/IInventoryTagRequestData";
import { IInventoryToggleRequestData } from "../models/eft/inventory/IInventoryToggleRequestData";
import { IInventoryTransferRequestData } from "../models/eft/inventory/IInventoryTransferRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
export declare class InventoryCallbacks {
protected inventoryController: InventoryController;
constructor(inventoryController: InventoryController);
moveItem(pmcData: IPmcData, body: IInventoryMoveRequestData, sessionID: string): IItemEventRouterResponse;
removeItem(pmcData: IPmcData, body: IInventoryRemoveRequestData, sessionID: string): IItemEventRouterResponse;
splitItem(pmcData: IPmcData, body: IInventorySplitRequestData, sessionID: string): IItemEventRouterResponse;
mergeItem(pmcData: IPmcData, body: IInventoryMergeRequestData, sessionID: string): IItemEventRouterResponse;
transferItem(pmcData: IPmcData, body: IInventoryTransferRequestData, sessionID: string): IItemEventRouterResponse;
swapItem(pmcData: IPmcData, body: IInventorySwapRequestData, sessionID: string): IItemEventRouterResponse;
foldItem(pmcData: IPmcData, body: IInventoryFoldRequestData, sessionID: string): IItemEventRouterResponse;
toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse;
tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse;
bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse;
examineItem(pmcData: IPmcData, body: IInventoryExamineRequestData, sessionID: string): IItemEventRouterResponse;
readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse;
sortInventory(pmcData: IPmcData, body: IInventorySortRequestData, sessionID: string): IItemEventRouterResponse;
createMapMarker(pmcData: IPmcData, body: IInventoryCreateMarkerRequestData, sessionID: string): IItemEventRouterResponse;
deleteMapMarker(pmcData: IPmcData, body: IInventoryDeleteMarkerRequestData, sessionID: string): IItemEventRouterResponse;
editMapMarker(pmcData: IPmcData, body: IInventoryEditMarkerRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,11 @@
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { IItemEventRouterRequest } from "../models/eft/itemEvent/IItemEventRouterRequest";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class ItemEventCallbacks {
protected httpResponse: HttpResponseUtil;
protected itemEventRouter: ItemEventRouter;
constructor(httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter);
handleEvents(url: string, info: IItemEventRouterRequest, sessionID: string): IGetBodyResponseData<IItemEventRouterResponse>;
}

View File

@ -0,0 +1,28 @@
import { LauncherController } from "../controllers/LauncherController";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IChangeRequestData } from "../models/eft/launcher/IChangeRequestData";
import { ILoginRequestData } from "../models/eft/launcher/ILoginRequestData";
import { IRegisterData } from "../models/eft/launcher/IRegisterData";
import { IRemoveProfileData } from "../models/eft/launcher/IRemoveProfileData";
import { SaveServer } from "../servers/SaveServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { Watermark } from "../utils/Watermark";
declare class LauncherCallbacks {
protected httpResponse: HttpResponseUtil;
protected launcherController: LauncherController;
protected saveServer: SaveServer;
protected watermark: Watermark;
constructor(httpResponse: HttpResponseUtil, launcherController: LauncherController, saveServer: SaveServer, watermark: Watermark);
connect(): string;
login(url: string, info: ILoginRequestData, sessionID: string): string;
register(url: string, info: IRegisterData, sessionID: string): "FAILED" | "OK";
get(url: string, info: ILoginRequestData, sessionID: string): string;
changeUsername(url: string, info: IChangeRequestData, sessionID: string): "FAILED" | "OK";
changePassword(url: string, info: IChangeRequestData, sessionID: string): "FAILED" | "OK";
wipe(url: string, info: IRegisterData, sessionID: string): "FAILED" | "OK";
getServerVersion(): string;
ping(url: string, info: IEmptyRequestData, sessionID: string): string;
removeProfile(url: string, info: IRemoveProfileData, sessionID: string): string;
getCompatibleTarkovVersion(): string;
}
export { LauncherCallbacks };

View File

@ -0,0 +1,14 @@
import { LocationController } from "../controllers/LocationController";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { ILocationBase } from "../models/eft/common/ILocationBase";
import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { IGetLocationRequestData } from "../models/eft/location/IGetLocationRequestData";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class LocationCallbacks {
protected httpResponse: HttpResponseUtil;
protected locationController: LocationController;
constructor(httpResponse: HttpResponseUtil, locationController: LocationController);
getLocationData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ILocationsGenerateAllResponse>;
getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData<ILocationBase>;
}

View File

@ -0,0 +1,35 @@
import { MatchController } from "../controllers/MatchController";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData";
import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestData";
import { IStartOfflineRaidRequestData } from "../models/eft/match/IStartOffineRaidRequestData";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { JsonUtil } from "../utils/JsonUtil";
export declare class MatchCallbacks {
protected httpResponse: HttpResponseUtil;
protected jsonUtil: JsonUtil;
protected matchController: MatchController;
protected databaseServer: DatabaseServer;
constructor(httpResponse: HttpResponseUtil, jsonUtil: JsonUtil, matchController: MatchController, databaseServer: DatabaseServer);
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: IGetProfileRequestData, 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

@ -0,0 +1,22 @@
import { OnLoad } from "../di/OnLoad";
import { DelayedModLoader } from "../loaders/DelayedModLoader";
import { IHttpConfig } from "../models/spt/config/IHttpConfig";
import { IHttpServer } from "../models/spt/server/IHttpServer";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
declare class ModCallbacks extends OnLoad {
protected logger: ILogger;
protected httpResponse: HttpResponseUtil;
protected httpServer: IHttpServer;
protected modLoader: DelayedModLoader;
protected configServer: ConfigServer;
protected httpConfig: IHttpConfig;
constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpServer: IHttpServer, modLoader: DelayedModLoader, configServer: ConfigServer);
onLoad(): void;
getRoute(): string;
sendBundle(sessionID: string, req: any, resp: any, body: any): void;
getBundles(url: string, info: any, sessionID: string): string;
getBundle(url: string, info: any, sessionID: string): string;
}
export { ModCallbacks };

View File

@ -0,0 +1,11 @@
import { NoteController } from "../controllers/NoteController";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { INoteActionData } from "../models/eft/notes/INoteActionData";
export declare class NoteCallbacks {
protected noteController: NoteController;
constructor(noteController: NoteController);
addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,24 @@
import { NotifierController } from "../controllers/NotifierController";
import { HttpServerHelper } from "../helpers/HttpServerHelper";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { INotifierChannel } from "../models/eft/notifier/INotifier";
import { ISelectProfileRequestData } from "../models/eft/notifier/ISelectProfileRequestData";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class NotifierCallbacks {
protected httpServerHelper: HttpServerHelper;
protected httpResponse: HttpResponseUtil;
protected notifierController: NotifierController;
constructor(httpServerHelper: HttpServerHelper, httpResponse: HttpResponseUtil, notifierController: NotifierController);
/**
* If we don't have anything to send, it's ok to not send anything back
* because notification requests can be long-polling. In fact, we SHOULD wait
* until we actually have something to send because otherwise we'd spam the client
* and the client would abort the connection due to spam.
*/
sendNotification(_sessionID: string, req: any, resp: any, _data: any): void;
getNotifier(url: string, info: any, sessionID: string): IGetBodyResponseData<any[]>;
createNotifierChannel(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<INotifierChannel>;
selectProfile(url: string, info: ISelectProfileRequestData, sessionID: string): IGetBodyResponseData<any>;
notify(url: string, info: any, sessionID: string): string;
}

View File

@ -0,0 +1,15 @@
import { PresetBuildController } from "../controllers/PresetBuildController";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IPresetBuildActionRequestData } from "../models/eft/presetBuild/IPresetBuildActionRequestData";
import { WeaponBuild } from "../models/eft/profile/IAkiProfile";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class PresetBuildCallbacks {
protected httpResponse: HttpResponseUtil;
protected presetBuildController: PresetBuildController;
constructor(httpResponse: HttpResponseUtil, presetBuildController: PresetBuildController);
getHandbookUserlist(url: string, info: any, sessionID: string): IGetBodyResponseData<WeaponBuild[]>;
saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;
removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,8 @@
import { PresetController } from "../controllers/PresetController";
import { OnLoad } from "../di/OnLoad";
export declare class PresetCallbacks extends OnLoad {
protected presetController: PresetController;
constructor(presetController: PresetController);
onLoad(): void;
getRoute(): string;
}

View File

@ -0,0 +1,30 @@
import { ProfileController } from "../controllers/ProfileController";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
import { IGetMiniProfileRequestData } from "../models/eft/launcher/IGetMiniProfileRequestData";
import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData";
import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData";
import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData";
import { ISearchFriendRequestData } from "../models/eft/profile/ISearchFriendRequestData";
import { ISearchFriendResponse } from "../models/eft/profile/ISearchFriendResponse";
import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class ProfileCallbacks {
protected httpResponse: HttpResponseUtil;
protected timeUtil: TimeUtil;
protected profileController: ProfileController;
constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, profileController: ProfileController);
createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData<any>;
getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData;
changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData<any>;
validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData<any>;
getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<string>;
getProfileStatus(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
searchFriend(url: string, info: ISearchFriendRequestData, sessionID: string): IGetBodyResponseData<ISearchFriendResponse[]>;
getMiniProfile(url: string, info: IGetMiniProfileRequestData, sessionID: string): string;
getAllMiniProfiles(url: string, info: any, sessionID: string): string;
}

View File

@ -0,0 +1,26 @@
import { QuestController } from "../controllers/QuestController";
import { RepeatableQuestController } from "../controllers/RepeatableQuestController";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IQuest } from "../models/eft/common/tables/IQuest";
import { IPmcDataRepeatableQuest } from "../models/eft/common/tables/IRepeatableQuests";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
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 { IListQuestsRequestData } from "../models/eft/quests/IListQuestsRequestData";
import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class QuestCallbacks {
protected httpResponse: HttpResponseUtil;
protected questController: QuestController;
protected repeatableQuestController: RepeatableQuestController;
constructor(httpResponse: HttpResponseUtil, questController: QuestController, repeatableQuestController: RepeatableQuestController);
changeRepeatableQuest(pmcData: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse;
acceptQuest(pmcData: IPmcData, body: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse;
listQuests(url: string, info: IListQuestsRequestData, sessionID: string): IGetBodyResponseData<IQuest[]>;
activityPeriods(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IPmcDataRepeatableQuest[]>;
}

View File

@ -0,0 +1,39 @@
import { RagfairController } from "../controllers/RagfairController";
import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IAddOfferRequestData } from "../models/eft/ragfair/IAddOfferRequestData";
import { IExtendOfferRequestData } from "../models/eft/ragfair/IExtendOfferRequestData";
import { IGetItemPriceResult } from "../models/eft/ragfair/IGetItemPriceResult";
import { IGetMarketPriceRequestData } from "../models/eft/ragfair/IGetMarketPriceRequestData";
import { IRemoveOfferRequestData } from "../models/eft/ragfair/IRemoveOfferRequestData";
import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData";
import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { RagfairServer } from "../servers/RagfairServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { JsonUtil } from "../utils/JsonUtil";
export declare class RagfairCallbacks extends OnLoadOnUpdate {
protected httpResponse: HttpResponseUtil;
protected logger: ILogger;
protected jsonUtil: JsonUtil;
protected ragfairServer: RagfairServer;
protected ragfairController: RagfairController;
protected configServer: ConfigServer;
protected ragfairConfig: IRagfairConfig;
constructor(httpResponse: HttpResponseUtil, logger: ILogger, jsonUtil: JsonUtil, ragfairServer: RagfairServer, ragfairController: RagfairController, configServer: ConfigServer);
onLoad(): void;
getRoute(): string;
search(url: string, info: ISearchRequestData, sessionID: string): IGetBodyResponseData<any>;
getMarketPrice(url: string, info: IGetMarketPriceRequestData, sessionID: string): IGetBodyResponseData<IGetItemPriceResult>;
getItemPrices(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
addOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse;
removeOffer(pmcData: IPmcData, info: IRemoveOfferRequestData, sessionID: string): IItemEventRouterResponse;
extendOffer(pmcData: IPmcData, info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse;
onUpdate(timeSinceLastRun: number): boolean;
sendReport(url: string, info: any, sessionID: string): INullResponseData;
}

View File

@ -0,0 +1,11 @@
import { RepairController } from "../controllers/RepairController";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IRepairActionDataRequest } from "../models/eft/repair/IRepairActionDataRequest";
import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepairActionDataRequest";
export declare class RepairCallbacks {
protected repairController: RepairController;
constructor(repairController: RepairController);
traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,9 @@
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

@ -0,0 +1,11 @@
import { TradeController } from "../controllers/TradeController";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTradeRequestData";
import { IProcessRagfairTradeRequestData } from "../models/eft/trade/IProcessRagfairTradeRequestData";
export declare class TradeCallbacks {
protected tradeController: TradeController;
constructor(tradeController: TradeController);
processTrade(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse;
processRagfairTrade(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,18 @@
import { TraderController } from "../controllers/TraderController";
import { OnLoadOnUpdate } from "../di/OnLoadOnUpdate";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class TraderCallbacks extends OnLoadOnUpdate {
protected httpResponse: HttpResponseUtil;
protected traderController: TraderController;
constructor(httpResponse: HttpResponseUtil, traderController: TraderController);
onLoad(): void;
getRoute(): string;
getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderBase[]>;
getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<Record<string, IBarterScheme[][]>>;
getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderBase>;
getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderAssort>;
onUpdate(): boolean;
}

View File

@ -0,0 +1,10 @@
import { WeatherController } from "../controllers/WeatherController";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class WeatherCallbacks {
protected httpResponse: HttpResponseUtil;
protected weatherController: WeatherController;
constructor(httpResponse: HttpResponseUtil, weatherController: WeatherController);
getWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any>;
}

View File

@ -0,0 +1,10 @@
import { WishlistController } from "../controllers/WishlistController";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData";
export declare class WishlistCallbacks {
protected wishlistController: WishlistController;
constructor(wishlistController: WishlistController);
addToWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
removeFromWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,35 @@
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(info: IGenerateBotsRequestData, playerScav?: boolean): IBotBase[];
getBotCap(): number;
}

View File

@ -0,0 +1,22 @@
import { ProfileHelper } from "../helpers/ProfileHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { ISuit } from "../models/eft/common/tables/ITrader";
import { IBuyClothingRequestData } from "../models/eft/customization/IBuyClothingRequestData";
import { IWearClothingRequestData } from "../models/eft/customization/IWearClothingRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
export declare class CustomizationController {
protected logger: ILogger;
protected itemEventRouter: ItemEventRouter;
protected databaseServer: DatabaseServer;
protected saveServer: SaveServer;
protected profileHelper: ProfileHelper;
constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper);
getTraderSuits(traderID: string, sessionID: string): ISuit[];
wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse;
buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse;
protected getAllTraderSuits(sessionID: string): ISuit[];
}

View File

@ -0,0 +1,25 @@
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

@ -0,0 +1,33 @@
import { GameHelper } from "../helpers/GameHelper";
import { HttpServerHelper } from "../helpers/HttpServerHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IPmcDataRepeatableQuest, IRepeatableQuest } from "../models/eft/common/tables/IRepeatableQuests";
import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
import { IHttpConfig } from "../models/spt/config/IHttpConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { Watermark } from "../utils/Watermark";
export declare class GameController {
protected logger: ILogger;
protected watermark: Watermark;
protected httpServerHelper: HttpServerHelper;
protected profileHelper: ProfileHelper;
protected gameHelper: GameHelper;
protected configServer: ConfigServer;
protected httpConfig: IHttpConfig;
constructor(logger: ILogger, watermark: Watermark, httpServerHelper: HttpServerHelper, profileHelper: ProfileHelper, gameHelper: GameHelper, configServer: ConfigServer);
gameStart(_url: string, _info: IEmptyRequestData, sessionID: string): void;
protected addMissingBonusesProperty(pmcProfile: IPmcData): void;
protected addMissingRepeatableQuestsProperty(pmcProfile: IPmcData): void;
protected addMissingWeaponRepairSkill(pmcProfile: IPmcData): void;
protected addMissingAkiVersionTagToProfile(fullProfile: IAkiProfile): void;
protected addMissingArmorRepairSkill(pmcProfile: IPmcData): void;
protected fixNullTraderSalesSums(pmcProfile: IPmcData): void;
protected removeDanglingBackendCounters(pmcProfile: IPmcData): void;
getGameConfig(sessionID: string): IGameConfigResponse;
getServer(): any[];
protected getActiveRepeatableQuests(repeatableQuests: IPmcDataRepeatableQuest[]): IRepeatableQuest[];
}

View File

@ -0,0 +1,8 @@
import { HandbookHelper } from "../helpers/HandbookHelper";
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class HandbookController {
protected databaseServer: DatabaseServer;
protected handbookHelper: HandbookHelper;
constructor(databaseServer: DatabaseServer, handbookHelper: HandbookHelper);
load(): void;
}

View File

@ -0,0 +1,25 @@
import { ItemHelper } from "../helpers/ItemHelper";
import { PaymentService } from "../services/PaymentService";
import { InventoryHelper } from "../helpers/InventoryHelper";
import { HealthHelper } from "../helpers/HealthHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IHealthTreatmentRequestData } from "../models/eft/health/IHealthTreatmentRequestData";
import { IOffraidEatRequestData } from "../models/eft/health/IOffraidEatRequestData";
import { IOffraidHealRequestData } from "../models/eft/health/IOffraidHealRequestData";
import { ISyncHealthRequestData } from "../models/eft/health/ISyncHealthRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ILogger } from "../models/spt/utils/ILogger";
export declare class HealthController {
protected logger: ILogger;
protected itemEventRouter: ItemEventRouter;
protected itemHelper: ItemHelper;
protected paymentService: PaymentService;
protected inventoryHelper: InventoryHelper;
protected healthHelper: HealthHelper;
constructor(logger: ILogger, itemEventRouter: ItemEventRouter, itemHelper: ItemHelper, paymentService: PaymentService, inventoryHelper: InventoryHelper, healthHelper: HealthHelper);
saveVitality(pmcData: IPmcData, info: ISyncHealthRequestData, sessionID: string): void;
offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse;
offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse;
healthTreatment(pmcData: IPmcData, info: IHealthTreatmentRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,68 @@
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 { HideoutArea, IPmcData, Product } from "../models/eft/common/IPmcData";
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 { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase";
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 configServer: ConfigServer;
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, configServer: ConfigServer);
upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse;
upgradeComplete(pmcData: IPmcData, body: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse;
putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse;
takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse;
protected removeItemFromGenerator(sessionID: string, pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, output: IItemEventRouterResponse, hideoutArea: HideoutArea): IItemEventRouterResponse;
toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse;
singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse;
protected getRandomisedItemRarityCounter(recipe: IHideoutScavCase): {
[x: string]: number;
};
protected getRandomisedScavRewards(rarityItemCounter: {
[x: string]: number;
}): Product[];
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;
protected handleScavCase(sessionID: string, pmcData: IPmcData, body: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse;
registerProduction(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData | IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
update(): void;
}

View File

@ -0,0 +1,31 @@
import { ExtendedProfileHelper } from "../helpers/ExtendedProfileHelper";
import { HealthHelper } from "../helpers/HealthHelper";
import { InRaidHelper } from "../helpers/InRaidHelper";
import { ItemHelper } from "../helpers/ItemHelper";
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";
export declare class InraidController {
protected saveServer: SaveServer;
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected questHelper: QuestHelper;
protected itemHelper: ItemHelper;
protected extendedProfileHelper: ExtendedProfileHelper;
protected healthHelper: HealthHelper;
protected traderHelper: TraderHelper;
protected insuranceService: InsuranceService;
protected inRaidHelper: InRaidHelper;
protected configServer: ConfigServer;
protected inraidConfig: IInRaidConfig;
constructor(saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, extendedProfileHelper: ExtendedProfileHelper, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, configServer: ConfigServer);
addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void;
saveProgress(offraidData: ISaveProgressRequestData, sessionID: string): void;
}

View File

@ -0,0 +1,38 @@
import { DialogueHelper } from "../helpers/DialogueHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IGetInsuranceCostRequestData } from "../models/eft/insurance/IGetInsuranceCostRequestData";
import { IInsureRequestData } from "../models/eft/insurance/IInsureRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig";
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 { InsuranceService } from "../services/InsuranceService";
import { PaymentService } from "../services/PaymentService";
import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class InsuranceController {
protected logger: ILogger;
protected randomUtil: RandomUtil;
protected itemEventRouter: ItemEventRouter;
protected timeUtil: TimeUtil;
protected saveServer: SaveServer;
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper;
protected dialogueHelper: DialogueHelper;
protected paymentService: PaymentService;
protected insuranceService: InsuranceService;
protected configServer: ConfigServer;
protected insuranceConfig: IInsuranceConfig;
constructor(logger: ILogger, randomUtil: RandomUtil, itemEventRouter: ItemEventRouter, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, paymentService: PaymentService, // TODO: delay required
insuranceService: InsuranceService, configServer: ConfigServer);
processReturn(): void;
insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse;
cost(info: IGetInsuranceCostRequestData, sessionID: string): any;
doAbsolutelyNothing(): void;
}

View File

@ -0,0 +1,107 @@
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 { IAddItemRequestData } from "../models/eft/inventory/IAddItemRequestData";
import { IInventoryBindRequestData } from "../models/eft/inventory/IInventoryBindRequestData";
import { IInventoryCreateMarkerRequestData } from "../models/eft/inventory/IInventoryCreateMarkerRequestData";
import { IInventoryDeleteMarkerRequestData } from "../models/eft/inventory/IInventoryDeleteMarkerRequestData";
import { IInventoryEditMarkerRequestData } from "../models/eft/inventory/IInventoryEditMarkerRequestData";
import { IInventoryExamineRequestData } from "../models/eft/inventory/IInventoryExamineRequestData";
import { IInventoryFoldRequestData } from "../models/eft/inventory/IInventoryFoldRequestData";
import { IInventoryMergeRequestData } from "../models/eft/inventory/IInventoryMergeRequestData";
import { IInventoryMoveRequestData } from "../models/eft/inventory/IInventoryMoveRequestData";
import { IInventoryReadEncyclopediaRequestData } from "../models/eft/inventory/IInventoryReadEncyclopediaRequestData";
import { IInventoryRemoveRequestData } from "../models/eft/inventory/IInventoryRemoveRequestData";
import { IInventorySortRequestData } from "../models/eft/inventory/IInventorySortRequestData";
import { IInventorySplitRequestData } from "../models/eft/inventory/IInventorySplitRequestData";
import { IInventorySwapRequestData } from "../models/eft/inventory/IInventorySwapRequestData";
import { IInventoryTagRequestData } from "../models/eft/inventory/IInventoryTagRequestData";
import { IInventoryToggleRequestData } from "../models/eft/inventory/IInventoryToggleRequestData";
import { IInventoryTransferRequestData } from "../models/eft/inventory/IInventoryTransferRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
export declare class InventoryController {
protected logger: ILogger;
protected hashUtil: HashUtil;
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected presetHelper: PresetHelper;
protected inventoryHelper: InventoryHelper;
protected profileHelper: ProfileHelper;
protected paymentHelper: PaymentHelper;
protected itemEventRouter: ItemEventRouter;
constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, presetHelper: PresetHelper, inventoryHelper: InventoryHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemEventRouter: ItemEventRouter);
/**
* Move Item
* change location of item with parentId and slotId
* transfers items from one profile to another if fromOwner/toOwner is set in the body.
* otherwise, move is contained within the same profile_f.
*/
moveItem(pmcData: IPmcData, body: IInventoryMoveRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Remove Item from Profile
* Deep tree item deletion, also removes items from insurance list
*/
removeItem(pmcData: IPmcData, itemId: string, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse;
/**
* Implements functionality "Discard" from Main menu (Stash etc.)
* Removes item from PMC Profile
*/
discardItem(pmcData: IPmcData, body: IInventoryRemoveRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Split Item
* spliting 1 item-stack into 2 separate items ...
*/
splitItem(pmcData: IPmcData, body: IInventorySplitRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Merge Item
* merges 2 items into one, deletes item from `body.item` and adding number of stacks into `body.with`
*/
mergeItem(pmcData: IPmcData, body: IInventoryMergeRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Transfer item
* Used to take items from scav inventory into stash or to insert ammo into mags (shotgun ones) and reloading weapon by clicking "Reload"
*/
transferItem(pmcData: IPmcData, body: IInventoryTransferRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Swap Item
* its used for "reload" if you have weapon in hands and magazine is somewhere else in rig or backpack in equipment
*/
swapItem(pmcData: IPmcData, body: IInventorySwapRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Give Item
* its used for "add" item like gifts etc.
*/
addItem(pmcData: IPmcData, body: IAddItemRequestData, output: IItemEventRouterResponse, sessionID: string, callback: any, foundInRaid?: boolean, addUpd?: any): IItemEventRouterResponse;
/**
* Handles folding of Weapons
*/
foldItem(pmcData: IPmcData, body: IInventoryFoldRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Toggles "Toggleable" items like night vision goggles and face shields.
*/
toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handles Tagging of items (primary Containers).
*/
tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse;
bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handles examining of the item *
*/
examineItem(pmcData: IPmcData, body: IInventoryExamineRequestData, sessionID: string): IItemEventRouterResponse;
readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handles sorting of Inventory.
*/
sortInventory(pmcData: IPmcData, body: IInventorySortRequestData, sessionID: string): IItemEventRouterResponse;
createMapMarker(pmcData: IPmcData, body: IInventoryCreateMarkerRequestData, sessionID: string): IItemEventRouterResponse;
deleteMapMarker(pmcData: IPmcData, body: IInventoryDeleteMarkerRequestData, sessionID: string): IItemEventRouterResponse;
editMapMarker(pmcData: IPmcData, body: IInventoryEditMarkerRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,28 @@
import { HttpServerHelper } from "../helpers/HttpServerHelper";
import { IChangeRequestData } from "../models/eft/launcher/IChangeRequestData";
import { ILoginRequestData } from "../models/eft/launcher/ILoginRequestData";
import { IRegisterData } from "../models/eft/launcher/IRegisterData";
import { Info } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { HashUtil } from "../utils/HashUtil";
export declare class LauncherController {
protected hashUtil: HashUtil;
protected saveServer: SaveServer;
protected httpServerHelper: HttpServerHelper;
protected databaseServer: DatabaseServer;
protected configServer: ConfigServer;
protected coreConfig: ICoreConfig;
constructor(hashUtil: HashUtil, saveServer: SaveServer, httpServerHelper: HttpServerHelper, databaseServer: DatabaseServer, configServer: ConfigServer);
connect(): any;
find(sessionIdKey: string): Info;
login(info: ILoginRequestData): string;
register(info: IRegisterData): string;
protected createAccount(info: IRegisterData): string;
changeUsername(info: IChangeRequestData): string;
changePassword(info: IChangeRequestData): string;
wipe(info: IRegisterData): string;
getCompatibleTarkovVersion(): string;
}

View File

@ -0,0 +1,18 @@
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

@ -0,0 +1,30 @@
import { ProfileHelper } from "../helpers/ProfileHelper";
import { TraderHelper } from "../helpers/TraderHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData";
import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestData";
import { IStartOfflineRaidRequestData } from "../models/eft/match/IStartOffineRaidRequestData";
import { IInRaidConfig } from "../models/spt/config/IInRaidConfig";
import { IMatchConfig } from "../models/spt/config/IMatchConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { SaveServer } from "../servers/SaveServer";
import { MatchLocationService } from "../services/MatchLocationService";
export declare class MatchController {
protected saveServer: SaveServer;
protected profileHelper: ProfileHelper;
protected matchLocationService: MatchLocationService;
protected traderHelper: TraderHelper;
protected configServer: ConfigServer;
protected matchConfig: IMatchConfig;
protected inraidConfig: IInRaidConfig;
constructor(saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, configServer: ConfigServer);
getEnabled(): boolean;
getProfile(info: IGetProfileRequestData): IPmcData[];
protected getMatch(location: any): any;
createGroup(sessionID: string, info: any): any;
deleteGroup(info: any): void;
joinMatch(info: any, sessionID: string): any[];
getGroupStatus(info: any): any;
startOfflineRaid(info: IStartOfflineRaidRequestData, sessionID: string): void;
endOfflineRaid(info: IEndOfflineRaidRequestData, sessionID: string): void;
}

View File

@ -0,0 +1,12 @@
import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { INoteActionData } from "../models/eft/notes/INoteActionData";
import { ItemEventRouter } from "../routers/ItemEventRouter";
declare class NoteController {
protected itemEventRouter: ItemEventRouter;
constructor(itemEventRouter: ItemEventRouter);
addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
}
export { NoteController };

View File

@ -0,0 +1,22 @@
import { NotifierHelper } from "../helpers/NotifierHelper";
import { NotificationService } from "../services/NotificationService";
import { INotifierChannel } from "../models/eft/notifier/INotifier";
import { HttpServerHelper } from "../helpers/HttpServerHelper";
export declare class NotifierController {
protected notifierHelper: NotifierHelper;
protected httpServerHelper: HttpServerHelper;
protected notificationService: NotificationService;
protected pollInterval: number;
protected timeout: number;
constructor(notifierHelper: NotifierHelper, httpServerHelper: HttpServerHelper, notificationService: NotificationService);
/**
* Resolve an array of session notifications.
*
* If no notifications are currently queued then intermittently check for new notifications until either
* one or more appear or when a timeout expires.
* If no notifications are available after the timeout, use a default message.
*/
notifyAsync(sessionID: string): Promise<unknown>;
getServer(sessionID: string): string;
getChannel(sessionID: string): INotifierChannel;
}

View File

@ -0,0 +1,18 @@
import { ItemHelper } from "../helpers/ItemHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IPresetBuildActionRequestData } from "../models/eft/presetBuild/IPresetBuildActionRequestData";
import { WeaponBuild } from "../models/eft/profile/IAkiProfile";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { SaveServer } from "../servers/SaveServer";
import { HashUtil } from "../utils/HashUtil";
export declare class PresetBuildController {
protected hashUtil: HashUtil;
protected itemEventRouter: ItemEventRouter;
protected itemHelper: ItemHelper;
protected saveServer: SaveServer;
constructor(hashUtil: HashUtil, itemEventRouter: ItemEventRouter, itemHelper: ItemHelper, saveServer: SaveServer);
getUserBuilds(sessionID: string): WeaponBuild[];
saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;
removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,8 @@
import { PresetHelper } from "../helpers/PresetHelper";
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class PresetController {
protected presetHelper: PresetHelper;
protected databaseServer: DatabaseServer;
constructor(presetHelper: PresetHelper, databaseServer: DatabaseServer);
initialize(): void;
}

View File

@ -0,0 +1,34 @@
import { ExtendedProfileHelper } from "../helpers/ExtendedProfileHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { TraderHelper } from "../helpers/TraderHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IMiniProfile } from "../models/eft/launcher/IMiniProfile";
import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData";
import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData";
import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData";
import { ISearchFriendRequestData } from "../models/eft/profile/ISearchFriendRequestData";
import { ISearchFriendResponse } from "../models/eft/profile/ISearchFriendResponse";
import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { HashUtil } from "../utils/HashUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class ProfileController {
protected hashUtil: HashUtil;
protected timeUtil: TimeUtil;
protected saveServer: SaveServer;
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected traderHelper: TraderHelper;
protected extendedProfileHelper: ExtendedProfileHelper;
constructor(hashUtil: HashUtil, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, traderHelper: TraderHelper, extendedProfileHelper: ExtendedProfileHelper);
getMiniProfiles(): IMiniProfile[];
getMiniProfile(sessionID: string): any;
getCompleteProfile(sessionID: string): IPmcData[];
createProfile(info: IProfileCreateRequestData, sessionID: string): void;
generatePlayerScav(sessionID: string): IPmcData;
validateNickname(info: IValidateNicknameRequestData, sessionID: string): string;
changeNickname(info: IProfileChangeNicknameRequestData, sessionID: string): string;
changeVoice(info: IProfileChangeVoiceRequestData, sessionID: string): void;
getFriends(info: ISearchFriendRequestData, sessionID: string): ISearchFriendResponse[];
}

View File

@ -0,0 +1,74 @@
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 { 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 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, 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

@ -0,0 +1,70 @@
import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator";
import { HandbookHelper } from "../helpers/HandbookHelper";
import { InventoryHelper } from "../helpers/InventoryHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { PaymentHelper } from "../helpers/PaymentHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { RagfairHelper } from "../helpers/RagfairHelper";
import { RagfairOfferHelper } from "../helpers/RagfairOfferHelper";
import { RagfairSellHelper } from "../helpers/RagfairSellHelper";
import { RagfairSortHelper } from "../helpers/RagfairSortHelper";
import { RagfairTaxHelper } from "../helpers/RagfairTaxHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { Item } from "../models/eft/common/tables/IItem";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
import { IAddOfferRequestData, Requirement } from "../models/eft/ragfair/IAddOfferRequestData";
import { IExtendOfferRequestData } from "../models/eft/ragfair/IExtendOfferRequestData";
import { IGetItemPriceResult } from "../models/eft/ragfair/IGetItemPriceResult";
import { IGetMarketPriceRequestData } from "../models/eft/ragfair/IGetMarketPriceRequestData";
import { IGetOffersResult } from "../models/eft/ragfair/IGetOffersResult";
import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer";
import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData";
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 { RagfairServer } from "../servers/RagfairServer";
import { SaveServer } from "../servers/SaveServer";
import { PaymentService } from "../services/PaymentService";
import { RagfairOfferService } from "../services/RagfairOfferService";
import { RagfairPriceService } from "../services/RagfairPriceService";
import { RagfairRequiredItemsService } from "../services/RagfairRequiredItemsService";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class RagfairController {
protected logger: ILogger;
protected timeUtil: TimeUtil;
protected httpResponse: HttpResponseUtil;
protected itemEventRouter: ItemEventRouter;
protected ragfairServer: RagfairServer;
protected ragfairPriceService: RagfairPriceService;
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected saveServer: SaveServer;
protected ragfairSellHelper: RagfairSellHelper;
protected ragfairTaxHelper: RagfairTaxHelper;
protected ragfairSortHelper: RagfairSortHelper;
protected ragfairOfferHelper: RagfairOfferHelper;
protected profileHelper: ProfileHelper;
protected paymentService: PaymentService;
protected handbookHelper: HandbookHelper;
protected paymentHelper: PaymentHelper;
protected inventoryHelper: InventoryHelper;
protected ragfairHelper: RagfairHelper;
protected ragfairOfferService: RagfairOfferService;
protected ragfairRequiredItemsService: RagfairRequiredItemsService;
protected ragfairOfferGenerator: RagfairOfferGenerator;
protected configServer: ConfigServer;
protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter, ragfairServer: RagfairServer, ragfairPriceService: RagfairPriceService, databaseServer: DatabaseServer, itemHelper: ItemHelper, saveServer: SaveServer, ragfairSellHelper: RagfairSellHelper, ragfairTaxHelper: RagfairTaxHelper, ragfairSortHelper: RagfairSortHelper, ragfairOfferHelper: RagfairOfferHelper, profileHelper: ProfileHelper, paymentService: PaymentService, handbookHelper: HandbookHelper, paymentHelper: PaymentHelper, inventoryHelper: InventoryHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, configServer: ConfigServer);
getOffers(sessionID: string, info: ISearchRequestData): IGetOffersResult;
update(): void;
getItemPrice(info: IGetMarketPriceRequestData): IGetItemPriceResult;
addPlayerOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse;
createPlayerOffer(profile: IAkiProfile, requirements: Requirement[], items: Item[], sellInOnePiece: boolean, amountToSend: number): IRagfairOffer;
getAllFleaPrices(): Record<string, number>;
removeOffer(offerId: string, sessionID: string): IItemEventRouterResponse;
extendOffer(info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,42 @@
import { QuestHelper } from "../helpers/QuestHelper";
import { RepairHelper } from "../helpers/RepairHelper";
import { TraderHelper } from "../helpers/TraderHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IRepairActionDataRequest } from "../models/eft/repair/IRepairActionDataRequest";
import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepairActionDataRequest";
import { IRepairConfig } from "../models/spt/config/IRepairConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { PaymentService } from "../services/PaymentService";
export declare class RepairController {
protected logger: ILogger;
protected itemEventRouter: ItemEventRouter;
protected databaseServer: DatabaseServer;
protected questHelper: QuestHelper;
protected traderHelper: TraderHelper;
protected paymentService: PaymentService;
protected repairHelper: RepairHelper;
protected configServer: ConfigServer;
protected repairConfig: IRepairConfig;
protected readonly WEAPON_SKILL_REPAIR_GAIN: number;
constructor(logger: ILogger, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer);
/**
* Repair with trader
* @param pmcData player profile
* @param body endpoint request data
* @param sessionID session id
* @returns item event router action
*/
traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
/**
* Repair with repair kit
* @param pmcData player profile
* @param body endpoint request data
* @param sessionID session id
* @returns item event router action
*/
repairWithKit(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,219 @@
import { GameHelper } from "../helpers/GameHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { RagfairServerHelper } from "../helpers/RagfairServerHelper";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { Exit } from "../models/eft/common/ILocationBase";
import { IPmcData, TraderInfo } from "../models/eft/common/IPmcData";
import { ICompletion, ICompletionAvailableFor, IElimination, IEliminationCondition, IExploration, IExplorationCondition, IPmcDataRepeatableQuest, IRepeatableQuest, IReward, IRewards } from "../models/eft/common/tables/IRepeatableQuests";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest";
import { ELocationName } from "../models/enums/ELocationName";
import { IQuestConfig, IRepeatableQuestConfig } 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 { PaymentService } from "../services/PaymentService";
import { JsonUtil } from "../utils/JsonUtil";
import { MathUtil } from "../utils/MathUtil";
import { ObjectId } from "../utils/ObjectId";
import { ProbabilityObject, ProbabilityObjectArray, RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil";
export interface IQuestTypePool {
types: string[];
pool: IQuestPool;
}
export interface IQuestPool {
Exploration: IExplorationPool;
Elimination: IEliminationPool;
}
export interface IExplorationPool {
locations: Partial<Record<ELocationName, string[]>>;
}
export interface IEliminationPool {
targets: IEliminationTargetPool;
}
export interface IEliminationTargetPool {
Savage?: ITargetLocation;
AnyPmc?: ITargetLocation;
bossBully?: ITargetLocation;
bossGluhar?: ITargetLocation;
bossKilla?: ITargetLocation;
bossSanitar?: ITargetLocation;
bossTagilla?: ITargetLocation;
bossKojaniy?: ITargetLocation;
}
export interface ITargetLocation {
locations: string[];
}
export declare class RepeatableQuestController {
protected timeUtil: TimeUtil;
protected logger: ILogger;
protected randomUtil: RandomUtil;
protected mathUtil: MathUtil;
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected presetHelper: PresetHelper;
protected profileHelper: ProfileHelper;
protected gameHelper: GameHelper;
protected ragfairServerHelper: RagfairServerHelper;
protected itemEventRouter: ItemEventRouter;
protected paymentService: PaymentService;
protected objectId: ObjectId;
protected configServer: ConfigServer;
protected questConfig: IQuestConfig;
constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, gameHelper: GameHelper, ragfairServerHelper: RagfairServerHelper, itemEventRouter: ItemEventRouter, paymentService: PaymentService, objectId: ObjectId, configServer: ConfigServer);
/**
* This is the method reached by the /client/repeatalbeQuests/activityPeriods endpoint
* Returns an array of objects in the format of repeatable quests to the client.
* repeatableQuestObject = {
* id: Unique Id,
* name: "Daily",
* endTime: the time when the quests expire
* activeQuests: currently available quests in an array. Each element of quest type format (see assets/database/templates/repeatableQuests.json).
* inactiveQuests: the quests which were previously active (required by client to fail them if they are not completed)
* }
*
* The method checks if the player level requirement for repeatable quests (e.g. daily lvl5, weekly lvl15) is met and if the previously active quests
* are still valid. This ischecked by endTime persisted in profile accordning to the resetTime configured for each repeatable kind (daily, weekly)
* in QuestCondig.js
*
* If the condition is met, new repeatableQuests are created, old quests (which are persisted in the profile.RepeatableQuests[i].activeQuests) are
* moved to profile.RepeatableQuests[i].inactiveQuests. This memory is required to get rid of old repeatable quest data in the profile, otherwise
* they'll litter the profile's Quests field.
* (if the are on "Succeed" but not "Completed" we keep them, to allow the player to complete them and get the rewards)
* The new quests generated are again persisted in profile.RepeatableQuests
*
*
* @param {string} sessionId Player's session id
* @returns {array} array of "repeatableQuestObjects" as descibed above
*/
getClientRepeatableQuests(_info: IEmptyRequestData, sessionID: string): IPmcDataRepeatableQuest[];
/**
* This method is called by GetClientRepeatableQuests and creates one element of quest type format (see assets/database/templates/repeatableQuests.json).
* It randomly draws a quest type (currently Elimination, Completion or Exploration) as well as a trader who is providing the quest
*/
generateRepeatableQuest(pmcLevel: number, pmcTraderInfo: Record<string, TraderInfo>, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IRepeatableQuest;
/**
* Just for debug reasons. Draws dailies a random assort of dailies extracted from dumps
*/
generateDebugDailies(dailiesPool: any, factory: any, number: any): any;
/**
* Generates the base object of quest type format given as templates in assets/database/templates/repeatableQuests.json
* The templates include Elimination, Completion and Extraction quest types
*
* @param {string} type quest type: "Elimination", "Completion" or "Extraction"
* @param {string} traderId trader from which the quest will be provided
* @returns {object} a object which contains the base elements for repeatable quests of the requests type
* (needs to be filled with reward and conditions by called to make a valid quest)
*/
generateRepeatableTemplate(type: string, traderId: string): IRepeatableQuest;
/**
* Generates a valid Exploration quest
*
* @param {integer} pmcLevel player's level for reward generation
* @param {string} traderId trader from which the quest will be provided
* @param {object} questTypePool Pools for quests (used to avoid redundant quests)
* @param {object} repeatableConfig The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requestd quest
* @returns {object} object of quest type format for "Exploration" (see assets/database/templates/repeatableQuests.json)
*/
generateExplorationQuest(pmcLevel: number, traderId: string, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IExploration;
/**
* Generates a valid Completion quest
*
* @param {integer} pmcLevel player's level for requested items and reward generation
* @param {string} traderId trader from which the quest will be provided
* @param {object} repeatableConfig The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requestd quest
* @returns {object} object of quest type format for "Completion" (see assets/database/templates/repeatableQuests.json)
*/
generateCompletionQuest(pmcLevel: number, traderId: string, repeatableConfig: IRepeatableQuestConfig): ICompletion;
/**
* Generates a valid Elimination quest
*
* @param {integer} pmcLevel player's level for requested items and reward generation
* @param {string} traderId trader from which the quest will be provided
* @param {object} questTypePool Pools for quests (used to avoid redundant quests)
* @param {object} repeatableConfig The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requestd quest
* @returns {object} object of quest type format for "Elimination" (see assets/database/templates/repeatableQuests.json)
*/
generateEliminationQuest(pmcLevel: number, traderId: string, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IElimination;
/**
* Exploration repeatable quests can specify a required extraction point.
* This method creates the according object which will be appended to the conditions array
*
* @param {string} exit The exit name to generate the condition for
* @returns {object} Exit condition
*/
generateExplorationExitCondition(exit: Exit): IExplorationCondition;
/**
* A repeatable quest, besides some more or less static components, exists of reward and condition (see assets/database/templates/repeatableQuests.json)
* This is a helper method for GenerateCompletionQuest to create a completion condition (of which a completion quest theoretically can have many)
*
* @param {string} targetItemId id of the item to request
* @param {integer} value amount of items of this specific type to request
* @returns {object} object of "Completion"-condition
*/
generateCompletionAvailableForFinish(targetItemId: string, value: number): ICompletionAvailableFor;
/**
* A repeatable quest, besides some more or less static components, exists of reward and condition (see assets/database/templates/repeatableQuests.json)
* This is a helper method for GenerateEliminationQuest to create a location condition.
*
* @param {string} location the location on which to fulfill the elimination quest
* @returns {object} object of "Elimination"-location-subcondition
*/
generateEliminationLocation(location: string[]): IEliminationCondition;
/**
* A repeatable quest, besides some more or less static components, exists of reward and condition (see assets/database/templates/repeatableQuests.json)
* This is a helper method for GenerateEliminationQuest to create a kill condition.
*
* @param {string} target array of target npcs e.g. "AnyPmc", "Savage"
* @param {array} bodyParts array of body parts with which to kill e.g. ["stomach", "thorax"]
* @param {number} distance distance from which to kill (currently only >= supported)
* @returns {object} object of "Elimination"-kill-subcondition
*/
generateEliminationCondition(target: string, bodyPart: string[], distance: number): IEliminationCondition;
/**
* Used to create a quest pool during each cycle of repeatable quest generation. The pool will be subsequently
* narrowed down during quest generation to avoid duplicate quests. Like duplicate extractions or elimination quests
* where you have to e.g. kill scavs in same locations.
*
* @returns {object} the quest pool
*/
generateQuestPool(repeatableConfig: IRepeatableQuestConfig): IQuestTypePool;
/**
* Generate the reward for a mission. A reward can consist of
* - Experience
* - Money
* - Items
* - Trader Reputation
*
* The reward is dependent on the player level as given by the wiki. The exact mapping of pmcLevel to
* experience / money / items / trader reputation can be defined in QuestConfig.js
*
* There's also a random variation of the reward the spread of which can be also defined in the config.
*
* Additonaly, a scaling factor w.r.t. quest difficulty going from 0.2...1 can be used
*
* @param {integer} pmcLevel player's level
* @param {number} difficulty a reward scaling factor goint from 0.2 to 1
* @param {string} traderId the trader for reputation gain (and possible in the future filtering of reward item type based on trader)
* @param {object} repeatableConfig The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requestd quest
* @returns {object} object of "Reward"-type that can be given for a repeatable mission
*/
generateReward(pmcLevel: number, difficulty: number, traderId: string, repeatableConfig: IRepeatableQuestConfig): IRewards;
/**
* Helper to create a reward item structured as required by the client
*
* @param {string} tpl itemId of the rewarded item
* @param {integer} value amount of items to give
* @param {integer} index all rewards will be appended to a list, for unkown reasons the client wants the index
* @returns {object} object of "Reward"-item-type
*/
generateRewardItem(tpl: string, value: number, index: number, preset?: any): IReward;
debugLogRepeatableQuestIds(pmcData: IPmcData): void;
probabilityObjectArray<K, V>(configArrayInput: ProbabilityObject<K, V>[]): ProbabilityObjectArray<K, V>;
changeRepeatableQuest(pmcDataIn: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,21 @@
import { RagfairServer } from "../servers/RagfairServer";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { TradeHelper } from "../helpers/TradeHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IProcessRagfairTradeRequestData } from "../models/eft/trade/IProcessRagfairTradeRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { Upd } from "../models/eft/common/tables/IItem";
import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTradeRequestData";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ILogger } from "../models/spt/utils/ILogger";
declare class TradeController {
protected logger: ILogger;
protected itemEventRouter: ItemEventRouter;
protected tradeHelper: TradeHelper;
protected profileHelper: ProfileHelper;
protected ragfairServer: RagfairServer;
constructor(logger: ILogger, itemEventRouter: ItemEventRouter, tradeHelper: TradeHelper, profileHelper: ProfileHelper, ragfairServer: RagfairServer);
confirmTrading(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string, foundInRaid?: boolean, upd?: Upd): IItemEventRouterResponse;
confirmRagfairTrading(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse;
}
export { TradeController };

View File

@ -0,0 +1,26 @@
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

@ -0,0 +1,11 @@
import { WeatherGenerator } from "../generators/WeatherGenerator";
import { IWeatherData } from "../models/eft/weather/IWeatherData";
import { IWeatherConfig } from "../models/spt/config/IWeatherConfig";
import { ConfigServer } from "../servers/ConfigServer";
export declare class WeatherController {
protected weatherGenerator: WeatherGenerator;
protected configServer: ConfigServer;
protected weatherConfig: IWeatherConfig;
constructor(weatherGenerator: WeatherGenerator, configServer: ConfigServer);
generate(): IWeatherData;
}

View File

@ -0,0 +1,10 @@
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
export declare class WishlistController {
protected itemEvenRouter: ItemEventRouter;
constructor(itemEvenRouter: ItemEventRouter);
addToWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
removeFromWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,14 @@
import { DependencyContainer } from "tsyringe";
export declare class Container {
static registerTypes(depContainer: DependencyContainer): void;
static registerListTypes(depContainer: DependencyContainer): void;
private static registerUtils;
private static registerRouters;
private static registerGenerators;
private static registerHelpers;
private static registerLoaders;
private static registerCallbacks;
private static registerServices;
private static registerServers;
private static registerControllers;
}

View File

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

View File

@ -0,0 +1,7 @@
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

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

View File

@ -0,0 +1,40 @@
import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
export declare class Router {
private handledRoutes;
getTopLevelRoute(): string;
protected getHandledRoutes(): HandledRoute[];
private getInternalHandledRoutes;
canHandle(url: string, partialMatch?: boolean): boolean;
}
export declare class StaticRouter extends Router {
private routes;
constructor(routes: RouteAction[]);
handleStatic(url: string, info: any, sessionID: string, output: string): any;
getHandledRoutes(): HandledRoute[];
}
export declare class DynamicRouter extends Router {
private routes;
constructor(routes: RouteAction[]);
handleDynamic(url: string, info: any, sessionID: string, output: string): any;
getHandledRoutes(): HandledRoute[];
}
export declare class ItemEventRouterDefinition extends Router {
constructor();
handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse;
}
export declare class SaveLoadRouter extends Router {
constructor();
handleLoad(profile: IAkiProfile): IAkiProfile;
}
export declare class HandledRoute {
route: string;
dynamic: boolean;
constructor(route: string, dynamic: boolean);
}
export declare class RouteAction {
url: string;
action: (url: string, info: any, sessionID: string, output: string) => any;
constructor(url: string, action: (url: string, info: any, sessionID: string, output: string) => any);
}

View File

@ -0,0 +1,5 @@
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

@ -0,0 +1,46 @@
import { BotHelper } from "../helpers/BotHelper";
import { GameEventHelper } from "../helpers/GameEventHelper";
import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData";
import { Health as PmcHealth } from "../models/eft/common/IPmcData";
import { IBotBase } from "../models/eft/common/tables/IBotBase";
import { Health, Inventory, Skills } 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 { 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 databaseServer: DatabaseServer;
protected botInventoryGenerator: BotInventoryGenerator;
protected botHelper: BotHelper;
protected gameEventHelper: GameEventHelper;
protected configServer: ConfigServer;
protected botConfig: IBotConfig;
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botHelper: BotHelper, gameEventHelper: GameEventHelper, configServer: ConfigServer);
generate(info: IGenerateBotsRequestData, playerScav?: boolean): IBotBase[];
protected generateBot(bot: IBotBase, role: string, isPmc: boolean): IBotBase;
protected generateRandomLevel(min: number, max: number): BotGenerator.IRandomisedBotLevelResult;
/** Converts health object to the required format */
protected generateHealth(healthObj: Health, playerScav?: boolean): PmcHealth;
protected generateSkills(skillsObj: Skills): Skills;
protected getPmcRole(pmcSide: string): string;
protected removeChristmasItemsFromBotInventory(nodeInventory: Inventory): void;
protected generateId(bot: IBotBase): IBotBase;
protected generateInventoryID(profile: IBotBase): IBotBase;
protected getPMCDifficulty(requestedDifficulty: string): string;
protected generateDogtag(bot: IBotBase): IBotBase;
}
export {};

View File

@ -0,0 +1,24 @@
import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
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

@ -0,0 +1,29 @@
import { PMCLootGenerator } from "../generators/PMCLootGenerator";
import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper";
import { HandbookHelper } from "../helpers/HandbookHelper";
import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
import { ItemMinMax, Items } from "../models/eft/common/tables/IBotType";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { IBotConfig } from "../models/spt/config/IBotConfig";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
export declare class BotLootGenerator {
protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected randomUtil: RandomUtil;
protected databaseServer: DatabaseServer;
protected handbookHelper: HandbookHelper;
protected botGeneratorHelper: BotGeneratorHelper;
protected pmcLootGenerator: PMCLootGenerator;
protected configServer: ConfigServer;
protected botConfig: IBotConfig;
constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, pmcLootGenerator: PMCLootGenerator, configServer: ConfigServer);
generateLoot(lootPool: Items, itemCounts: ItemMinMax, isPmc: boolean, inventory: PmcInventory): void;
protected getRandomisedCount(min: number, max: number, nValue: number): number;
protected addLootFromPool(pool: ITemplateItem[], equipmentSlots: string[], count: number, inventory: PmcInventory, totalValueLimit?: number, useLimits?: boolean): void;
/** Compares two item templates by their price to spawn chance ratio */
protected compareByValue(a: ITemplateItem, b: ITemplateItem): number;
}

View File

@ -0,0 +1,88 @@
import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
import { Inventory, MinMax, ModsChances } from "../models/eft/common/tables/IBotType";
import { Item } from "../models/eft/common/tables/IItem";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { RandomUtil } from "../utils/RandomUtil";
export declare class BotWeaponGenerator {
protected logger: ILogger;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected weightedRandomHelper: WeightedRandomHelper;
protected botGeneratorHelper: BotGeneratorHelper;
protected randomUtil: RandomUtil;
private readonly modMagazineSlotId;
constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil);
generateWeapon(equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, magCounts: MinMax, botRole: string, isPmc: boolean, inventory: PmcInventory): void;
/**
* Get the mods necessary to kit out a weapon to its preset level
* @param weaponTpl weapon to find preset for
* @param equipmentSlot the slot the weapon will be placed in
* @param weaponParentId
* @returns array of weapon mods
*/
protected getPresetWeaponMods(weaponTpl: string, equipmentSlot: string, weaponParentId: string, itemTemplate: ITemplateItem, botRole: string): Item[];
/** Checks if all required slots are occupied on a weapon and all it's mods */
protected isWeaponValid(itemList: Item[]): boolean;
/**
* Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets.
* Additionally, adds extra bullets to SecuredContainer
* @param weaponMods
* @param weaponTemplate
* @param magCounts
* @param ammoTpl
* @param inventory
* @returns
*/
protected generateExtraMagazines(weaponMods: Item[], weaponTemplate: ITemplateItem, magCounts: MinMax, ammoTpl: string, inventory: PmcInventory): void;
/**
* Get a randomised count of magazines
* @param magCounts min and max value returned value can be between
* @returns numberical value of magazine count
*/
protected getRandomisedMagazineCount(magCounts: MinMax): number;
/**
* Add ammo to the secure container
* @param stackCount How many stacks of ammo to add
* @param ammoTpl Ammo type to add
* @param stackSize Size of the ammo stack to add
* @param inventory Player inventory
*/
protected addAmmoToSecureContainer(stackCount: number, ammoTpl: string, stackSize: number, inventory: PmcInventory): void;
/**
* Get a weapons magazine tpl from a weapon template
* @param weaponMods mods from a weapon template
* @param weaponTemplate Weapon to get magazine tpl for
* @returns magazine tpl string
*/
protected getMagazineTplFromWeaponTemplate(weaponMods: Item[], weaponTemplate: ITemplateItem): string;
protected addBulletsToVestAndPockets(ammoTpl: string, bulletCount: number, inventory: PmcInventory): void;
/**
* Finds and returns compatible ammo tpl
*
* @param {*} weaponMods
* @param {*} weaponTemplate
* @returns compatible ammo tpl
*/
protected getCompatibleAmmo(weaponMods: Item[], weaponTemplate: ITemplateItem): string;
/**
* Fill existing magazines to full, while replacing their contents with specified ammo
* @param weaponMods
* @param magazine
* @param ammoTpl
*/
protected fillExistingMagazines(weaponMods: Item[], magazine: Item, ammoTpl: string): void;
/**
* Fill each Camora with a bullet
* @param weaponMods Weapon mods to find and update camora mod(s) from
* @param magazineId magazine id to find and add to
* @param ammoTpl ammo template id to hydate with
*/
protected fillCamorasWithAmmo(weaponMods: Item[], magazineId: string, ammoTpl: string): void;
}

View File

@ -0,0 +1,46 @@
import { ContainerHelper } from "../helpers/ContainerHelper";
import { GameEventHelper } from "../helpers/GameEventHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { RagfairServerHelper } from "../helpers/RagfairServerHelper";
import { ILooseLoot, SpawnpointTemplate } from "../models/eft/common/ILooseLoot";
import { Item } from "../models/eft/common/tables/IItem";
import { IStaticAmmoDetails, IStaticContainerProps, IStaticForcedProps, IStaticLootDetails } from "../models/eft/common/tables/ILootBase";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { ILocationConfig } from "../models/spt/config/ILocationConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { JsonUtil } from "../utils/JsonUtil";
import { MathUtil } from "../utils/MathUtil";
import { ObjectId } from "../utils/ObjectId";
import { RandomUtil } from "../utils/RandomUtil";
export interface IContainerItem {
items: Item[];
width: number;
height: number;
}
export declare class LocationGenerator {
protected logger: ILogger;
protected jsonUtil: JsonUtil;
protected objectId: ObjectId;
protected randomUtil: RandomUtil;
protected ragfairServerHelper: RagfairServerHelper;
protected itemHelper: ItemHelper;
protected mathUtil: MathUtil;
protected gameEventHelper: GameEventHelper;
protected containerHelper: ContainerHelper;
protected presetHelper: PresetHelper;
protected configServer: ConfigServer;
protected locationConfig: ILocationConfig;
constructor(logger: ILogger, jsonUtil: JsonUtil, objectId: ObjectId, randomUtil: RandomUtil, ragfairServerHelper: RagfairServerHelper, itemHelper: ItemHelper, mathUtil: MathUtil, gameEventHelper: GameEventHelper, containerHelper: ContainerHelper, presetHelper: PresetHelper, configServer: ConfigServer);
generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record<string, IStaticLootDetails>, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, locationName: string): IStaticContainerProps;
protected getLooseLootMultiplerForLocation(location: string): number;
protected getStaticLootMultiplerForLocation(location: string): number;
generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, locationName: string): SpawnpointTemplate[];
protected createItem(tpl: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, parentId?: string): IContainerItem;
protected getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string;
protected getRandomValidCaliber(magTemplate: ITemplateItem): string;
protected drawAmmoTpl(caliber: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>): string;
protected createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, caliber?: string): Item;
protected createCartidges(parentId: string, ammoTpl: string, stackCount: number): Item;
}

View File

@ -0,0 +1,15 @@
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

@ -0,0 +1,25 @@
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

@ -0,0 +1,60 @@
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 { 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 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, 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

@ -0,0 +1,33 @@
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;
}

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