This commit is contained in:
Chomp 2022-06-14 20:03:25 +01:00
commit 137fb97f1d
878 changed files with 23302 additions and 0 deletions

View File

@ -0,0 +1,31 @@
Copyright (c) 2022 Revingly. All rights reserved.
Developed by: - Wulv
- Revingly
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation files
(the "Software"), to deal with the Software without restriction,
including without limitation the rights to use, copy, modify, merge,
publish, distribute, sublicense, and/or sell copies of the Software,
and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimers.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimers in the
documentation and/or other materials provided with the distribution.
* Neither the names of Revingly, Food&Drinks-redux nor the names of its
contributors may be used to endorse or promote products derived from
this Software without specific prior written permission.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH
THE SOFTWARE.

View File

@ -0,0 +1,2 @@
This file should be placed into user/mods.
File name should be FoodDrink

View File

@ -0,0 +1,85 @@
{
"_id": "FoodDrink",
"working": true,
"customization_seller": false,
"name": "FoodDrink",
"surname": " ",
"nickname": "FoodDrink",
"location": "Get your food and drinks here ",
"avatar": "/files/trader/avatar/FoodDrink.jpg",
"balance_rub": 5000000,
"balance_dol": 0,
"balance_eur": 0,
"unlockedByDefault": true,
"discount": 0,
"discount_end": 0,
"buyer_up": true,
"currency": "RUB",
"nextResupply": 1615141448,
"repair": {
"availability": false,
"quality": "2",
"excluded_id_list": [],
"excluded_category": [],
"currency": "5449016a4bdc2d6f028b456f",
"currency_coefficient": 1,
"price_rate": 10
},
"insurance": {
"availability": false,
"min_payment": 0,
"min_return_hour": 0,
"max_return_hour": 0,
"max_storage_time": 99,
"excluded_category": []
},
"gridHeight": 150,
"loyaltyLevels": [
{
"minLevel": 1,
"minSalesSum": 0,
"minStanding": 0,
"buy_price_coef": 38,
"repair_price_coef": 175,
"insurance_price_coef": 10,
"exchange_price_coef": 0,
"heal_price_coef": 0
}
],
"sell_category": [
"82e7fac0b7495d72d4083356",
"ac705d3440c1407645e33579",
"dc97aee367144dc03389405d",
"7ffcc96aa06c7e90940330c5",
"e8f46e3ad74b9d862121f9dc",
"5b47574386f77428ca22b33e",
"5b47574386f77428ca22b33f",
"5b5f78dc86f77409407a7f8e",
"5b47574386f77428ca22b346",
"5b47574386f77428ca22b340",
"5b47574386f77428ca22b344",
"5b47574386f77428ca22b342",
"5b47574386f77428ca22b341",
"5b47574386f77428ca22b345",
"5b47574386f77428ca22b343",
"5b5f71b386f774093f2ecf11",
"5b5f71c186f77409407a7ec0",
"5b5f71de86f774093f2ecf13",
"5b5f724186f77447ed5636ad",
"5b5f736886f774094242f193",
"5b5f73ec86f774093e6cb4fd",
"5b5f74cc86f77447ec5d770a",
"5b5f750686f774093e6cb503",
"5b5f751486f77447ec5d770c",
"5b5f752e86f774093e6cb505",
"5b5f754a86f774094242f19b",
"5b5f755f86f77447ec5d770e",
"5b5f757486f774093e6cb507",
"5b5f75b986f77447ec5d7710",
"5b5f75c686f774094242f19f",
"5b5f75e486f77447ec5d7712",
"5b5f760586f774093e6cb509",
"5b5f761f86f774094242f1a1",
"5b5f764186f77447ec5d7714"
]
}

View File

@ -0,0 +1,8 @@
/**
* authors: - Wulv
* - Revingly
*/
const { Mod } = require("./src/mod.js");
module.exports.mod = new Mod();

View File

@ -0,0 +1,8 @@
{
"name": "FoodDrink-Redux",
"author": "Revingly",
"version": "2.9.0",
"license": "NCSA",
"main": "package.js",
"akiVersion": "2.3.1"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

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

View File

@ -0,0 +1,106 @@
/**
* authors: - Wulv
* - Revingly
*/
"use strict";
class Mod {
constructor() {
this.mod = "Revingly-FoodDrink-Redux";
this.funcptr = HttpServer.onRespond["IMAGE"];
Logger.info(`Loading: ${this.mod}`);
ModLoader.onLoad[this.mod] = this.load.bind(this);
HttpServer.onRespond["IMAGE"] = this.getImage.bind(this);
this.itemsToSell = {};
}
getImage(sessionID, req, resp, body) {
const filepath = `${ModLoader.getModPath(this.mod)}res/`;
if (req.url.includes("/avatar/FoodDrink")) {
HttpServer.sendFile(resp, `${filepath}FoodDrink.jpg`);
return;
}
this.funcptr(sessionID, req, resp, body);
}
load() {
Logger.info(`Loading: ${this.mod}`);
const filepath = `${ModLoader.getModPath(this.mod)}db/`;
DatabaseServer.tables.traders.FoodDrink = {
"assort": this.createFoodAndDrinkAssortTable(),
"base": JsonUtil.deserialize(VFS.readFile(`${filepath}base.json`))
};
let locales = DatabaseServer.tables.locales.global;
for (const locale in locales) {
locales[locale].trading.FoodDrink = {
"FullName": "Food & Drink",
"FirstName": "Food & Drink",
"Nickname": "Food & Drink",
"Location": "In the food shop",
"Description": "Get your food and drink here!"
};
}
DatabaseServer.tables.locales.global = locales;
// Add refresh time in seconds
const traderRefreshConfig = {"traderId": "FoodDrink","seconds": 3600}
TraderConfig["updateTime"].push(traderRefreshConfig);
}
createFoodAndDrinkAssortTable() {
const { original_prices } = require('./config.json');
const FOOD_ID = "5448e8d04bdc2ddf718b4569";
const WATER_ID = "5448e8d64bdc2dce718b4568";
const FOOD_CONTAINER_ID = "5c093db286f7740a1b2617e3";
const SELL_AMOUNT = 10000;
const ROUBLE_ID = "5449016a4bdc2d6f028b456f";
const items = DatabaseServer.tables.templates.items;
const prices = DatabaseServer.tables.templates.prices;
return Object
.values(items)
.filter(item => item._parent === FOOD_ID || item._parent === WATER_ID || item._id === FOOD_CONTAINER_ID)
.map(item => {
return {
"_id": HashUtil.generate(),
"_tpl": item._id,
"parentId": "hideout",
"slotId": "hideout",
"upd": {
"UnlimitedCount": true,
"StackObjectsCount": 999999999
}
}
})
.reduce((acc, item) => {
acc.items.push(item);
acc.barter_scheme[item._id] = [
[
{
"count": original_prices ? prices[item._tpl] : SELL_AMOUNT ,
"_tpl": ROUBLE_ID
}
]
];
acc.loyal_level_items[item._id] = 1;
return acc;
},
{
items: [], barter_scheme: {}, loyal_level_items: {}
}
);
}
}
module.exports.Mod = Mod;

View File

@ -0,0 +1,9 @@
# Exclude these folders from linting
node_modules
dist/
types/
# Exclude these filetypes from linting
*.json
*.txt
*.exe

View File

@ -0,0 +1,75 @@
{
"root": true,
"parser": "@typescript-eslint/parser",
"plugins": [
"@typescript-eslint"
],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended"
],
"rules": {
"@typescript-eslint/no-explicit-any": 0,
"@typescript-eslint/no-unused-vars": 1,
"@typescript-eslint/no-empty-interface": 0,
"@typescript-eslint/no-namespace": 0,
"@typescript-eslint/comma-dangle": 1,
"@typescript-eslint/func-call-spacing": 2,
"@typescript-eslint/quotes": 1,
"@typescript-eslint/brace-style": [
"warn",
"allman"
],
"@typescript-eslint/naming-convention": [
"warn",
{
"selector": "default",
"format": ["camelCase"],
"leadingUnderscore": "allow"
},
{
"selector": "typeLike",
"format": ["PascalCase"]
},
{
"selector": "objectLiteralProperty",
"format": ["PascalCase", "camelCase"],
"leadingUnderscore": "allow"
},
{
"selector": "typeProperty",
"format": ["PascalCase", "camelCase"],
"leadingUnderscore": "allow"
},
{
"selector": "enumMember",
"format": ["UPPER_CASE"]
}
],
"@typescript-eslint/indent": [
"warn",
4
],
"@typescript-eslint/no-unused-expressions": [
"warn",
{
"allowShortCircuit": false,
"allowTernary": false
}
],
"@typescript-eslint/keyword-spacing": [
"warn",
{
"before": true,
"after": true
}
],
"@typescript-eslint/explicit-module-boundary-types": [
"warn",
{
"allowArgumentsExplicitlyTypedAsAny": true
}
]
}
}

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,3 @@
{
"original_prices": true
}

View File

@ -0,0 +1,85 @@
{
"_id": "cat",
"working": true,
"customization_seller": false,
"name": "Cat",
"surname": " ",
"nickname": "Cat",
"location": "Get your food and drinks here ",
"avatar": "/files/trader/avatar/cat",
"balance_rub": 5000000,
"balance_dol": 0,
"balance_eur": 0,
"unlockedByDefault": true,
"discount": 0,
"discount_end": 0,
"buyer_up": true,
"currency": "RUB",
"nextResupply": 1615141448,
"repair": {
"availability": false,
"quality": "2",
"excluded_id_list": [],
"excluded_category": [],
"currency": "5449016a4bdc2d6f028b456f",
"currency_coefficient": 1,
"price_rate": 10
},
"insurance": {
"availability": false,
"min_payment": 0,
"min_return_hour": 0,
"max_return_hour": 0,
"max_storage_time": 99,
"excluded_category": []
},
"gridHeight": 150,
"loyaltyLevels": [
{
"minLevel": 1,
"minSalesSum": 0,
"minStanding": 0,
"buy_price_coef": 38,
"repair_price_coef": 175,
"insurance_price_coef": 10,
"exchange_price_coef": 0,
"heal_price_coef": 0
}
],
"sell_category": [
"82e7fac0b7495d72d4083356",
"ac705d3440c1407645e33579",
"dc97aee367144dc03389405d",
"7ffcc96aa06c7e90940330c5",
"e8f46e3ad74b9d862121f9dc",
"5b47574386f77428ca22b33e",
"5b47574386f77428ca22b33f",
"5b5f78dc86f77409407a7f8e",
"5b47574386f77428ca22b346",
"5b47574386f77428ca22b340",
"5b47574386f77428ca22b344",
"5b47574386f77428ca22b342",
"5b47574386f77428ca22b341",
"5b47574386f77428ca22b345",
"5b47574386f77428ca22b343",
"5b5f71b386f774093f2ecf11",
"5b5f71c186f77409407a7ec0",
"5b5f71de86f774093f2ecf13",
"5b5f724186f77447ed5636ad",
"5b5f736886f774094242f193",
"5b5f73ec86f774093e6cb4fd",
"5b5f74cc86f77447ec5d770a",
"5b5f750686f774093e6cb503",
"5b5f751486f77447ec5d770c",
"5b5f752e86f774093e6cb505",
"5b5f754a86f774094242f19b",
"5b5f755f86f77447ec5d770e",
"5b5f757486f774093e6cb507",
"5b5f75b986f77447ec5d7710",
"5b5f75c686f774094242f19f",
"5b5f75e486f77447ec5d7712",
"5b5f760586f774093e6cb509",
"5b5f761f86f774094242f1a1",
"5b5f764186f77447ec5d7714"
]
}

View File

@ -0,0 +1,12 @@
{
"folders": [
{
"path": "."
}
],
"extensions": {
"recommendations": [
"dbaeumer.vscode-eslint"
]
}
}

View File

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

View File

@ -0,0 +1,85 @@
{
"_id": "cat",
"working": true,
"customization_seller": false,
"name": "Cat",
"surname": " ",
"nickname": "Cat",
"location": "Get your food and drinks here ",
"avatar": "/files/trader/avatar/cat",
"balance_rub": 5000000,
"balance_dol": 0,
"balance_eur": 0,
"unlockedByDefault": true,
"discount": 0,
"discount_end": 0,
"buyer_up": true,
"currency": "RUB",
"nextResupply": 1615141448,
"repair": {
"availability": false,
"quality": "2",
"excluded_id_list": [],
"excluded_category": [],
"currency": "5449016a4bdc2d6f028b456f",
"currency_coefficient": 1,
"price_rate": 10
},
"insurance": {
"availability": false,
"min_payment": 0,
"min_return_hour": 0,
"max_return_hour": 0,
"max_storage_time": 99,
"excluded_category": []
},
"gridHeight": 150,
"loyaltyLevels": [
{
"minLevel": 1,
"minSalesSum": 0,
"minStanding": 0,
"buy_price_coef": 38,
"repair_price_coef": 175,
"insurance_price_coef": 10,
"exchange_price_coef": 0,
"heal_price_coef": 0
}
],
"sell_category": [
"82e7fac0b7495d72d4083356",
"ac705d3440c1407645e33579",
"dc97aee367144dc03389405d",
"7ffcc96aa06c7e90940330c5",
"e8f46e3ad74b9d862121f9dc",
"5b47574386f77428ca22b33e",
"5b47574386f77428ca22b33f",
"5b5f78dc86f77409407a7f8e",
"5b47574386f77428ca22b346",
"5b47574386f77428ca22b340",
"5b47574386f77428ca22b344",
"5b47574386f77428ca22b342",
"5b47574386f77428ca22b341",
"5b47574386f77428ca22b345",
"5b47574386f77428ca22b343",
"5b5f71b386f774093f2ecf11",
"5b5f71c186f77409407a7ec0",
"5b5f71de86f774093f2ecf13",
"5b5f724186f77447ed5636ad",
"5b5f736886f774094242f193",
"5b5f73ec86f774093e6cb4fd",
"5b5f74cc86f77447ec5d770a",
"5b5f750686f774093e6cb503",
"5b5f751486f77447ec5d770c",
"5b5f752e86f774093e6cb505",
"5b5f754a86f774094242f19b",
"5b5f755f86f77447ec5d770e",
"5b5f757486f774093e6cb507",
"5b5f75b986f77447ec5d7710",
"5b5f75c686f774094242f19f",
"5b5f75e486f77447ec5d7712",
"5b5f760586f774093e6cb509",
"5b5f761f86f774094242f1a1",
"5b5f764186f77447ec5d7714"
]
}

View File

@ -0,0 +1,132 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const config_json_1 = require("../config/config.json");
const baseJson = __importStar(require("../db/base.json"));
class SampleTrader {
constructor() {
this.mod = "SampleTrader";
}
// Perform these actions before server fully loads
load(container) {
const logger = container.resolve("WinstonLogger");
logger.info(`Loading: ${this.mod}`);
this.initialModLoader = container.resolve("InitialModLoader");
this.hashUtil = container.resolve("HashUtil");
const imageRouteService = container.resolve("ImageRouteService");
const staticRouterModService = container.resolve("StaticRouterModService");
staticRouterModService.registerStaticRouter("SampleTraderImage", [
{
url: `${baseJson.avatar}`,
action: (url, info, sessionId, output) => {
logger.info("Custom static route hit");
return JSON.stringify({ response: "OK" });
}
}
], "custom-static-my-mod");
const test = "aki-core" /* CORE */;
switch (test) {
case "aki-core" /* CORE */:
break;
case "aki-hideout" /* HIDEOUT */:
break;
case "aki-bot" /* BOT */:
break;
default:
break;
}
const imageFilepath = `${this.initialModLoader.getModPath(this.mod)}res`;
imageRouteService.addRoute(baseJson.avatar, `${imageFilepath}/cat.jpg`);
// Add refresh time in seconds when Config server allows to set configs
const configServer = container.resolve("ConfigServer");
const traderConfig = configServer.getConfig("aki-trader" /* TRADER */);
const traderRefreshConfig = { traderId: "cat", seconds: 3600 };
traderConfig.updateTime.push(traderRefreshConfig);
}
delayedLoad(container) {
const databaseServer = container.resolve("DatabaseServer");
const jsonUtil = container.resolve("JsonUtil");
this.tables = databaseServer.getTables();
this.tables.traders = {
...this.tables.traders, cat: {
assort: this.createFoodAndDrinkAssortTable(),
base: jsonUtil.deserialize(jsonUtil.serialize(baseJson)),
questassort: {}
}
};
const locales = this.tables.locales.global;
for (const locale in locales) {
locales[locale].trading.cat = {
FullName: "Cat",
FirstName: "Cat",
Nickname: "Cat",
Location: "In the cat shop",
Description: "This is the cat shop"
};
}
this.tables.locales = { ...this.tables.locales, global: locales };
databaseServer.setTables(this.tables);
}
createFoodAndDrinkAssortTable() {
const FOOD_ID = "5448e8d04bdc2ddf718b4569";
const WATER_ID = "5448e8d64bdc2dce718b4568";
const FOOD_CONTAINER_ID = "5c093db286f7740a1b2617e3";
const SELL_AMOUNT = 10000;
const ROUBLE_ID = "5449016a4bdc2d6f028b456f";
const items = this.tables.templates.items;
const prices = this.tables.templates.prices;
return Object
.values(items)
.filter(item => item._parent === FOOD_ID || item._parent === WATER_ID || item._id === FOOD_CONTAINER_ID)
.map(item => {
return {
"_id": this.hashUtil.generate(),
"_tpl": item._id,
"parentId": "hideout",
"slotId": "hideout",
"upd": {
"UnlimitedCount": true,
"StackObjectsCount": 999999999
}
};
})
.reduce((acc, item) => {
acc.items.push(item);
acc.barter_scheme[item._id] = [
[
{
"count": config_json_1.original_prices ? prices[item._tpl] : SELL_AMOUNT,
"_tpl": ROUBLE_ID
}
]
];
acc.loyal_level_items[item._id] = 1;
return acc;
}, {
items: [], barter_scheme: {}, loyal_level_items: {}
});
}
}
module.exports = { mod: new SampleTrader() };

View File

@ -0,0 +1,25 @@
{
"name": "AddTrader",
"version": "1.0.0",
"main": "src/mod.js",
"license": "MIT",
"author": "Shirito",
"akiVersion": "3.0.0",
"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"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

View File

@ -0,0 +1,146 @@
import { DependencyContainer } from "tsyringe";
import type { IMod } from "../types/models/external/mod";
import type { ILogger } from "../types/models/spt/utils/ILogger";
import type { InitialModLoader } from "../types/loaders/InitialModLoader";
import type { DatabaseServer } from "../types/servers/DatabaseServer";
import type { IDatabaseTables } from "../types/models/spt/server/IDatabaseTables";
import type { HashUtil } from "../types/utils/HashUtil";
import type { ImageRouteService } from "../types/services/mod/image/ImageRouteService";
import type { ConfigServer } from "../types/servers/ConfigServer";
import { ConfigTypes } from "../types/models/enums/ConfigTypes";
import type { ITraderBase } from "../types/models/eft/common/tables/ITrader";
import type { ITraderConfig, UpdateTime } from '../types/models/spt/config/ITraderConfig';
import type { StaticRouterModService } from '../types/services/mod/staticRouter/StaticRouterModService';
import { original_prices } from "../config/config.json";
import * as baseJson from "../db/base.json";
import { JsonUtil } from "../types/utils/JsonUtil";
class SampleTrader implements IMod {
mod: string
tables: IDatabaseTables
initialModLoader: InitialModLoader
hashUtil: HashUtil
constructor() {
this.mod = "SampleTrader";
}
// Perform these actions before server fully loads
public load(container: DependencyContainer): void {
const logger = container.resolve<ILogger>("WinstonLogger");
logger.info(`Loading: ${this.mod}`);
this.initialModLoader = container.resolve<InitialModLoader>("InitialModLoader");
this.hashUtil = container.resolve<HashUtil>("HashUtil");
const imageRouteService = container.resolve<ImageRouteService>("ImageRouteService");
const staticRouterModService = container.resolve<StaticRouterModService>("StaticRouterModService");
staticRouterModService.registerStaticRouter(
"SampleTraderImage",
[
{
url: `${baseJson.avatar}`,
action: (url, info, sessionId, output) => {
logger.info("Custom static route hit")
return JSON.stringify({ response: "OK" });
}
}
],
"custom-static-my-mod"
);
const test: string = ConfigTypes.CORE;
switch (test) {
case ConfigTypes.CORE:
break;
case ConfigTypes.HIDEOUT:
break;
case ConfigTypes.BOT:
break;
default:
break
}
const imageFilepath = `${this.initialModLoader.getModPath(this.mod)}res`;
imageRouteService.addRoute(baseJson.avatar, `${imageFilepath}/cat.jpg`);
// Add refresh time in seconds when Config server allows to set configs
const configServer = container.resolve<ConfigServer>("ConfigServer");
const traderConfig = configServer.getConfig<ITraderConfig>(ConfigTypes.TRADER);
const traderRefreshConfig: UpdateTime = { traderId: "cat", seconds: 3600 }
traderConfig.updateTime.push(traderRefreshConfig);
}
public delayedLoad(container: DependencyContainer): void {
const databaseServer = container.resolve<DatabaseServer>("DatabaseServer");
const jsonUtil = container.resolve<JsonUtil>("JsonUtil");
this.tables = databaseServer.getTables();
this.tables.traders = {
...this.tables.traders, cat: {
assort: this.createFoodAndDrinkAssortTable(),
base: jsonUtil.deserialize(jsonUtil.serialize(baseJson)) as ITraderBase,
questassort: {}
}
};
const locales = this.tables.locales.global;
for (const locale in locales) {
locales[locale].trading.cat = {
FullName: "Cat",
FirstName: "Cat",
Nickname: "Cat",
Location: "In the cat shop",
Description: "This is the cat shop"
};
}
this.tables.locales = { ...this.tables.locales, global: locales };
databaseServer.setTables(this.tables);
}
createFoodAndDrinkAssortTable() {
const FOOD_ID = "5448e8d04bdc2ddf718b4569";
const WATER_ID = "5448e8d64bdc2dce718b4568";
const FOOD_CONTAINER_ID = "5c093db286f7740a1b2617e3";
const SELL_AMOUNT = 10000;
const ROUBLE_ID = "5449016a4bdc2d6f028b456f";
const items = this.tables.templates.items;
const prices = this.tables.templates.prices;
return Object
.values(items)
.filter(item => item._parent === FOOD_ID || item._parent === WATER_ID || item._id === FOOD_CONTAINER_ID)
.map(item => {
return {
"_id": this.hashUtil.generate(),
"_tpl": item._id,
"parentId": "hideout",
"slotId": "hideout",
"upd": {
"UnlimitedCount": true,
"StackObjectsCount": 999999999
}
}
})
.reduce((acc, item) => {
acc.items.push(item);
acc.barter_scheme[item._id] = [
[
{
"count": original_prices ? prices[item._tpl] : SELL_AMOUNT,
"_tpl": ROUBLE_ID
}
]
];
acc.loyal_level_items[item._id] = 1;
return acc;
},
{
items: [], barter_scheme: {}, loyal_level_items: {}
}
);
}
}
module.exports = { mod: new SampleTrader() }

View File

@ -0,0 +1,21 @@
{
"compilerOptions": {
"allowJs": true,
"module": "CommonJS",
"target": "es2020",
"moduleResolution": "node",
"esModuleInterop": true,
"downlevelIteration": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"resolveJsonModule": true,
"outDir": "out"
},
"lib": [
"es2020"
],
"include": [
"src/*",
"src/**/*"
]
}

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

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 {
private botController;
private httpResponse;
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,17 @@
import { BundleLoader } from "../loaders/BundleLoader";
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 {
private logger;
private httpResponse;
private httpServer;
private bundleLoader;
private configServer;
private httpConfig;
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 {
private customizationController;
private saveServer;
private httpResponse;
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 {
private httpResponse;
private 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 {
private hashUtil;
private timeUtil;
private httpResponse;
private 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 {
private httpResponse;
private watermark;
private 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 {
private 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 {
private httpResponse;
private profileHelper;
private 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,32 @@
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 { ConfigServer } from "../servers/ConfigServer";
export declare class HideoutCallbacks extends OnUpdate {
private hideoutController;
private configServer;
private hideoutConfig;
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 {
private httpServer;
constructor(httpServer: IHttpServer);
onLoad(): void;
getRoute(): string;
getImage(): string;
}

View File

@ -0,0 +1,21 @@
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 { ConfigServer } from "../servers/ConfigServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class InraidCallbacks {
private inraidController;
private httpResponse;
private configServer;
private airdropConfig;
private inraidConfig;
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,23 @@
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 { ConfigServer } from "../servers/ConfigServer";
import { InsuranceService } from "../services/InsuranceService";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class InsuranceCallbacks extends OnLoadOnUpdate {
private insuranceController;
private insuranceService;
private httpResponse;
private configServer;
private insuranceConfig;
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 {
private 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 {
private httpResponse;
private 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 {
private httpResponse;
private launcherController;
private saveServer;
private 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 {
private httpResponse;
private 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 {
private httpResponse;
private jsonUtil;
private matchController;
private 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,21 @@
import { OnLoad } from "../di/OnLoad";
import { DelayedModLoader } from "../loaders/DelayedModLoader";
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 {
private logger;
private httpResponse;
private httpServer;
private modLoader;
private configServer;
private httpConfig;
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 {
private 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 {
private httpServerHelper;
private httpResponse;
private 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 {
private httpResponse;
private 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 {
private 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 {
private httpResponse;
private timeUtil;
private 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 {
private httpResponse;
private questController;
private 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,36 @@
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 { 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 { 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 {
private httpResponse;
private logger;
private jsonUtil;
private ragfairServer;
private ragfairController;
private configServer;
private ragfairConfig;
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;
}

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 {
private 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 {
private 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 {
private 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 {
private httpResponse;
private 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 {
private httpResponse;
private 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 {
private 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,20 @@
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 { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class BotController {
private databaseServer;
private botGenerator;
private botHelper;
private configServer;
private botConfig;
constructor(databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, configServer: ConfigServer);
getBotLimit(type: string): number;
getBotDifficulty(type: string, difficulty: string): IBotCore | Difficulty;
generate(info: IGenerateBotsRequestData, playerScav?: boolean): IBotBase[];
getBotCap(): number;
}

View File

@ -0,0 +1,22 @@
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IWearClothingRequestData } from "../models/eft/customization/IWearClothingRequestData";
import { IBuyClothingRequestData } from "../models/eft/customization/IBuyClothingRequestData";
import { ISuit } from "../models/eft/common/tables/ITrader";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ILogger } from "../models/spt/utils/ILogger";
export declare class CustomizationController {
private logger;
private itemEventRouter;
private databaseServer;
private saveServer;
private 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;
private getAllTraderSuits;
}

View File

@ -0,0 +1,24 @@
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 } from "../models/eft/profile/IAkiProfile";
import { SaveServer } from "../servers/SaveServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
export declare class DialogueController {
private httpResponse;
private saveServer;
private 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;
private removeExpiredItems;
update(): void;
}

View File

@ -0,0 +1,20 @@
import { HttpServerHelper } from "../helpers/HttpServerHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { Watermark } from "../utils/Watermark";
export declare class GameController {
private logger;
private watermark;
private httpServerHelper;
private profileHelper;
private configServer;
private httpConfig;
constructor(logger: ILogger, watermark: Watermark, httpServerHelper: HttpServerHelper, profileHelper: ProfileHelper, configServer: ConfigServer);
gameStart(url: string, info: IEmptyRequestData, sessionID: string): void;
getGameConfig(sessionID: string): IGameConfigResponse;
getServer(): any[];
private getActiveRepeatableQuests;
}

View File

@ -0,0 +1,8 @@
import { DatabaseServer } from "../servers/DatabaseServer";
import { HandbookHelper } from "../helpers/HandbookHelper";
export declare class HandbookController {
private databaseServer;
private 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 {
private logger;
private itemEventRouter;
private itemHelper;
private paymentService;
private inventoryHelper;
private 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,56 @@
import { HideoutHelper } from "../helpers/HideoutHelper";
import { InventoryHelper } from "../helpers/InventoryHelper";
import { PaymentHelper } from "../helpers/PaymentHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { HideoutUpgradeCompleteRequestData } from "../models/eft/hideout/HideoutUpgradeCompleteRequestData";
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 { IHideoutUpgradeRequestData } from "../models/eft/hideout/IHideoutUpgradeRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
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 {
private logger;
private hashUtil;
private timeUtil;
private databaseServer;
private randomUtil;
private inventoryHelper;
private saveServer;
private playerService;
private presetHelper;
private paymentHelper;
private itemEventRouter;
private httpResponse;
private profileHelper;
private hideoutHelper;
private configServer;
private hideoutConfig;
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;
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;
registerProduction(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData | IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
update(): void;
}

View File

@ -0,0 +1,30 @@
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 { 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 {
private saveServer;
private jsonUtil;
private databaseServer;
private questHelper;
private itemHelper;
private extendedProfileHelper;
private healthHelper;
private traderHelper;
private insuranceService;
private inRaidHelper;
private configServer;
private inraidConfig;
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,37 @@
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 { 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 {
private logger;
private randomUtil;
private itemEventRouter;
private timeUtil;
private saveServer;
private databaseServer;
private itemHelper;
private profileHelper;
private dialogueHelper;
private paymentService;
private insuranceService;
private configServer;
private insuranceConfig;
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 {
private logger;
private hashUtil;
private jsonUtil;
private databaseServer;
private presetHelper;
private inventoryHelper;
private profileHelper;
private paymentHelper;
private 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,27 @@
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 { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { HashUtil } from "../utils/HashUtil";
export declare class LauncherController {
private hashUtil;
private saveServer;
private httpServerHelper;
private databaseServer;
private configServer;
private coreConfig;
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;
private createAccount;
changeUsername(info: IChangeRequestData): string;
changePassword(info: IChangeRequestData): string;
wipe(info: IRegisterData): string;
getCompatibleTarkovVersion(): string;
}

View File

@ -0,0 +1,18 @@
import { DatabaseServer } from "../servers/DatabaseServer";
import { LocationGenerator } from "../generators/LocationGenerator";
import { ILocationBase } from "../models/eft/common/ILocationBase";
import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase";
import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil";
import { ILogger } from "../models/spt/utils/ILogger";
export declare class LocationController {
private jsonUtil;
private logger;
private locationGenerator;
private databaseServer;
private 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,28 @@
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 { ConfigServer } from "../servers/ConfigServer";
import { SaveServer } from "../servers/SaveServer";
import { MatchLocationService } from "../services/MatchLocationService";
export declare class MatchController {
private saveServer;
private profileHelper;
private matchLocationService;
private traderHelper;
private configServer;
private matchConfig;
private inraidConfig;
constructor(saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, configServer: ConfigServer);
getEnabled(): boolean;
getProfile(info: IGetProfileRequestData): IPmcData[];
private getMatch;
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 { INoteActionData } from "../models/eft/notes/INoteActionData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { ItemEventRouter } from "../routers/ItemEventRouter";
declare class NoteController {
private 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 {
private notifierHelper;
private httpServerHelper;
private notificationService;
private pollInterval;
private timeout;
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 { SaveServer } from "../servers/SaveServer";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IPresetBuildActionRequestData } from "../models/eft/presetBuild/IPresetBuildActionRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { WeaponBuild } from "../models/eft/profile/IAkiProfile";
import { HashUtil } from "../utils/HashUtil";
import { ItemEventRouter } from "../routers/ItemEventRouter";
export declare class PresetBuildController {
private hashUtil;
private itemEventRouter;
private itemHelper;
private 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 {
private presetHelper;
private databaseServer;
constructor(presetHelper: PresetHelper, databaseServer: DatabaseServer);
initialize(): void;
}

View File

@ -0,0 +1,34 @@
import { SaveServer } from "../servers/SaveServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { ItemHelper } from "../helpers/ItemHelper";
import { TraderHelper } from "../helpers/TraderHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData";
import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData";
import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData";
import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData";
import { ISearchFriendRequestData } from "../models/eft/profile/ISearchFriendRequestData";
import { ISearchFriendResponse } from "../models/eft/profile/ISearchFriendResponse";
import { HashUtil } from "../utils/HashUtil";
import { TimeUtil } from "../utils/TimeUtil";
import { IMiniProfile } from "../models/eft/launcher/IMiniProfile";
import { ExtendedProfileHelper } from "../helpers/ExtendedProfileHelper";
export declare class ProfileController {
private hashUtil;
private timeUtil;
private saveServer;
private databaseServer;
private itemHelper;
private traderHelper;
private 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,37 @@
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 } 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 { 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 {
private logger;
private timeUtil;
private itemEventRouter;
private databaseServer;
private itemHelper;
private dialogueHelper;
private profileHelper;
private questHelper;
private questConditionHelper;
private playerService;
private configServer;
private questConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, itemHelper: ItemHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, questHelper: QuestHelper, questConditionHelper: QuestConditionHelper, playerService: PlayerService, configServer: ConfigServer);
getClientQuests(sessionID: string): IQuest[];
acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
acceptRepeatableQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,69 @@
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 { 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 {
private logger;
private timeUtil;
private httpResponse;
private itemEventRouter;
private ragfairServer;
private ragfairPriceService;
private databaseServer;
private itemHelper;
private saveServer;
private ragfairSellHelper;
private ragfairTaxHelper;
private ragfairSortHelper;
private ragfairOfferHelper;
private profileHelper;
private paymentService;
private handbookHelper;
private paymentHelper;
private inventoryHelper;
private ragfairHelper;
private ragfairOfferService;
private ragfairRequiredItemsService;
private ragfairOfferGenerator;
private configServer;
private ragfairConfig;
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,40 @@
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 { 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 {
private logger;
private itemEventRouter;
private databaseServer;
private questHelper;
private traderHelper;
private paymentService;
private repairHelper;
private configServer;
private repairConfig;
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
*/
repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
}

View File

@ -0,0 +1,217 @@
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 { 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 {
private timeUtil;
private logger;
private randomUtil;
private mathUtil;
private jsonUtil;
private databaseServer;
private itemHelper;
private presetHelper;
private profileHelper;
private ragfairServerHelper;
private itemEventRouter;
private paymentService;
private objectId;
private configServer;
private questConfig;
constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, 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 {
private logger;
private itemEventRouter;
private tradeHelper;
private profileHelper;
private 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 {
private logger;
private databaseServer;
private traderAssortHelper;
private profileHelper;
private traderHelper;
private timeUtil;
private traderAssortService;
private 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,10 @@
import { WeatherGenerator } from "../generators/WeatherGenerator";
import { IWeatherData } from "../models/eft/weather/IWeatherData";
import { ConfigServer } from "../servers/ConfigServer";
export declare class WeatherController {
private weatherGenerator;
private configServer;
private weatherConfig;
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 {
private itemEvenRouter;
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,36 @@
import { BotHelper } from "../helpers/BotHelper";
import { GameEventHelper } from "../helpers/GameEventHelper";
import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData";
import { IBotBase } from "../models/eft/common/tables/IBotBase";
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";
export declare class BotGenerator {
private logger;
private hashUtil;
private randomUtil;
private jsonUtil;
private databaseServer;
private botInventoryGenerator;
private botHelper;
private gameEventHelper;
private configServer;
private botConfig;
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[];
private generateBot;
private generateRandomLevel;
/** Converts health object to the required format */
private generateHealth;
private generateSkills;
private getPmcRole;
private removeChristmasItemsFromBotInventory;
private generateId;
private generateInventoryID;
private getPMCDifficulty;
private generateDogtag;
}

View File

@ -0,0 +1,24 @@
import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
import { Inventory, Chances, Generation } 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 {
private logger;
private hashUtil;
private randomUtil;
private databaseServer;
private botWeaponGenerator;
private botLootGenerator;
private botGeneratorHelper;
private 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;
private generateEquipment;
private generateInventoryBase;
}

View File

@ -0,0 +1,27 @@
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 { 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 {
private jsonUtil;
private hashUtil;
private randomUtil;
private databaseServer;
private handbookHelper;
private botGeneratorHelper;
private pmcLootGenerator;
private configServer;
private botConfig;
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;
private getRandomisedCount;
private addLootFromPool;
/** Compares two item templates by their price to spawn chance ratio */
private compareByValue;
}

View File

@ -0,0 +1,44 @@
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 { MinMax, Mods, ModsChances } from "../models/eft/common/tables/IBotType";
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 {
private logger;
private hashUtil;
private databaseServer;
private itemHelper;
private weightedRandomHelper;
private botGeneratorHelper;
private randomUtil;
constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil);
generateWeapon(equipmentSlot: string, weaponPool: Record<string, number>, modPool: Mods, modChances: ModsChances, magCounts: MinMax, botRole: string, isPmc: boolean, inventory: PmcInventory): void;
/** Checks if all required slots are occupied on a weapon and all it's mods */
private isWeaponValid;
/**
* 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
* @returns
*/
private generateExtraMagazines;
private addBullets;
/**
* Finds and returns tpl of ammo that should be used, while making sure it's compatible
*
* @param {*} weaponMods
* @param {*} weaponTemplate
* @returns
*/
private getCompatibleAmmo;
/** Fill existing magazines to full, while replacing their contents with specified ammo */
private fillExistingMagazines;
}

View File

@ -0,0 +1,44 @@
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 { 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 {
private logger;
private jsonUtil;
private objectId;
private randomUtil;
private ragfairServerHelper;
private itemHelper;
private mathUtil;
private gameEventHelper;
private containerHelper;
private presetHelper;
private configServer;
private locationConfig;
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;
private getLooseLootMultiplerForLocation;
private getStaticLootMultiplerForLocation;
generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, locationName: string): SpawnpointTemplate[];
private createItem;
private getRandomCompatibleCaliberTemplateId;
private getRandomValidCaliber;
private drawAmmoTpl;
private createRandomMagCartridges;
private createCartidges;
}

View File

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

View File

@ -0,0 +1,17 @@
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 {
private jsonUtil;
private hashUtil;
private itemHelper;
private databaseServer;
private generatedAssortItems;
constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer);
getAssortItems(): Item[];
private assortsAreGenerated;
private generateRagfairAssortItems;
private createRagfairAssortItem;
}

View File

@ -0,0 +1,51 @@
import { ItemHelper } from "../helpers/ItemHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { RagfairServerHelper } from "../helpers/RagfairServerHelper";
import { Item } from "../models/eft/common/tables/IItem";
import { IBarterScheme } from "../models/eft/common/tables/ITrader";
import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer";
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 {
private logger;
private jsonUtil;
private hashUtil;
private randomUtil;
private timeUtil;
private databaseServer;
private ragfairServerHelper;
private saveServer;
private presetHelper;
private ragfairAssortGenerator;
private ragfairOfferService;
private ragfairPriceService;
private fenceService;
private itemHelper;
private configServer;
private ragfairConfig;
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;
private getTraderId;
private getRating;
private getRatingGrowing;
private getOfferEndTime;
generateDynamicOffers(expiredOffers?: Item[]): void;
generateTraderOffers(traderID: string): void;
private getItemCondition;
private addMissingCondition;
private getOfferRequirements;
/**
* 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,19 @@
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { ConfigServer } from "../servers/ConfigServer";
import { IWeatherData } from "../models/eft/weather/IWeatherData";
import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class WeatherGenerator {
private weightedRandomHelper;
private randomUtil;
private timeUtil;
private configServer;
private weatherConfig;
constructor(weightedRandomHelper: WeightedRandomHelper, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer);
calculateTime(data: IWeatherData): IWeatherData;
generateWeather(data: IWeatherData): IWeatherData;
private getWeightedFog;
private getWeightedRain;
private getRandomFloat;
private getRandomInt;
}

View File

@ -0,0 +1,16 @@
import { IPmcData } from "../models/eft/common/IPmcData";
import { ITraderAssort } from "../models/eft/common/tables/ITrader";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
import { ItemHelper } from "./ItemHelper";
import { QuestHelper } from "./QuestHelper";
export declare class AssortHelper {
private logger;
private itemHelper;
private databaseServer;
private questHelper;
constructor(logger: ILogger, itemHelper: ItemHelper, databaseServer: DatabaseServer, questHelper: QuestHelper);
removeItemFromAssort(assort: ITraderAssort, itemID: string): ITraderAssort;
stripQuestAssort(pmcProfile: IPmcData, sessionId: string, traderId: string, assort: ITraderAssort): ITraderAssort;
stripLoyaltyAssort(pmcProfile: IPmcData, sessionId: string, traderId: string, assort: ITraderAssort): ITraderAssort;
}

View File

@ -0,0 +1,60 @@
import { DurabilityLimitsHelper } from "../helpers/DurabilityLimitsHelper";
import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
import { Mods, ModsChances } from "../models/eft/common/tables/IBotType";
import { Item, Upd } from "../models/eft/common/tables/IItem";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { ContainerHelper } from "./ContainerHelper";
import { InventoryHelper } from "./InventoryHelper";
import { ItemHelper } from "./ItemHelper";
export declare class BotGeneratorHelper {
private logger;
private jsonUtil;
private hashUtil;
private randomUtil;
private databaseServer;
private durabilityLimitsHelper;
private itemHelper;
private inventoryHelper;
private containerHelper;
private configServer;
private botConfig;
constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, containerHelper: ContainerHelper, configServer: ConfigServer);
generateModsForItem(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances, isPmc?: boolean): Item[];
/**
* With the shotgun revolver (60db29ce99594040e04c4a27) 12.12 introduced CylinderMagazines.
* Those magazines (e.g. 60dc519adf4c47305f6d410d) have a "Cartridges" entry with a _max_count=0.
* Ammo is not put into the magazine directly but assigned to the magazine's slots: The "camora_xxx" slots.
* This function is a helper called by generateModsForItem for mods with parent type "CylinderMagazine"
*
* @param {object} items The items where the CylinderMagazine's camora are appended to
* @param {object} modPool modPool which should include available cartrigdes
* @param {string} parentId The CylinderMagazine's UID
* @param {object} parentTemplate The CylinderMagazine's template
*/
private fillCamora;
generateExtraPropertiesForItem(itemTemplate: ITemplateItem, botRole?: any): {
"upd"?: Upd;
};
private getModTplFromItemDb;
isItemIncompatibleWithCurrentItems(items: Item[], tplToCheck: string, equipmentSlot: string): boolean;
/** Adds an item with all its childern into specified equipmentSlots, wherever it fits.
* Returns a `boolean` indicating success. */
addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: PmcInventory): boolean;
private itemAllowedInContainer;
}
export declare class ExhaustableArray<T> {
private itemPool;
private randomUtil;
private jsonUtil;
private pool;
constructor(itemPool: T[], randomUtil: RandomUtil, jsonUtil: JsonUtil);
getRandomValue(): T;
getFirstValue(): T;
hasValues(): boolean;
}

View File

@ -0,0 +1,22 @@
import { Difficulty } from "../models/eft/common/tables/IBotType";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
export declare class BotHelper {
private logger;
private jsonUtil;
private databaseServer;
private randomUtil;
private configServer;
private botConfig;
constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, configServer: ConfigServer);
getBotDifficultySettings(type: string, difficulty: string): Difficulty;
getPmcDifficultySettings(type: string, difficulty: string): Difficulty;
randomisePmcHostility(difficultySettings: Difficulty): void;
isBotPmc(botRole: string): boolean;
isBotBoss(botRole: string): boolean;
isBotFollower(botRole: string): boolean;
addBotToFriendlyList(difficultySettings: Difficulty, typeToAdd: string): void;
}

View File

@ -0,0 +1,12 @@
export declare class FindSlotResult {
success: boolean;
x: any;
y: any;
rotation: boolean;
constructor(success?: boolean, x?: any, y?: any, rotation?: boolean);
}
export declare class ContainerHelper {
private locateSlot;
findSlotForItem(container2D: number[][], itemWidth: number, itemHeight: number): FindSlotResult;
fillContainerMapWithItem(container2D: number[][], x: number, y: number, itemW: number, itemH: number, rotate: boolean): any;
}

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