diff --git a/TypeScript/16ImporterUtil/.eslintignore b/TypeScript/16ImporterUtil/.eslintignore new file mode 100644 index 0000000..9922d9a --- /dev/null +++ b/TypeScript/16ImporterUtil/.eslintignore @@ -0,0 +1,9 @@ +# Exclude these folders from linting +node_modules +dist/ +types/ + +# Exclude these filetypes from linting +*.json +*.txt +*.exe \ No newline at end of file diff --git a/TypeScript/16ImporterUtil/.eslintrc.json b/TypeScript/16ImporterUtil/.eslintrc.json new file mode 100644 index 0000000..98e7a0c --- /dev/null +++ b/TypeScript/16ImporterUtil/.eslintrc.json @@ -0,0 +1,81 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": [ + "@typescript-eslint" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "max-len": [ + "warn", + { + "code":100 + } + ], + "@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 + } + ] + } +} \ No newline at end of file diff --git a/TypeScript/16ImporterUtil/README.md b/TypeScript/16ImporterUtil/README.md new file mode 100644 index 0000000..9e3b8bc --- /dev/null +++ b/TypeScript/16ImporterUtil/README.md @@ -0,0 +1,64 @@ + +This project was created to automate most parts of building and setting up an environment. + +## **NodeJS:** + +The first step would be to install nodejs on your pc, the version you NEED is **16.17.1** + +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/dist/v16.17.1/node-v16.17.1-x64.msi + +A system reboot may be needed after install. + +## **IDE:** + +The second step is having an IDE ready. We've setup a VSCodium workspace file to help with this. + +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 Workspace 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. \ No newline at end of file diff --git a/TypeScript/16ImporterUtil/config/config.json b/TypeScript/16ImporterUtil/config/config.json new file mode 100644 index 0000000..2cc3a9f --- /dev/null +++ b/TypeScript/16ImporterUtil/config/config.json @@ -0,0 +1,3 @@ +{ + "myProperty": "wow" +} \ No newline at end of file diff --git a/TypeScript/16ImporterUtil/config/db/config.json b/TypeScript/16ImporterUtil/config/db/config.json new file mode 100644 index 0000000..9fc7661 --- /dev/null +++ b/TypeScript/16ImporterUtil/config/db/config.json @@ -0,0 +1,3 @@ +{ + "myProperty": "wow inside db" +} \ No newline at end of file diff --git a/TypeScript/16ImporterUtil/config/db/moredb/config.json b/TypeScript/16ImporterUtil/config/db/moredb/config.json new file mode 100644 index 0000000..9a6d9e3 --- /dev/null +++ b/TypeScript/16ImporterUtil/config/db/moredb/config.json @@ -0,0 +1,3 @@ +{ + "myProperty": "wow inside db inside moredb" +} \ No newline at end of file diff --git a/TypeScript/16ImporterUtil/mod.code-workspace b/TypeScript/16ImporterUtil/mod.code-workspace new file mode 100644 index 0000000..6732c67 --- /dev/null +++ b/TypeScript/16ImporterUtil/mod.code-workspace @@ -0,0 +1,12 @@ +{ + "folders": [ + { + "path": "." + } + ], + "extensions": { + "recommendations": [ + "dbaeumer.vscode-eslint" + ] + } +} \ No newline at end of file diff --git a/TypeScript/16ImporterUtil/package.json b/TypeScript/16ImporterUtil/package.json new file mode 100644 index 0000000..84cc64b --- /dev/null +++ b/TypeScript/16ImporterUtil/package.json @@ -0,0 +1,23 @@ +{ + "name": "ImporterUtil", + "version": "1.0.0", + "main": "src/mod.js", + "license": "MIT", + "author": "Chomp", + "akiVersion": "~3.5", + "scripts": { + "setup": "npm i", + "build": "node ./packageBuild.ts" + }, + "devDependencies": { + "@types/node": "16.18.10", + "@typescript-eslint/eslint-plugin": "5.46.1", + "@typescript-eslint/parser": "5.46.1", + "bestzip": "2.2.1", + "eslint": "8.30.0", + "fs-extra": "11.1.0", + "glob": "8.0.3", + "tsyringe": "4.7.0", + "typescript": "4.9.4" + } +} \ No newline at end of file diff --git a/TypeScript/16ImporterUtil/packageBuild.ts b/TypeScript/16ImporterUtil/packageBuild.ts new file mode 100644 index 0000000..c829979 --- /dev/null +++ b/TypeScript/16ImporterUtil/packageBuild.ts @@ -0,0 +1,72 @@ +#!/usr/bin/env node + +// This is a simple script used to build a mod package. The script will copy necessary files to the build directory +// and compress the build directory into a zip file that can be easily shared. + +const fs = require("fs-extra"); +const glob = require("glob"); +const zip = require('bestzip'); +const path = require("path"); + +// Load the package.json file to get some information about the package so we can name things appropriately. This is +// atypical, and you would never do this in a production environment, but this script is only used for development so +// it's fine in this case. Some of these values are stored in environment variables, but those differ between node +// versions; the 'author' value is not available after node v14. +const { author, name:packageName, version } = require("./package.json"); + +// Generate the name of the package, stripping out all non-alphanumeric characters in the 'author' and 'name'. +const modName = `${author.replace(/[^a-z0-9]/gi, "")}-${packageName.replace(/[^a-z0-9]/gi, "")}-${version}`; +console.log(`Generated package name: ${modName}`); + +// Delete the old build directory and compressed package file. +fs.rmSync(`${__dirname}/dist`, { force: true, recursive: true }); +console.log("Previous build files deleted."); + +// Generate a list of files that should not be copied over into the distribution directory. This is a blacklist to ensure +// we always copy over additional files and directories that authors may have added to their project. This may need to be +// expanded upon by the mod author to allow for node modules that are used within the mod; example commented out below. +const ignoreList = [ + "node_modules/", + // "node_modules/!(weighted|glob)", // Instead of excluding the entire node_modules directory, allow two node modules. + "src/**/*.js", + "types/", + ".git/", + ".gitea/", + ".eslintignore", + ".eslintrc.json", + ".gitignore", + ".DS_Store", + "packageBuild.ts", + "mod.code-workspace", + "package-lock.json", + "tsconfig.json" +]; +const exclude = glob.sync(`{${ignoreList.join(",")}}`, { realpath: true, dot: true }); + +// For some reason these basic-bitch functions won't allow us to copy a directory into itself, so we have to resort to +// using a temporary directory, like an idiot. Excuse the normalize spam; some modules cross-platform, some don't... +fs.copySync(__dirname, path.normalize(`${__dirname}/../~${modName}`), {filter:(filePath) => +{ + return !exclude.includes(filePath); +}}); +fs.moveSync(path.normalize(`${__dirname}/../~${modName}`), path.normalize(`${__dirname}/${modName}`), { overwrite: true }); +fs.copySync(path.normalize(`${__dirname}/${modName}`), path.normalize(`${__dirname}/dist`)); +console.log("Build files copied."); + +// Compress the files for easy distribution. The compressed file is saved into the dist directory. When uncompressed we +// need to be sure that it includes a directory that the user can easily copy into their game mods directory. +zip({ + source: modName, + destination: `dist/${modName}.zip`, + cwd: __dirname +}).catch(function(err) +{ + console.error("A bestzip error has occurred: ", err.stack); +}).then(function() +{ + console.log(`Compressed mod package to: /dist/${modName}.zip`); + + // Now that we're done with the compression we can delete the temporary build directory. + fs.rmSync(`${__dirname}/${modName}`, { force: true, recursive: true }); + console.log("Build successful! your zip file has been created and is ready to be uploaded to hub.sp-tarkov.com/files/"); +}); \ No newline at end of file diff --git a/TypeScript/16ImporterUtil/src/mod.ts b/TypeScript/16ImporterUtil/src/mod.ts new file mode 100644 index 0000000..31c1796 --- /dev/null +++ b/TypeScript/16ImporterUtil/src/mod.ts @@ -0,0 +1,25 @@ +import { PreAkiModLoader } from "@spt-aki/loaders/PreAkiModLoader"; +import { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod"; +import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; +import { ImporterUtil } from "@spt-aki/utils/ImporterUtil"; +import { DependencyContainer } from "tsyringe"; +import { ConfigsModelBase } from "./model/ConfigsModel"; + +class Mod implements IPreAkiLoadMod { + public preAkiLoad(container: DependencyContainer): void { + // get logger + const logger = container.resolve("WinstonLogger"); + + const importerUtil = container.resolve("ImporterUtil"); + const modImporter = container.resolve("PreAkiModLoader"); + const path = modImporter.getModPath("16ImporterUtil"); + + const configPath = `${path}config/`; + const configs = importerUtil.loadRecursive(configPath); + logger.info( + `16ImporterUtil Configurations found: ${JSON.stringify(configs)}`, + ); + } +} + +module.exports = { mod: new Mod() }; diff --git a/TypeScript/16ImporterUtil/src/model/ConfigsModel.ts b/TypeScript/16ImporterUtil/src/model/ConfigsModel.ts new file mode 100644 index 0000000..07c5138 --- /dev/null +++ b/TypeScript/16ImporterUtil/src/model/ConfigsModel.ts @@ -0,0 +1,17 @@ +export class ConfigsModelBase { + db: ConfigsModelDb; + config: ConfigModel; +} + +export class ConfigsModelDb { + moredb: ConfigsModelMoreDb; + config: ConfigModel; +} + +export class ConfigsModelMoreDb { + config: ConfigModel; +} + +export class ConfigModel { + myProperty: string; +} diff --git a/TypeScript/16ImporterUtil/tsconfig.json b/TypeScript/16ImporterUtil/tsconfig.json new file mode 100644 index 0000000..8151310 --- /dev/null +++ b/TypeScript/16ImporterUtil/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "allowJs": true, + "module": "CommonJS", + "target": "es2020", + "moduleResolution": "node", + "esModuleInterop": true, + "downlevelIteration": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "resolveJsonModule": true, + "outDir": "tmp", + "baseUrl": ".", + "paths": { + "@spt-aki/*": ["./types/*"] + } + }, + "lib": [ + "es2020" + ], + "include": [ + "src/*", + "src/**/*" + ] +} \ No newline at end of file diff --git a/TypeScript/16ImporterUtil/types/ErrorHandler.d.ts b/TypeScript/16ImporterUtil/types/ErrorHandler.d.ts new file mode 100644 index 0000000..69b0bcd --- /dev/null +++ b/TypeScript/16ImporterUtil/types/ErrorHandler.d.ts @@ -0,0 +1,6 @@ +export declare class ErrorHandler { + private logger; + private readLine; + constructor(); + handleCriticalError(err: any): void; +} diff --git a/TypeScript/16ImporterUtil/types/Program.d.ts b/TypeScript/16ImporterUtil/types/Program.d.ts new file mode 100644 index 0000000..afe5216 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/Program.d.ts @@ -0,0 +1,5 @@ +export declare class Program { + private errorHandler; + constructor(); + start(): void; +} diff --git a/TypeScript/16ImporterUtil/types/TYPES.d.ts b/TypeScript/16ImporterUtil/types/TYPES.d.ts new file mode 100644 index 0000000..6407c3a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/TYPES.d.ts @@ -0,0 +1,3 @@ +export declare const TYPES: { + [name: string]: symbol; +}; diff --git a/TypeScript/16ImporterUtil/types/callbacks/BotCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/BotCallbacks.d.ts new file mode 100644 index 0000000..827015e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/BotCallbacks.d.ts @@ -0,0 +1,36 @@ +import { BotController } from "../controllers/BotController"; +import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class BotCallbacks { + protected botController: BotController; + protected httpResponse: HttpResponseUtil; + constructor(botController: BotController, httpResponse: HttpResponseUtil); + /** + * Handle singleplayer/settings/bot/limit + * @returns string + */ + getBotLimit(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handle singleplayer/settings/bot/difficulty + * @returns string + */ + getBotDifficulty(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handle client/game/bot/generate + * @returns IGetBodyResponseData + */ + generateBots(url: string, info: IGenerateBotsRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle singleplayer/settings/bot/maxCap + * @returns string + */ + getBotCap(): string; + /** + * Handle singleplayer/settings/bot/getBotBehaviours + * @returns string + */ + getBotBehaviours(): string; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/BundleCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/BundleCallbacks.d.ts new file mode 100644 index 0000000..b7e1703 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/BundleCallbacks.d.ts @@ -0,0 +1,18 @@ +import { BundleLoader } from "../loaders/BundleLoader"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { HttpFileUtil } from "../utils/HttpFileUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class BundleCallbacks { + protected logger: ILogger; + protected httpResponse: HttpResponseUtil; + protected httpFileUtil: HttpFileUtil; + protected bundleLoader: BundleLoader; + protected configServer: ConfigServer; + protected httpConfig: IHttpConfig; + constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpFileUtil: HttpFileUtil, 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; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/CustomizationCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/CustomizationCallbacks.d.ts new file mode 100644 index 0000000..75d5701 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/CustomizationCallbacks.d.ts @@ -0,0 +1,29 @@ +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 { IGetSuitsResponse } from "../models/eft/customization/IGetSuitsResponse"; +import { IWearClothingRequestData } from "../models/eft/customization/IWearClothingRequestData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { SaveServer } from "../servers/SaveServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class CustomizationCallbacks { + protected customizationController: CustomizationController; + protected saveServer: SaveServer; + protected httpResponse: HttpResponseUtil; + constructor(customizationController: CustomizationController, saveServer: SaveServer, httpResponse: HttpResponseUtil); + /** + * Handles client/trading/customization/storage + * @returns + */ + getSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/trading/customization + * @returns ISuit[] + */ + getTraderSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse; + buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/DataCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/DataCallbacks.d.ts new file mode 100644 index 0000000..26f5899 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/DataCallbacks.d.ts @@ -0,0 +1,74 @@ +import { HideoutController } from "../controllers/HideoutController"; +import { RagfairController } from "../controllers/RagfairController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IGlobals } from "../models/eft/common/IGlobals"; +import { ICustomizationItem } from "../models/eft/common/tables/ICustomizationItem"; +import { IHandbookBase } from "../models/eft/common/tables/IHandbookBase"; +import { IQuest } from "../models/eft/common/tables/IQuest"; +import { IGetItemPricesResponse } from "../models/eft/game/IGetItemPricesResponse"; +import { IHideoutArea } from "../models/eft/hideout/IHideoutArea"; +import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction"; +import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase"; +import { IHideoutSettingsBase } from "../models/eft/hideout/IHideoutSettingsBase"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { ISettingsBase } from "../models/spt/server/ISettingsBase"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +/** + * Handle client requests + */ +export declare class DataCallbacks { + protected httpResponse: HttpResponseUtil; + protected databaseServer: DatabaseServer; + protected ragfairController: RagfairController; + protected hideoutController: HideoutController; + constructor(httpResponse: HttpResponseUtil, databaseServer: DatabaseServer, ragfairController: RagfairController, hideoutController: HideoutController); + /** + * Handles client/settings + * @returns ISettingsBase + */ + getSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/globals + * @returns IGlobals + */ + getGlobals(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/items + * @returns string + */ + getTemplateItems(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handles client/handbook/templates + * @returns IHandbookBase + */ + getTemplateHandbook(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/customization + * @returns Record>; + /** + * Handles client/account/customization + * @returns string[] + */ + getTemplateCharacter(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateQuests(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutAreas(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + gethideoutProduction(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutScavcase(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocalesLanguages(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + getLocalesMenu(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocalesGlobal(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handle client/hideout/qte/list + */ + getQteList(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handle client/items/prices/ + * Called when viewing a traders assorts + * TODO - fully implement this + */ + getItemPrices(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/DialogueCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/DialogueCallbacks.d.ts new file mode 100644 index 0000000..63d7163 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/DialogueCallbacks.d.ts @@ -0,0 +1,58 @@ +import { DialogueController } from "../controllers/DialogueController"; +import { OnUpdate } from "../di/OnUpdate"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IChatServer } from "../models/eft/dialog/IChatServer"; +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 implements OnUpdate { + protected hashUtil: HashUtil; + protected timeUtil: TimeUtil; + protected httpResponse: HttpResponseUtil; + protected dialogueController: DialogueController; + constructor(hashUtil: HashUtil, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, dialogueController: DialogueController); + /** + * Handles client/friend/list + * @returns IGetFriendListDataResponse + */ + getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/chatServer/list + * @returns + */ + getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData; + removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData; + pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData; + unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData; + setRead(url: string, info: ISetDialogReadRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/mail/dialog/getAllAttachments + * @returns IGetAllAttachmentsResponse + */ + getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData; + listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; + sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData; + onUpdate(timeSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/GameCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/GameCallbacks.d.ts new file mode 100644 index 0000000..3a6b7e6 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/GameCallbacks.d.ts @@ -0,0 +1,55 @@ +import { GameController } from "../controllers/GameController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { ICheckVersionResponse } from "../models/eft/game/ICheckVersionResponse"; +import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse"; +import { IGameEmptyCrcRequestData } from "../models/eft/game/IGameEmptyCrcRequestData"; +import { IGameKeepAliveResponse } from "../models/eft/game/IGameKeepAliveResponse"; +import { IGameLogoutResponseData } from "../models/eft/game/IGameLogoutResponseData"; +import { IGameStartResponse } from "../models/eft/game/IGameStartResponse"; +import { IReportNicknameRequestData } from "../models/eft/game/IReportNicknameRequestData"; +import { IServerDetails } from "../models/eft/game/IServerDetails"; +import { IVersionValidateRequestData } from "../models/eft/game/IVersionValidateRequestData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { Watermark } from "../utils/Watermark"; +declare class GameCallbacks { + protected httpResponse: HttpResponseUtil; + protected watermark: Watermark; + protected gameController: GameController; + constructor(httpResponse: HttpResponseUtil, watermark: Watermark, gameController: GameController); + /** + * Handle client/game/version/validate + * @returns INullResponseData + */ + versionValidate(url: string, info: IVersionValidateRequestData, sessionID: string): INullResponseData; + /** + * Handle client/game/start + * @returns IGameStartResponse + */ + gameStart(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/logout + * @returns IGameLogoutResponseData + */ + gameLogout(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/config + * @returns IGameConfigResponse + */ + getGameConfig(url: string, info: IGameEmptyCrcRequestData, sessionID: string): IGetBodyResponseData; + getServer(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + validateGameVersion(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/keepalive + * @returns IGameKeepAliveResponse + */ + gameKeepalive(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle singleplayer/settings/version + * @returns string + */ + getVersion(url: string, info: IEmptyRequestData, sessionID: string): string; + reportNickname(url: string, info: IReportNicknameRequestData, sessionID: string): INullResponseData; +} +export { GameCallbacks }; diff --git a/TypeScript/16ImporterUtil/types/callbacks/HandbookCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/HandbookCallbacks.d.ts new file mode 100644 index 0000000..6bd3909 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/HandbookCallbacks.d.ts @@ -0,0 +1,8 @@ +import { HandbookController } from "../controllers/HandbookController"; +import { OnLoad } from "../di/OnLoad"; +export declare class HandbookCallbacks implements OnLoad { + protected handbookController: HandbookController; + constructor(handbookController: HandbookController); + onLoad(): Promise; + getRoute(): string; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/HealthCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/HealthCallbacks.d.ts new file mode 100644 index 0000000..bd3e507 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/HealthCallbacks.d.ts @@ -0,0 +1,48 @@ +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 { IWorkoutData } from "../models/eft/health/IWorkoutData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class HealthCallbacks { + protected httpResponse: HttpResponseUtil; + protected profileHelper: ProfileHelper; + protected healthController: HealthController; + constructor(httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, healthController: HealthController); + /** + * Custom aki server request found in modules/HealthSynchronizer.cs + * @param url + * @param info HealthListener.Instance.CurrentHealth class + * @param sessionID session id + * @returns empty response, no data sent back to client + */ + syncHealth(url: string, info: ISyncHealthRequestData, sessionID: string): IGetBodyResponseData; + /** + * Custom aki server request found in modules/QTEPatch.cs + * @param url + * @param info HealthListener.Instance.CurrentHealth class + * @param sessionID session id + * @returns empty response, no data sent back to client + */ + handleWorkoutEffects(url: string, info: IWorkoutData, sessionID: string): IGetBodyResponseData; + /** + * Handle Eat + * @returns IItemEventRouterResponse + */ + offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle Heal + * @returns IItemEventRouterResponse + */ + offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle RestoreHealth + * @returns IItemEventRouterResponse + */ + healthTreatment(pmcData: IPmcData, info: IHealthTreatmentRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/HideoutCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/HideoutCallbacks.d.ts new file mode 100644 index 0000000..d0247f9 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/HideoutCallbacks.d.ts @@ -0,0 +1,75 @@ +import { HideoutController } from "../controllers/HideoutController"; +import { OnUpdate } from "../di/OnUpdate"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IHandleQTEEventRequestData } from "../models/eft/hideout/IHandleQTEEventRequestData"; +import { IHideoutContinuousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinuousProductionStartRequestData"; +import { IHideoutImproveAreaRequestData } from "../models/eft/hideout/IHideoutImproveAreaRequestData"; +import { 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 { IRecordShootingRangePoints } from "../models/eft/hideout/IRecordShootingRangePoints"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IHideoutConfig } from "../models/spt/config/IHideoutConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class HideoutCallbacks implements OnUpdate { + protected hideoutController: HideoutController; + protected configServer: ConfigServer; + protected hideoutConfig: IHideoutConfig; + constructor(hideoutController: HideoutController, // TODO: delay needed + configServer: ConfigServer); + /** + * Handle HideoutUpgrade + */ + upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutUpgradeComplete + */ + upgradeComplete(pmcData: IPmcData, body: IHideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutPutItemsInAreaSlots + */ + putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutTakeItemsFromAreaSlots + */ + takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutToggleArea + */ + toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutSingleProductionStart + */ + singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutScavCaseProductionStart + */ + scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutContinuousProductionStart + */ + continuousProductionStart(pmcData: IPmcData, body: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutTakeProduction + */ + takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutQuickTimeEvent + */ + handleQTEEvent(pmcData: IPmcData, request: IHandleQTEEventRequestData, sessionId: string): IItemEventRouterResponse; + /** + * Handle client/game/profile/items/moving - RecordShootingRangePoints + */ + recordShootingRangePoints(pmcData: IPmcData, request: IRecordShootingRangePoints, sessionId: string): IItemEventRouterResponse; + /** + * Handle client/game/profile/items/moving - RecordShootingRangePoints + */ + improveArea(pmcData: IPmcData, request: IHideoutImproveAreaRequestData, sessionId: string): IItemEventRouterResponse; + onUpdate(timeSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/HttpCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/HttpCallbacks.d.ts new file mode 100644 index 0000000..10794fa --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/HttpCallbacks.d.ts @@ -0,0 +1,9 @@ +import { OnLoad } from "../di/OnLoad"; +import { HttpServer } from "../servers/HttpServer"; +export declare class HttpCallbacks implements OnLoad { + protected httpServer: HttpServer; + constructor(httpServer: HttpServer); + onLoad(): Promise; + getRoute(): string; + getImage(): string; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/InraidCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/InraidCallbacks.d.ts new file mode 100644 index 0000000..918bfaf --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/InraidCallbacks.d.ts @@ -0,0 +1,49 @@ +import { InraidController } from "../controllers/InraidController"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData"; +import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +/** + * Handle client requests + */ +export declare class InraidCallbacks { + protected inraidController: InraidController; + protected httpResponse: HttpResponseUtil; + constructor(inraidController: InraidController, httpResponse: HttpResponseUtil); + /** + * Handle client/location/getLocalloot + * @param url + * @param info register player request + * @param sessionID Session id + * @returns Null http response + */ + registerPlayer(url: string, info: IRegisterPlayerRequestData, sessionID: string): INullResponseData; + /** + * Handle raid/profile/save + * @param url + * @param info Save progress request + * @param sessionID Session id + * @returns Null http response + */ + saveProgress(url: string, info: ISaveProgressRequestData, sessionID: string): INullResponseData; + /** + * Handle singleplayer/settings/raid/endstate + * @returns + */ + getRaidEndState(): string; + /** + * Handle singleplayer/settings/raid/menu + * @returns JSON as string + */ + getRaidMenuSettings(): string; + /** + * Handle singleplayer/settings/weapon/durability + * @returns + */ + getWeaponDurability(): string; + /** + * Handle singleplayer/airdrop/config + * @returns JSON as string + */ + getAirdropConfig(): string; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/InsuranceCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/InsuranceCallbacks.d.ts new file mode 100644 index 0000000..aea0756 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/InsuranceCallbacks.d.ts @@ -0,0 +1,32 @@ +import { InsuranceController } from "../controllers/InsuranceController"; +import { OnUpdate } from "../di/OnUpdate"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IGetInsuranceCostRequestData } from "../models/eft/insurance/IGetInsuranceCostRequestData"; +import { IGetInsuranceCostResponseData } from "../models/eft/insurance/IGetInsuranceCostResponseData"; +import { IInsureRequestData } from "../models/eft/insurance/IInsureRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { InsuranceService } from "../services/InsuranceService"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class InsuranceCallbacks implements OnUpdate { + protected insuranceController: InsuranceController; + protected insuranceService: InsuranceService; + protected httpResponse: HttpResponseUtil; + protected configServer: ConfigServer; + protected insuranceConfig: IInsuranceConfig; + constructor(insuranceController: InsuranceController, insuranceService: InsuranceService, httpResponse: HttpResponseUtil, configServer: ConfigServer); + /** + * Handle client/insurance/items/list/cost + * @returns IGetInsuranceCostResponseData + */ + getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle Insure + * @returns IItemEventRouterResponse + */ + insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse; + onUpdate(secondsSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/InventoryCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/InventoryCallbacks.d.ts new file mode 100644 index 0000000..46bf6fd --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/InventoryCallbacks.d.ts @@ -0,0 +1,41 @@ +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 { IOpenRandomLootContainerRequestData } from "../models/eft/inventory/IOpenRandomLootContainerRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class InventoryCallbacks { + protected inventoryController: InventoryController; + constructor(inventoryController: InventoryController); + moveItem(pmcData: IPmcData, body: IInventoryMoveRequestData, sessionID: string): IItemEventRouterResponse; + removeItem(pmcData: IPmcData, body: IInventoryRemoveRequestData, sessionID: string): IItemEventRouterResponse; + splitItem(pmcData: IPmcData, body: IInventorySplitRequestData, sessionID: string): IItemEventRouterResponse; + mergeItem(pmcData: IPmcData, body: IInventoryMergeRequestData, sessionID: string): IItemEventRouterResponse; + transferItem(pmcData: IPmcData, body: IInventoryTransferRequestData, sessionID: string): IItemEventRouterResponse; + swapItem(pmcData: IPmcData, body: IInventorySwapRequestData, sessionID: string): IItemEventRouterResponse; + foldItem(pmcData: IPmcData, body: IInventoryFoldRequestData, sessionID: string): IItemEventRouterResponse; + toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse; + tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse; + bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse; + examineItem(pmcData: IPmcData, body: IInventoryExamineRequestData, sessionID: string): IItemEventRouterResponse; + readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse; + sortInventory(pmcData: IPmcData, body: IInventorySortRequestData, sessionID: string): IItemEventRouterResponse; + createMapMarker(pmcData: IPmcData, body: IInventoryCreateMarkerRequestData, sessionID: string): IItemEventRouterResponse; + deleteMapMarker(pmcData: IPmcData, body: IInventoryDeleteMarkerRequestData, sessionID: string): IItemEventRouterResponse; + editMapMarker(pmcData: IPmcData, body: IInventoryEditMarkerRequestData, sessionID: string): IItemEventRouterResponse; + openRandomLootContainer(pmcData: IPmcData, body: IOpenRandomLootContainerRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/ItemEventCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/ItemEventCallbacks.d.ts new file mode 100644 index 0000000..fbb0b5f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/ItemEventCallbacks.d.ts @@ -0,0 +1,13 @@ +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { Warning } from "../models/eft/itemEvent/IItemEventRouterBase"; +import { IItemEventRouterRequest } from "../models/eft/itemEvent/IItemEventRouterRequest"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ItemEventRouter } from "../routers/ItemEventRouter"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class ItemEventCallbacks { + protected httpResponse: HttpResponseUtil; + protected itemEventRouter: ItemEventRouter; + constructor(httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter); + handleEvents(url: string, info: IItemEventRouterRequest, sessionID: string): IGetBodyResponseData; + protected getErrorCode(warnings: Warning[]): number; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/LauncherCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/LauncherCallbacks.d.ts new file mode 100644 index 0000000..c022325 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/LauncherCallbacks.d.ts @@ -0,0 +1,28 @@ +import { LauncherController } from "../controllers/LauncherController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IChangeRequestData } from "../models/eft/launcher/IChangeRequestData"; +import { ILoginRequestData } from "../models/eft/launcher/ILoginRequestData"; +import { IRegisterData } from "../models/eft/launcher/IRegisterData"; +import { IRemoveProfileData } from "../models/eft/launcher/IRemoveProfileData"; +import { SaveServer } from "../servers/SaveServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { Watermark } from "../utils/Watermark"; +declare class LauncherCallbacks { + protected httpResponse: HttpResponseUtil; + protected launcherController: LauncherController; + protected saveServer: SaveServer; + protected watermark: Watermark; + constructor(httpResponse: HttpResponseUtil, launcherController: LauncherController, saveServer: SaveServer, watermark: Watermark); + connect(): string; + login(url: string, info: ILoginRequestData, sessionID: string): string; + register(url: string, info: IRegisterData, sessionID: string): "FAILED" | "OK"; + get(url: string, info: ILoginRequestData, sessionID: string): string; + changeUsername(url: string, info: IChangeRequestData, sessionID: string): "FAILED" | "OK"; + changePassword(url: string, info: IChangeRequestData, sessionID: string): "FAILED" | "OK"; + wipe(url: string, info: IRegisterData, sessionID: string): "FAILED" | "OK"; + getServerVersion(): string; + ping(url: string, info: IEmptyRequestData, sessionID: string): string; + removeProfile(url: string, info: IRemoveProfileData, sessionID: string): string; + getCompatibleTarkovVersion(): string; +} +export { LauncherCallbacks }; diff --git a/TypeScript/16ImporterUtil/types/callbacks/LocationCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/LocationCallbacks.d.ts new file mode 100644 index 0000000..6e0b538 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/LocationCallbacks.d.ts @@ -0,0 +1,15 @@ +import { LocationController } from "../controllers/LocationController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { ILocationBase } from "../models/eft/common/ILocationBase"; +import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IGetLocationRequestData } from "../models/eft/location/IGetLocationRequestData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class LocationCallbacks { + protected httpResponse: HttpResponseUtil; + protected locationController: LocationController; + constructor(httpResponse: HttpResponseUtil, locationController: LocationController); + getLocationData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData; + getAirdropLoot(url: string, info: IEmptyRequestData, sessionID: string): string; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/MatchCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/MatchCallbacks.d.ts new file mode 100644 index 0000000..52e3290 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/MatchCallbacks.d.ts @@ -0,0 +1,46 @@ +import { MatchController } from "../controllers/MatchController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData"; +import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData"; +import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData"; +import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestData"; +import { IGetRaidConfigurationRequestData } from "../models/eft/match/IGetRaidConfigurationRequestData"; +import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; +import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; +import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData"; +import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class MatchCallbacks { + protected httpResponse: HttpResponseUtil; + protected jsonUtil: JsonUtil; + protected matchController: MatchController; + protected databaseServer: DatabaseServer; + constructor(httpResponse: HttpResponseUtil, jsonUtil: JsonUtil, matchController: MatchController, databaseServer: DatabaseServer); + updatePing(url: string, info: IUpdatePingRequestData, sessionID: string): INullResponseData; + exitMatch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; + exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; + startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; + stopGroupSearch(url: string, info: IEmptyRequestData, 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: IPutMetricsRequestData, sessionID: string): INullResponseData; + getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData; + serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData | IGetBodyResponseData; + joinMatch(url: string, info: IJoinMatchRequestData, sessionID: string): IGetBodyResponseData; + getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData; + /** + * Handle client/match/group/status + * @returns + */ + getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData; + createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData; + deleteGroup(url: string, info: any, sessionID: string): INullResponseData; + endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData; + getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/ModCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/ModCallbacks.d.ts new file mode 100644 index 0000000..d1ec7f7 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/ModCallbacks.d.ts @@ -0,0 +1,21 @@ +import { OnLoad } from "../di/OnLoad"; +import { PostAkiModLoader } from "../loaders/PostAkiModLoader"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HttpFileUtil } from "../utils/HttpFileUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +declare class ModCallbacks implements OnLoad { + protected logger: ILogger; + protected httpResponse: HttpResponseUtil; + protected httpFileUtil: HttpFileUtil; + protected postAkiModLoader: PostAkiModLoader; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected httpConfig: IHttpConfig; + constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpFileUtil: HttpFileUtil, postAkiModLoader: PostAkiModLoader, localisationService: LocalisationService, configServer: ConfigServer); + onLoad(): Promise; + getRoute(): string; +} +export { ModCallbacks }; diff --git a/TypeScript/16ImporterUtil/types/callbacks/NoteCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/NoteCallbacks.d.ts new file mode 100644 index 0000000..d39d400 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/NoteCallbacks.d.ts @@ -0,0 +1,11 @@ +import { NoteController } from "../controllers/NoteController"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { INoteActionData } from "../models/eft/notes/INoteActionData"; +export declare class NoteCallbacks { + protected noteController: NoteController; + constructor(noteController: NoteController); + addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/NotifierCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/NotifierCallbacks.d.ts new file mode 100644 index 0000000..fab325b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/NotifierCallbacks.d.ts @@ -0,0 +1,29 @@ +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 { ISelectProfileResponse } from "../models/eft/notifier/ISelectProfileResponse"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class NotifierCallbacks { + protected httpServerHelper: HttpServerHelper; + protected httpResponse: HttpResponseUtil; + protected notifierController: NotifierController; + constructor(httpServerHelper: HttpServerHelper, httpResponse: HttpResponseUtil, notifierController: NotifierController); + /** + * If we don't have anything to send, it's ok to not send anything back + * because notification requests can be long-polling. In fact, we SHOULD wait + * until we actually have something to send because otherwise we'd spam the client + * and the client would abort the connection due to spam. + */ + sendNotification(sessionID: string, req: any, resp: any, data: any): void; + getNotifier(url: string, info: any, sessionID: string): IGetBodyResponseData; + createNotifierChannel(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/profile/select + * @returns ISelectProfileResponse + */ + selectProfile(url: string, info: ISelectProfileRequestData, sessionID: string): IGetBodyResponseData; + notify(url: string, info: any, sessionID: string): string; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/PresetBuildCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/PresetBuildCallbacks.d.ts new file mode 100644 index 0000000..541715a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/PresetBuildCallbacks.d.ts @@ -0,0 +1,16 @@ +import { PresetBuildController } from "../controllers/PresetBuildController"; +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 { IPresetBuildActionRequestData } from "../models/eft/presetBuild/IPresetBuildActionRequestData"; +import { WeaponBuild } from "../models/eft/profile/IAkiProfile"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class PresetBuildCallbacks { + protected httpResponse: HttpResponseUtil; + protected presetBuildController: PresetBuildController; + constructor(httpResponse: HttpResponseUtil, presetBuildController: PresetBuildController); + getHandbookUserlist(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; + removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/PresetCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/PresetCallbacks.d.ts new file mode 100644 index 0000000..37bf4e8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/PresetCallbacks.d.ts @@ -0,0 +1,8 @@ +import { PresetController } from "../controllers/PresetController"; +import { OnLoad } from "../di/OnLoad"; +export declare class PresetCallbacks implements OnLoad { + protected presetController: PresetController; + constructor(presetController: PresetController); + onLoad(): Promise; + getRoute(): string; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/ProfileCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/ProfileCallbacks.d.ts new file mode 100644 index 0000000..183bb0a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/ProfileCallbacks.d.ts @@ -0,0 +1,70 @@ +import { ProfileController } from "../controllers/ProfileController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { IGetMiniProfileRequestData } from "../models/eft/launcher/IGetMiniProfileRequestData"; +import { GetProfileStatusResponseData } from "../models/eft/profile/GetProfileStatusResponseData"; +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"; +/** Handle profile related client events */ +export declare class ProfileCallbacks { + protected httpResponse: HttpResponseUtil; + protected timeUtil: TimeUtil; + protected profileController: ProfileController; + constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, profileController: ProfileController); + createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData; + /** + * Get the complete player profile (scav + pmc character) + * @param url + * @param info Empty + * @param sessionID Session id + * @returns Profile object + */ + getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle the creation of a scav profile for player + * Occurs post-raid and when profile first created immediately after character details are confirmed by player + * @param url + * @param info empty + * @param sessionID Session id + * @returns Profile object + */ + regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/profile/voice/change event + * @param url + * @param info Change voice request object + * @param sessionID Session id + * @returns Client response + */ + changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData; + /** + * Handle client/game/profile/nickname/change event + * Client allows player to adjust their profile name + * @param url + * @param info Change nickname request object + * @param sessionID Session id + * @returns client response + */ + changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData; + validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData; + getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Called when creating a character when choosing a character face/voice + * @param url + * @param info response (empty) + * @param sessionID + * @returns + */ + getProfileStatus(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + searchFriend(url: string, info: ISearchFriendRequestData, sessionID: string): IGetBodyResponseData; + getMiniProfile(url: string, info: IGetMiniProfileRequestData, sessionID: string): string; + getAllMiniProfiles(url: string, info: any, sessionID: string): string; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/QuestCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/QuestCallbacks.d.ts new file mode 100644 index 0000000..2a3eb20 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/QuestCallbacks.d.ts @@ -0,0 +1,33 @@ +import { QuestController } from "../controllers/QuestController"; +import { RepeatableQuestController } from "../controllers/RepeatableQuestController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IQuest } from "../models/eft/common/tables/IQuest"; +import { IPmcDataRepeatableQuest } from "../models/eft/common/tables/IRepeatableQuests"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData"; +import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData"; +import { IHandoverQuestRequestData } from "../models/eft/quests/IHandoverQuestRequestData"; +import { IListQuestsRequestData } from "../models/eft/quests/IListQuestsRequestData"; +import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class QuestCallbacks { + protected httpResponse: HttpResponseUtil; + protected questController: QuestController; + protected repeatableQuestController: RepeatableQuestController; + constructor(httpResponse: HttpResponseUtil, questController: QuestController, repeatableQuestController: RepeatableQuestController); + changeRepeatableQuest(pmcData: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse; + acceptQuest(pmcData: IPmcData, body: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; + completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse; + handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle client/quest/list + * @param url + * @param info + * @param sessionID + * @returns + */ + listQuests(url: string, info: IListQuestsRequestData, sessionID: string): IGetBodyResponseData; + activityPeriods(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/RagfairCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/RagfairCallbacks.d.ts new file mode 100644 index 0000000..97713e7 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/RagfairCallbacks.d.ts @@ -0,0 +1,47 @@ +import { OnLoad } from "../di/OnLoad"; +import { OnUpdate } from "../di/OnUpdate"; +import { RagfairController } from "../controllers/RagfairController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAddOfferRequestData } from "../models/eft/ragfair/IAddOfferRequestData"; +import { IExtendOfferRequestData } from "../models/eft/ragfair/IExtendOfferRequestData"; +import { IGetItemPriceResult } from "../models/eft/ragfair/IGetItemPriceResult"; +import { IGetMarketPriceRequestData } from "../models/eft/ragfair/IGetMarketPriceRequestData"; +import { IGetOffersResult } from "../models/eft/ragfair/IGetOffersResult"; +import { IRemoveOfferRequestData } from "../models/eft/ragfair/IRemoveOfferRequestData"; +import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData"; +import { ISendRagfairReportRequestData } from "../models/eft/ragfair/ISendRagfairReportRequestData"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RagfairServer } from "../servers/RagfairServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +/** + * Handle ragfair related callback events + */ +export declare class RagfairCallbacks implements OnLoad, OnUpdate { + protected httpResponse: HttpResponseUtil; + protected jsonUtil: JsonUtil; + protected ragfairServer: RagfairServer; + protected ragfairController: RagfairController; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(httpResponse: HttpResponseUtil, jsonUtil: JsonUtil, ragfairServer: RagfairServer, ragfairController: RagfairController, configServer: ConfigServer); + onLoad(): Promise; + getRoute(): string; + search(url: string, info: ISearchRequestData, sessionID: string): IGetBodyResponseData; + getMarketPrice(url: string, info: IGetMarketPriceRequestData, sessionID: string): IGetBodyResponseData; + addOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse; + removeOffer(pmcData: IPmcData, info: IRemoveOfferRequestData, sessionID: string): IItemEventRouterResponse; + extendOffer(pmcData: IPmcData, info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle /client/items/prices + * Called when clicking an item to list on flea + */ + getFleaPrices(url: string, request: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + onUpdate(timeSinceLastRun: number): Promise; + sendReport(url: string, info: ISendRagfairReportRequestData, sessionID: string): INullResponseData; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/RepairCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/RepairCallbacks.d.ts new file mode 100644 index 0000000..14edeeb --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/RepairCallbacks.d.ts @@ -0,0 +1,25 @@ +import { RepairController } from "../controllers/RepairController"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRepairActionDataRequest } from "../models/eft/repair/IRepairActionDataRequest"; +import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepairActionDataRequest"; +export declare class RepairCallbacks { + protected repairController: RepairController; + constructor(repairController: RepairController); + /** + * use trader to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ + traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + /** + * Use repair kit to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ + repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/SaveCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/SaveCallbacks.d.ts new file mode 100644 index 0000000..93ffd96 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/SaveCallbacks.d.ts @@ -0,0 +1,10 @@ +import { OnLoad } from "../di/OnLoad"; +import { OnUpdate } from "../di/OnUpdate"; +import { SaveServer } from "../servers/SaveServer"; +export declare class SaveCallbacks implements OnLoad, OnUpdate { + protected saveServer: SaveServer; + constructor(saveServer: SaveServer); + onLoad(): Promise; + getRoute(): string; + onUpdate(secondsSinceLastRun: number): Promise; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/TradeCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/TradeCallbacks.d.ts new file mode 100644 index 0000000..4291da8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/TradeCallbacks.d.ts @@ -0,0 +1,14 @@ +import { TradeController } from "../controllers/TradeController"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTradeRequestData"; +import { IProcessRagfairTradeRequestData } from "../models/eft/trade/IProcessRagfairTradeRequestData"; +export declare class TradeCallbacks { + protected tradeController: TradeController; + constructor(tradeController: TradeController); + /** + * Handle client/game/profile/items/moving TradingConfirm + */ + processTrade(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse; + processRagfairTrade(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/TraderCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/TraderCallbacks.d.ts new file mode 100644 index 0000000..8df1049 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/TraderCallbacks.d.ts @@ -0,0 +1,23 @@ +import { OnLoad } from "../di/OnLoad"; +import { OnUpdate } from "../di/OnUpdate"; +import { TraderController } from "../controllers/TraderController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class TraderCallbacks implements OnLoad, OnUpdate { + protected httpResponse: HttpResponseUtil; + protected traderController: TraderController; + constructor(httpResponse: HttpResponseUtil, traderController: TraderController); + onLoad(): Promise; + onUpdate(): Promise; + getRoute(): string; + getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/trading/api/getUserAssortPrice/trader + * @returns + */ + getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/WeatherCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/WeatherCallbacks.d.ts new file mode 100644 index 0000000..f9d2002 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/WeatherCallbacks.d.ts @@ -0,0 +1,15 @@ +import { WeatherController } from "../controllers/WeatherController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IWeatherData } from "../models/eft/weather/IWeatherData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class WeatherCallbacks { + protected httpResponse: HttpResponseUtil; + protected weatherController: WeatherController; + constructor(httpResponse: HttpResponseUtil, weatherController: WeatherController); + /** + * Handle client/weather + * @returns IWeatherData + */ + getWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/16ImporterUtil/types/callbacks/WishlistCallbacks.d.ts b/TypeScript/16ImporterUtil/types/callbacks/WishlistCallbacks.d.ts new file mode 100644 index 0000000..c2cc2a8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/callbacks/WishlistCallbacks.d.ts @@ -0,0 +1,10 @@ +import { WishlistController } from "../controllers/WishlistController"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData"; +export declare class WishlistCallbacks { + protected wishlistController: WishlistController; + constructor(wishlistController: WishlistController); + addToWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; + removeFromWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/context/ApplicationContext.d.ts b/TypeScript/16ImporterUtil/types/context/ApplicationContext.d.ts new file mode 100644 index 0000000..28bbdf7 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/context/ApplicationContext.d.ts @@ -0,0 +1,18 @@ +import { ContextVariable } from "./ContextVariable"; +import { ContextVariableType } from "./ContextVariableType"; +export declare class ApplicationContext { + private variables; + private static holderMaxSize; + /** + * Called like: + * + * const registerPlayerInfo = this.applicationContext.getLatestValue(ContextVariableType.REGISTER_PLAYER_REQUEST).getValue(); + * + * const matchInfo = this.applicationContext.getLatestValue(ContextVariableType.MATCH_INFO).getValue(); + * @param type + * @returns + */ + getLatestValue(type: ContextVariableType): ContextVariable; + getValues(type: ContextVariableType): ContextVariable[]; + addValue(type: ContextVariableType, value: any): void; +} diff --git a/TypeScript/16ImporterUtil/types/context/ContextVariable.d.ts b/TypeScript/16ImporterUtil/types/context/ContextVariable.d.ts new file mode 100644 index 0000000..0fe0a63 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/context/ContextVariable.d.ts @@ -0,0 +1,10 @@ +import { ContextVariableType } from "./ContextVariableType"; +export declare class ContextVariable { + private value; + private timestamp; + private type; + constructor(value: any, type: ContextVariableType); + getValue(): T; + getTimestamp(): Date; + getType(): ContextVariableType; +} diff --git a/TypeScript/16ImporterUtil/types/context/ContextVariableType.d.ts b/TypeScript/16ImporterUtil/types/context/ContextVariableType.d.ts new file mode 100644 index 0000000..49f3267 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/context/ContextVariableType.d.ts @@ -0,0 +1,10 @@ +export declare enum ContextVariableType { + /** Logged in users session id */ + SESSION_ID = 0, + /** Currently acive raid information */ + RAID_CONFIGURATION = 1, + /** Timestamp when client first connected */ + CLIENT_START_TIMESTAMP = 2, + /** When player is loading into map and loot is requested */ + REGISTER_PLAYER_REQUEST = 3 +} diff --git a/TypeScript/16ImporterUtil/types/controllers/BotController.d.ts b/TypeScript/16ImporterUtil/types/controllers/BotController.d.ts new file mode 100644 index 0000000..1d7eb9d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/BotController.d.ts @@ -0,0 +1,71 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { BotGenerator } from "../generators/BotGenerator"; +import { BotDifficultyHelper } from "../helpers/BotDifficultyHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { IBotCore } from "../models/eft/common/tables/IBotCore"; +import { Difficulty } from "../models/eft/common/tables/IBotType"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class BotController { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected botGenerator: BotGenerator; + protected botHelper: BotHelper; + protected botDifficultyHelper: BotDifficultyHelper; + protected botGenerationCacheService: BotGenerationCacheService; + protected localisationService: LocalisationService; + protected profileHelper: ProfileHelper; + protected configServer: ConfigServer; + protected applicationContext: ApplicationContext; + protected jsonUtil: JsonUtil; + protected botConfig: IBotConfig; + static readonly pmcTypeLabel = "PMC"; + constructor(logger: ILogger, databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, botGenerationCacheService: BotGenerationCacheService, localisationService: LocalisationService, profileHelper: ProfileHelper, configServer: ConfigServer, applicationContext: ApplicationContext, jsonUtil: JsonUtil); + /** + * Return the number of bot loadout varieties to be generated + * @param type bot Type we want the loadout gen count for + * @returns number of bots to generate + */ + getBotPresetGenerationLimit(type: string): number; + /** + * Get the core.json difficulty settings from database\bots + * @returns IBotCore + */ + getBotCoreDifficulty(): IBotCore; + /** + * Get bot difficulty settings + * adjust PMC settings to ensure they engage the correct bot types + * @param type what bot the server is requesting settings for + * @param difficulty difficulty level server requested settings for + * @returns Difficulty object + */ + getBotDifficulty(type: string, difficulty: string): Difficulty; + /** + * Generate bot profiles and store in cache + * @param sessionId Session id + * @param info bot generation request info + * @returns IBotBase array + */ + generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; + /** + * Get the difficulty passed in, if its not "asoline", get selected difficulty from config + * @param requestedDifficulty + * @returns + */ + getPMCDifficulty(requestedDifficulty: string): string; + /** + * Get the max number of bots allowed on a map + * Looks up location player is entering when getting cap value + * @returns cap number + */ + getBotCap(): number; + getPmcBotTypes(): Record>>; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/CustomizationController.d.ts b/TypeScript/16ImporterUtil/types/controllers/CustomizationController.d.ts new file mode 100644 index 0000000..a4ef8cf --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/CustomizationController.d.ts @@ -0,0 +1,24 @@ +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ISuit } from "../models/eft/common/tables/ITrader"; +import { IBuyClothingRequestData } from "../models/eft/customization/IBuyClothingRequestData"; +import { IWearClothingRequestData } from "../models/eft/customization/IWearClothingRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocalisationService } from "../services/LocalisationService"; +export declare class CustomizationController { + protected logger: ILogger; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected saveServer: SaveServer; + protected localisationService: LocalisationService; + protected profileHelper: ProfileHelper; + constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, saveServer: SaveServer, localisationService: LocalisationService, profileHelper: ProfileHelper); + getTraderSuits(traderID: string, sessionID: string): ISuit[]; + wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse; + buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse; + protected getAllTraderSuits(sessionID: string): ISuit[]; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/DialogueController.d.ts b/TypeScript/16ImporterUtil/types/controllers/DialogueController.d.ts new file mode 100644 index 0000000..98d3d52 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/DialogueController.d.ts @@ -0,0 +1,79 @@ +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 { DialogueInfo, Message } from "../models/eft/profile/IAkiProfile"; +import { SaveServer } from "../servers/SaveServer"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class DialogueController { + protected saveServer: SaveServer; + protected timeUtil: TimeUtil; + protected dialogueHelper: DialogueHelper; + constructor(saveServer: SaveServer, timeUtil: TimeUtil, dialogueHelper: DialogueHelper); + update(): void; + getFriendList(sessionID: string): IGetFriendListDataResponse; + /** + * Create array holding trader dialogs and mail interactions with player + * Set the content of the dialogue on the list tab. + * @param sessionID Session Id + * @returns array of dialogs + */ + generateDialogueList(sessionID: string): DialogueInfo[]; + /** + * Get the content of a dialogue + * @param dialogueID Dialog id + * @param sessionID Session Id + * @returns DialogueInfo + */ + getDialogueInfo(dialogueID: string, sessionID: string): DialogueInfo; + /** + * Handle player clicking 'messenger' and seeing all the messages they've recieved + * Set the content of the dialogue on the details panel, showing all the messages + * for the specified dialogue. + * @param dialogueID Dialog id + * @param sessionID Session id + * @returns IGetMailDialogViewResponseData object + */ + generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData; + /** + * Get a count of messages with attachments from a particular dialog + * @param sessionID Session id + * @param dialogueID Dialog id + * @returns Count of messages with attachments + */ + protected getUnreadMessagesWithAttachmentsCount(sessionID: string, dialogueID: string): number; + /** + * Does array have messages with uncollected rewards (includes expired rewards) + * @param messages Messages to check + * @returns true if uncollected rewards found + */ + protected messagesHaveUncollectedRewards(messages: Message[]): boolean; + removeDialogue(dialogueID: string, sessionID: string): void; + setDialoguePin(dialogueID: string, shouldPin: boolean, sessionID: string): void; + setRead(dialogueIDs: string[], sessionID: string): void; + /** + * Get all uncollected items attached to mail in a particular dialog + * @param dialogueID Dialog to get mail attachments from + * @param sessionID Session id + * @returns + */ + getAllAttachments(dialogueID: string, sessionID: string): IGetAllAttachmentsResponse; + /** + * Get messages from a specific dialog that have items not expired + * @param sessionId Session id + * @param dialogueId Dialog to get mail attachments from + * @returns Message array + */ + protected getActiveMessagesFromDialog(sessionId: string, dialogueId: string): Message[]; + /** + * Return array of messages with uncollected items (includes expired) + * @param messages Messages to parse + * @returns messages with items to collect + */ + protected getMessagesWithAttachments(messages: Message[]): Message[]; + /** + * Delete expired items. triggers when updating traders. + * @param sessionID Session id + */ + protected removeExpiredItems(sessionID: string): void; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/GameController.d.ts b/TypeScript/16ImporterUtil/types/controllers/GameController.d.ts new file mode 100644 index 0000000..44264dc --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/GameController.d.ts @@ -0,0 +1,80 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { HideoutHelper } from "../helpers/HideoutHelper"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { PreAkiModLoader } from "../loaders/PreAkiModLoader"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ICheckVersionResponse } from "../models/eft/game/ICheckVersionResponse"; +import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse"; +import { IServerDetails } from "../models/eft/game/IServerDetails"; +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { ICoreConfig } from "../models/spt/config/ICoreConfig"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILocationConfig } from "../models/spt/config/ILocationConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { CustomLocationWaveService } from "../services/CustomLocationWaveService"; +import { LocalisationService } from "../services/LocalisationService"; +import { OpenZoneService } from "../services/OpenZoneService"; +import { ProfileFixerService } from "../services/ProfileFixerService"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class GameController { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected timeUtil: TimeUtil; + protected preAkiModLoader: PreAkiModLoader; + protected httpServerHelper: HttpServerHelper; + protected hideoutHelper: HideoutHelper; + protected profileHelper: ProfileHelper; + protected profileFixerService: ProfileFixerService; + protected localisationService: LocalisationService; + protected customLocationWaveService: CustomLocationWaveService; + protected openZoneService: OpenZoneService; + protected seasonalEventService: SeasonalEventService; + protected applicationContext: ApplicationContext; + protected configServer: ConfigServer; + protected httpConfig: IHttpConfig; + protected coreConfig: ICoreConfig; + protected locationConfig: ILocationConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, applicationContext: ApplicationContext, configServer: ConfigServer); + gameStart(_url: string, _info: IEmptyRequestData, sessionID: string, startTimeStampMS: number): void; + /** + * When player logs in, iterate over all active effects and reduce timer + * TODO - add body part HP regen + * @param pmcProfile + */ + protected updateProfileHealthValues(pmcProfile: IPmcData): void; + /** + * Waves with an identical min/max values spawn nothing, the number of bots that spawn is the difference between min and max + */ + protected fixBrokenOfflineMapWaves(): void; + /** + * Make Rogues spawn later to allow for scavs to spawn first instead of rogues filling up all spawn positions + */ + protected fixRoguesSpawningInstantlyOnLighthouse(): void; + /** + * Get a list of installed mods and save their details to the profile being used + * @param fullProfile Profile to add mod details to + */ + protected saveActiveModsToProfile(fullProfile: IAkiProfile): void; + /** + * Add the logged in players name to PMC name pool + * @param pmcProfile + */ + protected addPlayerToPMCNames(pmcProfile: IPmcData): void; + /** + * Blank out the "test" mail message from prapor + */ + protected removePraporTestMessage(): void; + /** + * Make non-trigger-spawned raiders spawn earlier + always + */ + protected adjustLabsRaiderSpawnRate(): void; + protected logProfileDetails(fullProfile: IAkiProfile): void; + getGameConfig(sessionID: string): IGameConfigResponse; + getServer(): IServerDetails[]; + getValidGameVersion(): ICheckVersionResponse; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/HandbookController.d.ts b/TypeScript/16ImporterUtil/types/controllers/HandbookController.d.ts new file mode 100644 index 0000000..52d2dd8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/HandbookController.d.ts @@ -0,0 +1,8 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { DatabaseServer } from "../servers/DatabaseServer"; +export declare class HandbookController { + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + constructor(databaseServer: DatabaseServer, handbookHelper: HandbookHelper); + load(): void; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/HealthController.d.ts b/TypeScript/16ImporterUtil/types/controllers/HealthController.d.ts new file mode 100644 index 0000000..7c149cc --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/HealthController.d.ts @@ -0,0 +1,73 @@ +import { HealthHelper } from "../helpers/HealthHelper"; +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +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 { IWorkoutData } from "../models/eft/health/IWorkoutData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { LocalisationService } from "../services/LocalisationService"; +import { PaymentService } from "../services/PaymentService"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class HealthController { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected eventOutputHolder: EventOutputHolder; + protected itemHelper: ItemHelper; + protected paymentService: PaymentService; + protected inventoryHelper: InventoryHelper; + protected localisationService: LocalisationService; + protected healthHelper: HealthHelper; + constructor(logger: ILogger, jsonUtil: JsonUtil, eventOutputHolder: EventOutputHolder, itemHelper: ItemHelper, paymentService: PaymentService, inventoryHelper: InventoryHelper, localisationService: LocalisationService, healthHelper: HealthHelper); + /** + * stores in-raid player health + * @param pmcData Player profile + * @param info Request data + * @param sessionID + * @param addEffects Should effects found be added or removed from profile + */ + saveVitality(pmcData: IPmcData, info: ISyncHealthRequestData, sessionID: string, addEffects?: boolean, deleteExistingEffects?: boolean): void; + /** + * When healing in menu + * @param pmcData + * @param body + * @param sessionID + * @returns + */ + offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Consume food/water outside of a raid + * @param pmcData Player profile + * @param body request Object + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Occurs on post-raid healing page + * @param pmcData player profile + * @param healthTreatmentRequest Request data from client + * @param sessionID Session id + * @returns + */ + healthTreatment(pmcData: IPmcData, healthTreatmentRequest: IHealthTreatmentRequestData, sessionID: string): IItemEventRouterResponse; + /** + * applies skills from hideout workout. + * @param pmcData Player profile + * @param info Request data + * @param sessionID + */ + applyWorkoutChanges(pmcData: IPmcData, info: IWorkoutData, sessionId: string): void; + /** + * Iterate over treatment request diff and find effects to remove from player limbs + * @param sessionId + * @param profile Profile to update + * @param treatmentRequest client request + * @param output response to send to client + */ + protected removeEffectsAfterPostRaidHeal(sessionId: string, profile: IPmcData, treatmentRequest: IHealthTreatmentRequestData, output: IItemEventRouterResponse): void; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/HideoutController.d.ts b/TypeScript/16ImporterUtil/types/controllers/HideoutController.d.ts new file mode 100644 index 0000000..e6e0243 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/HideoutController.d.ts @@ -0,0 +1,220 @@ +import { ScavCaseRewardGenerator } from "../generators/ScavCaseRewardGenerator"; +import { HideoutHelper } from "../helpers/HideoutHelper"; +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { HideoutArea, Product } from "../models/eft/common/tables/IBotBase"; +import { HideoutUpgradeCompleteRequestData } from "../models/eft/hideout/HideoutUpgradeCompleteRequestData"; +import { IHandleQTEEventRequestData } from "../models/eft/hideout/IHandleQTEEventRequestData"; +import { IHideoutContinuousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinuousProductionStartRequestData"; +import { IHideoutImproveAreaRequestData } from "../models/eft/hideout/IHideoutImproveAreaRequestData"; +import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction"; +import { IHideoutPutItemInRequestData } from "../models/eft/hideout/IHideoutPutItemInRequestData"; +import { IHideoutScavCaseStartRequestData } from "../models/eft/hideout/IHideoutScavCaseStartRequestData"; +import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData"; +import { IHideoutTakeItemOutRequestData } from "../models/eft/hideout/IHideoutTakeItemOutRequestData"; +import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideoutTakeProductionRequestData"; +import { IHideoutToggleAreaRequestData } from "../models/eft/hideout/IHideoutToggleAreaRequestData"; +import { IHideoutUpgradeRequestData } from "../models/eft/hideout/IHideoutUpgradeRequestData"; +import { IQteData } from "../models/eft/hideout/IQteData"; +import { IRecordShootingRangePoints } from "../models/eft/hideout/IRecordShootingRangePoints"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IHideoutConfig } from "../models/spt/config/IHideoutConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { PlayerService } from "../services/PlayerService"; +import { HashUtil } from "../utils/HashUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class HideoutController { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected inventoryHelper: InventoryHelper; + protected saveServer: SaveServer; + protected playerService: PlayerService; + protected presetHelper: PresetHelper; + protected paymentHelper: PaymentHelper; + protected eventOutputHolder: EventOutputHolder; + protected httpResponse: HttpResponseUtil; + protected profileHelper: ProfileHelper; + protected hideoutHelper: HideoutHelper; + protected scavCaseRewardGenerator: ScavCaseRewardGenerator; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected jsonUtil: JsonUtil; + protected fenceService: FenceService; + protected static nameBackendCountersCrafting: string; + protected hideoutConfig: IHideoutConfig; + constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, localisationService: LocalisationService, configServer: ConfigServer, jsonUtil: JsonUtil, fenceService: FenceService); + /** + * Start a hideout area upgrade + * @param pmcData Player profile + * @param request upgrade start request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + startUpgrade(pmcData: IPmcData, request: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Complete a hideout area upgrade + * @param pmcData Player profile + * @param request Completed upgrade request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + upgradeComplete(pmcData: IPmcData, request: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutPutItemsInAreaSlots + * Create item in hideout slot item array, remove item from player inventory + * @param pmcData Profile data + * @param addItemToHideoutRequest reqeust from client to place item in area slot + * @param sessionID Session id + * @returns IItemEventRouterResponse object + */ + putItemsInAreaSlots(pmcData: IPmcData, addItemToHideoutRequest: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Remove item from hideout area and place into player inventory + * @param pmcData Player profile + * @param request Take item out of area request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + takeItemsFromAreaSlots(pmcData: IPmcData, request: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Find resource item in hideout area, add copy to player inventory, remove Item from hideout slot + * @param sessionID Session id + * @param pmcData Profile to update + * @param removeResourceRequest client request + * @param output response to send to client + * @param hideoutArea Area fuel is being removed from + * @returns IItemEventRouterResponse response + */ + protected removeResourceFromArea(sessionID: string, pmcData: IPmcData, removeResourceRequest: IHideoutTakeItemOutRequestData, output: IItemEventRouterResponse, hideoutArea: HideoutArea): IItemEventRouterResponse; + /** + * Toggle area on/off + * @param pmcData Player profile + * @param request Toggle area request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + toggleArea(pmcData: IPmcData, request: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Start production for an item from hideout area + * @param pmcData Player profile + * @param body Start prodution of single item request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handles event after clicking 'start' on the scav case hideout page + * @param pmcData player profile + * @param body client request object + * @param sessionID session id + * @returns item event router response + */ + scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Adjust scav case time based on fence standing + * + * @param pmcData Player profile + * @param productionTime Time to complete scav case in seconds + * @returns Adjusted scav case time in seconds + */ + protected getScavCaseTime(pmcData: IPmcData, productionTime: number): number; + /** + * Add generated scav case rewards to player profile + * @param pmcData player profile to add rewards to + * @param rewards reward items to add to profile + * @param recipieId recipie id to save into Production dict + */ + protected addScavCaseRewardsToProfile(pmcData: IPmcData, rewards: Product[], recipieId: string): void; + /** + * Start production of continuously created item + * @param pmcData Player profile + * @param request Continious production request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + continuousProductionStart(pmcData: IPmcData, request: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Take completed item out of hideout area and place into player inventory + * @param pmcData Player profile + * @param request Remove production from area request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + takeProduction(pmcData: IPmcData, request: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Take recipie-type production out of hideout area and place into player inventory + * @param sessionID Session id + * @param recipe Completed recipie of item + * @param pmcData Player profile + * @param request Remove production from area request + * @param output Output object to update + * @returns IItemEventRouterResponse + */ + protected handleRecipie(sessionID: string, recipe: IHideoutProduction, pmcData: IPmcData, request: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse; + /** + * Handles giving rewards stored in player profile to player after clicking 'get rewards' + * @param sessionID Session id + * @param pmcData Player profile + * @param request Get rewards from scavcase craft request + * @param output Output object to update + * @returns IItemEventRouterResponse + */ + protected handleScavCase(sessionID: string, pmcData: IPmcData, request: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse; + /** + * Start area production for item + * @param pmcData Player profile + * @param request Start production request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + registerProduction(pmcData: IPmcData, request: IHideoutSingleProductionStartRequestData | IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Get quick time event list for hideout + * // TODO - implement this + * @param sessionId Session id + * @returns IQteData array + */ + getQteList(sessionId: string): IQteData[]; + /** + * Handle HideoutQuickTimeEvent on client/game/profile/items/moving + * Called after completing workout at gym + * @param sessionId Session id + * @param pmcData Profile to adjust + * @param request QTE result object + */ + handleQTEEventOutcome(sessionId: string, pmcData: IPmcData, request: IHandleQTEEventRequestData): IItemEventRouterResponse; + /** + * Record a high score from the shooting range into a player profiles overallcounters + * @param sessionId Session id + * @param pmcData Profile to update + * @param request shooting range score request + * @returns IItemEventRouterResponse + */ + recordShootingRangePoints(sessionId: string, pmcData: IPmcData, request: IRecordShootingRangePoints): IItemEventRouterResponse; + /** + * Handle client/game/profile/items/moving - HideoutImproveArea + * @param sessionId Session id + * @param pmcData profile to improve area in + * @param request improve area request data + */ + improveArea(sessionId: string, pmcData: IPmcData, request: IHideoutImproveAreaRequestData): IItemEventRouterResponse; + /** + * Function called every x seconds as part of onUpdate event + */ + update(): void; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/InraidController.d.ts b/TypeScript/16ImporterUtil/types/controllers/InraidController.d.ts new file mode 100644 index 0000000..f954eff --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/InraidController.d.ts @@ -0,0 +1,132 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { PlayerScavGenerator } from "../generators/PlayerScavGenerator"; +import { HealthHelper } from "../helpers/HealthHelper"; +import { InRaidHelper } from "../helpers/InRaidHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { QuestHelper } from "../helpers/QuestHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData"; +import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; +import { IAirdropConfig } from "../models/spt/config/IAirdropConfig"; +import { IInRaidConfig } from "../models/spt/config/IInRaidConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { InsuranceService } from "../services/InsuranceService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +/** + * Logic for handling In Raid callbacks + */ +export declare class InraidController { + protected logger: ILogger; + protected saveServer: SaveServer; + protected jsonUtil: JsonUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected itemHelper: ItemHelper; + protected profileHelper: ProfileHelper; + protected playerScavGenerator: PlayerScavGenerator; + protected healthHelper: HealthHelper; + protected traderHelper: TraderHelper; + protected insuranceService: InsuranceService; + protected inRaidHelper: InRaidHelper; + protected applicationContext: ApplicationContext; + protected configServer: ConfigServer; + protected airdropConfig: IAirdropConfig; + protected inraidConfig: IInRaidConfig; + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, applicationContext: ApplicationContext, configServer: ConfigServer); + /** + * Save locationId to active profiles inraid object AND app context + * @param sessionID Session id + * @param info Register player request + */ + addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void; + /** + * Save profile state to disk + * Handles pmc/pscav + * @param offraidData post-raid request data + * @param sessionID Session id + */ + savePostRaidProgress(offraidData: ISaveProgressRequestData, sessionID: string): void; + /** + * Handle updating player profile post-pmc raid + * @param sessionID session id + * @param offraidData post-raid data + */ + protected savePmcProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; + /** + * Make changes to pmc profile after they left raid dead, + * alter bodypart hp, handle insurance, delete inventory items, remove carried quest items + * @param postRaidSaveRequest post-raid save request + * @param pmcData pmc profile + * @param insuranceEnabled is insurance enabled + * @param preRaidGear gear player had before raid + * @param sessionID Session id + * @returns Updated profile object + */ + protected performPostRaidActionsWhenDead(postRaidSaveRequest: ISaveProgressRequestData, pmcData: IPmcData, insuranceEnabled: boolean, preRaidGear: Item[], sessionID: string): IPmcData; + /** + * Adjust player characters bodypart hp if they left raid early + * @param postRaidSaveRequest post raid data + * @param pmcData player profile + */ + protected updatePmcHealthPostRaid(postRaidSaveRequest: ISaveProgressRequestData, pmcData: IPmcData): void; + /** + * Reduce body part hp to % of max + * @param pmcData profile to edit + * @param multipler multipler to apply to max health + */ + protected reducePmcHealthToPercent(pmcData: IPmcData, multipler: number): void; + /** + * Handle updating the profile post-pscav raid + * @param sessionID session id + * @param offraidData post-raid data of raid + */ + protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; + /** + * Is the player dead after a raid - dead is anything other than "survived" / "runner" + * @param statusOnExit exit value from offraidData object + * @returns true if dead + */ + protected isPlayerDead(statusOnExit: string): boolean; + /** + * Mark inventory items as FiR if player survived raid, otherwise remove FiR from them + * @param offraidData Save Progress Request + * @param pmcData player profile + * @param isPlayerScav Was the player a pScav + */ + protected markOrRemoveFoundInRaidItems(offraidData: ISaveProgressRequestData, pmcData: IPmcData, isPlayerScav: boolean): void; + /** + * Update profile after player completes scav raid + * @param scavData Scav profile + * @param sessionID Session id + * @param offraidData Post-raid save request + * @param pmcData Pmc profile + * @param isDead Is player dead + */ + protected handlePostRaidPlayerScavProcess(scavData: IPmcData, sessionID: string, offraidData: ISaveProgressRequestData, pmcData: IPmcData, isDead: boolean): void; + /** + * Update profile with scav karma values based on in-raid actions + * @param pmcData Pmc profile + * @param offraidData Post-raid save request + * @param scavData Scav profile + * @param sessionID Session id + */ + protected handlePostRaidPlayerScavKarmaChanges(pmcData: IPmcData, offraidData: ISaveProgressRequestData, scavData: IPmcData, sessionID: string): void; + /** + * Get the inraid config from configs/inraid.json + * @returns InRaid Config + */ + getInraidConfig(): IInRaidConfig; + /** + * Get airdrop config from configs/airdrop.json + * @returns Airdrop config + */ + getAirdropConfig(): IAirdropConfig; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/InsuranceController.d.ts b/TypeScript/16ImporterUtil/types/controllers/InsuranceController.d.ts new file mode 100644 index 0000000..af6e68d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/InsuranceController.d.ts @@ -0,0 +1,53 @@ +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 { IGetInsuranceCostResponseData } from "../models/eft/insurance/IGetInsuranceCostResponseData"; +import { IInsureRequestData } from "../models/eft/insurance/IInsureRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { InsuranceService } from "../services/InsuranceService"; +import { PaymentService } from "../services/PaymentService"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class InsuranceController { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected eventOutputHolder: EventOutputHolder; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected profileHelper: ProfileHelper; + protected dialogueHelper: DialogueHelper; + protected paymentService: PaymentService; + protected insuranceService: InsuranceService; + protected configServer: ConfigServer; + protected insuranceConfig: IInsuranceConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, paymentService: PaymentService, insuranceService: InsuranceService, configServer: ConfigServer); + /** + * Process insurance items prior to being given to player in mail + */ + processReturn(): void; + /** + * Add insurance to an item + * @param pmcData Player profile + * @param body Insurance request + * @param sessionID Session id + * @returns IItemEventRouterResponse object to send to client + */ + insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Calculate insurance cost + * @param info request object + * @param sessionID session id + * @returns IGetInsuranceCostResponseData object to send to client + */ + cost(info: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/InventoryController.d.ts b/TypeScript/16ImporterUtil/types/controllers/InventoryController.d.ts new file mode 100644 index 0000000..129ede3 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/InventoryController.d.ts @@ -0,0 +1,151 @@ +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +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 { IOpenRandomLootContainerRequestData } from "../models/eft/inventory/IOpenRandomLootContainerRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { HashUtil } from "../utils/HashUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class InventoryController { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected fenceService: FenceService; + protected presetHelper: PresetHelper; + protected inventoryHelper: InventoryHelper; + protected ragfairOfferService: RagfairOfferService; + protected profileHelper: ProfileHelper; + protected weightedRandomHelper: WeightedRandomHelper; + protected paymentHelper: PaymentHelper; + protected localisationService: LocalisationService; + protected eventOutputHolder: EventOutputHolder; + protected httpResponseUtil: HttpResponseUtil; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, fenceService: FenceService, presetHelper: PresetHelper, inventoryHelper: InventoryHelper, ragfairOfferService: RagfairOfferService, profileHelper: ProfileHelper, weightedRandomHelper: WeightedRandomHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, eventOutputHolder: EventOutputHolder, httpResponseUtil: HttpResponseUtil); + /** + * 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. + * @param pmcData Profile + * @param moveRequest Move request data + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + moveItem(pmcData: IPmcData, moveRequest: 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; + /** + * Add a tag to an inventory item + * @param pmcData profile with item to add tag to + * @param body tag request data + * @param sessionID session id + * @returns client response object + */ + tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse; + bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handles examining an item + * @param pmcData player profile + * @param body request object + * @param sessionID session id + * @returns response + */ + examineItem(pmcData: IPmcData, body: IInventoryExamineRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Get the tplid of an item from the examine request object + * @param body response request + * @returns tplid + */ + protected getExaminedItemTpl(body: IInventoryExamineRequestData): string; + readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle ApplyInventoryChanges + * Sorts supplied items. + * @param pmcData Player profile + * @param request sort request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + sortInventory(pmcData: IPmcData, request: 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; + /** + * Handle event fired when a container is unpacked (currently only the halloween pumpkin) + * @param pmcData Profile data + * @param body open loot container request data + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + openRandomLootContainer(pmcData: IPmcData, body: IOpenRandomLootContainerRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/LauncherController.d.ts b/TypeScript/16ImporterUtil/types/controllers/LauncherController.d.ts new file mode 100644 index 0000000..1af1f56 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/LauncherController.d.ts @@ -0,0 +1,28 @@ +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { IChangeRequestData } from "../models/eft/launcher/IChangeRequestData"; +import { ILoginRequestData } from "../models/eft/launcher/ILoginRequestData"; +import { IRegisterData } from "../models/eft/launcher/IRegisterData"; +import { Info } from "../models/eft/profile/IAkiProfile"; +import { ICoreConfig } from "../models/spt/config/ICoreConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { HashUtil } from "../utils/HashUtil"; +export declare class LauncherController { + protected hashUtil: HashUtil; + protected saveServer: SaveServer; + protected httpServerHelper: HttpServerHelper; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected coreConfig: ICoreConfig; + constructor(hashUtil: HashUtil, saveServer: SaveServer, httpServerHelper: HttpServerHelper, databaseServer: DatabaseServer, configServer: ConfigServer); + connect(): any; + find(sessionIdKey: string): Info; + login(info: ILoginRequestData): string; + register(info: IRegisterData): string; + protected createAccount(info: IRegisterData): string; + changeUsername(info: IChangeRequestData): string; + changePassword(info: IChangeRequestData): string; + wipe(info: IRegisterData): string; + getCompatibleTarkovVersion(): string; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/LocationController.d.ts b/TypeScript/16ImporterUtil/types/controllers/LocationController.d.ts new file mode 100644 index 0000000..b6feba8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/LocationController.d.ts @@ -0,0 +1,35 @@ +import { LocationGenerator } from "../generators/LocationGenerator"; +import { LootGenerator } from "../generators/LootGenerator"; +import { ILocationBase } from "../models/eft/common/ILocationBase"; +import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase"; +import { IAirdropConfig } from "../models/spt/config/IAirdropConfig"; +import { LootItem } from "../models/spt/services/LootItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class LocationController { + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected logger: ILogger; + protected locationGenerator: LocationGenerator; + protected localisationService: LocalisationService; + protected lootGenerator: LootGenerator; + protected databaseServer: DatabaseServer; + protected timeUtil: TimeUtil; + protected configServer: ConfigServer; + protected airdropConfig: IAirdropConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer); + get(location: string): ILocationBase; + generate(name: string): ILocationBase; + generateAll(): ILocationsGenerateAllResponse; + /** + * Get loot for an airdop container + * Generates it randomly based on config/airdrop.json values + * @returns Array of LootItem + */ + getAirdropLoot(): LootItem[]; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/MatchController.d.ts b/TypeScript/16ImporterUtil/types/controllers/MatchController.d.ts new file mode 100644 index 0000000..cb0c755 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/MatchController.d.ts @@ -0,0 +1,57 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData"; +import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData"; +import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData"; +import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestData"; +import { IGetRaidConfigurationRequestData } from "../models/eft/match/IGetRaidConfigurationRequestData"; +import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; +import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { IInRaidConfig } from "../models/spt/config/IInRaidConfig"; +import { IMatchConfig } from "../models/spt/config/IMatchConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { SaveServer } from "../servers/SaveServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; +import { BotLootCacheService } from "../services/BotLootCacheService"; +import { MatchLocationService } from "../services/MatchLocationService"; +import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; +export declare class MatchController { + protected logger: ILogger; + protected saveServer: SaveServer; + protected profileHelper: ProfileHelper; + protected matchLocationService: MatchLocationService; + protected traderHelper: TraderHelper; + protected botLootCacheService: BotLootCacheService; + protected configServer: ConfigServer; + protected profileSnapshotService: ProfileSnapshotService; + protected botGenerationCacheService: BotGenerationCacheService; + protected applicationContext: ApplicationContext; + protected matchConfig: IMatchConfig; + protected inraidConfig: IInRaidConfig; + protected botConfig: IBotConfig; + constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, botGenerationCacheService: BotGenerationCacheService, applicationContext: ApplicationContext); + getEnabled(): boolean; + getProfile(info: IGetProfileRequestData): IPmcData[]; + createGroup(sessionID: string, info: ICreateGroupRequestData): any; + deleteGroup(info: any): void; + joinMatch(info: IJoinMatchRequestData, sessionID: string): IJoinMatchResult[]; + protected getMatch(location: string): any; + getGroupStatus(info: IGetGroupStatusRequestData): any; + /** + * Handle /client/raid/configuration + * @param request + * @param sessionID + */ + startOfflineRaid(request: IGetRaidConfigurationRequestData, sessionID: string): void; + /** + * Convert a difficulty value from pre-raid screen to a bot difficulty + * @param botDifficulty dropdown difficulty value + * @returns bot difficulty + */ + protected convertDifficultyDropdownIntoBotDifficulty(botDifficulty: string): string; + endOfflineRaid(info: IEndOfflineRaidRequestData, sessionID: string): void; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/NoteController.d.ts b/TypeScript/16ImporterUtil/types/controllers/NoteController.d.ts new file mode 100644 index 0000000..9e2e250 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/NoteController.d.ts @@ -0,0 +1,11 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { INoteActionData } from "../models/eft/notes/INoteActionData"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +export declare class NoteController { + protected eventOutputHolder: EventOutputHolder; + constructor(eventOutputHolder: EventOutputHolder); + addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/NotifierController.d.ts b/TypeScript/16ImporterUtil/types/controllers/NotifierController.d.ts new file mode 100644 index 0000000..31d7bfe --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/NotifierController.d.ts @@ -0,0 +1,22 @@ +import { NotifierHelper } from "../helpers/NotifierHelper"; +import { NotificationService } from "../services/NotificationService"; +import { INotifierChannel } from "../models/eft/notifier/INotifier"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +export declare class NotifierController { + protected notifierHelper: NotifierHelper; + protected httpServerHelper: HttpServerHelper; + protected notificationService: NotificationService; + protected pollInterval: number; + protected timeout: number; + constructor(notifierHelper: NotifierHelper, httpServerHelper: HttpServerHelper, notificationService: NotificationService); + /** + * Resolve an array of session notifications. + * + * If no notifications are currently queued then intermittently check for new notifications until either + * one or more appear or when a timeout expires. + * If no notifications are available after the timeout, use a default message. + */ + notifyAsync(sessionID: string): Promise; + getServer(sessionID: string): string; + getChannel(sessionID: string): INotifierChannel; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/PresetBuildController.d.ts b/TypeScript/16ImporterUtil/types/controllers/PresetBuildController.d.ts new file mode 100644 index 0000000..65ae0c4 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/PresetBuildController.d.ts @@ -0,0 +1,18 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IPresetBuildActionRequestData } from "../models/eft/presetBuild/IPresetBuildActionRequestData"; +import { WeaponBuild } from "../models/eft/profile/IAkiProfile"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { SaveServer } from "../servers/SaveServer"; +import { HashUtil } from "../utils/HashUtil"; +export declare class PresetBuildController { + protected hashUtil: HashUtil; + protected eventOutputHolder: EventOutputHolder; + protected itemHelper: ItemHelper; + protected saveServer: SaveServer; + constructor(hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, itemHelper: ItemHelper, saveServer: SaveServer); + getUserBuilds(sessionID: string): WeaponBuild[]; + saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; + removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/PresetController.d.ts b/TypeScript/16ImporterUtil/types/controllers/PresetController.d.ts new file mode 100644 index 0000000..ca1af1a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/PresetController.d.ts @@ -0,0 +1,8 @@ +import { PresetHelper } from "../helpers/PresetHelper"; +import { DatabaseServer } from "../servers/DatabaseServer"; +export declare class PresetController { + protected presetHelper: PresetHelper; + protected databaseServer: DatabaseServer; + constructor(presetHelper: PresetHelper, databaseServer: DatabaseServer); + initialize(): void; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/ProfileController.d.ts b/TypeScript/16ImporterUtil/types/controllers/ProfileController.d.ts new file mode 100644 index 0000000..e76785a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/ProfileController.d.ts @@ -0,0 +1,46 @@ +import { PlayerScavGenerator } from "../generators/PlayerScavGenerator"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { QuestHelper } from "../helpers/QuestHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IMiniProfile } from "../models/eft/launcher/IMiniProfile"; +import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData"; +import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData"; +import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData"; +import { ISearchFriendRequestData } from "../models/eft/profile/ISearchFriendRequestData"; +import { ISearchFriendResponse } from "../models/eft/profile/ISearchFriendResponse"; +import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { ProfileFixerService } from "../services/ProfileFixerService"; +import { HashUtil } from "../utils/HashUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class ProfileController { + protected hashUtil: HashUtil; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected profileFixerService: ProfileFixerService; + protected playerScavGenerator: PlayerScavGenerator; + protected traderHelper: TraderHelper; + protected questHelper: QuestHelper; + protected profileHelper: ProfileHelper; + constructor(hashUtil: HashUtil, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileFixerService: ProfileFixerService, playerScavGenerator: PlayerScavGenerator, traderHelper: TraderHelper, questHelper: QuestHelper, profileHelper: ProfileHelper); + getMiniProfiles(): IMiniProfile[]; + getMiniProfile(sessionID: string): any; + getCompleteProfile(sessionID: string): IPmcData[]; + createProfile(info: IProfileCreateRequestData, sessionID: string): void; + /** + * Generate a player scav object + * pmc profile MUST exist first before pscav can be generated + * @param sessionID + * @returns IPmcData object + */ + 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[]; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/QuestController.d.ts b/TypeScript/16ImporterUtil/types/controllers/QuestController.d.ts new file mode 100644 index 0000000..fe1754d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/QuestController.d.ts @@ -0,0 +1,136 @@ +import { DialogueHelper } from "../helpers/DialogueHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { QuestConditionHelper } from "../helpers/QuestConditionHelper"; +import { QuestHelper } from "../helpers/QuestHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IQuest, Reward } from "../models/eft/common/tables/IQuest"; +import { IRepeatableQuest } from "../models/eft/common/tables/IRepeatableQuests"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData"; +import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData"; +import { IHandoverQuestRequestData } from "../models/eft/quests/IHandoverQuestRequestData"; +import { IQuestConfig } from "../models/spt/config/IQuestConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocaleService } from "../services/LocaleService"; +import { LocalisationService } from "../services/LocalisationService"; +import { PlayerService } from "../services/PlayerService"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class QuestController { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected httpResponseUtil: HttpResponseUtil; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected dialogueHelper: DialogueHelper; + protected profileHelper: ProfileHelper; + protected questHelper: QuestHelper; + protected questConditionHelper: QuestConditionHelper; + protected playerService: PlayerService; + protected localeService: LocaleService; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected questConfig: IQuestConfig; + constructor(logger: ILogger, timeUtil: TimeUtil, httpResponseUtil: HttpResponseUtil, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, itemHelper: ItemHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, questHelper: QuestHelper, questConditionHelper: QuestConditionHelper, playerService: PlayerService, localeService: LocaleService, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Get all quests visible to player + * Exclude quests with incomplete preconditions (level/loyalty) + * @param sessionID session id + * @returns array of IQuest + */ + getClientQuests(sessionID: string): IQuest[]; + /** + * Is the quest for the opposite side the player is on + * @param side player side (usec/bear) + * @param questId questId to check + */ + protected questIsForOtherSide(side: string, questId: string): boolean; + /** + * Handle the client accepting a quest and starting it + * Send starting rewards if any to player and + * Send start notification if any to player + * @param pmcData Profile to update + * @param acceptedQuest Quest accepted + * @param sessionID Session id + * @returns client response + */ + acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Get a quests startedMessageText key from db, if no startedMessageText key found, use description key instead + * @param startedMessageTextId startedMessageText property from IQuest + * @param questDescriptionId description property from IQuest + * @returns message id + */ + protected getMessageIdForQuestStart(startedMessageTextId: string, questDescriptionId: string): string; + /** + * Handle the client accepting a repeatable quest and starting it + * Send starting rewards if any to player and + * Send start notification if any to player + * @param pmcData Profile to update with new quest + * @param acceptedQuest Quest being accepted + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + acceptRepeatableQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Look for an accepted quest inside player profile, return matching + * @param pmcData Profile to search through + * @param acceptedQuest Quest to search for + * @returns IRepeatableQuest + */ + protected getRepeatableQuestFromProfile(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData): IRepeatableQuest; + /** + * Update completed quest in profile + * Add newly unlocked quests to profile + * Also recalculate thier level due to exp rewards + * @param pmcData Player profile + * @param body Completed quest request + * @param sessionID Session id + * @returns ItemEvent client response + */ + completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Send a popup to player on successful completion of a quest + * @param sessionID session id + * @param pmcData Player profile + * @param completedQuestId Completed quest id + * @param questRewards Rewards given to player + */ + protected sendSuccessDialogMessageOnQuestComplete(sessionID: string, pmcData: IPmcData, completedQuestId: string, questRewards: Reward[]): void; + /** + * Look for newly available quests after completing a quest with a requirement to wait x minutes (time-locked) before being available and add data to profile + * @param pmcData Player profile to update + * @param quests Quests to look for wait conditions in + * @param completedQuestId Quest just completed + */ + protected addTimeLockedQuestsToProfile(pmcData: IPmcData, quests: IQuest[], completedQuestId: string): void; + /** + * Returns a list of quests that should be failed when a quest is completed + * @param completedQuestId quest completed id + * @returns array of quests + */ + protected getQuestsFailedByCompletingQuest(completedQuestId: string): IQuest[]; + /** + * Fail the quests provided + * Update quest in profile, otherwise add fresh quest object with failed status + * @param sessionID session id + * @param pmcData player profile + * @param questsToFail quests to fail + */ + protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[]): void; + handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Increment a backend counter stored value by an amount, + * Create counter if it does not exist + * @param pmcData Profile to find backend counter in + * @param conditionId backend counter id to update + * @param questId quest id counter is associated with + * @param counterValue value to increment the backend counter with + */ + protected updateProfileBackendCounterValue(pmcData: IPmcData, conditionId: string, questId: string, counterValue: number): void; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/RagfairController.d.ts b/TypeScript/16ImporterUtil/types/controllers/RagfairController.d.ts new file mode 100644 index 0000000..fffcaa3 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/RagfairController.d.ts @@ -0,0 +1,126 @@ +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 { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { IAddOfferRequestData, Requirement } from "../models/eft/ragfair/IAddOfferRequestData"; +import { IExtendOfferRequestData } from "../models/eft/ragfair/IExtendOfferRequestData"; +import { IGetItemPriceResult } from "../models/eft/ragfair/IGetItemPriceResult"; +import { IGetMarketPriceRequestData } from "../models/eft/ragfair/IGetMarketPriceRequestData"; +import { IGetOffersResult } from "../models/eft/ragfair/IGetOffersResult"; +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RagfairServer } from "../servers/RagfairServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocalisationService } from "../services/LocalisationService"; +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"; +/** + * Handle RagfairCallback events + */ +export declare class RagfairController { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected httpResponse: HttpResponseUtil; + protected eventOutputHolder: EventOutputHolder; + protected ragfairServer: RagfairServer; + protected ragfairPriceService: RagfairPriceService; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected saveServer: SaveServer; + protected ragfairSellHelper: RagfairSellHelper; + protected ragfairTaxHelper: RagfairTaxHelper; + protected ragfairSortHelper: RagfairSortHelper; + protected ragfairOfferHelper: RagfairOfferHelper; + protected profileHelper: ProfileHelper; + protected paymentService: PaymentService; + protected handbookHelper: HandbookHelper; + protected paymentHelper: PaymentHelper; + protected inventoryHelper: InventoryHelper; + protected traderHelper: TraderHelper; + protected ragfairHelper: RagfairHelper; + protected ragfairOfferService: RagfairOfferService; + protected ragfairRequiredItemsService: RagfairRequiredItemsService; + protected ragfairOfferGenerator: RagfairOfferGenerator; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, eventOutputHolder: EventOutputHolder, 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, traderHelper: TraderHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, localisationService: LocalisationService, configServer: ConfigServer); + getOffers(sessionID: string, searchRequest: ISearchRequestData): IGetOffersResult; + /** + * Get offers for the client based on type of search being performed + * @param searchRequest Client search request data + * @param itemsToAdd + * @param traderAssorts Trader assorts + * @param pmcProfile Player profile + * @returns array of offers + */ + protected getOffersForSearchType(searchRequest: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; + /** + * Get categories for the type of search being performed, linked/required/all + * @param searchRequest Client search request data + * @param offers ragfair offers to get categories for + * @returns record with tpls + counts + */ + protected getSpecificCategories(searchRequest: ISearchRequestData, offers: IRagfairOffer[]): Record; + /** + * Add Required offers to offers result + * @param searchRequest Client search request data + * @param assorts + * @param pmcProfile Player profile + * @param result Result object being sent back to client + */ + protected addRequiredOffersToResult(searchRequest: ISearchRequestData, assorts: Record, pmcProfile: IPmcData, result: IGetOffersResult): void; + /** + * Add index to all offers passed in (0-indexed) + * @param offers Offers to add index value to + */ + protected addIndexValueToOffers(offers: IRagfairOffer[]): void; + /** + * Update a trader flea offer with buy restrictions stored in the traders assort + * @param offer flea offer to update + * @param profile full profile of player + */ + protected setTraderOfferPurchaseLimits(offer: IRagfairOffer, profile: IAkiProfile): void; + /** + * Adjust ragfair offer stack count to match same value as traders assort stack count + * @param offer Flea offer to adjust + */ + protected setTraderOfferStackSize(offer: IRagfairOffer): void; + protected isLinkedSearch(info: ISearchRequestData): boolean; + protected isRequiredSearch(info: ISearchRequestData): boolean; + update(): void; + /** + * Called when creating an offer on flea, fills values in top right corner + * @param getPriceRequest + * @returns min/avg/max values for an item based on flea offers available + */ + getItemMinAvgMaxFleaPriceValues(getPriceRequest: IGetMarketPriceRequestData): IGetItemPriceResult; + addPlayerOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse; + createPlayerOffer(profile: IAkiProfile, requirements: Requirement[], items: Item[], sellInOnePiece: boolean, amountToSend: number): IRagfairOffer; + getAllFleaPrices(): Record; + getStaticPrices(): Record; + removeOffer(offerId: string, sessionID: string): IItemEventRouterResponse; + extendOffer(info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/RepairController.d.ts b/TypeScript/16ImporterUtil/types/controllers/RepairController.d.ts new file mode 100644 index 0000000..fd8ff72 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/RepairController.d.ts @@ -0,0 +1,41 @@ +import { QuestHelper } from "../helpers/QuestHelper"; +import { RepairHelper } from "../helpers/RepairHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRepairActionDataRequest } from "../models/eft/repair/IRepairActionDataRequest"; +import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepairActionDataRequest"; +import { IRepairConfig } from "../models/spt/config/IRepairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { PaymentService } from "../services/PaymentService"; +import { RepairService } from "../services/RepairService"; +export declare class RepairController { + protected logger: ILogger; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected traderHelper: TraderHelper; + protected paymentService: PaymentService; + protected repairHelper: RepairHelper; + protected repairService: RepairService; + protected repairConfig: IRepairConfig; + constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, repairService: RepairService); + /** + * Repair with trader + * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile + * @returns item event router action + */ + traderRepair(sessionID: string, body: ITraderRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; + /** + * Repair with repair kit + * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile + * @returns item event router action + */ + repairWithKit(sessionID: string, body: IRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/RepeatableQuestController.d.ts b/TypeScript/16ImporterUtil/types/controllers/RepeatableQuestController.d.ts new file mode 100644 index 0000000..dd8dc40 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/RepeatableQuestController.d.ts @@ -0,0 +1,256 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +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 } from "../models/eft/common/IPmcData"; +import { TraderInfo } from "../models/eft/common/tables/IBotBase"; +import { ICompletion, ICompletionAvailableFor, IElimination, IEliminationCondition, IExploration, IExplorationCondition, IPmcDataRepeatableQuest, IRepeatableQuest, IReward, IRewards } from "../models/eft/common/tables/IRepeatableQuests"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest"; +import { ELocationName } from "../models/enums/ELocationName"; +import { IQuestConfig, IRepeatableQuestConfig } from "../models/spt/config/IQuestConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { LocalisationService } from "../services/LocalisationService"; +import { PaymentService } from "../services/PaymentService"; +import { ProfileFixerService } from "../services/ProfileFixerService"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +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>; +} +export interface IEliminationPool { + targets: IEliminationTargetPool; +} +export interface IEliminationTargetPool { + Savage?: ITargetLocation; + AnyPmc?: ITargetLocation; + bossBully?: ITargetLocation; + bossGluhar?: ITargetLocation; + bossKilla?: ITargetLocation; + bossSanitar?: ITargetLocation; + bossTagilla?: ITargetLocation; + bossKojaniy?: ITargetLocation; +} +export interface ITargetLocation { + locations: string[]; +} +export declare class RepeatableQuestController { + protected timeUtil: TimeUtil; + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected httpResponse: HttpResponseUtil; + protected mathUtil: MathUtil; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected presetHelper: PresetHelper; + protected profileHelper: ProfileHelper; + protected profileFixerService: ProfileFixerService; + protected handbookHelper: HandbookHelper; + protected ragfairServerHelper: RagfairServerHelper; + protected eventOutputHolder: EventOutputHolder; + protected localisationService: LocalisationService; + protected paymentService: PaymentService; + protected objectId: ObjectId; + protected itemFilterService: ItemFilterService; + protected configServer: ConfigServer; + protected questConfig: IQuestConfig; + constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, httpResponse: HttpResponseUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, handbookHelper: HandbookHelper, ragfairServerHelper: RagfairServerHelper, eventOutputHolder: EventOutputHolder, localisationService: LocalisationService, paymentService: PaymentService, objectId: ObjectId, itemFilterService: ItemFilterService, configServer: ConfigServer); + /** + * 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[]; + /** + * Get repeatable quest data from profile from name (daily/weekly), creates base repeatable quest object if none exists + * @param repeatableConfig daily/weekly config + * @param pmcData Profile to search + * @returns IPmcDataRepeatableQuest + */ + protected getRepeatableQuestSubTypeFromProfile(repeatableConfig: IRepeatableQuestConfig, pmcData: IPmcData): 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, 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: number): any; + /** + * Generates the base object of quest type format given as templates in assets/database/templates/repeatableQuests.json + * The templates include Elimination, Completion and Extraction quest types + * + * @param {string} type quest type: "Elimination", "Completion" or "Extraction" + * @param {string} traderId trader from which the quest will be provided + * @param {string} side scav daily or pmc daily/weekly quest + * @returns {object} a object which contains the base elements for repeatable quests of the requests type + * (needs to be filled with reward and conditions by called to make a valid quest) + */ + generateRepeatableTemplate(type: string, traderId: string, side: string): IRepeatableQuest; + /** + * 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; + /** + * Cpnvert a location into an quest code can read (e.g. factory4_day into 55f2d3fd4bdc2d5f408b4567) + * @param locationKey e.g factory4_day + * @returns guid + */ + protected getQuestLocationByMapId(locationKey: string): string; + /** + * 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(configArrayInput: ProbabilityObject[]): ProbabilityObjectArray; + changeRepeatableQuest(pmcData: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse; + /** + * Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable) + * @param repeatableQuestConfig config file + * @returns a list of rewardable items [[_tpl, itemTemplate],...] + */ + protected getRewardableItems(repeatableQuestConfig: IRepeatableQuestConfig): [string, ITemplateItem][]; + /** + * Checks if an id is a valid item. Valid meaning that it's an item that may be a reward + * or content of bot loot. Items that are tested as valid may be in a player backpack or stash. + * @param {string} tpl template id of item to check + * @returns boolean: true if item is valid reward + */ + isValidRewardItem(tpl: string, repeatableQuestConfig: IRepeatableQuestConfig): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/TradeController.d.ts b/TypeScript/16ImporterUtil/types/controllers/TradeController.d.ts new file mode 100644 index 0000000..dc7de19 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/TradeController.d.ts @@ -0,0 +1,31 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { TradeHelper } from "../helpers/TradeHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Upd } from "../models/eft/common/tables/IItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTradeRequestData"; +import { IProcessRagfairTradeRequestData } from "../models/eft/trade/IProcessRagfairTradeRequestData"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RagfairServer } from "../servers/RagfairServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +declare class TradeController { + protected logger: ILogger; + protected eventOutputHolder: EventOutputHolder; + protected tradeHelper: TradeHelper; + protected itemHelper: ItemHelper; + protected profileHelper: ProfileHelper; + protected ragfairServer: RagfairServer; + protected httpResponse: HttpResponseUtil; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, tradeHelper: TradeHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, ragfairServer: RagfairServer, httpResponse: HttpResponseUtil, localisationService: LocalisationService, configServer: ConfigServer); + confirmTrading(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string, foundInRaid?: boolean, upd?: Upd): IItemEventRouterResponse; + confirmRagfairTrading(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse; +} +export { TradeController }; diff --git a/TypeScript/16ImporterUtil/types/controllers/TraderController.d.ts b/TypeScript/16ImporterUtil/types/controllers/TraderController.d.ts new file mode 100644 index 0000000..b67aec9 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/TraderController.d.ts @@ -0,0 +1,48 @@ +import { FenceBaseAssortGenerator } from "../generators/FenceBaseAssortGenerator"; +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 { FenceService } from "../services/FenceService"; +import { TraderAssortService } from "../services/TraderAssortService"; +import { TraderPurchasePersisterService } from "../services/TraderPurchasePersisterService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class TraderController { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected traderAssortHelper: TraderAssortHelper; + protected profileHelper: ProfileHelper; + protected traderHelper: TraderHelper; + protected timeUtil: TimeUtil; + protected traderAssortService: TraderAssortService; + protected traderPurchasePersisterService: TraderPurchasePersisterService; + protected fenceService: FenceService; + protected fenceBaseAssortGenerator: FenceBaseAssortGenerator; + protected jsonUtil: JsonUtil; + constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, traderPurchasePersisterService: TraderPurchasePersisterService, fenceService: FenceService, fenceBaseAssortGenerator: FenceBaseAssortGenerator, jsonUtil: JsonUtil); + /** + * Runs when onLoad event is fired + * Iterate over traders, ensure an unmolested copy of their assorts is stored in traderAssortService + * Store timestamp of next assort refresh in nextResupply property of traders .base object + */ + load(): void; + /** + * Runs when onUpdate is fired + * If current time is > nextResupply(expire) time of trader, refresh traders assorts and + * Fence is handled slightly differently + * @returns has run + */ + update(): boolean; + /** + * Return an array of all traders + * @param sessionID Session id + * @returns array if ITraderBase objects + */ + getAllTraders(sessionID: string): ITraderBase[]; + getTrader(sessionID: string, traderID: string): ITraderBase; + getAssort(sessionId: string, traderId: string): ITraderAssort; + getPurchasesData(sessionID: string, traderID: string): Record; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/WeatherController.d.ts b/TypeScript/16ImporterUtil/types/controllers/WeatherController.d.ts new file mode 100644 index 0000000..631a90c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/WeatherController.d.ts @@ -0,0 +1,18 @@ +import { WeatherGenerator } from "../generators/WeatherGenerator"; +import { IWeatherData } from "../models/eft/weather/IWeatherData"; +import { IWeatherConfig } from "../models/spt/config/IWeatherConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class WeatherController { + protected weatherGenerator: WeatherGenerator; + protected logger: ILogger; + protected configServer: ConfigServer; + protected weatherConfig: IWeatherConfig; + constructor(weatherGenerator: WeatherGenerator, logger: ILogger, configServer: ConfigServer); + generate(): IWeatherData; + /** + * Get the current in-raid time (MUST HAVE PLAYER LOGGED INTO CLIENT TO WORK) + * @returns Date object + */ + getCurrentInRaidTime(): Date; +} diff --git a/TypeScript/16ImporterUtil/types/controllers/WishlistController.d.ts b/TypeScript/16ImporterUtil/types/controllers/WishlistController.d.ts new file mode 100644 index 0000000..60c4a15 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/controllers/WishlistController.d.ts @@ -0,0 +1,10 @@ +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData"; +export declare class WishlistController { + protected eventOutputHolder: EventOutputHolder; + constructor(eventOutputHolder: EventOutputHolder); + addToWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; + removeFromWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/di/Container.d.ts b/TypeScript/16ImporterUtil/types/di/Container.d.ts new file mode 100644 index 0000000..e339a3b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/di/Container.d.ts @@ -0,0 +1,18 @@ +import { DependencyContainer } from "tsyringe"; +/** + * Handle the registration of classes to be used by the Dependency Injection code + */ +export declare class Container { + static registerPostLoadTypes(container: DependencyContainer, childContainer: DependencyContainer): void; + 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; +} diff --git a/TypeScript/16ImporterUtil/types/di/OnLoad.d.ts b/TypeScript/16ImporterUtil/types/di/OnLoad.d.ts new file mode 100644 index 0000000..a5cdea3 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/di/OnLoad.d.ts @@ -0,0 +1,4 @@ +export interface OnLoad { + onLoad(): Promise; + getRoute(): string; +} diff --git a/TypeScript/16ImporterUtil/types/di/OnUpdate.d.ts b/TypeScript/16ImporterUtil/types/di/OnUpdate.d.ts new file mode 100644 index 0000000..e1ce375 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/di/OnUpdate.d.ts @@ -0,0 +1,4 @@ +export interface OnUpdate { + onUpdate(timeSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/16ImporterUtil/types/di/Router.d.ts b/TypeScript/16ImporterUtil/types/di/Router.d.ts new file mode 100644 index 0000000..2fb98e0 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/di/Router.d.ts @@ -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); +} diff --git a/TypeScript/16ImporterUtil/types/di/Serializer.d.ts b/TypeScript/16ImporterUtil/types/di/Serializer.d.ts new file mode 100644 index 0000000..2617007 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/di/Serializer.d.ts @@ -0,0 +1,6 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +export declare class Serializer { + serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void; + canHandle(something: string): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/generators/BotEquipmentModGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/BotEquipmentModGenerator.d.ts new file mode 100644 index 0000000..6703a36 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/BotEquipmentModGenerator.d.ts @@ -0,0 +1,200 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProbabilityHelper } from "../helpers/ProbabilityHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { Mods, ModsChances } from "../models/eft/common/tables/IBotType"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; +import { EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { BotEquipmentModPoolService } from "../services/BotEquipmentModPoolService"; +import { BotModLimits, BotWeaponModLimitService } from "../services/BotWeaponModLimitService"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotEquipmentModGenerator { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected probabilityHelper: ProbabilityHelper; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected botEquipmentFilterService: BotEquipmentFilterService; + protected itemFilterService: ItemFilterService; + protected profileHelper: ProfileHelper; + protected botWeaponModLimitService: BotWeaponModLimitService; + protected botHelper: BotHelper; + protected botGeneratorHelper: BotGeneratorHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected localisationService: LocalisationService; + protected botEquipmentModPoolService: BotEquipmentModPoolService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, itemHelper: ItemHelper, botEquipmentFilterService: BotEquipmentFilterService, itemFilterService: ItemFilterService, profileHelper: ProfileHelper, botWeaponModLimitService: BotWeaponModLimitService, botHelper: BotHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, localisationService: LocalisationService, botEquipmentModPoolService: BotEquipmentModPoolService, configServer: ConfigServer); + /** + * Check mods are compatible and add to array + * @param equipment Equipment item to add mods to + * @param modPool Mod list to choose frm + * @param parentId parentid of item to add mod to + * @param parentTemplate template objet of item to add mods to + * @param modSpawnChances dictionary of mod items and their chance to spawn for this bot type + * @param botRole the bot role being generated for + * @param forceSpawn should this mod be forced to spawn + * @returns Item + compatible mods as an array + */ + generateModsForEquipment(equipment: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances, botRole: string, forceSpawn?: boolean): Item[]; + /** + * Add mods to a weapon using the provided mod pool + * @param sessionId session id + * @param weapon Weapon to add mods to + * @param modPool Pool of compatible mods to attach to weapon + * @param weaponParentId parentId of weapon + * @param parentTemplate Weapon which mods will be generated on + * @param modSpawnChances Mod spawn chances + * @param ammoTpl Ammo tpl to use when generating magazines/cartridges + * @param botRole Role of bot weapon is generated for + * @param botLevel lvel of the bot weapon is being generated for + * @param modLimits limits placed on certian mod types per gun + * @param botEquipmentRole role of bot when accessing bot.json equipment config settings + * @returns Weapon + mods array + */ + generateModsForWeapon(sessionId: string, weapon: Item[], modPool: Mods, weaponParentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances, ammoTpl: string, botRole: string, botLevel: number, modLimits: BotModLimits, botEquipmentRole: string): Item[]; + /** + * Is this modslot a front or rear sight + * @param modSlot Slot to check + * @returns true if it's a front/rear sight + */ + protected modIsFrontOrRearSight(modSlot: string): boolean; + /** + * Does the provided mod details show the mod can hold a scope + * @param modSlot e.g. mod_scope, mod_mount + * @param modsParentId Parent id of mod item + * @returns true if it can hold a scope + */ + protected modSlotCanHoldScope(modSlot: string, modsParentId: string): boolean; + /** + * Set all scope mod chances to 100% + * @param modSpawnChances Chances objet to update + */ + protected setScopeSpawnChancesToFull(modSpawnChances: ModsChances): void; + protected sortModKeys(unsortedKeys: string[]): string[]; + /** + * Get a Slot property for an item (chamber/cartridge/slot) + * @param modSlot e.g patron_in_weapon + * @param parentTemplate item template + * @returns Slot item + */ + protected getModItemSlot(modSlot: string, parentTemplate: ITemplateItem): Slot; + /** + * randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot + * never return true for an item that has 0% spawn chance + * @param itemSlot slot the item sits in + * @param modSlot slot the mod sits in + * @param modSpawnChances Chances for various mod spawns + * @returns boolean true if it should spawn + */ + protected shouldModBeSpawned(itemSlot: Slot, modSlot: string, modSpawnChances: ModsChances): boolean; + /** + * + * @param modSlot Slot mod will fit into + * @param isRandomisableSlot Will generate a randomised mod pool if true + * @param modsParent Parent slot the item will be a part of + * @param botEquipBlacklist Blacklist to prevent mods from being picked + * @param itemModPool Pool of items to pick from + * @param weapon array with only weapon tpl in it, ready for mods to be added + * @param ammoTpl ammo tpl to use if slot requires a cartridge to be added (e.g. mod_magazine) + * @param parentTemplate Parent item the mod will go into + * @returns ITemplateItem + */ + protected chooseModToPutIntoSlot(modSlot: string, isRandomisableSlot: boolean, botWeaponSightWhitelist: Record, botEquipBlacklist: EquipmentFilterDetails, itemModPool: Record, weapon: Item[], ammoTpl: string, parentTemplate: ITemplateItem): [boolean, ITemplateItem]; + /** + * Create a mod item with parameters as properties + * @param modId _id + * @param modTpl _tpl + * @param parentId parentId + * @param modSlot slotId + * @param modTemplate Used to add additional properites in the upd object + * @returns Item object + */ + protected createModItem(modId: string, modTpl: string, parentId: string, modSlot: string, modTemplate: ITemplateItem, botRole: string): Item; + /** + * Get a list of containers that hold ammo + * e.g. mod_magazine / patron_in_weapon_000 + * @returns string array + */ + protected getAmmoContainers(): string[]; + /** + * Get a random mod from an items compatible mods Filter array + * @param modTpl ???? default value to return if nothing found + * @param parentSlot item mod will go into, used to get combatible items + * @param modSlot Slot to get mod to fill + * @param items items to ensure picked mod is compatible with + * @returns item tpl + */ + protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string; + /** + * Log errors if mod is not compatible with slot + * @param modToAdd template of mod to check + * @param itemSlot slot the item will be placed in + * @param modSlot slot the mod will fill + * @param parentTemplate template of the mods parent item + * @returns true if valid + */ + protected isModValidForSlot(modToAdd: [boolean, ITemplateItem], itemSlot: Slot, modSlot: string, parentTemplate: ITemplateItem): boolean; + /** + * Find mod tpls of a provided type and add to modPool + * @param desiredSlotName slot to look up and add we are adding tpls for (e.g mod_scope) + * @param modTemplate db object for modItem we get compatible mods from + * @param modPool Pool of mods we are adding to + */ + protected addCompatibleModsForProvidedMod(desiredSlotName: string, modTemplate: ITemplateItem, modPool: Mods, botEquipBlacklist: EquipmentFilterDetails): void; + /** + * Get the possible items that fit a slot + * @param parentItemId item tpl to get compatible items for + * @param modSlot Slot item should fit in + * @param botEquipBlacklist equipment that should not be picked + * @returns array of compatible items for that slot + */ + protected getDynamicModPool(parentItemId: string, modSlot: string, botEquipBlacklist: EquipmentFilterDetails): string[]; + /** + * Take a list of tpls and filter out blacklisted values using itemFilterService + botEquipmentBlacklist + * @param allowedMods base mods to filter + * @param botEquipBlacklist equipment blacklist + * @param modSlot slot mods belong to + * @returns Filtered array of mod tpls + */ + protected filterWeaponModsByBlacklist(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string): string[]; + /** + * 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 items The items where the CylinderMagazine's camora are appended to + * @param modPool modPool which should include available cartrigdes + * @param parentId The CylinderMagazine's UID + * @param parentTemplate The CylinderMagazine's template + */ + protected fillCamora(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem): void; + /** + * Take a record of camoras and merge the compatable shells into one array + * @param camorasWithShells camoras we want to merge into one array + * @returns string array of shells fro luitple camora sources + */ + protected mergeCamoraPoolsTogether(camorasWithShells: Record): string[]; + /** + * Filter out non-whitelisted weapon scopes + * @param weapon Weapon scopes will be added to + * @param scopes Full scope pool + * @param botWeaponSightWhitelist whitelist of scope types by weapon base type + * @returns array of scope tpls that have been filtered + */ + protected filterSightsByWeaponType(weapon: Item, scopes: string[], botWeaponSightWhitelist: Record): string[]; +} diff --git a/TypeScript/16ImporterUtil/types/generators/BotGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/BotGenerator.d.ts new file mode 100644 index 0000000..9581259 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/BotGenerator.d.ts @@ -0,0 +1,106 @@ +import { BotDifficultyHelper } from "../helpers/BotDifficultyHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { Health as PmcHealth, IBotBase, Info, Skills } from "../models/eft/common/tables/IBotBase"; +import { Health, IBotType } from "../models/eft/common/tables/IBotType"; +import { BotGenerationDetails } from "../models/spt/bots/BotGenerationDetails"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotInventoryGenerator } from "./BotInventoryGenerator"; +import { BotLevelGenerator } from "./BotLevelGenerator"; +export declare class BotGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected profileHelper: ProfileHelper; + protected databaseServer: DatabaseServer; + protected botInventoryGenerator: BotInventoryGenerator; + protected botLevelGenerator: BotLevelGenerator; + protected botEquipmentFilterService: BotEquipmentFilterService; + protected weightedRandomHelper: WeightedRandomHelper; + protected botHelper: BotHelper; + protected botDifficultyHelper: BotDifficultyHelper; + protected seasonalEventService: SeasonalEventService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, configServer: ConfigServer); + /** + * Generate a player scav bot object + * @param role e.g. assault / pmcbot + * @param difficulty easy/normal/hard/impossible + * @param botTemplate base bot template to use (e.g. assault/pmcbot) + * @returns + */ + generatePlayerScav(sessionId: string, role: string, difficulty: string, botTemplate: IBotType): IBotBase; + /** + * Create x number of bots of the type/side/difficulty defined in botGenerationDetails + * @param sessionId Session id + * @param botGenerationDetails details on how to generate bots + * @returns array of bots + */ + prepareAndGenerateBots(sessionId: string, botGenerationDetails: BotGenerationDetails): IBotBase[]; + /** + * Get a clone of the database\bots\base.json file + * @returns IBotBase object + */ + protected getCloneOfBotBase(): IBotBase; + /** + * Create a IBotBase object with equipment/loot/exp etc + * @param sessionId Session id + * @param bot bots base file + * @param botJsonTemplate Bot template from db/bots/x.json + * @param botGenerationDetails details on how to generate the bot + * @returns IBotBase object + */ + protected generateBot(sessionId: string, bot: IBotBase, botJsonTemplate: IBotType, botGenerationDetails: BotGenerationDetails): IBotBase; + /** + * Create a bot nickname + * @param botJsonTemplate x.json from database + * @param isPlayerScav Will bot be player scav + * @param botRole role of bot e.g. assault + * @returns Nickname for bot + */ + protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string): string; + /** + * Log the number of PMCs generated to the debug console + * @param output Generated bot array, ready to send to client + */ + protected logPmcGeneratedCount(output: IBotBase[]): void; + /** + * Converts health object to the required format + * @param healthObj health object from bot json + * @param playerScav Is a pscav bot being generated + * @returns PmcHealth object + */ + protected generateHealth(healthObj: Health, playerScav?: boolean): PmcHealth; + protected generateSkills(skillsObj: Skills): Skills; + /** + * Generate a random Id for a bot and apply to bots _id and aid value + * @param bot bot to update + * @returns updated IBotBase object + */ + protected generateId(bot: IBotBase): IBotBase; + protected generateInventoryID(profile: IBotBase): IBotBase; + /** + * Randomise a bots game version and account category + * Chooses from all the game versions (standard, eod etc) + * Chooses account type (default, Sherpa, etc) + * @param botInfo bot info object to update + */ + protected getRandomisedGameVersionAndCategory(botInfo: Info): void; + /** + * Add a side-specific (usec/bear) dogtag item to a bots inventory + * @param bot bot to add dogtag to + * @returns Bot with dogtag added + */ + protected generateDogtag(bot: IBotBase): IBotBase; +} diff --git a/TypeScript/16ImporterUtil/types/generators/BotInventoryGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/BotInventoryGenerator.d.ts new file mode 100644 index 0000000..83a548b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/BotInventoryGenerator.d.ts @@ -0,0 +1,112 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; +import { Chances, Generation, IBotType, Inventory, Mods } from "../models/eft/common/tables/IBotType"; +import { EquipmentSlots } from "../models/enums/EquipmentSlots"; +import { EquipmentFilterDetails, IBotConfig, RandomisationDetails } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotEquipmentModPoolService } from "../services/BotEquipmentModPoolService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotEquipmentModGenerator } from "./BotEquipmentModGenerator"; +import { BotLootGenerator } from "./BotLootGenerator"; +import { BotWeaponGenerator } from "./BotWeaponGenerator"; +export declare class BotInventoryGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected botWeaponGenerator: BotWeaponGenerator; + protected botLootGenerator: BotLootGenerator; + protected botGeneratorHelper: BotGeneratorHelper; + protected botHelper: BotHelper; + protected weightedRandomHelper: WeightedRandomHelper; + protected localisationService: LocalisationService; + protected botEquipmentModPoolService: BotEquipmentModPoolService; + protected botEquipmentModGenerator: BotEquipmentModGenerator; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, botHelper: BotHelper, weightedRandomHelper: WeightedRandomHelper, localisationService: LocalisationService, botEquipmentModPoolService: BotEquipmentModPoolService, botEquipmentModGenerator: BotEquipmentModGenerator, configServer: ConfigServer); + /** + * Add equipment/weapons/loot to bot + * @param sessionId Session id + * @param botJsonTemplate bot/x.json data from db + * @param botRole Role bot has (assault/pmcBot) + * @param isPmc Is bot being converted into a pmc + * @param botLevel Level of bot being generated + * @returns PmcInventory object with equipment/weapons/loot + */ + generateInventory(sessionId: string, botJsonTemplate: IBotType, botRole: string, isPmc: boolean, botLevel: number): PmcInventory; + /** + * Create a pmcInventory object with all the base/generic items needed + * @returns PmcInventory object + */ + protected generateInventoryBase(): PmcInventory; + /** + * Add equipment to a bot + * @param templateInventory bot/x.json data from db + * @param equipmentChances Chances items will be added to bot + * @param botRole Role bot has (assault/pmcBot) + * @param botInventory Inventory to add equipment to + * @param botLevel Level of bot + */ + protected generateAndAddEquipmentToBot(templateInventory: Inventory, equipmentChances: Chances, botRole: string, botInventory: PmcInventory, botLevel: number): void; + /** + * Add a piece of equipment with mods to inventory from the provided pools + * @param equipmentSlot Slot to select an item for + * @param equipmentPool Possible items to choose from + * @param modPool Possible mods to apply to item chosen + * @param spawnChances Chances items will be chosen to be added + * @param botRole Role of bot e.g. assault + * @param inventory Inventory to add item into + * @param randomisationDetails settings from bot.json to adjust how item is generated + */ + protected generateEquipment(equipmentSlot: string, equipmentPool: Record, modPool: Mods, spawnChances: Chances, botRole: string, inventory: PmcInventory, randomisationDetails: RandomisationDetails): void; + /** + * Get all possible mods for item and filter down based on equipment blacklist from bot.json config + * @param itemTpl Item mod pool is being retreived and filtered + * @param equipmentBlacklist blacklist to filter mod pool with + * @returns Filtered pool of mods + */ + protected getFilteredDynamicModsForItem(itemTpl: string, equipmentBlacklist: EquipmentFilterDetails[]): Record; + /** + * Work out what weapons bot should have equipped and add them to bot inventory + * @param templateInventory bot/x.json data from db + * @param equipmentChances Chances bot can have equipment equipped + * @param sessionId Session id + * @param botInventory Inventory to add weapons to + * @param botRole assault/pmcBot/bossTagilla etc + * @param isPmc Is the bot being generated as a pmc + * @param botLevel level of bot having weapon generated + * @param itemGenerationLimitsMinMax Limits for items the bot can have + */ + protected generateAndAddWeaponsToBot(templateInventory: Inventory, equipmentChances: Chances, sessionId: string, botInventory: PmcInventory, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: Generation, botLevel: number): void; + /** + * Calculate if the bot should have weapons in Primary/Secondary/Holster slots + * @param equipmentChances Chances bot has certain equipment + * @returns What slots bot should have weapons generated for + */ + protected getDesiredWeaponsForBot(equipmentChances: Chances): { + slot: EquipmentSlots; + shouldSpawn: boolean; + }[]; + /** + * Add weapon + spare mags/ammo to bots inventory + * @param sessionId Session id + * @param weaponSlot Weapon slot being generated + * @param templateInventory bot/x.json data from db + * @param botInventory Inventory to add weapon+mags/ammo to + * @param equipmentChances Chances bot can have equipment equipped + * @param botRole assault/pmcBot/bossTagilla etc + * @param isPmc Is the bot being generated as a pmc + * @param itemGenerationLimitsMinMax + */ + protected addWeaponAndMagazinesToInventory(sessionId: string, weaponSlot: { + slot: EquipmentSlots; + shouldSpawn: boolean; + }, templateInventory: Inventory, botInventory: PmcInventory, equipmentChances: Chances, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: Generation, botLevel: number): void; +} diff --git a/TypeScript/16ImporterUtil/types/generators/BotLevelGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/BotLevelGenerator.d.ts new file mode 100644 index 0000000..751e6e6 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/BotLevelGenerator.d.ts @@ -0,0 +1,29 @@ +import { MinMax } from "../models/common/MinMax"; +import { IRandomisedBotLevelResult } from "../models/eft/bot/IRandomisedBotLevelResult"; +import { ExpTable } from "../models/eft/common/IGlobals"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { BotGenerationDetails } from "../models/spt/bots/BotGenerationDetails"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotLevelGenerator { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer); + /** + * Return a randomised bot level and exp value + * @param levelDetails min and max of level for bot + * @param botGenerationDetails Deatils to help generate a bot + * @param bot being level is being generated for + * @returns IRandomisedBotLevelResult object + */ + generateBotLevel(levelDetails: MinMax, botGenerationDetails: BotGenerationDetails, bot: IBotBase): IRandomisedBotLevelResult; + /** + * Get the highest level a bot can be relative to the players level, but no futher than the max size from globals.exp_table + * @param playerLevel Players current level + * @param relativeDeltaMax max delta above player level to go + * @returns highest level possible for bot + */ + protected getHighestRelativeBotLevel(playerLevel: number, relativeDeltaMax: number, levelDetails: MinMax, expTable: ExpTable[]): number; +} diff --git a/TypeScript/16ImporterUtil/types/generators/BotLootGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/BotLootGenerator.d.ts new file mode 100644 index 0000000..6273a11 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/BotLootGenerator.d.ts @@ -0,0 +1,139 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; +import { Chances, Inventory, ItemMinMax, ModsChances } from "../models/eft/common/tables/IBotType"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem, Props } from "../models/eft/common/tables/ITemplateItem"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotLootCacheService } from "../services/BotLootCacheService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotWeaponGenerator } from "./BotWeaponGenerator"; +export declare class BotLootGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected botGeneratorHelper: BotGeneratorHelper; + protected botWeaponGenerator: BotWeaponGenerator; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected botLootCacheService: BotLootCacheService; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botLootCacheService: BotLootCacheService, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Add loot to bots containers + * @param sessionId Session id + * @param templateInventory x.json from database/bots + * @param itemCounts Liits on item types to be added as loot + * @param isPmc Will bot be a pmc + * @param botRole Role of bot, e.g. asssult + * @param botInventory Inventory to add loot to + * @param equipmentChances + * @param botLevel Level of bot + */ + generateLoot(sessionId: string, templateInventory: Inventory, itemCounts: ItemMinMax, isPmc: boolean, botRole: string, botInventory: PmcInventory, equipmentChances: Chances, botLevel: number): void; + protected getRandomisedCount(min: number, max: number, nValue: number): number; + /** + * Take random items from a pool and add to an inventory until totalItemCount or totalValueLimit is reached + * @param pool pool of items to pick from + * @param equipmentSlots What equality slot will the loot items be added to + * @param totalItemCount Max count of items to add + * @param inventoryToAddItemsTo bot inventory loot will be added to + * @param botRole role of the bot loot is being generated for (assault/pmcbot) + * @param useLimits should item limit counts be used as defined in config/bot.json + * @param totalValueLimitRub total value of loot allowed in roubles + * @param isPmc is the bot being generated for a pmc + */ + protected addLootFromPool(pool: ITemplateItem[], equipmentSlots: string[], totalItemCount: number, inventoryToAddItemsTo: PmcInventory, botRole: string, useLimits?: boolean, totalValueLimitRub?: number, isPmc?: boolean): void; + /** + * Add generated weapons to inventory as loot + * @param botInventory inventory to add preset to + * @param equipmentSlot slot to place the preset in (backpack) + * @param templateInventory bots template, assault.json + * @param modChances chances for mods to spawn on weapon + * @param botRole bots role, .e.g. pmcBot + * @param isPmc are we generating for a pmc + */ + protected addLooseWeaponsToInventorySlot(sessionId: string, botInventory: PmcInventory, equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, botRole: string, isPmc: boolean, botLevel: number): void; + /** + * Get a random item from the pool parameter using the biasedRandomNumber system + * @param pool pool of items to pick an item from + * @param isPmc is the bot being created a pmc + * @returns ITemplateItem object + */ + protected getRandomItemFromPool(pool: ITemplateItem[], isPmc: boolean): ITemplateItem; + /** + * Get the loot nvalue from botconfig + * @param isPmc if true the pmc nvalue is returned + * @returns nvalue as number + */ + protected getBotLootNValue(isPmc: boolean): number; + /** + * Update item limit array to contain items that have a limit + * All values are set to 0 + * @param isPmc is the bot a pmc + * @param botRole role the bot has + * @param limitCount + */ + protected initItemLimitArray(isPmc: boolean, botRole: string, limitCount: Record): void; + /** + * Check if an item has reached its bot-specific spawn limit + * @param itemTemplate Item we check to see if its reached spawn limit + * @param botRole Bot type + * @param isPmc Is bot we're working with a pmc + * @param limitCount spawn limits for items on bot + * @param itemSpawnLimits the limits this bot is allowed to have + * @returns true if item has reached spawn limit + */ + protected itemHasReachedSpawnLimit(itemTemplate: ITemplateItem, botRole: string, isPmc: boolean, limitCount: Record, itemSpawnLimits: Record): boolean; + /** + * Is the item an ammo box + * @param props props of the item to check + * @returns true if item is an ammo box + */ + protected isAmmoBox(props: Props): boolean; + /** + * Create an object that contains the ammo stack for an ammo box + * @param parentId ammo box id + * @param props ammo box props + * @returns Item object + */ + protected createAmmoForAmmoBox(parentId: string, props: Props): Item; + /** + * Randomise the stack size of a money object, uses different values for pmc or scavs + * @param isPmc is this a PMC + * @param itemTemplate item details + * @param moneyItem Money stack to randomise + */ + protected randomiseMoneyStackSize(isPmc: boolean, itemTemplate: ITemplateItem, moneyItem: Item): void; + /** + * Randomise the size of an ammo stack + * @param isPmc is this a PMC + * @param itemTemplate item details + * @param ammoItem Ammo stack to randomise + */ + protected randomiseAmmoStackSize(isPmc: boolean, itemTemplate: ITemplateItem, ammoItem: Item): void; + /** + * Get spawn limits for a specific bot type from bot.json config + * If no limit found for a non pmc bot, fall back to defaults + * @param isPmc is the bot we want limits for a pmc + * @param botRole what role does the bot have + * @returns Dictionary of tplIds and limit + */ + protected getItemSpawnLimitsForBotType(isPmc: boolean, botRole: string): Record; + /** + * Get the parentId or tplId of item inside spawnLimits object if it exists + * @param itemTemplate item we want to look for in spawn limits + * @param spawnLimits Limits to check for item + * @returns id as string, otherwise undefined + */ + protected getMatchingIdFromSpawnLimits(itemTemplate: ITemplateItem, spawnLimits: Record): string; +} diff --git a/TypeScript/16ImporterUtil/types/generators/BotWeaponGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/BotWeaponGenerator.d.ts new file mode 100644 index 0000000..a68b82f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/BotWeaponGenerator.d.ts @@ -0,0 +1,170 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { MinMax } from "../models/common/MinMax"; +import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; +import { Inventory, ModsChances } from "../models/eft/common/tables/IBotType"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { GenerateWeaponResult } from "../models/spt/bots/GenerateWeaponResult"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotWeaponModLimitService } from "../services/BotWeaponModLimitService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotEquipmentModGenerator } from "./BotEquipmentModGenerator"; +import { IInventoryMagGen } from "./weapongen/IInventoryMagGen"; +export declare class BotWeaponGenerator { + protected jsonUtil: JsonUtil; + protected logger: ILogger; + protected hashUtil: HashUtil; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected weightedRandomHelper: WeightedRandomHelper; + protected botGeneratorHelper: BotGeneratorHelper; + protected randomUtil: RandomUtil; + protected configServer: ConfigServer; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected botWeaponModLimitService: BotWeaponModLimitService; + protected botEquipmentModGenerator: BotEquipmentModGenerator; + protected localisationService: LocalisationService; + protected inventoryMagGenComponents: IInventoryMagGen[]; + protected readonly modMagazineSlotId = "mod_magazine"; + protected botConfig: IBotConfig; + constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botWeaponModLimitService: BotWeaponModLimitService, botEquipmentModGenerator: BotEquipmentModGenerator, localisationService: LocalisationService, inventoryMagGenComponents: IInventoryMagGen[]); + /** + * Pick a random weapon based on weightings and generate a functional weapon + * @param equipmentSlot Primary/secondary/holster + * @param botTemplateInventory e.g. assault.json + * @param weaponParentId + * @param modChances + * @param botRole role of bot, e.g. assault/followerBully + * @param isPmc Is weapon generated for a pmc + * @returns GenerateWeaponResult object + */ + generateRandomWeapon(sessionId: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean, botLevel: number): GenerateWeaponResult; + /** + * Get a random weighted weapon from a bots pool of weapons + * @param equipmentSlot Primary/secondary/holster + * @param botTemplateInventory e.g. assault.json + * @returns weapon tpl + */ + pickWeightedWeaponTplFromPool(equipmentSlot: string, botTemplateInventory: Inventory): string; + /** + * Generated a weapon based on the supplied weapon tpl + * @param weaponTpl weapon tpl to generate (use pickWeightedWeaponTplFromPool()) + * @param equipmentSlot slot to fit into, primary/secondary/holster + * @param botTemplateInventory e.g. assault.json + * @param weaponParentId ParentId of the weapon being generated + * @param modChances Dictionary of item types and % chance weapon will have that mod + * @param botRole e.g. assault/exusec + * @param isPmc + * @returns GenerateWeaponResult object + */ + generateWeaponByTpl(sessionId: string, weaponTpl: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean, botLevel: number): GenerateWeaponResult; + /** + * Create array with weapon base as only element and + * add additional properties based on weapon type + * @param weaponTpl Weapon tpl to create item with + * @param weaponParentId Weapons parent id + * @param equipmentSlot e.g. primary/secondary/holster + * @param weaponItemTemplate db template for weapon + * @param botRole for durability values + * @returns Base weapon item in array + */ + protected constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; + /** + * Get the mods necessary to kit out a weapon to its preset level + * @param weaponTpl weapon to find preset for + * @param equipmentSlot the slot the weapon will be placed in + * @param weaponParentId Value used for the parentid + * @returns array of weapon mods + */ + protected getPresetWeaponMods(weaponTpl: string, equipmentSlot: string, weaponParentId: string, itemTemplate: ITemplateItem, botRole: string): Item[]; + /** + * Checks if all required slots are occupied on a weapon and all it's mods + * @param weaponItemArray Weapon + mods + * @param botRole role of bot weapon is for + * @returns true if valid + */ + protected isWeaponValid(weaponItemArray: Item[], botRole: string): boolean; + /** + * Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets. + * Additionally, adds extra bullets to SecuredContainer + * @param generatedWeaponResult object with properties for generated weapon (weapon mods pool / weapon template / ammo tpl) + * @param magCounts Magazine count to add to inventory + * @param inventory Inventory to add magazines to + * @param botRole The bot type we're getting generating extra mags for + */ + addExtraMagazinesToInventory(generatedWeaponResult: GenerateWeaponResult, magCounts: MinMax, inventory: PmcInventory, botRole: string): void; + /** + * Add Grendaes for UBGL to bots vest and secure container + * @param weaponMods Weapon array with mods + * @param generatedWeaponResult result of weapon generation + * @param inventory bot inventory to add grenades to + */ + protected addUbglGrenadesToBotInventory(weaponMods: Item[], generatedWeaponResult: GenerateWeaponResult, inventory: PmcInventory): void; + /** + * Add ammo to the secure container + * @param stackCount How many stacks of ammo to add + * @param ammoTpl Ammo type to add + * @param stackSize Size of the ammo stack to add + * @param inventory Player inventory + */ + protected addAmmoToSecureContainer(stackCount: number, ammoTpl: string, stackSize: number, inventory: PmcInventory): void; + /** + * Get a weapons magazine tpl from a weapon template + * @param weaponMods mods from a weapon template + * @param weaponTemplate Weapon to get magazine tpl for + * @param botRole the bot type we are getting the magazine for + * @returns magazine tpl string + */ + protected getMagazineTplFromWeaponTemplate(weaponMods: Item[], weaponTemplate: ITemplateItem, botRole: string): string; + /** + * Finds and return a compatible ammo tpl based on the bots ammo weightings (x.json/inventory/equipment/ammo) + * @param ammo a list of ammo tpls the weapon can use + * @param weaponTemplate the weapon we want to pick ammo for + * @returns an ammo tpl that works with the desired gun + */ + protected getWeightedCompatibleAmmo(ammo: Record>, weaponTemplate: ITemplateItem): string; + /** + * Get a weapons compatible cartridge caliber + * @param weaponTemplate Weapon to look up caliber of + * @returns caliber as string + */ + protected getWeaponCaliber(weaponTemplate: ITemplateItem): string; + /** + * Fill existing magazines to full, while replacing their contents with specified ammo + * @param weaponMods + * @param magazine + * @param ammoTpl + */ + protected fillExistingMagazines(weaponMods: Item[], magazine: Item, ammoTpl: string): void; + /** + * Add desired ammo tpl as item to weaponmods array, placed as child to UBGL + * @param weaponMods + * @param ubglMod + * @param ubglAmmoTpl + */ + protected fillUbgl(weaponMods: Item[], ubglMod: Item, ubglAmmoTpl: string): void; + /** + * Add cartridge item to weapon Item array, if it already exists, update + * @param weaponMods Weapon items array to amend + * @param magazine magazine item details we're adding cartridges to + * @param chosenAmmo cartridge to put into the magazine + * @param newStackSize how many cartridges should go into the magazine + */ + protected addOrUpdateMagazinesChildWithAmmo(weaponMods: Item[], magazine: Item, chosenAmmo: string, newStackSize: number): void; + /** + * Fill each Camora with a bullet + * @param weaponMods Weapon mods to find and update camora mod(s) from + * @param magazineId magazine id to find and add to + * @param ammoTpl ammo template id to hydate with + */ + protected fillCamorasWithAmmo(weaponMods: Item[], magazineId: string, ammoTpl: string): void; +} diff --git a/TypeScript/16ImporterUtil/types/generators/FenceBaseAssortGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/FenceBaseAssortGenerator.d.ts new file mode 100644 index 0000000..387df3a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/FenceBaseAssortGenerator.d.ts @@ -0,0 +1,28 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +export declare class FenceBaseAssortGenerator { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected itemHelper: ItemHelper; + protected itemFilterService: ItemFilterService; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, itemFilterService: ItemFilterService, configServer: ConfigServer); + /** + * Create base fence assorts dynamically and store in db + */ + generateFenceBaseAssorts(): void; + /** + * Check if item is valid for being added to fence assorts + * @param item Item to check + * @returns true if valid fence item + */ + protected isValidFenceItem(item: ITemplateItem): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/generators/LocationGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/LocationGenerator.d.ts new file mode 100644 index 0000000..a617048 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/LocationGenerator.d.ts @@ -0,0 +1,56 @@ +import { ContainerHelper } from "../helpers/ContainerHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { RagfairServerHelper } from "../helpers/RagfairServerHelper"; +import { ILooseLoot, SpawnpointsForced, 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 { ILocationConfig } from "../models/spt/config/ILocationConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { MathUtil } from "../utils/MathUtil"; +import { ObjectId } from "../utils/ObjectId"; +import { RandomUtil } from "../utils/RandomUtil"; +export interface IContainerItem { + items: Item[]; + width: number; + height: number; +} +export declare class LocationGenerator { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected objectId: ObjectId; + protected randomUtil: RandomUtil; + protected ragfairServerHelper: RagfairServerHelper; + protected itemHelper: ItemHelper; + protected mathUtil: MathUtil; + protected seasonalEventService: SeasonalEventService; + protected containerHelper: ContainerHelper; + protected presetHelper: PresetHelper; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected locationConfig: ILocationConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, objectId: ObjectId, randomUtil: RandomUtil, ragfairServerHelper: RagfairServerHelper, itemHelper: ItemHelper, mathUtil: MathUtil, seasonalEventService: SeasonalEventService, containerHelper: ContainerHelper, presetHelper: PresetHelper, localisationService: LocalisationService, configServer: ConfigServer); + generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record, staticAmmoDist: Record, locationName: string): IStaticContainerProps; + protected getLooseLootMultiplerForLocation(location: string): number; + protected getStaticLootMultiplerForLocation(location: string): number; + /** + * Create array of loose + forced loot using probability system + * @param dynamicLootDist + * @param staticAmmoDist + * @param locationName Location to generate loot for + * @returns Array of spawn points with loot in them + */ + generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record, locationName: string): SpawnpointTemplate[]; + /** + * Add forced spawn point loot into loot parameter array + * @param loot array to add forced loot to + * @param forcedSpawnPoints forced loot to add + * @param name of map currently generating forced loot for + */ + protected addForcedLoot(loot: SpawnpointTemplate[], forcedSpawnPoints: SpawnpointsForced[], locationName: string): void; + protected createItem(tpl: string, staticAmmoDist: Record, parentId?: string): IContainerItem; +} diff --git a/TypeScript/16ImporterUtil/types/generators/LootGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/LootGenerator.d.ts new file mode 100644 index 0000000..0d2ef24 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/LootGenerator.d.ts @@ -0,0 +1,67 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { LootItem } from "../models/spt/services/LootItem"; +import { LootRequest } from "../models/spt/services/LootRequest"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class LootGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected itemHelper: ItemHelper; + protected localisationService: LocalisationService; + protected itemFilterService: ItemFilterService; + constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, itemHelper: ItemHelper, localisationService: LocalisationService, itemFilterService: ItemFilterService); + /** + * Generate a list of items based on configuration options parameter + * @param options parameters to adjust how loot is generated + * @returns An array of loot items + */ + createRandomloot(options: LootRequest): LootItem[]; + /** + * Construct item limit record to hold max and current item count + * @param limits limits as defined in config + * @returns record, key: item tplId, value: current/max item count allowed + */ + protected initItemLimitCounter(limits: Record): Record; + /** + * Find a random item in items.json and add to result array + * @param items items to choose from + * @param itemTypeCounts item limit counts + * @param options item filters + * @param result array to add found item to + * @returns true if item was valid and added to pool + */ + protected findAndAddRandomItemToLoot(items: [string, ITemplateItem][], itemTypeCounts: Record, options: LootRequest, result: LootItem[]): boolean; + /** + * Get a randomised stack count for an item between its StackMinRandom and StackMaxSize values + * @param item item to get stack count of + * @param options loot options + * @returns stack count + */ + protected getRandomisedStackCount(item: ITemplateItem, options: LootRequest): number; + /** + * Find a random item in items.json and add to result array + * @param globalDefaultPresets presets to choose from + * @param itemTypeCounts item limit counts + * @param itemBlacklist items to skip + * @param result array to add found preset to + * @returns true if preset was valid and added to pool + */ + protected findAndAddRandomPresetToLoot(globalDefaultPresets: [string, Preset][], itemTypeCounts: Record, itemBlacklist: string[], result: LootItem[]): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/generators/PMCLootGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/PMCLootGenerator.d.ts new file mode 100644 index 0000000..10918e3 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/PMCLootGenerator.d.ts @@ -0,0 +1,31 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +/** + * Handle the generation of dynamic PMC loot in pockets and backpacks + * and the removal of blacklisted items + */ +export declare class PMCLootGenerator { + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected itemFilterService: ItemFilterService; + protected seasonalEventService: SeasonalEventService; + protected pocketLootPool: string[]; + protected backpackLootPool: string[]; + protected botConfig: IBotConfig; + constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, seasonalEventService: SeasonalEventService); + /** + * Create an array of loot items a PMC can have in their pockets + * @returns string array of tpls + */ + generatePMCPocketLootPool(): string[]; + /** + * Create an array of loot items a PMC can have in their backpack + * @returns string array of tpls + */ + generatePMCBackpackLootPool(): string[]; +} diff --git a/TypeScript/16ImporterUtil/types/generators/PlayerScavGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/PlayerScavGenerator.d.ts new file mode 100644 index 0000000..3641268 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/PlayerScavGenerator.d.ts @@ -0,0 +1,79 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Skills, Stats } from "../models/eft/common/tables/IBotBase"; +import { IBotType } from "../models/eft/common/tables/IBotType"; +import { IPlayerScavConfig, KarmaLevel } from "../models/spt/config/IPlayerScavConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { BotLootCacheService } from "../services/BotLootCacheService"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotGenerator } from "./BotGenerator"; +export declare class PlayerScavGenerator { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected hashUtil: HashUtil; + protected itemHelper: ItemHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected botGeneratorHelper: BotGeneratorHelper; + protected saveServer: SaveServer; + protected profileHelper: ProfileHelper; + protected botHelper: BotHelper; + protected jsonUtil: JsonUtil; + protected fenceService: FenceService; + protected botLootCacheService: BotLootCacheService; + protected localisationService: LocalisationService; + protected botGenerator: BotGenerator; + protected configServer: ConfigServer; + protected playerScavConfig: IPlayerScavConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer, hashUtil: HashUtil, itemHelper: ItemHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botGeneratorHelper: BotGeneratorHelper, saveServer: SaveServer, profileHelper: ProfileHelper, botHelper: BotHelper, jsonUtil: JsonUtil, fenceService: FenceService, botLootCacheService: BotLootCacheService, localisationService: LocalisationService, botGenerator: BotGenerator, configServer: ConfigServer); + /** + * Update a player profile to include a new player scav profile + * @param sessionID session id to specify what profile is updated + * @returns profile object + */ + generate(sessionID: string): IPmcData; + /** + * Get the scav karama level for a profile + * Is also the fence trader rep level + * @param pmcData pmc profile + * @returns karma level + */ + protected getScavKarmaLevel(pmcData: IPmcData): number; + /** + * Get a baseBot template + * If the parameter doesnt match "assault", take parts from the loot type and apply to the return bot template + * @param botTypeForLoot bot type to use for inventory/chances + * @returns IBotType object + */ + protected constructBotBaseTemplate(botTypeForLoot: string): IBotType; + /** + * Adjust equipment/mod/item generation values based on scav karma levels + * @param karmaSettings Values to modify the bot template with + * @param baseBotNode bot template to modify according to karama level settings + */ + protected adjustBotTemplateWithKarmaSpecificSettings(karmaSettings: KarmaLevel, baseBotNode: IBotType): void; + protected getScavSkills(scavProfile: IPmcData): Skills; + protected getDefaultScavSkills(): Skills; + protected getScavStats(scavProfile: IPmcData): Stats; + protected getScavLevel(scavProfile: IPmcData): number; + protected getScavExperience(scavProfile: IPmcData): number; + /** + * Set cooldown till pscav is playable + * take into account scav cooldown bonus + * @param scavData scav profile + * @param pmcData pmc profile + * @returns + */ + protected setScavCooldownTimer(scavData: IPmcData, pmcData: IPmcData): IPmcData; +} diff --git a/TypeScript/16ImporterUtil/types/generators/RagfairAssortGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/RagfairAssortGenerator.d.ts new file mode 100644 index 0000000..630e863 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/RagfairAssortGenerator.d.ts @@ -0,0 +1,52 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class RagfairAssortGenerator { + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected seasonalEventService: SeasonalEventService; + protected configServer: ConfigServer; + protected generatedAssortItems: Item[]; + protected ragfairConfig: IRagfairConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, seasonalEventService: SeasonalEventService, configServer: ConfigServer); + /** + * Get an array of unique items that can be sold on the flea + * @returns array of unique items + */ + getAssortItems(): Item[]; + /** + * Check internal generatedAssortItems array has objects + * @returns true if array has objects + */ + protected assortsAreGenerated(): boolean; + /** + * Generate an array of items the flea can sell + * @returns array of unique items + */ + protected generateRagfairAssortItems(): Item[]; + /** + * Get presets from globals.json + * @returns Preset object array + */ + protected getPresets(): Preset[]; + /** + * Get default presets from globals.json + * @returns Preset object array + */ + protected getDefaultPresets(): Preset[]; + /** + * Create a base assort item and return it with populated values + 999999 stack count + unlimited count = true + * @param tplId tplid to add to item + * @param id id to add to item + * @returns hydrated Item object + */ + protected createRagfairAssortItem(tplId: string, id?: string): Item; +} diff --git a/TypeScript/16ImporterUtil/types/generators/RagfairOfferGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/RagfairOfferGenerator.d.ts new file mode 100644 index 0000000..35fceff --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/RagfairOfferGenerator.d.ts @@ -0,0 +1,174 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { RagfairServerHelper } from "../helpers/RagfairServerHelper"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IBarterScheme } from "../models/eft/common/tables/ITrader"; +import { IRagfairOffer, OfferRequirement } from "../models/eft/ragfair/IRagfairOffer"; +import { Dynamic, IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { RagfairCategoriesService } from "../services/RagfairCategoriesService"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { RagfairPriceService } from "../services/RagfairPriceService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { RagfairAssortGenerator } from "./RagfairAssortGenerator"; +export declare class RagfairOfferGenerator { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected ragfairServerHelper: RagfairServerHelper; + protected handbookHelper: HandbookHelper; + protected saveServer: SaveServer; + protected presetHelper: PresetHelper; + protected ragfairAssortGenerator: RagfairAssortGenerator; + protected ragfairOfferService: RagfairOfferService; + protected ragfairPriceService: RagfairPriceService; + protected localisationService: LocalisationService; + protected paymentHelper: PaymentHelper; + protected ragfairCategoriesService: RagfairCategoriesService; + protected fenceService: FenceService; + protected itemHelper: ItemHelper; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + protected allowedFleaPriceItemsForBarter: { + tpl: string; + price: number; + }[]; + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, ragfairServerHelper: RagfairServerHelper, handbookHelper: HandbookHelper, saveServer: SaveServer, presetHelper: PresetHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferService: RagfairOfferService, ragfairPriceService: RagfairPriceService, localisationService: LocalisationService, paymentHelper: PaymentHelper, ragfairCategoriesService: RagfairCategoriesService, fenceService: FenceService, itemHelper: ItemHelper, configServer: ConfigServer); + createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer; + /** + * Calculate the offer price that's listed on the flea listing + * @param offerRequirements barter requirements for offer + * @returns rouble cost of offer + */ + protected calculateOfferListingPrice(offerRequirements: OfferRequirement[]): number; + /** + * Get avatar url from trader table in db + * @param isTrader Is user we're getting avatar for a trader + * @param userId persons id to get avatar of + * @returns url of avatar + */ + protected getAvatarUrl(isTrader: boolean, userId: string): string; + /** + * Convert a count of currency into roubles + * @param currencyCount amount of currency to convert into roubles + * @param currencyType Type of currency (euro/dollar/rouble) + * @returns count of roubles + */ + protected calculateRoublePrice(currencyCount: number, currencyType: string): number; + protected getTraderId(userID: string): string; + protected getRating(userID: string): number; + /** + * Is the offers user rating growing + * @param userID user to check rating of + * @returns true if its growing + */ + protected getRatingGrowing(userID: string): boolean; + /** + * Get number of section until offer should expire + * @param userID Id of the offer owner + * @param time Time the offer is posted + * @returns number of seconds until offer expires + */ + protected getOfferEndTime(userID: string, time: number): number; + /** + * Create multiple offers for items by using a unique list of items we've generated previously + * @param expiredOffers optional, expired offers to regenerate + */ + generateDynamicOffers(expiredOffers?: Item[]): Promise; + protected createOffersForItems(assortItemIndex: string, assortItemsToProcess: Item[], expiredOffers: Item[], config: Dynamic): Promise; + /** + * Create one flea offer for a specific item + * @param items Item to create offer for + * @param isPreset Is item a weapon preset + * @param itemDetails raw db item details + * @returns + */ + protected createSingleOfferForItem(items: Item[], isPreset: boolean, itemDetails: [boolean, ITemplateItem]): Promise; + /** + * Generate trader offers on flea using the traders assort data + * @param traderID Trader to generate offers for + */ + generateFleaOffersForTrader(traderID: string): void; + /** + * Get array of an item with its mods + condition properties (e.g durability) + * Apply randomisation adjustments to condition if item base is found in ragfair.json/dynamic/condition + * @param userID id of owner of item + * @param itemWithMods Item and mods, get condition of first item (only first array item is used) + * @param itemDetails db details of first item + * @returns + */ + protected getItemCondition(userID: string, itemWithMods: Item[], itemDetails: ITemplateItem): Item[]; + /** + * Get the relevant condition id if item tpl matches in ragfair.json/condition + * @param tpl Item to look for matching condition object + * @returns condition id + */ + protected getDynamicConditionIdForTpl(tpl: string): string; + /** + * Alter an items condition based on its item base type + * @param conditionSettingsId also the parentId of item being altered + * @param item Item to adjust condition details of + * @param itemDetails db item details of first item in array + */ + protected randomiseItemCondition(conditionSettingsId: string, item: Item, itemDetails: ITemplateItem): void; + /** + * Adjust an items durability/maxDurability value + * @param item item (weapon/armor) to adjust + * @param multiplier Value to multiple durability by + */ + protected randomiseDurabilityValues(item: Item, multiplier: number): void; + /** + * Add missing conditions to an item if needed + * Durabiltiy for repairable items + * HpResource for medical items + * @param item item to add conditions to + * @returns Item with conditions added + */ + protected addMissingConditions(item: Item): Item; + /** + * Create a barter-based barter scheme, if not possible, fall back to making barter scheme currency based + * @param offerItems Items for sale in offer + * @returns barter scheme + */ + protected createBarterRequirement(offerItems: Item[]): IBarterScheme[]; + /** + * Get an array of flea prices + item tpl, cached in generator class inside `allowedFleaPriceItemsForBarter` + * @returns array with tpl/price values + */ + protected getFleaPricesAsArray(): { + tpl: string; + price: number; + }[]; + /** + * Create a random currency-based barter scheme for an array of items + * @param offerItems Items on offer + * @returns Barter scheme for offer + */ + protected createCurrencyRequirement(offerItems: Item[]): IBarterScheme[]; + /** + * Create a flea offer and store it in the Ragfair server offers array + * @param userID owner of the offer + * @param time time offer is put up + * @param items items in the offer + * @param barterScheme cost of item (currency or barter) + * @param loyalLevel Loyalty level needed to buy item + * @param price price of offer + * @param sellInOnePiece + * @returns Ragfair offer + */ + createFleaOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer; +} diff --git a/TypeScript/16ImporterUtil/types/generators/ScavCaseRewardGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/ScavCaseRewardGenerator.d.ts new file mode 100644 index 0000000..394eeb0 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/ScavCaseRewardGenerator.d.ts @@ -0,0 +1,103 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Product } from "../models/eft/common/tables/IBotBase"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase"; +import { IScavCaseConfig } from "../models/spt/config/IScavCaseConfig"; +import { RewardCountAndPriceDetails, ScavCaseRewardCountsAndPrices } from "../models/spt/hideout/ScavCaseRewardCountsAndPrices"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { RagfairPriceService } from "../services/RagfairPriceService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +/** + * Handle the creation of randomised scav case rewards + */ +export declare class ScavCaseRewardGenerator { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected ragfairPriceService: RagfairPriceService; + protected itemFilterService: ItemFilterService; + protected configServer: ConfigServer; + protected scavCaseConfig: IScavCaseConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, itemFilterService: ItemFilterService, configServer: ConfigServer); + /** + * Create an array of rewards that will be given to the player upon completing their scav case build + * @param recipeId recipe of the scav case craft + * @returns Product array + */ + generate(recipeId: string): Product[]; + /** + * Get all db items that are not blacklisted in scavcase config + * @returns filtered array of db items + */ + protected getDbItems(): ITemplateItem[]; + /** + * Pick a number of items to be rewards, the count is defined by the values in + * @param items item pool to pick rewards from + * @param itemFilters how the rewards should be filtered down (by item count) + * @returns + */ + protected pickRandomRewards(items: ITemplateItem[], itemFilters: RewardCountAndPriceDetails, rarity: string): ITemplateItem[]; + /** + * Choose if money should be a reward based on the moneyRewardChancePercent config chance in scavCaseConfig + * @returns true if reward should be money + */ + protected rewardShouldBeMoney(): boolean; + /** + * Choose if ammo should be a reward based on the ammoRewardChancePercent config chance in scavCaseConfig + * @returns true if reward should be ammo + */ + protected rewardShouldBeAmmo(): boolean; + /** + * Choose from rouble/dollar/euro at random + */ + protected getRandomMoney(): ITemplateItem; + /** + * Get a random ammo from items.json that is not in the ammo blacklist AND inside the price rage defined in scavcase.json config + * @param rarity The rarity this ammo reward is for + * @returns random ammo item from items.json + */ + protected getRandomAmmo(rarity: string): ITemplateItem; + /** + * Take all the rewards picked create the Product object array ready to return to calling code + * Also add a stack count to ammo and money + * @param rewardItems items to convert + * @returns Product array + */ + protected randomiseContainerItemRewards(rewardItems: ITemplateItem[], rarity: string): Product[]; + /** + * Add a randomised stack count to ammo or money items + * @param item money or ammo item + * @param resultItem money or ammo item with a randomise stack size + */ + protected addStackCountToAmmoAndMoney(item: ITemplateItem, resultItem: { + _id: string; + _tpl: string; + upd: any; + }, rarity: string): void; + /** + * + * @param dbItems all items from the items.json + * @param itemFilters controls how the dbItems will be filtered and returned (handbook price) + * @returns filtered dbItems array + */ + protected getFilteredItemsByPrice(dbItems: ITemplateItem[], itemFilters: RewardCountAndPriceDetails): ITemplateItem[]; + /** + * Gathers the reward options from config and scavcase.json into a single object + * @param scavCaseDetails scavcase.json values + * @returns ScavCaseRewardCountsAndPrices object + */ + protected getScavCaseRewardCountsAndPrices(scavCaseDetails: IHideoutScavCase): ScavCaseRewardCountsAndPrices; + /** + * Randomises the size of ammo and money stacks + * @param itemToCalculate ammo or money item + * @param rarity rarity (common/rare/superrare) + * @returns value to set stack count to + */ + protected getRandomAmountRewardForScavCase(itemToCalculate: ITemplateItem, rarity: string): number; +} diff --git a/TypeScript/16ImporterUtil/types/generators/WeatherGenerator.d.ts b/TypeScript/16ImporterUtil/types/generators/WeatherGenerator.d.ts new file mode 100644 index 0000000..65d2c76 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/WeatherGenerator.d.ts @@ -0,0 +1,54 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { IWeather, IWeatherData } from "../models/eft/weather/IWeatherData"; +import { WindDirection } from "../models/enums/WindDirection"; +import { IWeatherConfig } from "../models/spt/config/IWeatherConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class WeatherGenerator { + protected weightedRandomHelper: WeightedRandomHelper; + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected timeUtil: TimeUtil; + protected applicationContext: ApplicationContext; + protected configServer: ConfigServer; + protected weatherConfig: IWeatherConfig; + constructor(weightedRandomHelper: WeightedRandomHelper, logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, applicationContext: ApplicationContext, configServer: ConfigServer); + calculateGameTime(data: IWeatherData): IWeatherData; + /** + * Get server uptime seconds multiplied by a multiplier and add to current time as seconds + * Format to BSGs requirements + * @param currentDate current date + * @returns formatted time + */ + protected getBsgFormattedInRaidTime(currentDate: Date): string; + /** + * Get the current in-raid time + * @param currentDate (new Date()) + * @returns Date object of current in-raid time + */ + getInRaidTime(currentDate: Date): Date; + /** + * Get current time formatted to fit BSGs requirement + * @param date date to format into bsg style + * @returns + */ + protected getBSGFormattedTime(date: Date): string; + /** + * Return randomised Weather data with help of config/weather.json + * @returns Randomised weather data + */ + generateWeather(): IWeather; + /** + * Set IWeather date/time/timestamp values to now + * @param weather Object to update + */ + protected setCurrentDateTime(weather: IWeather): void; + protected getWeightedWindDirection(): WindDirection; + protected getWeightedWindSpeed(): number; + protected getWeightedFog(): number; + protected getWeightedRain(): number; + protected getRandomFloat(node: string): number; +} diff --git a/TypeScript/16ImporterUtil/types/generators/weapongen/IInventoryMagGen.d.ts b/TypeScript/16ImporterUtil/types/generators/weapongen/IInventoryMagGen.d.ts new file mode 100644 index 0000000..792f510 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/weapongen/IInventoryMagGen.d.ts @@ -0,0 +1,6 @@ +import { InventoryMagGen } from "./InventoryMagGen"; +export interface IInventoryMagGen { + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/16ImporterUtil/types/generators/weapongen/InventoryMagGen.d.ts b/TypeScript/16ImporterUtil/types/generators/weapongen/InventoryMagGen.d.ts new file mode 100644 index 0000000..30bf79f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/weapongen/InventoryMagGen.d.ts @@ -0,0 +1,16 @@ +import { MinMax } from "../../models/common/MinMax"; +import { Inventory } from "../../models/eft/common/tables/IBotBase"; +import { ITemplateItem } from "../../models/eft/common/tables/ITemplateItem"; +export declare class InventoryMagGen { + private magCounts; + private magazineTemplate; + private weaponTemplate; + private ammoTemplate; + private pmcInventory; + constructor(magCounts: MinMax, magazineTemplate: ITemplateItem, weaponTemplate: ITemplateItem, ammoTemplate: ITemplateItem, pmcInventory: Inventory); + getMagCount(): MinMax; + getMagazineTemplate(): ITemplateItem; + getWeaponTemplate(): ITemplateItem; + getAmmoTemplate(): ITemplateItem; + getPmcInventory(): Inventory; +} diff --git a/TypeScript/16ImporterUtil/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts b/TypeScript/16ImporterUtil/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts new file mode 100644 index 0000000..b754d5f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts @@ -0,0 +1,12 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { RandomUtil } from "../../../utils/RandomUtil"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class BarrelInventoryMagGen implements IInventoryMagGen { + protected randomUtil: RandomUtil; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(randomUtil: RandomUtil, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/16ImporterUtil/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts b/TypeScript/16ImporterUtil/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts new file mode 100644 index 0000000..1589707 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts @@ -0,0 +1,16 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../../../helpers/ItemHelper"; +import { ILogger } from "../../../models/spt/utils/ILogger"; +import { LocalisationService } from "../../../services/LocalisationService"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class ExternalInventoryMagGen implements IInventoryMagGen { + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected localisationService: LocalisationService; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(logger: ILogger, itemHelper: ItemHelper, localisationService: LocalisationService, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/16ImporterUtil/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts b/TypeScript/16ImporterUtil/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts new file mode 100644 index 0000000..4548a04 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts @@ -0,0 +1,10 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class InternalMagazineInventoryMagGen implements IInventoryMagGen { + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/16ImporterUtil/types/generators/weapongen/implementations/UbglExternalMagGen.d.ts b/TypeScript/16ImporterUtil/types/generators/weapongen/implementations/UbglExternalMagGen.d.ts new file mode 100644 index 0000000..75395be --- /dev/null +++ b/TypeScript/16ImporterUtil/types/generators/weapongen/implementations/UbglExternalMagGen.d.ts @@ -0,0 +1,10 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class UbglExternalMagGen implements IInventoryMagGen { + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/AssortHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/AssortHelper.d.ts new file mode 100644 index 0000000..13512b2 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/AssortHelper.d.ts @@ -0,0 +1,39 @@ +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 { LocalisationService } from "../services/LocalisationService"; +import { ItemHelper } from "./ItemHelper"; +import { QuestHelper } from "./QuestHelper"; +export declare class AssortHelper { + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected localisationService: LocalisationService; + protected questHelper: QuestHelper; + constructor(logger: ILogger, itemHelper: ItemHelper, databaseServer: DatabaseServer, localisationService: LocalisationService, questHelper: QuestHelper); + /** + * Remove assorts from a trader that have not been unlocked yet + * @param pmcProfile player profile + * @param traderId traders id + * @param assort assort items from a trader + * @param mergedQuestAssorts An object of quest assort to quest id unlocks for all traders + * @returns assort items minus locked quest assorts + */ + stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort, mergedQuestAssorts: Record>, flea?: boolean): ITraderAssort; + /** + * Remove assorts from a trader that have not been unlocked yet + * @param pmcProfile player profile + * @param traderId traders id + * @param assort traders assorts + * @returns traders assorts minus locked loyalty assorts + */ + stripLockedLoyaltyAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort): ITraderAssort; + /** + * Remove an item from an assort + * @param assort assort to modify + * @param itemID item id to remove from asort + * @returns Modified assort + */ + removeItemFromAssort(assort: ITraderAssort, itemID: string, flea?: boolean): ITraderAssort; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/BotDifficultyHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/BotDifficultyHelper.d.ts new file mode 100644 index 0000000..df2c269 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/BotDifficultyHelper.d.ts @@ -0,0 +1,46 @@ +import { Difficulty } from "../models/eft/common/tables/IBotType"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotHelper } from "./BotHelper"; +export declare class BotDifficultyHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected localisationService: LocalisationService; + protected botHelper: BotHelper; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, localisationService: LocalisationService, botHelper: BotHelper, configServer: ConfigServer); + getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string, usecType: string, bearType: string): Difficulty; + /** + * Get difficulty settings for desired bot type, if not found use assault bot types + * @param type bot type to retrieve difficulty of + * @param difficulty difficulty to get settings for (easy/normal etc) + * @returns Difficulty object + */ + getBotDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Get difficulty settings for a PMC + * @param type "usec" / "bear" + * @param difficulty what difficulty to retrieve + * @returns Difficulty object + */ + protected getDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Translate chosen value from pre-raid difficulty dropdown into bot difficulty value + * @param dropDownDifficulty Dropdown difficulty value to convert + * @returns bot difficulty + */ + convertBotDifficultyDropdownToBotDifficulty(dropDownDifficulty: string): string; + /** + * Choose a random difficulty from - easy/normal/hard/impossible + * @returns random difficulty + */ + chooseRandomDifficulty(): string; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/BotGeneratorHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/BotGeneratorHelper.d.ts new file mode 100644 index 0000000..c7dd606 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/BotGeneratorHelper.d.ts @@ -0,0 +1,82 @@ +import { DurabilityLimitsHelper } from "../helpers/DurabilityLimitsHelper"; +import { Item, Repairable, Upd } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { EquipmentFilters, IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ItemHelper } from "./ItemHelper"; +export declare class BotGeneratorHelper { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected durabilityLimitsHelper: DurabilityLimitsHelper; + protected itemHelper: ItemHelper; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Adds properties to an item + * e.g. Repairable / HasHinge / Foldable / MaxDurability + * @param itemTemplate Item extra properties are being generated for + * @param botRole Used by weapons to randomize the durability values. Null for non-equipped items + * @returns Item Upd object with extra properties + */ + generateExtraPropertiesForItem(itemTemplate: ITemplateItem, botRole?: string): { + upd?: Upd; + }; + /** + * Get the chance for the weapon attachment or helmet equipment to be set as activated + * @param botRole role of bot with weapon/helmet + * @param setting the setting of the weapon attachment/helmet equipment to be activated + * @param defaultValue default value for the chance of activation if the botrole or bot equipment role is null + * @returns Percent chance to be active + */ + protected getBotEquipmentSettingFromConfig(botRole: string, setting: keyof EquipmentFilters, defaultValue: number): number; + /** + * Create a repairable object for a weapon that containers durability + max durability properties + * @param itemTemplate weapon object being generated for + * @param botRole type of bot being generated for + * @returns Repairable object + */ + protected generateWeaponRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable; + /** + * Create a repairable object for an armor that containers durability + max durability properties + * @param itemTemplate weapon object being generated for + * @param botRole type of bot being generated for + * @returns Repairable object + */ + protected generateArmorRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable; + /** + * Can item be added to another item without conflict + * @param items Items to check compatibilities with + * @param tplToCheck Tpl of the item to check for incompatibilities + * @param equipmentSlot Slot the item will be placed into + * @returns false if no incompatibilities, also has incompatibility reason + */ + isItemIncompatibleWithCurrentItems(items: Item[], tplToCheck: string, equipmentSlot: string): { + incompatible: boolean; + reason: string; + }; + /** + * Convert a bots role to the equipment role used in config/bot.json + * @param botRole Role to convert + * @returns Equipment role (e.g. pmc / assault / bossTagilla) + */ + getBotEquipmentRole(botRole: string): string; +} +/** TODO - move into own class */ +export declare class ExhaustableArray { + private itemPool; + private randomUtil; + private jsonUtil; + private pool; + constructor(itemPool: T[], randomUtil: RandomUtil, jsonUtil: JsonUtil); + getRandomValue(): T; + getFirstValue(): T; + hasValues(): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/BotHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/BotHelper.d.ts new file mode 100644 index 0000000..3b49501 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/BotHelper.d.ts @@ -0,0 +1,88 @@ +import { MinMax } from "../models/common/MinMax"; +import { Difficulty, IBotType } from "../models/eft/common/tables/IBotType"; +import { EquipmentFilters, IBotConfig, RandomisationDetails } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Get a template object for the specified botRole from bots.types db + * @param role botRole to get template for + * @returns IBotType object + */ + getBotTemplate(role: string): IBotType; + /** + * Randomize the chance the PMC will attack their own side + * Look up value in bot.json/chanceSameSideIsHostilePercent + * @param difficultySettings pmc difficulty settings + */ + randomizePmcHostility(difficultySettings: Difficulty): void; + /** + * Is the passed in bot role a PMC (usec/bear/pmc) + * @param botRole bot role to check + * @returns true if is pmc + */ + isBotPmc(botRole: string): boolean; + isBotBoss(botRole: string): boolean; + isBotFollower(botRole: string): boolean; + /** + * Add a bot to the FRIENDLY_BOT_TYPES array + * @param difficultySettings bot settings to alter + * @param typeToAdd bot type to add to friendly list + */ + addBotToFriendlyList(difficultySettings: Difficulty, typeToAdd: string): void; + /** + * Add a bot to the ENEMY_BOT_TYPES array, do not add itself if its on the enemy list + * @param difficultySettings bot settings to alter + * @param typesToAdd bot type to add to enemy list + */ + addBotToEnemyList(difficultySettings: Difficulty, typesToAdd: string[], typeBeingEdited: string): void; + /** + * Add a bot to the REVENGE_BOT_TYPES array + * @param difficultySettings bot settings to alter + * @param typesToAdd bot type to add to revenge list + */ + addBotToRevengeList(difficultySettings: Difficulty, typesToAdd: string[]): void; + /** + * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check + * @param botRole the bot role to check if should be a pmc + * @returns true if should be a pmc + */ + shouldBotBePmc(botRole: string): boolean; + rollChanceToBePmc(role: string, botConvertMinMax: MinMax): boolean; + botRoleIsPmc(botRole: string): boolean; + /** + * Get randomization settings for bot from config/bot.json + * @param botLevel level of bot + * @param botEquipConfig bot equipment json + * @returns RandomisationDetails + */ + getBotRandomizationDetails(botLevel: number, botEquipConfig: EquipmentFilters): RandomisationDetails; + /** + * Choose between sptBear and sptUsec at random based on the % defined in botConfig.pmc.isUsec + * @returns pmc role + */ + getRandomizedPmcRole(): string; + /** + * Get the corresponding side when sptBear or sptUsec is passed in + * @param botRole role to get side for + * @returns side (usec/bear) + */ + getPmcSideByRole(botRole: string): string; + /** + * Get a randomized PMC side based on bot config value 'isUsec' + * @returns pmc side as string + */ + protected getRandomizedPmcSide(): string; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/BotWeaponGeneratorHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/BotWeaponGeneratorHelper.d.ts new file mode 100644 index 0000000..cefc3bd --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/BotWeaponGeneratorHelper.d.ts @@ -0,0 +1,83 @@ +import { MinMax } from "../models/common/MinMax"; +import { Inventory } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { Grid, ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { EquipmentSlots } from "../models/enums/EquipmentSlots"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ContainerHelper } from "./ContainerHelper"; +import { InventoryHelper } from "./InventoryHelper"; +import { ItemHelper } from "./ItemHelper"; +export declare class BotWeaponGeneratorHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected inventoryHelper: InventoryHelper; + protected localisationService: LocalisationService; + protected containerHelper: ContainerHelper; + constructor(logger: ILogger, databaseServer: DatabaseServer, itemHelper: ItemHelper, randomUtil: RandomUtil, hashUtil: HashUtil, inventoryHelper: InventoryHelper, localisationService: LocalisationService, containerHelper: ContainerHelper); + /** + * Get a randomized number of bullets for a specific magazine + * @param magCounts min and max count of magazines + * @param magTemplate magazine to generate bullet count for + * @returns bullet count number + */ + getRandomizedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; + /** + * Get a randomized count of magazines + * @param magCounts min and max value returned value can be between + * @returns numerical value of magazine count + */ + getRandomizedMagazineCount(magCounts: MinMax): number; + /** + * Is this magazine cylinder related (revolvers and grenade launchers) + * @param magazineParentName the name of the magazines parent + * @returns true if it is cylinder related + */ + magazineIsCylinderRelated(magazineParentName: string): boolean; + /** + * Create a magazine using the parameters given + * @param magazineTpl Tpl of the magazine to create + * @param ammoTpl Ammo to add to magazine + * @param magTemplate template object of magazine + * @returns Item array + */ + createMagazine(magazineTpl: string, ammoTpl: string, magTemplate: ITemplateItem): Item[]; + /** + * Add a specific number of cartridges to a bots inventory (defaults to vest and pockets) + * @param ammoTpl Ammo tpl to add to vest/pockets + * @param cartridgeCount number of cartridges to add to vest/pockets + * @param inventory bot inventory to add cartridges to + * @param equipmentSlotsToAddTo what equipment slots should bullets be added into + */ + addAmmoIntoEquipmentSlots(ammoTpl: string, cartridgeCount: number, inventory: Inventory, equipmentSlotsToAddTo?: EquipmentSlots[]): void; + /** + * Get a weapons default magazine template id + * @param weaponTemplate weapon to get default magazine for + * @returns tpl of magazine + */ + getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; + /** + * TODO - move into BotGeneratorHelper, this is not the class for it + * Adds an item with all its children into specified equipmentSlots, wherever it fits. + * @param equipmentSlots + * @param parentId + * @param parentTpl + * @param itemWithChildren + * @param inventory + * @returns a `boolean` indicating item was added + */ + addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: Inventory): boolean; + /** + * is the provided item allowed inside a container + * @param slot location item wants to be placed in + * @param itemTpl item being placed + * @returns true if allowed + */ + protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/ContainerHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/ContainerHelper.d.ts new file mode 100644 index 0000000..3c2ee93 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/ContainerHelper.d.ts @@ -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 { + protected locateSlot(container2D: number[][], containerX: number, containerY: number, x: number, y: number, itemW: number, itemH: number): boolean; + findSlotForItem(container2D: number[][], itemWidth: number, itemHeight: number): FindSlotResult; + fillContainerMapWithItem(container2D: number[][], x: number, y: number, itemW: number, itemH: number, rotate: boolean): any; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/DialogueHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/DialogueHelper.d.ts new file mode 100644 index 0000000..8f03b81 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/DialogueHelper.d.ts @@ -0,0 +1,45 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { Dialogue, MessageContent, MessagePreview } from "../models/eft/profile/IAkiProfile"; +import { MessageType } from "../models/enums/MessageType"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { ItemHelper } from "./ItemHelper"; +import { NotificationSendHelper } from "./NotificationSendHelper"; +import { NotifierHelper } from "./NotifierHelper"; +export declare class DialogueHelper { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected notifierHelper: NotifierHelper; + protected notificationSendHelper: NotificationSendHelper; + protected localisationService: LocalisationService; + protected itemHelper: ItemHelper; + constructor(logger: ILogger, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, notifierHelper: NotifierHelper, notificationSendHelper: NotificationSendHelper, localisationService: LocalisationService, itemHelper: ItemHelper); + createMessageContext(templateId: string, messageType: MessageType, maxStoreTime: number): MessageContent; + /** + * Add a templated message to the dialogue. + * @param dialogueID + * @param messageContent + * @param sessionID + * @param rewards + */ + addDialogueMessage(dialogueID: string, messageContent: MessageContent, sessionID: string, rewards?: Item[]): void; + /** + * Get the preview contents of the last message in a dialogue. + * @param dialogue + * @returns + */ + getMessagePreview(dialogue: Dialogue): MessagePreview; + /** + * Get the item contents for a particular message. + * @param messageID + * @param sessionID + * @param itemId Item being moved to inventory + * @returns + */ + getMessageItemContents(messageID: string, sessionID: string, itemId: string): Item[]; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/DurabilityLimitsHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/DurabilityLimitsHelper.d.ts new file mode 100644 index 0000000..7122376 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/DurabilityLimitsHelper.d.ts @@ -0,0 +1,28 @@ +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotHelper } from "./BotHelper"; +export declare class DurabilityLimitsHelper { + protected randomUtil: RandomUtil; + protected botHelper: BotHelper; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(randomUtil: RandomUtil, botHelper: BotHelper, configServer: ConfigServer); + getRandomizedMaxWeaponDurability(itemTemplate: ITemplateItem, botRole: string): number; + getRandomizedMaxArmorDurability(itemTemplate: ITemplateItem, botRole: string): number; + getRandomizedWeaponDurability(itemTemplate: ITemplateItem, botRole: string, maxDurability: number): number; + getRandomizedArmorDurability(itemTemplate: ITemplateItem, botRole: string, maxDurability: number): number; + protected generateMaxWeaponDurability(botRole: string): number; + protected generateMaxPmcArmorDurability(itemMaxDurability: number): number; + protected getLowestMaxWeaponFromConfig(botRole: string): number; + protected getHighestMaxWeaponDurabilityFromConfig(botRole: string): number; + protected generateWeaponDurability(botRole: string, maxDurability: number): number; + protected generateArmorDurability(botRole: string, maxDurability: number): number; + protected getMinWeaponDeltaFromConfig(botRole: string): number; + protected getMaxWeaponDeltaFromConfig(botRole: string): number; + protected getMinArmorDeltaFromConfig(botRole: string): number; + protected getMaxArmorDeltaFromConfig(botRole: string): number; + protected getMinArmorLimitPercentFromConfig(botRole: string): number; + protected getMinWeaponLimitPercentFromConfig(botRole: string): number; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/GameEventHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/GameEventHelper.d.ts new file mode 100644 index 0000000..f502c95 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/GameEventHelper.d.ts @@ -0,0 +1,9 @@ +import { ISeasonalEventConfig } from "../models/spt/config/ISeasonalEventConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +export declare class GameEventHelper { + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected seasonalEventConfig: ISeasonalEventConfig; + constructor(databaseServer: DatabaseServer, configServer: ConfigServer); +} diff --git a/TypeScript/16ImporterUtil/types/helpers/HandbookHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/HandbookHelper.d.ts new file mode 100644 index 0000000..aa329a9 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/HandbookHelper.d.ts @@ -0,0 +1,53 @@ +import { DatabaseServer } from "../servers/DatabaseServer"; +declare class LookupItem { + byId: Record; + byParent: Record; + constructor(); +} +export declare class LookupCollection { + items: LookupItem; + categories: LookupItem; + constructor(); +} +export declare class HandbookHelper { + protected databaseServer: DatabaseServer; + protected lookupCacheGenerated: boolean; + protected handbookPriceCache: LookupCollection; + constructor(databaseServer: DatabaseServer); + hydrateLookup(): void; + /** + * Get price from internal cache, if cache empty look up price directly in handbook (expensive) + * If no values found, return 1 + * @param tpl item tpl to look up price for + * @returns price in roubles + */ + getTemplatePrice(tpl: string): number; + /** + * all items in template with the given parent category + * @param x + * @returns string array + */ + templatesWithParent(x: string): string[]; + /** + * Does category exist in handbook cache + * @param category + * @returns true if exists in cache + */ + isCategory(category: string): boolean; + childrenCategories(x: string): string[]; + /** + * Convert non-roubles into roubles + * @param nonRoubleCurrencyCount Currency count to convert + * @param currencyTypeFrom What current currency is + * @returns Count in roubles + */ + inRUB(nonRoubleCurrencyCount: number, currencyTypeFrom: string): number; + /** + * Convert roubles into another currency + * @param roubleCurrencyCount roubles to convert + * @param currencyTypeTo Currency to convert roubles into + * @returns currency count in desired type + */ + fromRUB(roubleCurrencyCount: number, currencyTypeTo: string): number; +} +export {}; diff --git a/TypeScript/16ImporterUtil/types/helpers/HealthHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/HealthHelper.d.ts new file mode 100644 index 0000000..7a6d41d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/HealthHelper.d.ts @@ -0,0 +1,57 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ISyncHealthRequestData } from "../models/eft/health/ISyncHealthRequestData"; +import { Effects, IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { IHealthConfig } from "../models/spt/config/IHealthConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { SaveServer } from "../servers/SaveServer"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class HealthHelper { + protected jsonUtil: JsonUtil; + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected configServer: ConfigServer; + protected healthConfig: IHealthConfig; + constructor(jsonUtil: JsonUtil, logger: ILogger, timeUtil: TimeUtil, saveServer: SaveServer, configServer: ConfigServer); + /** + * Resets the profiles vitality/health and vitality/effects properties to their defaults + * @param sessionID Session Id + * @returns updated profile + */ + resetVitality(sessionID: string): IAkiProfile; + /** + * Update player profile with changes from request object + * @param pmcData Player profile + * @param request Heal request + * @param sessionID Session id + * @param addEffects Should effects be added or removed (default - add) + */ + saveVitality(pmcData: IPmcData, request: ISyncHealthRequestData, sessionID: string, addEffects?: boolean, deleteExistingEffects?: boolean): void; + /** + * Adjust hydration/energy/temperate and body part hp values in player profile to values in profile.vitality + * @param pmcData Profile to update + * @param sessionId Session id + */ + protected saveHealth(pmcData: IPmcData, sessionID: string): void; + /** + * Save effects to profile + * Works by removing all effects and adding them back from profile + * Removes empty 'Effects' objects if found + * @param pmcData Player profile + * @param sessionId Session id + * @param bodyPartsWithEffects dict of body parts with effects that should be added to profile + * @param addEffects Should effects be added back to profile + */ + protected saveEffects(pmcData: IPmcData, sessionId: string, bodyPartsWithEffects: Effects, deleteExistingEffects?: boolean): void; + /** + * Add effect to body part in profile + * @param pmcData Player profile + * @param effectBodyPart body part to edit + * @param effectType Effect to add to body part + * @param duration How long the effect has left in seconds (-1 by default, no duration). + */ + protected addEffect(pmcData: IPmcData, effectBodyPart: string, effectType: string, duration?: number): void; + protected isEmpty(map: any): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/HideoutHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/HideoutHelper.d.ts new file mode 100644 index 0000000..a5849e3 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/HideoutHelper.d.ts @@ -0,0 +1,186 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Common, HideoutArea, IHideoutImprovement, Production, Productive } from "../models/eft/common/tables/IBotBase"; +import { Upd } from "../models/eft/common/tables/IItem"; +import { StageBonus } from "../models/eft/hideout/IHideoutArea"; +import { IHideoutContinuousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinuousProductionStartRequestData"; +import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction"; +import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData"; +import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideoutTakeProductionRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IHideoutConfig } from "../models/spt/config/IHideoutConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { PlayerService } from "../services/PlayerService"; +import { HashUtil } from "../utils/HashUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { InventoryHelper } from "./InventoryHelper"; +import { ProfileHelper } from "./ProfileHelper"; +export declare class HideoutHelper { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected eventOutputHolder: EventOutputHolder; + protected httpResponse: HttpResponseUtil; + protected profileHelper: ProfileHelper; + protected inventoryHelper: InventoryHelper; + protected playerService: PlayerService; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + static bitcoinFarm: string; + static waterCollector: string; + static bitcoin: string; + static expeditionaryFuelTank: string; + static maxSkillPoint: number; + private static generatorOffMultipler; + protected hideoutConfig: IHideoutConfig; + constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, inventoryHelper: InventoryHelper, playerService: PlayerService, localisationService: LocalisationService, configServer: ConfigServer); + registerProduction(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData | IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * This convenience function initializes new Production Object + * with all the constants. + */ + initProduction(recipeId: string, productionTime: number): Production; + isProductionType(productive: Productive): productive is Production; + applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void; + /** + * TODO: + * After looking at the skills there doesnt seem to be a configuration per skill to boost + * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it) + * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure! + * @param pmcData + * @param bonus + */ + protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void; + /** + * Process a players hideout, update areas that use resources + increment production timers + * @param sessionID Session id + */ + updatePlayerHideout(sessionID: string): void; + /** + * Update progress timer for water collector + * @param pmcData profile to update + * @param productionId id of water collection production to update + * @param hideoutProperties Hideout properties + */ + protected updateWaterCollectorProductionTimer(pmcData: IPmcData, productionId: string, hideoutProperties: { + btcFarmCGs?: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + /** + * Iterate over productions and update their progress timers + * @param pmcData Profile to check for productions and update + * @param hideoutProperties Hideout properties + */ + protected updateProductionTimers(pmcData: IPmcData, hideoutProperties: { + btcFarmCGs: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + /** + * Update a productions progress value based on the amount of time that has passed + * @param pmcData Player profile + * @param prodId Production id being crafted + * @param recipe Recipe data being crafted + * @param hideoutProperties + */ + protected updateProductionProgress(pmcData: IPmcData, prodId: string, recipe: IHideoutProduction, hideoutProperties: { + btcFarmCGs?: number; + isGeneratorOn: boolean; + waterCollectorHasFilter?: boolean; + }): void; + /** + * Check if a productions progress value matches its corresponding recipes production time value + * @param pmcData Player profile + * @param prodId Production id + * @param recipe Recipe being crafted + * @returns progress matches productionTime from recipe + */ + protected doesProgressMatchProductionTime(pmcData: IPmcData, prodId: string): boolean; + /** + * Update progress timer for scav case + * @param pmcData Profile to update + * @param productionId Id of scav case production to update + */ + protected updateScavCaseProductionTimer(pmcData: IPmcData, productionId: string): void; + /** + * Iterate over hideout areas that use resources (fuel/filters etc) and update associated values + * @param sessionID Session id + * @param pmcData Profile to update areas of + * @param hideoutProperties hideout properties + */ + protected updateAreasWithResources(sessionID: string, pmcData: IPmcData, hideoutProperties: { + btcFarmCGs: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void; + protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean; + protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): void; + /** + * Adjust water filter objects resourceValue or delete when they reach 0 resource + * @param waterFilterArea water filter area to update + * @param production production object + * @param isGeneratorOn is generator enabled + * @param pmcData Player profile + * @returns Updated HideoutArea object + */ + protected updateWaterFilters(waterFilterArea: HideoutArea, production: Production, isGeneratorOn: boolean, pmcData: IPmcData): HideoutArea; + protected getAreaUpdObject(stackCount: number, resourceValue: number, resourceUnitsConsumed: number): Upd; + protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData): void; + protected updateBitcoinFarm(pmcData: IPmcData, btcFarmCGs: number, isGeneratorOn: boolean): Production; + /** + * Get a count of how many BTC can be gathered by the profile + * @param pmcData Profile to look up + * @returns coin slot count + */ + protected getBTCSlots(pmcData: IPmcData): number; + protected getManagementSkillsSlots(): number; + protected hasManagementSkillSlots(pmcData: IPmcData): boolean; + protected getHideoutManagementSkill(pmcData: IPmcData): Common; + protected getHideoutManagementConsumptionBonus(pmcData: IPmcData): number; + /** + * Get the crafting skill details from player profile + * @param pmcData Player profile + * @returns crafting skill, null if not found + */ + protected getCraftingSkill(pmcData: IPmcData): Common; + /** + * Adjust craft time based on crafting skill level found in player profile + * @param pmcData Player profile + * @param productionTime Time to complete hideout craft in seconds + * @returns Adjusted craft time in seconds + */ + protected getCraftingSkillProductionTimeReduction(pmcData: IPmcData, productionTime: number): number; + isProduction(productive: Productive): productive is Production; + /** + * Gather crafted BTC from hideout area and add to inventory + * Reset production start timestamp if hideout area at full coin capacity + * @param pmcData Player profile + * @param request Take production request + * @param sessionId Session id + * @returns IItemEventRouterResponse + */ + getBTC(pmcData: IPmcData, request: IHideoutTakeProductionRequestData, sessionId: string): IItemEventRouterResponse; + /** + * Upgrade hideout wall from starting level to interactable level if enough time has passed + * @param pmcProfile Profile to upgrade wall in + */ + unlockHideoutWallInProfile(pmcProfile: IPmcData): void; + /** + * Hideout improvement is flagged as complete + * @param improvement hideout improvement object + * @returns true if complete + */ + protected hideoutImprovementIsComplete(improvement: IHideoutImprovement): boolean; + /** + * Iterate over hideout improvements not completed and check if they need to be adjusted + * @param pmcProfile Profile to adjust + */ + setHideoutImprovementsToCompleted(pmcProfile: IPmcData): void; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/HttpServerHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/HttpServerHelper.d.ts new file mode 100644 index 0000000..c6e5296 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/HttpServerHelper.d.ts @@ -0,0 +1,23 @@ +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class HttpServerHelper { + protected configServer: ConfigServer; + protected httpConfig: IHttpConfig; + protected mime: { + css: string; + bin: string; + html: string; + jpg: string; + js: string; + json: string; + png: string; + svg: string; + txt: string; + }; + constructor(configServer: ConfigServer); + getMimeText(key: string): string; + buildUrl(): string; + getBackendUrl(): string; + getWebsocketUrl(): string; + sendTextJson(resp: any, output: any): void; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/InRaidHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/InRaidHelper.d.ts new file mode 100644 index 0000000..c69a810 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/InRaidHelper.d.ts @@ -0,0 +1,112 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Victim } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { ProfileFixerService } from "../services/ProfileFixerService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { InventoryHelper } from "./InventoryHelper"; +import { PaymentHelper } from "./PaymentHelper"; +export declare class InRaidHelper { + protected logger: ILogger; + protected saveServer: SaveServer; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected inventoryHelper: InventoryHelper; + protected paymentHelper: PaymentHelper; + protected localisationService: LocalisationService; + protected profileFixerService: ProfileFixerService; + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, profileFixerService: ProfileFixerService); + /** + * Check an array of items and add an upd object to money items with a stack count of 1 + * Single stack money items have no upd object and thus no StackObjectsCount, causing issues + * @param items Items array to check + */ + addUpdToMoneyFromRaid(items: Item[]): void; + /** + * Add karma changes up and return the new value + * @param existingFenceStanding Current fence standing level + * @param victims Array of kills player performed + * @returns adjusted karma level after kills are taken into account + */ + calculateFenceStandingChangeFromKills(existingFenceStanding: number, victims: Victim[]): number; + /** + * Reset a profile to a baseline, used post-raid + * Reset points earned during session property + * Increment exp + * Remove Labs keycard + * @param profileData Profile to update + * @param saveProgressRequest post raid save data request data + * @param sessionID Session id + * @returns Reset profile object + */ + updateProfileBaseStats(profileData: IPmcData, saveProgressRequest: ISaveProgressRequestData, sessionID: string): IPmcData; + /** + * Take body part effects from client profile and apply to server profile + * @param saveProgressRequest post-raid request + * @param profileData player profile on server + */ + protected transferPostRaidLimbEffectsToProfile(saveProgressRequest: ISaveProgressRequestData, profileData: IPmcData): void; + /** + * Some maps have one-time-use keys (e.g. Labs + * Remove the relevant key from an inventory based on the post-raid request data passed in + * @param offraidData post-raid data + * @param sessionID Session id + */ + protected removeMapAccessKey(offraidData: ISaveProgressRequestData, sessionID: string): void; + /** + * Set the SPT inraid location Profile property to 'none' + * @param sessionID Session id + */ + protected setPlayerInRaidLocationStatusToNone(sessionID: string): void; + /** + * Adds SpawnedInSession property to items found in a raid + * Removes SpawnedInSession for non-scav players if item was taken into raid with SpawnedInSession = true + * @param preRaidProfile profile to update + * @param postRaidProfile profile to update inventory contents of + * @param isPlayerScav Was this a p scav raid + * @returns + */ + addSpawnedInSessionPropertyToItems(preRaidProfile: IPmcData, postRaidProfile: IPmcData, isPlayerScav: boolean): IPmcData; + /** + * Iterate over inventory items and remove the property that defines an item as Found in Raid + * Only removes property if item had FiR when entering raid + * @param postRaidProfile profile to update items for + * @returns Updated profile with SpawnedInSession removed + */ + removeSpawnedInSessionPropertyFromItems(postRaidProfile: IPmcData): IPmcData; + /** + * Update a players inventory post-raid + * Remove equipped items from pre-raid + * Add new items found in raid to profile + * Store insurance items in profile + * @param sessionID + * @param pmcData Profile to update + * @param postRaidProfile Profile returned by client after a raid + * @returns Updated profile + */ + setInventory(sessionID: string, pmcData: IPmcData, postRaidProfile: IPmcData): IPmcData; + /** + * Clear pmc inventory of all items except those that are exempt + * Used post-raid to remove items after death + * @param pmcData Player profile + * @param sessionID Session id + * @returns Player profile with pmc inventory cleared + */ + deleteInventory(pmcData: IPmcData, sessionID: string): IPmcData; + /** + * Does the provided items slotId mean its kept on the player after death + * @param slotId slotid of item to check + * @returns true if item is kept after death + */ + isItemKeptAfterDeath(slotId: string): boolean; + /** + * Return the equipped items from a players inventory + * @param items Players inventory to search through + * @returns an array of equipped items + */ + getPlayerGear(items: Item[]): Item[]; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/InventoryHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/InventoryHelper.d.ts new file mode 100644 index 0000000..8855d1e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/InventoryHelper.d.ts @@ -0,0 +1,132 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { AddItem, IAddItemRequestData } from "../models/eft/inventory/IAddItemRequestData"; +import { IAddItemTempObject } from "../models/eft/inventory/IAddItemTempObject"; +import { IInventoryMergeRequestData } from "../models/eft/inventory/IInventoryMergeRequestData"; +import { IInventoryMoveRequestData } from "../models/eft/inventory/IInventoryMoveRequestData"; +import { IInventorySplitRequestData } from "../models/eft/inventory/IInventorySplitRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IInventoryConfig, RewardDetails } from "../models/spt/config/IInventoryConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { ContainerHelper } from "./ContainerHelper"; +import { DialogueHelper } from "./DialogueHelper"; +import { ItemHelper } from "./ItemHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { ProfileHelper } from "./ProfileHelper"; +import { TraderAssortHelper } from "./TraderAssortHelper"; +export interface OwnerInventoryItems { + from: Item[]; + to: Item[]; + sameInventory: boolean; + isMail: boolean; +} +export declare class InventoryHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected httpResponse: HttpResponseUtil; + protected fenceService: FenceService; + protected databaseServer: DatabaseServer; + protected paymentHelper: PaymentHelper; + protected traderAssortHelper: TraderAssortHelper; + protected dialogueHelper: DialogueHelper; + protected itemHelper: ItemHelper; + protected containerHelper: ContainerHelper; + protected profileHelper: ProfileHelper; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected inventoryConfig: IInventoryConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, httpResponse: HttpResponseUtil, fenceService: FenceService, databaseServer: DatabaseServer, paymentHelper: PaymentHelper, traderAssortHelper: TraderAssortHelper, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, containerHelper: ContainerHelper, profileHelper: ProfileHelper, localisationService: LocalisationService, configServer: ConfigServer); + /** + * BUG: Passing the same item multiple times with a count of 1 will cause multiples of that item to be added (e.g. x3 separate objects of tar cola with count of 1 = 9 tarcolas being added to inventory) + * @param pmcData Profile to add items to + * @param request request data to add items + * @param output response to send back to client + * @param sessionID Session id + * @param callback Code to execute later (function) + * @param foundInRaid Will results added to inventory be set as found in raid + * @param addUpd Additional upd properties for items being added to inventory + * @returns IItemEventRouterResponse + */ + addItem(pmcData: IPmcData, request: IAddItemRequestData, output: IItemEventRouterResponse, sessionID: string, callback: { + (): void; + }, foundInRaid?: boolean, addUpd?: any): IItemEventRouterResponse; + /** + * Add ammo to ammo boxes + * @param itemToAdd Item to check is ammo box + * @param toDo + * @param output IItemEventRouterResponse object + * @param sessionID Session id + * @param pmcData Profile to add ammobox to + */ + protected hydrateAmmoBoxWithAmmo(pmcData: IPmcData, itemToAdd: IAddItemTempObject, toDo: string[][], sessionID: string, output: IItemEventRouterResponse): void; + /** + * + * @param assortItems Items to add to inventory + * @param requestItem Details of purchased item to add to inventory + * @param result Array split stacks are added to + */ + protected splitStackIntoSmallerStacks(assortItems: Item[], requestItem: AddItem, result: IAddItemTempObject[]): void; + /** + * Remove item from player inventory + * @param pmcData Profile to remove item from + * @param itemId Items id to remove + * @param sessionID Session id + * @param output Existing IItemEventRouterResponse object to append data to, creates new one by default if not supplied + * @returns IItemEventRouterResponse + */ + removeItem(pmcData: IPmcData, itemId: string, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse; + removeItemByCount(pmcData: IPmcData, itemId: string, count: number, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse; + getItemSize(itemTpl: string, itemID: string, inventoryItem: Item[]): Record; + protected getSizeByInventoryItemHash(itemTpl: string, itemID: string, inventoryItemHash: InventoryHelper.InventoryItemHash): Record; + protected getInventoryItemHash(inventoryItem: Item[]): InventoryHelper.InventoryItemHash; + getContainerMap(containerW: number, containerH: number, itemList: Item[], containerId: string): number[][]; + /** + * Based on the item action, determine whose inventories we should be looking at for from and to. + */ + getOwnerInventoryItems(body: IInventoryMoveRequestData | IInventorySplitRequestData | IInventoryMergeRequestData, sessionID: string): OwnerInventoryItems; + /** + * Made a 2d array table with 0 - free slot and 1 - used slot + * @param {Object} pmcData + * @param {string} sessionID + * @returns Array + */ + protected getStashSlotMap(pmcData: IPmcData, sessionID: string): number[][]; + protected getStashType(sessionID: string): string; + protected getPlayerStashSize(sessionID: string): Record; + /** + * Internal helper function to transfer an item from one profile to another. + * fromProfileData: Profile of the source. + * toProfileData: Profile of the destination. + * body: Move request + */ + moveItemToProfile(fromItems: Item[], toItems: Item[], body: IInventoryMoveRequestData): void; + /** + * Internal helper function to move item within the same profile_f. + */ + moveItemInternal(inventoryItems: Item[], body: IInventoryMoveRequestData): void; + /** + * Internal helper function to handle cartridges in inventory if any of them exist. + */ + protected handleCartridges(items: Item[], body: IInventoryMoveRequestData): void; + /** + * Get details for how a random loot container should be handled, max rewards, possible reward tpls + * @param itemTpl Container being opened + * @returns Reward details + */ + getRandomLootContainerRewardDetails(itemTpl: string): RewardDetails; +} +declare namespace InventoryHelper { + interface InventoryItemHash { + byItemId: Record; + byParentId: Record; + } +} +export {}; diff --git a/TypeScript/16ImporterUtil/types/helpers/ItemHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/ItemHelper.d.ts new file mode 100644 index 0000000..de424d2 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/ItemHelper.d.ts @@ -0,0 +1,251 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { InsuredItem } from "../models/eft/common/tables/IBotBase"; +import { Item, Repairable } from "../models/eft/common/tables/IItem"; +import { IStaticAmmoDetails } from "../models/eft/common/tables/ILootBase"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemBaseClassService } from "../services/ItemBaseClassService"; +import { LocaleService } from "../services/LocaleService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { MathUtil } from "../utils/MathUtil"; +import { ObjectId } from "../utils/ObjectId"; +import { RandomUtil } from "../utils/RandomUtil"; +import { HandbookHelper } from "./HandbookHelper"; +declare class ItemHelper { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected randomUtil: RandomUtil; + protected objectId: ObjectId; + protected mathUtil: MathUtil; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected itemBaseClassService: ItemBaseClassService; + protected localisationService: LocalisationService; + protected localeService: LocaleService; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, objectId: ObjectId, mathUtil: MathUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemBaseClassService: ItemBaseClassService, localisationService: LocalisationService, localeService: LocaleService); + /** + * Checks if an id is a valid item. Valid meaning that it's an item that be stored in stash + * @param {string} tpl the template id / tpl + * @returns boolean; true for items that may be in player possession and not quest items + */ + isValidItem(tpl: string, invalidBaseTypes?: string[]): boolean; + /** + * Check if the tpl / template Id provided is a descendent of the baseclass + * + * @param {string} tpl the item template id to check + * @param {string} baseClassTpl the baseclass to check for + * @return {boolean} is the tpl a descendent? + */ + isOfBaseclass(tpl: string, baseClassTpl: string): boolean; + /** + * Check if item has any of the supplied base classes + * @param tpl Item to check base classes of + * @param baseClassTpls base classes to check for + * @returns true if any supplied base classes match + */ + isOfBaseclasses(tpl: string, baseClassTpls: string[]): boolean; + /** + * Returns the item price based on the handbook or as a fallback from the prices.json if the item is not + * found in the handbook. If the price can't be found at all return 0 + * + * @param {string} tpl the item template to check + * @returns {integer} The price of the item or 0 if not found + */ + getItemPrice(tpl: string): number; + fixItemStackCount(item: Item): Item; + /** + * AmmoBoxes contain StackSlots which need to be filled for the AmmoBox to have content. + * Here's what a filled AmmoBox looks like: + * { + * "_id": "b1bbe982daa00ac841d4ae4d", + * "_tpl": "57372c89245977685d4159b1", + * "parentId": "5fe49a0e2694b0755a504876", + * "slotId": "hideout", + * "location": { + * "x": 3, + * "y": 4, + * "r": 0 + * }, + * "upd": { + * "StackObjectsCount": 1 + * } + * }, + * { + * "_id": "b997b4117199033afd274a06", + * "_tpl": "56dff061d2720bb5668b4567", + * "parentId": "b1bbe982daa00ac841d4ae4d", + * "slotId": "cartridges", + * "location": 0, + * "upd": { + * "StackObjectsCount": 30 + * } + * } + * Given the AmmoBox Item (first object) this function generates the StackSlot (second object) and returns it. + * StackSlots are only used for AmmoBoxes which only have one element in StackSlots. However, it seems to be generic + * to possibly also have more than one StackSlot. As good as possible, without seeing items having more than one + * StackSlot, this function takes account of this and creates and returns an array of StackSlotItems + * + * @param {object} item The item template of the AmmoBox as given in items.json + * @param {string} parentId The id of the AmmoBox instance these StackSlotItems should be children of + * @returns {array} The array of StackSlotItems + */ + generateItemsFromStackSlot(item: ITemplateItem, parentId: string): Item[]; + /** + * Get cloned copy of all item data from items.json + * @returns array of ITemplateItem objects + */ + getItems(): ITemplateItem[]; + /** + * Gets item data from items.json + * @param tpl items template id to look up + * @returns bool - is valid + template item object as array + */ + getItem(tpl: string): [boolean, ITemplateItem]; + /** + * get normalized value (0-1) based on item condition + * @param item + * @returns number between 0 and 1 + */ + getItemQualityModifier(item: Item): number; + /** + * Get a quality value based on a repairable items (weapon/armor) current state between current and max durability + * @param itemDetails + * @param repairable repairable object + * @param item + * @returns a number between 0 and 1 + */ + protected getRepairableItemQualityValue(itemDetails: ITemplateItem, repairable: Repairable, item: Item): number; + /** + * Recursive function that looks at every item from parameter and gets their childrens Ids + * @param items + * @param itemID + * @returns an array of strings + */ + findAndReturnChildrenByItems(items: Item[], itemID: string): string[]; + /** + * A variant of findAndReturnChildren where the output is list of item objects instead of their ids. + * @param items + * @param baseItemId + * @returns An array of Item objects + */ + findAndReturnChildrenAsItems(items: Item[], baseItemId: string): Item[]; + /** + * Find children of the item in a given assort (weapons parts for example, need recursive loop function) + * @param itemIdToFind Template id of item to check for + * @param assort Array of items to check in + * @returns Array of children of requested item + */ + findAndReturnChildrenByAssort(itemIdToFind: string, assort: Item[]): Item[]; + /** + * Check if the passed in item has buy count restrictions + * @param itemToCheck Item to check + * @returns true if it has buy restrictions + */ + hasBuyRestrictions(itemToCheck: Item): boolean; + /** + * is the passed in template id a dog tag + * @param tpl Template id to check + * @returns true if it is a dogtag + */ + isDogtag(tpl: string): boolean; + /** + * Can the item passed in be sold to a trader because it is raw money + * @param tpl Item template id to check + * @returns true if unsellable + */ + isNotSellable(tpl: string): boolean; + /** + * Gets the identifier for a child using slotId, locationX and locationY. + * @param item + * @returns "slotId OR slotid,locationX,locationY" + */ + getChildId(item: Item): string; + /** + * Can the passed in item be stacked + * @param tpl item to check + * @returns true if it can be stacked + */ + isItemTplStackable(tpl: string): boolean; + /** + * split item stack if it exceeds StackMaxSize + */ + splitStack(item: Item): Item[]; + /** + * Find Barter items in the inventory + * @param {string} by + * @param {Object} pmcData + * @param {string} barterItemId + * @returns Array of Item objects + */ + findBarterItems(by: string, pmcData: IPmcData, barterItemId: string): Item[]; + /** + * + * @param pmcData + * @param items + * @param insuredItems insured items to not replace ids for + * @param fastPanel + * @returns + */ + replaceIDs(pmcData: IPmcData, items: Item[], insuredItems?: InsuredItem[], fastPanel?: any): any[]; + /** + * WARNING, SLOW. Recursively loop down through an items hierarchy to see if any of the ids match the supplied list, return true if any do + * @param {string} tpl + * @param {Array} tplsToCheck + * @returns boolean + */ + doesItemOrParentsIdMatch(tpl: string, tplsToCheck: string[]): boolean; + /** + * Return true if item is a quest item + * @param {string} tpl + * @returns boolean + */ + isQuestItem(tpl: string): boolean; + /** + * Get the inventory size of an item + * @param items + * @param rootItemId + * @returns ItemSize object (width and height) + */ + getItemSize(items: Item[], rootItemId: string): ItemHelper.ItemSize; + /** + * Get a random cartridge from an items Filter property + * @param item + * @returns + */ + getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string; + createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record, caliber?: string): Item; + protected getRandomValidCaliber(magTemplate: ITemplateItem): string; + protected drawAmmoTpl(caliber: string, staticAmmoDist: Record): string; + /** + * + * @param parentId container cartridges will be placed in + * @param ammoTpl Cartridge to insert + * @param stackCount Count of cartridges inside parent + * @param location Location inside parent (e.g. 0, 1) + * @returns Item + */ + createCartridges(parentId: string, ammoTpl: string, stackCount: number, location: number): Item; + /** + * Get the size of a stack, return 1 if no stack object count property found + * @param item Item to get stack size of + * @returns size of stack + */ + getItemStackSize(item: Item): number; + /** + * Get the name of an item from the locale file using the item tpl + * @param itemTpl Tpl of item to get name of + * @returns Name of item + */ + getItemName(itemTpl: string): string; +} +declare namespace ItemHelper { + interface ItemSize { + width: number; + height: number; + } +} +export { ItemHelper }; diff --git a/TypeScript/16ImporterUtil/types/helpers/NotificationSendHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/NotificationSendHelper.d.ts new file mode 100644 index 0000000..c80f22d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/NotificationSendHelper.d.ts @@ -0,0 +1,12 @@ +import { INotification } from "../models/eft/notifier/INotifier"; +import { WebSocketServer } from "../servers/WebSocketServer"; +import { NotificationService } from "../services/NotificationService"; +export declare class NotificationSendHelper { + protected webSocketServer: WebSocketServer; + protected notificationService: NotificationService; + constructor(webSocketServer: WebSocketServer, notificationService: NotificationService); + /** + * Send notification message to the appropriate channel + */ + sendMessage(sessionID: string, notificationMessage: INotification): void; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/NotifierHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/NotifierHelper.d.ts new file mode 100644 index 0000000..738b69a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/NotifierHelper.d.ts @@ -0,0 +1,17 @@ +import { INotification } from "../models/eft/notifier/INotifier"; +import { Message, MessageContentRagfair } from "../models/eft/profile/IAkiProfile"; +import { HttpServerHelper } from "./HttpServerHelper"; +export declare class NotifierHelper { + protected httpServerHelper: HttpServerHelper; + /** + * The default notification sent when waiting times out. + */ + protected defaultNotification: INotification; + constructor(httpServerHelper: HttpServerHelper); + getDefaultNotification(): INotification; + /** Creates a new notification that displays the "Your offer was sold!" prompt and removes sold offer from "My Offers" on clientside */ + createRagfairOfferSoldNotification(dialogueMessage: Message, ragfairData: MessageContentRagfair): INotification; + /** Creates a new notification with the specified dialogueMessage object. */ + createNewMessageNotification(dialogueMessage: Message): INotification; + getWebSocketServer(sessionID: string): string; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/PaymentHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/PaymentHelper.d.ts new file mode 100644 index 0000000..2d068a4 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/PaymentHelper.d.ts @@ -0,0 +1,14 @@ +export declare class PaymentHelper { + /** + * Check whether tpl is Money + * @param {string} tpl + * @returns void + */ + isMoneyTpl(tpl: string): boolean; + /** + * Gets currency TPL from TAG + * @param {string} currency + * @returns string + */ + getCurrency(currency: string): string; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/PresetHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/PresetHelper.d.ts new file mode 100644 index 0000000..cea210e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/PresetHelper.d.ts @@ -0,0 +1,18 @@ +import { Preset } from "../models/eft/common/IGlobals"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class PresetHelper { + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected lookup: Record; + protected defaultPresets: Record; + constructor(jsonUtil: JsonUtil, databaseServer: DatabaseServer); + hydratePresetStore(input: Record): void; + getDefaultPresets(): Record; + isPreset(id: string): boolean; + hasPreset(templateId: string): boolean; + getPreset(id: string): Preset; + getPresets(templateId: string): Preset[]; + getDefaultPreset(templateId: string): Preset; + getBaseItemTpl(presetId: string): string; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/ProbabilityHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/ProbabilityHelper.d.ts new file mode 100644 index 0000000..7a0676c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/ProbabilityHelper.d.ts @@ -0,0 +1,14 @@ +import { ILogger } from "../models/spt/utils/ILogger"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class ProbabilityHelper { + protected logger: ILogger; + protected randomUtil: RandomUtil; + constructor(logger: ILogger, randomUtil: RandomUtil); + /** + * Chance to roll a number out of 100 + * @param chance Percentage chance roll should success + * @param scale scale of chance to allow support of numbers > 1-100 + * @returns true if success + */ + rollChance(chance: number, scale?: number): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/ProfileHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/ProfileHelper.d.ts new file mode 100644 index 0000000..79652ad --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/ProfileHelper.d.ts @@ -0,0 +1,66 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Stats } from "../models/eft/common/tables/IBotBase"; +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { Watermark } from "../utils/Watermark"; +import { ItemHelper } from "./ItemHelper"; +export declare class ProfileHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected watermark: Watermark; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected profileSnapshotService: ProfileSnapshotService; + constructor(logger: ILogger, jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileSnapshotService: ProfileSnapshotService); + resetProfileQuestCondition(sessionID: string, conditionId: string): void; + /** + * Get all profiles from server + * @returns Dictionary of profiles + */ + getProfiles(): Record; + getCompleteProfile(sessionID: string): IPmcData[]; + /** + * Fix xp doubling on post-raid xp reward screen by sending a 'dummy' profile to the post-raid screen + * Server saves the post-raid changes prior to the xp screen getting the profile, this results in the xp screen using + * the now updated profile values as a base, meaning it shows x2 xp gained + * Instead, clone the post-raid profile (so we dont alter its values), apply the pre-raid xp values to the cloned objects and return + * Delete snapshot of pre-raid profile prior to returning profile data + * @param sessionId Session id + * @param output pmc and scav profiles array + * @param pmcProfile post-raid pmc profile + * @param scavProfile post-raid scav profile + * @returns updated profile array + */ + protected postRaidXpWorkaroundFix(sessionId: string, output: IPmcData[], pmcProfile: IPmcData, scavProfile: IPmcData): IPmcData[]; + isNicknameTaken(info: IValidateNicknameRequestData, sessionID: string): boolean; + /** + * Add experience to a PMC inside the players profile + * @param sessionID Session id + * @param experienceToAdd Experience to add to PMC character + */ + addExperienceToPmc(sessionID: string, experienceToAdd: number): void; + getProfileByPmcId(pmcId: string): IPmcData; + getExperience(level: number): number; + getMaxLevel(): number; + getDefaultAkiDataObject(): any; + getFullProfile(sessionID: string): IAkiProfile; + getPmcProfile(sessionID: string): IPmcData; + getScavProfile(sessionID: string): IPmcData; + getDefaultCounters(): Stats; + protected isWiped(sessionID: string): boolean; + protected getServerVersion(): string; + /** + * Iterate over player profile inventory items and find the secure container and remove it + * @param profile Profile to remove secure container from + * @returns profile without secure container + */ + removeSecureContainer(profile: IPmcData): IPmcData; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/QuestConditionHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/QuestConditionHelper.d.ts new file mode 100644 index 0000000..90ee560 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/QuestConditionHelper.d.ts @@ -0,0 +1,7 @@ +import { AvailableForConditions } from "../models/eft/common/tables/IQuest"; +export declare class QuestConditionHelper { + getQuestConditions(q: AvailableForConditions[], furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[]; + getLevelConditions(q: AvailableForConditions[], furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[]; + getLoyaltyConditions(q: AvailableForConditions[], furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[]; + protected filterConditions(q: AvailableForConditions[], questType: string, furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[]; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/QuestHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/QuestHelper.d.ts new file mode 100644 index 0000000..de7cba2 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/QuestHelper.d.ts @@ -0,0 +1,214 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Quest } from "../models/eft/common/tables/IBotBase"; +import { AvailableForConditions, AvailableForProps, IQuest, Reward } from "../models/eft/common/tables/IQuest"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData"; +import { IFailQuestRequestData } from "../models/eft/quests/IFailQuestRequestData"; +import { QuestStatus } from "../models/enums/QuestStatus"; +import { IQuestConfig } from "../models/spt/config/IQuestConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocaleService } from "../services/LocaleService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { DialogueHelper } from "./DialogueHelper"; +import { ItemHelper } from "./ItemHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { ProfileHelper } from "./ProfileHelper"; +import { RagfairServerHelper } from "./RagfairServerHelper"; +import { TraderHelper } from "./TraderHelper"; +export declare class QuestHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected timeUtil: TimeUtil; + protected hashUtil: HashUtil; + protected itemHelper: ItemHelper; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected localeService: LocaleService; + protected ragfairServerHelper: RagfairServerHelper; + protected dialogueHelper: DialogueHelper; + protected profileHelper: ProfileHelper; + protected paymentHelper: PaymentHelper; + protected localisationService: LocalisationService; + protected traderHelper: TraderHelper; + protected configServer: ConfigServer; + protected questConfig: IQuestConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, traderHelper: TraderHelper, configServer: ConfigServer); + /** + * Get status of a quest by quest id + * @param pmcData Profile to search + * @param questID Quest id to look up + * @returns QuestStatus enum + */ + getQuestStatus(pmcData: IPmcData, questID: string): QuestStatus; + /** + * returns true is the level condition is satisfied + * @param playerLevel Players level + * @param condition Quest condition + * @returns true if player level is greater than or equal to quest + */ + doesPlayerLevelFulfilCondition(playerLevel: number, condition: AvailableForConditions): boolean; + /** + * Get the quests found in both arrays (inner join) + * @param before Array of quests #1 + * @param after Array of quests #2 + * @returns Reduction of cartesian product between two quest arrays + */ + getDeltaQuests(before: IQuest[], after: IQuest[]): IQuest[]; + /** + * Increase skill points of a skill on player profile + * @param sessionID Session id + * @param pmcData Player profile + * @param skillName Name of skill to increase skill points of + * @param progressAmount Amount of skill points to add to skill + */ + rewardSkillPoints(sessionID: string, pmcData: IPmcData, skillName: string, progressAmount: number): void; + /** + * Get quest name by quest id + * @param questId id to get + * @returns + */ + getQuestNameFromLocale(questId: string): string; + /** + * Check if trader has sufficient loyalty to fulfill quest requirement + * @param questProperties Quest props + * @param profile Player profile + * @returns true if loyalty is high enough to fulfill quest requirement + */ + traderStandingRequirementCheck(questProperties: AvailableForProps, profile: IPmcData): boolean; + protected processReward(reward: Reward): Reward[]; + /** + * Gets a flat list of reward items for the given quest at a specific state (e.g. Fail/Success) + * @param quest quest to get rewards for + * @param state Quest status that holds the items (Started, Success, Fail) + * @returns array of items with the correct maxStack + */ + getQuestRewardItems(quest: IQuest, state: QuestStatus): Reward[]; + /** + * Look up quest in db by accepted quest id and construct a profile-ready object ready to store in profile + * @param pmcData Player profile + * @param newState State the new quest should be in when returned + * @param acceptedQuest Details of accepted quest from client + */ + getQuestReadyForProfile(pmcData: IPmcData, newState: QuestStatus, acceptedQuest: IAcceptQuestRequestData): Quest; + /** + * TODO: what is going on here + * @param acceptedQuestId Quest to add to profile + * @param sessionID Session id + * @returns Array of quests in profile + quest passed in as param + */ + acceptedUnlocked(acceptedQuestId: string, sessionID: string): IQuest[]; + /** + * TODO: what is going on here + * @param failedQuestId + * @param sessionID Session id + * @returns + */ + failedUnlocked(failedQuestId: string, sessionID: string): IQuest[]; + /** + * Adjust quest money rewards by passed in multiplier + * @param quest Quest to multiple money rewards + * @param multiplier Value to adjust money rewards by + * @returns Updated quest + */ + applyMoneyBoost(quest: IQuest, multiplier: number): IQuest; + /** + * Sets the item stack to new value, or delete the item if value <= 0 + * // TODO maybe merge this function and the one from customization + * @param pmcData Profile + * @param itemId id of item to adjust stack size of + * @param newStackSize Stack size to adjust to + * @param sessionID Session id + * @param output ItemEvent router response + */ + changeItemStack(pmcData: IPmcData, itemId: string, newStackSize: number, sessionID: string, output: IItemEventRouterResponse): void; + /** + * Get quests, strip all requirement conditions except level + * @param quests quests to process + * @returns quest array without conditions + */ + protected getQuestsWithOnlyLevelRequirementStartCondition(quests: IQuest[]): IQuest[]; + /** + * Remove all quest conditions except for level requirement + * @param quest quest to clean + * @returns reset IQuest object + */ + getQuestWithOnlyLevelRequirementStartCondition(quest: IQuest): IQuest; + /** + * Fail a quest in a player profile + * @param pmcData Player profile + * @param failRequest Fail quest request data + * @param sessionID Session id + * @returns Item event router response + */ + failQuest(pmcData: IPmcData, failRequest: IFailQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Get List of All Quests from db + * NOT CLONED + * @returns Array of IQuest objects + */ + getQuestsFromDb(): IQuest[]; + /** + * Get quest by id from database (repeatables are stored in profile, check there if questId not found) + * @param questId Id of quest to find + * @param pmcData Player profile + * @returns IQuest object + */ + getQuestFromDb(questId: string, pmcData: IPmcData): IQuest; + /** + * Get the locale Id from locale db for a quest message + * @param questMessageId Quest message id to look up + * @returns Locale Id from locale db + */ + getQuestLocaleIdFromDb(questMessageId: string): string; + /** + * Alter a quests state + Add a record to its status timers object + * @param pmcData Profile to update + * @param newQuestState New state the quest should be in + * @param questId Id of the quest to alter the status of + */ + updateQuestState(pmcData: IPmcData, newQuestState: QuestStatus, questId: string): void; + /** + * Give player quest rewards - Skills/exp/trader standing/items/assort unlocks - Returns reward items player earned + * @param pmcData Player profile + * @param questId questId of quest to get rewards for + * @param state State of the quest to get rewards for + * @param sessionId Session id + * @param questResponse Response to send back to client + * @returns Array of reward objects + */ + applyQuestReward(pmcData: IPmcData, questId: string, state: QuestStatus, sessionId: string, questResponse: IItemEventRouterResponse): Reward[]; + /** + * WIP - Find hideout craft id and add to unlockedProductionRecipe array in player profile + * also update client response recipeUnlocked array with craft id + * @param pmcData Player profile + * @param craftUnlockReward Reward item from quest with craft unlock details + * @param questDetails Quest with craft unlock reward + * @param sessionID Session id + * @param response Response to send back to client + */ + protected findAndAddHideoutProductionIdToProfile(pmcData: IPmcData, craftUnlockReward: Reward, questDetails: IQuest, sessionID: string, response: IItemEventRouterResponse): void; + /** + * Get players intel center bonus from profile + * @param pmcData player profile + * @returns bonus as a percent + */ + protected getIntelCenterRewardBonus(pmcData: IPmcData): number; + /** + * Find quest with 'findItem' requirement that needs the item tpl be handed in + * @param itemTpl item tpl to look for + * @returns 'FindItem' condition id + */ + getFindItemIdForQuestHandIn(itemTpl: string): string; + /** + * Add all quests to a profile with the provided statuses + * @param pmcProfile profile to update + * @param statuses statuses quests should have + */ + addAllQuestsToProfile(pmcProfile: IPmcData, statuses: QuestStatus[]): void; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/RagfairHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/RagfairHelper.d.ts new file mode 100644 index 0000000..2c8dbb5 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/RagfairHelper.d.ts @@ -0,0 +1,43 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { IGetOffersResult } from "../models/eft/ragfair/IGetOffersResult"; +import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RagfairLinkedItemService } from "../services/RagfairLinkedItemService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { HandbookHelper } from "./HandbookHelper"; +import { ItemHelper } from "./ItemHelper"; +import { TraderAssortHelper } from "./TraderAssortHelper"; +import { UtilityHelper } from "./UtilityHelper"; +export declare class RagfairHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected traderAssortHelper: TraderAssortHelper; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected itemHelper: ItemHelper; + protected ragfairLinkedItemService: RagfairLinkedItemService; + protected utilityHelper: UtilityHelper; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, traderAssortHelper: TraderAssortHelper, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, ragfairLinkedItemService: RagfairLinkedItemService, utilityHelper: UtilityHelper, configServer: ConfigServer); + /** + * Gets currency TAG from TPL + * @param {string} currency + * @returns string + */ + getCurrencyTag(currency: string): string; + filterCategories(sessionID: string, info: ISearchRequestData): string[]; + getDisplayableAssorts(sessionID: string): Record; + protected getCategoryList(handbookId: string): string[]; + countCategories(result: IGetOffersResult): void; + /** + * Merges Root Items + * Ragfair allows abnormally large stacks. + */ + mergeStackable(items: Item[]): Item[]; + getCurrencySymbol(currencyTpl: string): string; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/RagfairOfferHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/RagfairOfferHelper.d.ts new file mode 100644 index 0000000..3d0d570 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/RagfairOfferHelper.d.ts @@ -0,0 +1,74 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData"; +import { IQuestConfig } from "../models/spt/config/IQuestConfig"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocaleService } from "../services/LocaleService"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { HashUtil } from "../utils/HashUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { DialogueHelper } from "./DialogueHelper"; +import { ItemHelper } from "./ItemHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { PresetHelper } from "./PresetHelper"; +import { ProfileHelper } from "./ProfileHelper"; +import { RagfairHelper } from "./RagfairHelper"; +import { RagfairServerHelper } from "./RagfairServerHelper"; +import { RagfairSortHelper } from "./RagfairSortHelper"; +import { TraderHelper } from "./TraderHelper"; +export declare class RagfairOfferHelper { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected hashUtil: HashUtil; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected traderHelper: TraderHelper; + protected saveServer: SaveServer; + protected dialogueHelper: DialogueHelper; + protected itemHelper: ItemHelper; + protected paymentHelper: PaymentHelper; + protected presetHelper: PresetHelper; + protected profileHelper: ProfileHelper; + protected ragfairServerHelper: RagfairServerHelper; + protected ragfairSortHelper: RagfairSortHelper; + protected ragfairHelper: RagfairHelper; + protected ragfairOfferService: RagfairOfferService; + protected localeService: LocaleService; + protected configServer: ConfigServer; + protected static goodSoldTemplate: string; + protected ragfairConfig: IRagfairConfig; + protected questConfig: IQuestConfig; + constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, traderHelper: TraderHelper, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer); + getValidOffers(searchRequest: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; + getOffersForBuild(info: ISearchRequestData, itemsToAdd: string[], assorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; + /** + * Has a traders offer ran out of stock to sell to player + * @param offer Offer to check stock of + * @returns true if out of stock + */ + protected traderOutOfStock(offer: IRagfairOffer): boolean; + /** + * Check if trader offers' BuyRestrictionMax value has been reached + * @param offer offer to check restriction properties of + * @returns true if restriction reached, false if no restrictions/not reached + */ + protected traderBuyRestrictionReached(offer: IRagfairOffer): boolean; + /** + * Get an array of flea offers that are inaccessible to player due to their inadequate loyalty level + * @param offers Offers to check + * @param pmcProfile Players profile with trader loyalty levels + */ + protected getLoyaltyLockedOffers(offers: IRagfairOffer[], pmcProfile: IPmcData): string[]; + processOffersOnProfile(sessionID: string): boolean; + protected getProfileOffers(sessionID: string): IRagfairOffer[]; + protected deleteOfferByOfferId(sessionID: string, offerId: string): void; + protected completeOffer(sessionID: string, offer: IRagfairOffer, boughtAmount: number): IItemEventRouterResponse; + isDisplayableOffer(info: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record, offer: IRagfairOffer, pmcProfile: IPmcData): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/RagfairSellHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/RagfairSellHelper.d.ts new file mode 100644 index 0000000..bf7aeb6 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/RagfairSellHelper.d.ts @@ -0,0 +1,36 @@ +import { SellResult } from "../models/eft/ragfair/IRagfairOffer"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class RagfairSellHelper { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected timeUtil: TimeUtil; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer); + /** + * Get the percent chance to sell an item based on its average listed price vs player chosen listing price + * @param baseChancePercent Base chance to sell item + * @param averageOfferPriceRub Price of average offer in roubles + * @param playerListedPriceRub Price player listed item for in roubles + * @returns percent value + */ + calculateSellChance(baseChancePercent: number, averageOfferPriceRub: number, playerListedPriceRub: number): number; + /** + * Get percent chance to sell an item when price is below items average listing price + * @param playerListedPriceRub Price player listed item for in roubles + * @param averageOfferPriceRub Price of average offer in roubles + * @returns percent value + */ + protected getSellMultiplierWhenPlayerPriceIsBelowAverageListingPrice(averageOfferPriceRub: number, playerListedPriceRub: number): number; + /** + * Determine if the offer being listed will be sold + * @param sellChancePercent chance item will sell + * @param itemSellCount count of items to sell + * @returns Array of purchases of item(s) listed + */ + rollForSale(sellChancePercent: number, itemSellCount: number): SellResult[]; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/RagfairServerHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/RagfairServerHelper.d.ts new file mode 100644 index 0000000..bfe6cc3 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/RagfairServerHelper.d.ts @@ -0,0 +1,63 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { MemberCategory } from "../models/enums/MemberCategory"; +import { IQuestConfig } from "../models/spt/config/IQuestConfig"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { LocaleService } from "../services/LocaleService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { DialogueHelper } from "./DialogueHelper"; +import { ItemHelper } from "./ItemHelper"; +import { ProfileHelper } from "./ProfileHelper"; +/** + * Helper class for common ragfair server actions + */ +export declare class RagfairServerHelper { + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected profileHelper: ProfileHelper; + protected itemHelper: ItemHelper; + protected localeService: LocaleService; + protected dialogueHelper: DialogueHelper; + protected jsonUtil: JsonUtil; + protected itemFilterService: ItemFilterService; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + protected questConfig: IQuestConfig; + protected static goodsReturnedTemplate: string; + constructor(randomUtil: RandomUtil, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, profileHelper: ProfileHelper, itemHelper: ItemHelper, localeService: LocaleService, dialogueHelper: DialogueHelper, jsonUtil: JsonUtil, itemFilterService: ItemFilterService, configServer: ConfigServer); + /** + * Is item valid / on blacklist / quest item + * @param itemDetails + * @returns boolean + */ + isItemValidRagfairItem(itemDetails: [boolean, ITemplateItem]): boolean; + protected isItemBlacklisted(itemTemplateId: string): boolean; + isTrader(userID: string): boolean; + isPlayer(userID: string): boolean; + returnItems(sessionID: string, items: Item[]): void; + calculateDynamicStackCount(tplId: string, isWeaponPreset: boolean): number; + /** + * Choose a currency at random with bias + * @returns currency tpl + */ + getDynamicOfferCurrency(): string; + getMemberType(userID: string): MemberCategory; + getNickname(userID: string): string; + getPresetItems(item: any): Item[]; + getPresetItemsByTpl(item: Item): Item[]; + /** + * Generate new unique ids for the children while preserving hierarchy + * @param item base item + * @param preset + * @returns Item array with new IDs + */ + reparentPresets(item: Item, preset: Item[]): Item[]; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/RagfairSortHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/RagfairSortHelper.d.ts new file mode 100644 index 0000000..6a06528 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/RagfairSortHelper.d.ts @@ -0,0 +1,28 @@ +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { RagfairSort } from "../models/enums/RagfairSort"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocaleService } from "../services/LocaleService"; +export declare class RagfairSortHelper { + protected databaseServer: DatabaseServer; + protected localeService: LocaleService; + constructor(databaseServer: DatabaseServer, localeService: LocaleService); + /** + * Sort a list of ragfair offers by something (id/rating/offer name/price/expiry time) + * @param offers Offers to sort + * @param type How to sort it + * @param direction Ascending/descending + * @returns Sorted offers + */ + sortOffers(offers: IRagfairOffer[], type: RagfairSort, direction?: number): IRagfairOffer[]; + protected sortOffersByID(a: IRagfairOffer, b: IRagfairOffer): number; + protected sortOffersByRating(a: IRagfairOffer, b: IRagfairOffer): number; + protected sortOffersByName(a: IRagfairOffer, b: IRagfairOffer): number; + /** + * Order two offers by rouble price value + * @param a Offer a + * @param b Offer b + * @returns + */ + protected sortOffersByPrice(a: IRagfairOffer, b: IRagfairOffer): number; + protected sortOffersByExpiry(a: IRagfairOffer, b: IRagfairOffer): number; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/RagfairTaxHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/RagfairTaxHelper.d.ts new file mode 100644 index 0000000..820facb --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/RagfairTaxHelper.d.ts @@ -0,0 +1,16 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RagfairPriceService } from "../services/RagfairPriceService"; +import { ItemHelper } from "./ItemHelper"; +import { ILogger } from "../models/spt/utils/ILogger"; +export declare class RagfairTaxHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected ragfairPriceService: RagfairPriceService; + protected itemHelper: ItemHelper; + constructor(logger: ILogger, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, itemHelper: ItemHelper); + calculateTax(item: Item, pmcData: IPmcData, requirementsValue: number, offerItemCount: number, sellInOnePiece: boolean): number; + protected calculateItemWorth(item: Item, itemTemplate: ITemplateItem, itemCount: number, pmcData: IPmcData, isRootItem?: boolean): number; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/RepairHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/RepairHelper.d.ts new file mode 100644 index 0000000..0d0257a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/RepairHelper.d.ts @@ -0,0 +1,35 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem, Props } from "../models/eft/common/tables/ITemplateItem"; +import { IRepairConfig } from "../models/spt/config/IRepairConfig"; +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 RepairHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected repairConfig: IRepairConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Alter an items durability after a repair by trader/repair kit + * @param itemToRepair item to update durability details + * @param itemToRepairDetails db details of item to repair + * @param isArmor Is item being repaired a piece of armor + * @param amountToRepair how many unit of durability to repair + * @param useRepairKit Is item being repaired with a repair kit + * @param applyMaxDurabilityDegradation should item have max durability reduced + */ + updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit: boolean, traderQualityMultipler: number, applyMaxDurabilityDegradation?: boolean): void; + protected getRandomisedArmorRepairDegradationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number, traderQualityMultipler: number): number; + protected getRandomisedWeaponRepairDegradationValue(itemProps: Props, isRepairKit: boolean, weaponMax: number, traderQualityMultipler: number): number; + /** + * Is the supplied tpl a weapon + * @param tpl tplId to check is a weapon + * @returns true if tpl is a weapon + */ + isWeaponTemplate(tpl: string): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/SecureContainerHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/SecureContainerHelper.d.ts new file mode 100644 index 0000000..9e2bc32 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/SecureContainerHelper.d.ts @@ -0,0 +1,13 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { ItemHelper } from "./ItemHelper"; +export interface OwnerInventoryItems { + from: Item[]; + to: Item[]; + sameInventory: boolean; + isMail: boolean; +} +export declare class SecureContainerHelper { + protected itemHelper: ItemHelper; + constructor(itemHelper: ItemHelper); + getSecureContainerItems(items: Item[]): string[]; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/TradeHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/TradeHelper.d.ts new file mode 100644 index 0000000..6811dd1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/TradeHelper.d.ts @@ -0,0 +1,54 @@ +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item, Upd } from "../models/eft/common/tables/IItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBuyTradeRequestData } from "../models/eft/trade/IProcessBuyTradeRequestData"; +import { IProcessSellTradeRequestData } from "../models/eft/trade/IProcessSellTradeRequestData"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RagfairServer } from "../servers/RagfairServer"; +import { FenceService } from "../services/FenceService"; +import { PaymentService } from "../services/PaymentService"; +export declare class TradeHelper { + protected logger: ILogger; + protected eventOutputHolder: EventOutputHolder; + protected traderHelper: TraderHelper; + protected itemHelper: ItemHelper; + protected paymentService: PaymentService; + protected fenceService: FenceService; + protected inventoryHelper: InventoryHelper; + protected ragfairServer: RagfairServer; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, traderHelper: TraderHelper, itemHelper: ItemHelper, paymentService: PaymentService, fenceService: FenceService, inventoryHelper: InventoryHelper, ragfairServer: RagfairServer, configServer: ConfigServer); + /** + * Buy item from flea or trader + * @param pmcData Player profile + * @param buyRequestData data from client + * @param sessionID Session id + * @param foundInRaid Should item be found in raid + * @param upd optional item details used when buying from flea + * @returns + */ + buyItem(pmcData: IPmcData, buyRequestData: IProcessBuyTradeRequestData, sessionID: string, foundInRaid: boolean, upd: Upd): IItemEventRouterResponse; + /** + * Sell item to trader + * @param pmcData Profile to update + * @param sellRequest request data + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + sellItem(pmcData: IPmcData, sellRequest: IProcessSellTradeRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Increment the assorts buy count by number of items purchased + * Show error on screen if player attempts to buy more than what the buy max allows + * @param assortBeingPurchased assort being bought + * @param itemsPurchasedCount number of items being bought + */ + protected incrementAssortBuyCount(assortBeingPurchased: Item, itemsPurchasedCount: number): void; + protected checkPurchaseIsWithinTraderItemLimit(assortBeingPurchased: Item, assortId: string, count: number): void; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/TraderAssortHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/TraderAssortHelper.d.ts new file mode 100644 index 0000000..a0294a1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/TraderAssortHelper.d.ts @@ -0,0 +1,82 @@ +import { RagfairAssortGenerator } from "../generators/RagfairAssortGenerator"; +import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITrader, ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { TraderAssortService } from "../services/TraderAssortService"; +import { TraderPurchasePersisterService } from "../services/TraderPurchasePersisterService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { MathUtil } from "../utils/MathUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { AssortHelper } from "./AssortHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { ProfileHelper } from "./ProfileHelper"; +import { TraderHelper } from "./TraderHelper"; +export declare class TraderAssortHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected mathUtil: MathUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected profileHelper: ProfileHelper; + protected assortHelper: AssortHelper; + protected paymentHelper: PaymentHelper; + protected ragfairAssortGenerator: RagfairAssortGenerator; + protected ragfairOfferGenerator: RagfairOfferGenerator; + protected traderAssortService: TraderAssortService; + protected localisationService: LocalisationService; + protected traderPurchasePersisterService: TraderPurchasePersisterService; + protected traderHelper: TraderHelper; + protected fenceService: FenceService; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + protected mergedQuestAssorts: Record>; + protected createdMergedQuestAssorts: boolean; + constructor(logger: ILogger, jsonUtil: JsonUtil, mathUtil: MathUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, profileHelper: ProfileHelper, assortHelper: AssortHelper, paymentHelper: PaymentHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferGenerator: RagfairOfferGenerator, traderAssortService: TraderAssortService, localisationService: LocalisationService, traderPurchasePersisterService: TraderPurchasePersisterService, traderHelper: TraderHelper, fenceService: FenceService, configServer: ConfigServer); + /** + * Get a traders assorts + * Can be used for returning ragfair / fence assorts + * Filter out assorts not unlocked due to level OR quest completion + * @param sessionId session id + * @param traderId traders id + * @returns a traders' assorts + */ + getAssort(sessionId: string, traderId: string, flea?: boolean): ITraderAssort; + /** + * Create a dict of all assort id = quest id mappings used to work out what items should be shown to player based on the quests they've started/completed/failed + */ + protected hydrateMergedQuestAssorts(): void; + /** + * Reset a traders assorts and move nextResupply value to future + * Flag trader as needing a flea offer reset to be picked up by flea update() function + * @param trader trader details to alter + */ + resetExpiredTrader(trader: ITrader): void; + /** + * Does the supplied trader need its assorts refreshed + * @param traderID Trader to check + * @returns true they need refreshing + */ + traderAssortsHaveExpired(traderID: string): boolean; + /** + * Iterate over all assorts barter_scheme values, find barters selling for money and multiply by multipler in config + * @param traderAssort Assorts to multiple price of + */ + protected multiplyItemPricesByConfigMultiplier(traderAssort: ITraderAssort): void; + /** + * Get an array of pristine trader items prior to any alteration by player (as they were on server start) + * @param traderId trader id + * @returns array of Items + */ + protected getPristineTraderAssorts(traderId: string): Item[]; + /** + * Returns generated ragfair offers in a trader assort format + * @returns Trader assort object + */ + protected getRagfairDataAsTraderAssort(): ITraderAssort; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/TraderHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/TraderHelper.d.ts new file mode 100644 index 0000000..49aea28 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/TraderHelper.d.ts @@ -0,0 +1,158 @@ +import { FenceLevel } from "../models/eft/common/IGlobals"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IBarterScheme, ITraderAssort, ITraderBase, LoyaltyLevel } from "../models/eft/common/tables/ITrader"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { PlayerService } from "../services/PlayerService"; +import { TimeUtil } from "../utils/TimeUtil"; +import { HandbookHelper } from "./HandbookHelper"; +import { ItemHelper } from "./ItemHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { ProfileHelper } from "./ProfileHelper"; +export declare class TraderHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected saveServer: SaveServer; + protected profileHelper: ProfileHelper; + protected paymentHelper: PaymentHelper; + protected itemHelper: ItemHelper; + protected handbookHelper: HandbookHelper; + protected playerService: PlayerService; + protected localisationService: LocalisationService; + protected fenceService: FenceService; + protected timeUtil: TimeUtil; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + /** Dictionary of item tpl and the highest trader rouble price */ + protected highestTraderPriceItems: Record; + constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemHelper: ItemHelper, handbookHelper: HandbookHelper, playerService: PlayerService, localisationService: LocalisationService, fenceService: FenceService, timeUtil: TimeUtil, configServer: ConfigServer); + getTrader(traderID: string, sessionID: string): ITraderBase; + getTraderAssortsById(traderId: string): ITraderAssort; + /** + * Reset a profiles trader data back to its initial state as seen by a level 1 player + * Does NOT take into account different profile levels + * @param sessionID session id + * @param traderID trader id to reset + */ + resetTrader(sessionID: string, traderID: string): void; + /** + * Alter a traders unlocked status + * @param traderId Trader to alter + * @param status New status to use + * @param sessionId Session id + */ + setTraderUnlockedState(traderId: string, status: boolean, sessionId: string): void; + /** + * Get a list of items and their prices from player inventory that can be sold to a trader + * @param traderID trader id being traded with + * @param sessionID session id + * @returns IBarterScheme[][] + */ + getPurchasesData(traderID: string, sessionID: string): Record; + /** + * Should item be skipped when selling to trader according to its sell categories and other checks + * @param pmcData Profile + * @param item Item to be checked is sellable to trader + * @param sellCategory categories trader will buy + * @param traderId Trader item is being checked can be sold to + * @returns true if should NOT be sold to trader + */ + protected isItemUnSellableToTrader(pmcData: IPmcData, item: Item, sellCategory: string[], traderId: string): boolean; + /** + * Check if item has durability so low it precludes it from being sold to the trader (inclusive) + * @param item Item to check durability of + * @param traderId Trader item is sold to + * @returns + */ + protected itemIsBelowSellableDurabilityThreshhold(item: Item, traderId: string): boolean; + /** + * Get the percentage threshold value a trader will buy armor/weapons above + * @param traderId Trader to look up + * @returns percentage + */ + protected getTraderDurabiltyPurchaseThreshold(traderId: string): number; + /** + * Get the price of passed in item and all of its attached children (mods) + * Take into account bonuses/adjustments e.g. discounts + * @param pmcData profile data + * @param item item to calculate price of + * @param buyPriceCoefficient + * @param fenceInfo fence data + * @param traderBase trader details + * @param currencyTpl Currency to get price as + * @returns price of item + children + */ + protected getAdjustedItemPrice(pmcData: IPmcData, item: Item, buyPriceCoefficient: number, fenceInfo: FenceLevel, traderBase: ITraderBase, currencyTpl: string): number; + /** + * Get the raw price of item+child items from handbook without any modification + * @param pmcData profile data + * @param item item to calculate price of + * @returns price as number + */ + protected getRawItemPrice(pmcData: IPmcData, item: Item): number; + /** + * Get discount modifier for desired trader + * @param trader Trader to get discount for + * @param buyPriceCoefficient + * @param fenceInfo fence info, needed if getting fence modifier value + * @returns discount modifier value + */ + protected getTraderDiscount(trader: ITraderBase, buyPriceCoefficient: number, fenceInfo: FenceLevel): number; + /** + * Add standing to a trader and level them up if exp goes over level threshold + * @param sessionId Session id + * @param traderId Traders id + * @param standingToAdd Standing value to add to trader + */ + addStandingToTrader(sessionId: string, traderId: string, standingToAdd: number): void; + /** + * Calculate traders level based on exp amount and increments level if over threshold + * @param traderID trader to process + * @param sessionID session id + */ + lvlUp(traderID: string, sessionID: string): void; + /** + * Get the next update timestamp for a trader + * @param traderID Trader to look up update value for + * @returns future timestamp + */ + getNextUpdateTimestamp(traderID: string): number; + /** + * Get the reset time between trader assort refreshes in seconds + * @param traderId Trader to look up + * @returns Time in seconds + */ + getTraderUpdateSeconds(traderId: string): number; + /** + * check if an item is allowed to be sold to a trader + * @param categoriesTraderBuys array of allowed categories + * @param tplToCheck itemTpl of inventory + * @returns boolean if item can be sold to trader + */ + doesTraderBuyItem(categoriesTraderBuys: string[], tplToCheck: string): boolean; + getLoyaltyLevel(traderID: string, pmcData: IPmcData): LoyaltyLevel; + /** + * Store the purchase of an assort from a trader in the player profile + * @param sessionID Session id + * @param newPurchaseDetails New item assort id + count + */ + addTraderPurchasesToPlayerProfile(sessionID: string, newPurchaseDetails: { + items: { + item_id: string; + count: number; + }[]; + tid: string; + }): void; + /** + * Get the highest rouble price for an item from traders + * @param tpl Item to look up highest pride for + * @returns highest rouble cost for item + */ + getHighestTraderPriceRouble(tpl: string): number; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/UtilityHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/UtilityHelper.d.ts new file mode 100644 index 0000000..5d9f482 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/UtilityHelper.d.ts @@ -0,0 +1,3 @@ +export declare class UtilityHelper { + arrayIntersect(a: T[], b: T[]): T[]; +} diff --git a/TypeScript/16ImporterUtil/types/helpers/WeightedRandomHelper.d.ts b/TypeScript/16ImporterUtil/types/helpers/WeightedRandomHelper.d.ts new file mode 100644 index 0000000..9aa0d29 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/helpers/WeightedRandomHelper.d.ts @@ -0,0 +1,28 @@ +export declare class WeightedRandomHelper { + /** + * Gets a tplId from a weighted dictionary + * @param {tplId: weighting[]} itemArray + * @returns tplId + */ + getWeightedInventoryItem(itemArray: { + [tplId: string]: unknown; + } | ArrayLike): string; + /** + * Picks the random item based on its weight. + * The items with higher weight will be picked more often (with a higher probability). + * + * For example: + * - items = ['banana', 'orange', 'apple'] + * - weights = [0, 0.2, 0.8] + * - weightedRandom(items, weights) in 80% of cases will return 'apple', in 20% of cases will return + * 'orange' and it will never return 'banana' (because probability of picking the banana is 0%) + * + * @param {any[]} items + * @param {number[]} weights + * @returns {{item: any, index: number}} + */ + weightedRandom(items: string | any[], weights: string | any[]): { + item: any; + index: number; + }; +} diff --git a/TypeScript/16ImporterUtil/types/ide/BleedingEdgeEntry.d.ts b/TypeScript/16ImporterUtil/types/ide/BleedingEdgeEntry.d.ts new file mode 100644 index 0000000..fded23a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/ide/BleedingEdgeEntry.d.ts @@ -0,0 +1 @@ +import "reflect-metadata"; diff --git a/TypeScript/16ImporterUtil/types/ide/DebugEntry.d.ts b/TypeScript/16ImporterUtil/types/ide/DebugEntry.d.ts new file mode 100644 index 0000000..fded23a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/ide/DebugEntry.d.ts @@ -0,0 +1 @@ +import "reflect-metadata"; diff --git a/TypeScript/16ImporterUtil/types/ide/ReleaseEntry.d.ts b/TypeScript/16ImporterUtil/types/ide/ReleaseEntry.d.ts new file mode 100644 index 0000000..fded23a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/ide/ReleaseEntry.d.ts @@ -0,0 +1 @@ +import "reflect-metadata"; diff --git a/TypeScript/16ImporterUtil/types/ide/TestEntry.d.ts b/TypeScript/16ImporterUtil/types/ide/TestEntry.d.ts new file mode 100644 index 0000000..fded23a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/ide/TestEntry.d.ts @@ -0,0 +1 @@ +import "reflect-metadata"; diff --git a/TypeScript/16ImporterUtil/types/loaders/BundleLoader.d.ts b/TypeScript/16ImporterUtil/types/loaders/BundleLoader.d.ts new file mode 100644 index 0000000..b88723c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/loaders/BundleLoader.d.ts @@ -0,0 +1,29 @@ +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +declare class BundleInfo { + modPath: string; + key: string; + path: string; + filepath: string; + dependencyKeys: string[]; + constructor(modpath: string, bundle: any, bundlePath: string, bundleFilepath: string); +} +export declare class BundleLoader { + protected httpServerHelper: HttpServerHelper; + protected vfs: VFS; + protected jsonUtil: JsonUtil; + protected bundles: Record; + constructor(httpServerHelper: HttpServerHelper, vfs: VFS, jsonUtil: JsonUtil); + getBundles(local: boolean): BundleInfo[]; + getBundle(key: string, local: boolean): BundleInfo; + addBundles(modpath: string): void; +} +export interface BundleManifest { + manifest: Array; +} +export interface BundleManifestEntry { + key: string; + path: string; +} +export {}; diff --git a/TypeScript/16ImporterUtil/types/loaders/ModTypeCheck.d.ts b/TypeScript/16ImporterUtil/types/loaders/ModTypeCheck.d.ts new file mode 100644 index 0000000..e907341 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/loaders/ModTypeCheck.d.ts @@ -0,0 +1,43 @@ +import { IPostAkiLoadMod } from "../models/external/IPostAkiLoadMod"; +import { IPostAkiLoadModAsync } from "../models/external/IPostAkiLoadModAsync"; +import { IPostDBLoadMod } from "../models/external/IPostDBLoadMod"; +import { IPostDBLoadModAsync } from "../models/external/IPostDBLoadModAsync"; +import { IPreAkiLoadMod } from "../models/external/IPreAkiLoadMod"; +import { IPreAkiLoadModAsync } from "../models/external/IPreAkiLoadModAsync"; +export declare class ModTypeCheck { + /** + * Use defined safe guard to check if the mod is a IPreAkiLoadMod + * @returns boolean + */ + isPreAkiLoad(mod: any): mod is IPreAkiLoadMod; + /** + * Use defined safe guard to check if the mod is a IPostAkiLoadMod + * @returns boolean + */ + isPostAkiLoad(mod: any): mod is IPostAkiLoadMod; + /** + * Use defined safe guard to check if the mod is a IPostDBLoadMod + * @returns boolean + */ + isPostDBAkiLoad(mod: any): mod is IPostDBLoadMod; + /** + * Use defined safe guard to check if the mod is a IPreAkiLoadModAsync + * @returns boolean + */ + isPreAkiLoadAsync(mod: any): mod is IPreAkiLoadModAsync; + /** + * Use defined safe guard to check if the mod is a IPostAkiLoadModAsync + * @returns boolean + */ + isPostAkiLoadAsync(mod: any): mod is IPostAkiLoadModAsync; + /** + * Use defined safe guard to check if the mod is a IPostDBLoadModAsync + * @returns boolean + */ + isPostDBAkiLoadAsync(mod: any): mod is IPostDBLoadModAsync; + /** + * Checks for mod to be compatible with 3.X+ + * @returns boolean + */ + isPostV3Compatible(mod: any): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/loaders/PostAkiModLoader.d.ts b/TypeScript/16ImporterUtil/types/loaders/PostAkiModLoader.d.ts new file mode 100644 index 0000000..5df8c6c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/loaders/PostAkiModLoader.d.ts @@ -0,0 +1,17 @@ +import { DependencyContainer } from "tsyringe"; +import { IModLoader } from "../models/spt/mod/IModLoader"; +import { VFS } from "../utils/VFS"; +import { BundleLoader } from "./BundleLoader"; +import { ModTypeCheck } from "./ModTypeCheck"; +import { PreAkiModLoader } from "./PreAkiModLoader"; +export declare class PostAkiModLoader implements IModLoader { + protected bundleLoader: BundleLoader; + protected vfs: VFS; + protected preAkiModLoader: PreAkiModLoader; + protected modTypeCheck: ModTypeCheck; + constructor(bundleLoader: BundleLoader, vfs: VFS, preAkiModLoader: PreAkiModLoader, modTypeCheck: ModTypeCheck); + getModPath(mod: string): string; + load(): Promise; + protected executeMods(container: DependencyContainer): Promise; + protected addBundles(): void; +} diff --git a/TypeScript/16ImporterUtil/types/loaders/PostDBModLoader.d.ts b/TypeScript/16ImporterUtil/types/loaders/PostDBModLoader.d.ts new file mode 100644 index 0000000..c4cda5c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/loaders/PostDBModLoader.d.ts @@ -0,0 +1,13 @@ +import { DependencyContainer } from "tsyringe"; +import { OnLoad } from "../di/OnLoad"; +import { ModTypeCheck } from "./ModTypeCheck"; +import { PreAkiModLoader } from "./PreAkiModLoader"; +export declare class PostDBModLoader implements OnLoad { + protected preAkiModLoader: PreAkiModLoader; + protected modTypeCheck: ModTypeCheck; + constructor(preAkiModLoader: PreAkiModLoader, modTypeCheck: ModTypeCheck); + onLoad(): Promise; + getRoute(): string; + getModPath(mod: string): string; + protected executeMods(container: DependencyContainer): Promise; +} diff --git a/TypeScript/16ImporterUtil/types/loaders/PreAkiModLoader.d.ts b/TypeScript/16ImporterUtil/types/loaders/PreAkiModLoader.d.ts new file mode 100644 index 0000000..1949696 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/loaders/PreAkiModLoader.d.ts @@ -0,0 +1,76 @@ +import { DependencyContainer } from "tsyringe"; +import { ICoreConfig } from "../models/spt/config/ICoreConfig"; +import { IModLoader } from "../models/spt/mod/IModLoader"; +import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { ModCompilerService } from "../services/ModCompilerService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +import { BundleLoader } from "./BundleLoader"; +import { ModTypeCheck } from "./ModTypeCheck"; +export declare class PreAkiModLoader implements IModLoader { + protected logger: ILogger; + protected vfs: VFS; + protected jsonUtil: JsonUtil; + protected modCompilerService: ModCompilerService; + protected bundleLoader: BundleLoader; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected modTypeCheck: ModTypeCheck; + protected static container: DependencyContainer; + protected readonly basepath = "user/mods/"; + protected readonly modOrderPath = "user/mods/order.json"; + protected order: Record; + protected imported: Record; + protected akiConfig: ICoreConfig; + constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, modCompilerService: ModCompilerService, bundleLoader: BundleLoader, localisationService: LocalisationService, configServer: ConfigServer, modTypeCheck: ModTypeCheck); + load(container: DependencyContainer): Promise; + /** + * Returns a list of mods with preserved load order + * @returns Array of mod names in load order + */ + getImportedModsNames(): string[]; + getImportedModDetails(): Record; + getModPath(mod: string): string; + protected importMods(): Promise; + /** + * Check for duplciate mods loaded, show error if duplicate mod found + * @param modPackageData dictionary of mod package.json data + */ + protected checkForDuplicateMods(modPackageData: Record): void; + /** + * Check for and return duplicate strings inside an array + * @param stringArray Array to check for duplicates + * @returns string array of duplicates, empty if none found + */ + protected getDuplicates(stringArray: string[]): string[]; + /** + * Get an array of mods with errors that prevent them from working with SPT + * @param mods mods to validate + * @returns Mod names as array + */ + protected getBrokenMods(mods: string[]): string[]; + /** + * Get packageJson data for mods + * @param mods mods to get packageJson for + * @returns dictionary + */ + protected getModsPackageData(mods: string[]): Record; + protected isModCombatibleWithAki(mod: IPackageJsonData): boolean; + protected executeMods(container: DependencyContainer): Promise; + sortModsLoadOrder(): string[]; + protected addMod(mod: string): Promise; + protected areModDependenciesFulfilled(pkg: IPackageJsonData, loadedMods: Record): boolean; + protected isModCompatible(mod: IPackageJsonData, loadedMods: Record): boolean; + /** + * Validate a mod passes a number of checks + * @param modName name of mod in /mods/ to validate + * @returns true if valid + */ + protected validMod(modName: string): boolean; + protected getLoadOrderRecursive(mod: string, result: Record, visited: Record): void; + protected getLoadOrder(mods: Record): Record; + getContainer(): DependencyContainer; +} diff --git a/TypeScript/16ImporterUtil/types/models/common/MinMax.d.ts b/TypeScript/16ImporterUtil/types/models/common/MinMax.d.ts new file mode 100644 index 0000000..bc118a8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/common/MinMax.d.ts @@ -0,0 +1,4 @@ +export interface MinMax { + max: number; + min: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/bot/IGenerateBotsRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/bot/IGenerateBotsRequestData.d.ts new file mode 100644 index 0000000..f1f7013 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/bot/IGenerateBotsRequestData.d.ts @@ -0,0 +1,9 @@ +export interface IGenerateBotsRequestData { + conditions: Condition[]; +} +export interface Condition { + /** e.g. assault/pmcBot/bossKilla */ + Role: string; + Limit: number; + Difficulty: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/bot/IRandomisedBotLevelResult.d.ts b/TypeScript/16ImporterUtil/types/models/eft/bot/IRandomisedBotLevelResult.d.ts new file mode 100644 index 0000000..75bd936 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/bot/IRandomisedBotLevelResult.d.ts @@ -0,0 +1,4 @@ +export interface IRandomisedBotLevelResult { + level: number; + exp: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/IEmptyRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/IEmptyRequestData.d.ts new file mode 100644 index 0000000..284d16e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/IEmptyRequestData.d.ts @@ -0,0 +1,2 @@ +export interface IEmptyRequestData { +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/IGlobals.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/IGlobals.d.ts new file mode 100644 index 0000000..b5ed401 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/IGlobals.d.ts @@ -0,0 +1,1305 @@ +import { Item } from "./tables/IItem"; +export interface IGlobals { + time: number; + config: Config; + bot_presets: BotPreset[]; + BotWeaponScatterings: BotWeaponScattering[]; + ItemPresets: Record; +} +export interface Config { + content: Content; + AimPunchMagnitude: number; + WeaponSkillProgressRate: number; + SkillAtrophy: boolean; + exp: Exp; + t_base_looting: number; + t_base_lockpicking: number; + armor: Armor; + SessionsToShowHotKeys: number; + MaxBotsAliveOnMap: number; + SavagePlayCooldown: number; + SavagePlayCooldownNdaFree: number; + MarksmanAccuracy: number; + SavagePlayCooldownDevelop: number; + TODSkyDate: string; + Mastering: Mastering[]; + GlobalItemPriceModifier: number; + TradingUnlimitedItems: boolean; + MaxLoyaltyLevelForAll: boolean; + GlobalLootChanceModifier: number; + TimeBeforeDeploy: number; + TimeBeforeDeployLocal: number; + TradingSetting: number; + TradingSettings: ITradingSettings; + ItemsCommonSettings: IItemsCommonSettings; + LoadTimeSpeedProgress: number; + BaseLoadTime: number; + BaseUnloadTime: number; + BaseCheckTime: number; + Customization: Customization; + UncheckOnShot: boolean; + BotsEnabled: boolean; + BufferZone: IBufferZone; + ArmorMaterials: ArmorMaterials; + LegsOverdamage: number; + HandsOverdamage: number; + StomachOverdamage: number; + Health: Health; + rating: Rating; + tournament: Tournament; + RagFair: RagFair; + handbook: Handbook; + FractureCausedByFalling: Probability; + FractureCausedByBulletHit: Probability; + WAVE_COEF_LOW: number; + WAVE_COEF_MID: number; + WAVE_COEF_HIGH: number; + WAVE_COEF_HORDE: number; + Stamina: Stamina; + StaminaRestoration: StaminaRestoration; + StaminaDrain: StaminaDrain; + RequirementReferences: RequirementReferences; + RestrictionsInRaid: RestrictionsInRaid[]; + SkillMinEffectiveness: number; + SkillFatiguePerPoint: number; + SkillFreshEffectiveness: number; + SkillFreshPoints: number; + SkillPointsBeforeFatigue: number; + SkillFatigueReset: number; + DiscardLimitsEnabled: boolean; + EventType: string[]; + WalkSpeed: xyz; + SprintSpeed: xyz; + SkillEnduranceWeightThreshold: number; + TeamSearchingTimeout: number; + Insurance: Insurance; + SkillExpPerLevel: number; + GameSearchingTimeout: number; + WallContusionAbsorption: xyz; + SkillsSettings: SkillsSettings; + AzimuthPanelShowsPlayerOrientation: boolean; + Aiming: Aiming; + Malfunction: Malfunction; + Overheat: Overheat; + FenceSettings: FenceSettings; + TestValue: number; + Inertia: Inertia; + Ballistic: Ballistic; + RepairSettings: RepairSettings; +} +export interface IBufferZone { + CustomerAccessTime: number; + CustomerCriticalTimeStart: number; + CustomerKickNotifTime: number; +} +export interface IItemsCommonSettings { + ItemRemoveAfterInterruptionTime: number; +} +export interface ITradingSettings { + BuyoutRestrictions: IBuyoutRestrictions; +} +export interface IBuyoutRestrictions { + MinDurability: number; + MinFoodDrinkResource: number; + MinMedsResource: number; +} +export interface Content { + ip: string; + port: number; + root: string; +} +export interface Exp { + heal: Heal; + match_end: MatchEnd; + kill: Kill; + level: Level; + loot_attempts: LootAttempt[]; + expForLockedDoorOpen: number; + expForLockedDoorBreach: number; + triggerMult: number; +} +export interface Heal { + expForHeal: number; + expForHydration: number; + expForEnergy: number; +} +export interface MatchEnd { + README: string; + survived_exp_requirement: number; + survived_seconds_requirement: number; + survived_exp_reward: number; + mia_exp_reward: number; + runner_exp_reward: number; + leftMult: number; + miaMult: number; + survivedMult: number; + runnerMult: number; + killedMult: number; +} +export interface Kill { + combo: Combo[]; + victimLevelExp: number; + headShotMult: number; + expOnDamageAllHealth: number; + longShotDistance: number; + bloodLossToLitre: number; + victimBotLevelExp: number; +} +export interface Combo { + percent: number; +} +export interface Level { + exp_table: ExpTable[]; + trade_level: number; + savage_level: number; + clan_level: number; + mastering1: number; + mastering2: number; +} +export interface ExpTable { + exp: number; +} +export interface LootAttempt { + k_exp: number; +} +export interface Armor { + class: Class[]; +} +export interface Class { + resistance: number; +} +export interface Mastering { + Name: string; + Templates: string[]; + Level2: number; + Level3: number; +} +export interface Customization { + SavageHead: SavageHead; + SavageBody: SavageBody; + SavageFeet: SavageFeet; + CustomizationVoice: CustomizationVoice[]; + BodyParts: BodyParts; +} +export interface SavageHead { + wild_head_1: WildHead; + wild_head_2: WildHead; + wild_head_3: WildHead; + Wild_Dealmaker_head: WildHead; + Wild_Killa_head: WildHead; + bear_head: WildHead; + bear_head_1: WildHead; + usec_head_1: WildHead; + Head_BOSS_Glukhar: WildHead; + Wild_Head_nonMesh: WildHead; + Head_BOSS_Sanitar: WildHead; + wild_head_drozd: WildHead; + wild_head_misha: WildHead; + head_cultist_01: WildHead; + head_cultist_02: WildHead; + head_cultist_03: WildHead; + DefaultUsecHead: WildHead; + usec_head_3: WildHead; + usec_head_4: WildHead; + usec_head_5: WildHead; +} +export interface WildHead { + head: string; + isNotRandom: boolean; + NotRandom: boolean; +} +export interface SavageBody { + wild_body: WildBody; + wild_body_1: WildBody; + wild_body_2: WildBody; + wild_body_3: WildBody; + Wild_Dealmaker_body: WildBody; + wild_security_body_1: WildBody; + wild_security_body_2: WildBody; + wild_Killa_body: WildBody; + wild_pmcBot_body: WildBody; + wild_Shturman_body: WildBody; + wild_Gluhar_body: WildBody; + Tshirt_security_TshirtTatu_01: WildBody; + Tshirt_security_TshirtTatu_02: WildBody; + Top_security_Husky: WildBody; + Top_security_Gorka4: WildBody; + scav_kit_upper_meteor: WildBody; + wild_body_russia1: WildBody; + Top_BOSS_Sanitar: WildBody; + wild_body_motocross: WildBody; + top_cultist_01: WildBody; + top_cultist_02: WildBody; + wild_body_rainparka: WildBody; + wild_body_underarmour: WildBody; + top_boss_tagilla: WildBody; + DefaultUsecBody: WildBody; + usec_upper_acu: WildBody; + usec_upper_commando: WildBody; + usec_upper_aggressor: WildBody; + usec_upper_hoody: WildBody; + usec_upper_pcuironsight: WildBody; + usec_top_beltstaff: WildBody; + usec_upper_flexion: WildBody; + usec_upper_tier3: WildBody; + usec_upper_pcsmulticam: WildBody; + usec_upper_tier_2: WildBody; + usec_upper_infiltrator: WildBody; + user_upper_NightPatrol: WildBody; + wild_body_bomber: WildBody; + wild_top_yellowcoat: WildBody; +} +export interface WildBody { + body: string; + hands: string; + isNotRandom: boolean; +} +export interface SavageFeet { + wild_feet: WildFeet; + wild_feet_1: WildFeet; + wild_feet_2: WildFeet; + Wild_Dealmaker_feet: WildFeet; + wild_security_feet_1: WildFeet; + Wild_Killa_feet: WildFeet; + wild_pmcBot_feet: WildFeet; + Pants_BOSS_Glukhar: WildFeet; + Pants_BOSS_Shturman: WildFeet; + Pants_security_Gorka4: WildFeet; + Pants_security_Flora: WildFeet; + scav_kit_lower_sklon: WildFeet; + Pants_BOSS_Sanitar: WildFeet; + wild_feet_sweatpants: WildFeet; + wild_feet_wasatch: WildFeet; + wild_feet_slimPants: WildFeet; + pants_cultist_01: WildFeet; + pants_cultist_02: WildFeet; + wild_feet_scavelite_taclite: WildFeet; + pants_boss_tagilla: WildFeet; + wild_feet_bomber: WildFeet; + wild_pants_yellowcoat: WildFeet; +} +export interface WildFeet { + feet: string; + isNotRandom: boolean; + NotRandom: boolean; +} +export interface CustomizationVoice { + voice: string; + side: string[]; + isNotRandom: boolean; +} +export interface BodyParts { + Head: string; + Body: string; + Feet: string; + Hands: string; +} +export interface ArmorMaterials { + UHMWPE: ArmorType; + Aramid: ArmorType; + Combined: ArmorType; + Titan: ArmorType; + Aluminium: ArmorType; + ArmoredSteel: ArmorType; + Ceramic: ArmorType; + Glass: ArmorType; +} +export interface ArmorType { + Destructibility: number; + MinRepairDegradation: number; + MaxRepairDegradation: number; + ExplosionDestructibility: number; + MinRepairKitDegradation: number; + MaxRepairKitDegradation: number; +} +export interface Health { + Falling: Falling; + Effects: Effects; + HealPrice: HealPrice; + ProfileHealthSettings: ProfileHealthSettings; +} +export interface Falling { + DamagePerMeter: number; + SafeHeight: number; +} +export interface Effects { + Existence: Existence; + Dehydration: Dehydration; + BreakPart: BreakPart; + Contusion: Contusion; + Disorientation: Disorientation; + Exhaustion: Exhaustion; + LowEdgeHealth: LowEdgeHealth; + RadExposure: RadExposure; + Stun: Stun; + Intoxication: Intoxication; + Regeneration: Regeneration; + Wound: Wound; + Berserk: Berserk; + Flash: Flash; + MedEffect: MedEffect; + Pain: Pain; + PainKiller: PainKiller; + SandingScreen: SandingScreen; + MildMusclePain: IMusclePainEffect; + SevereMusclePain: IMusclePainEffect; + Stimulator: Stimulator; + Tremor: Tremor; + ChronicStaminaFatigue: ChronicStaminaFatigue; + Fracture: Fracture2; + HeavyBleeding: HeavyBleeding2; + LightBleeding: LightBleeding2; + BodyTemperature: BodyTemperature; +} +export interface Existence { + EnergyLoopTime: number; + HydrationLoopTime: number; + EnergyDamage: number; + HydrationDamage: number; + DestroyedStomachEnergyTimeFactor: number; + DestroyedStomachHydrationTimeFactor: number; +} +export interface Dehydration { + DefaultDelay: number; + DefaultResidueTime: number; + BleedingHealth: number; + BleedingLoopTime: number; + BleedingLifeTime: number; + DamageOnStrongDehydration: number; + StrongDehydrationLoopTime: number; +} +export interface BreakPart { + DefaultDelay: number; + DefaultResidueTime: number; + HealExperience: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovePrice: number; + RemovedAfterDeath: boolean; + BulletHitProbability: Probability; + FallingProbability: Probability; +} +export interface Contusion { + Dummy: number; +} +export interface Disorientation { + Dummy: number; +} +export interface Exhaustion { + DefaultDelay: number; + DefaultResidueTime: number; + Damage: number; + DamageLoopTime: number; +} +export interface LowEdgeHealth { + DefaultDelay: number; + DefaultResidueTime: number; + StartCommonHealth: number; +} +export interface RadExposure { + Damage: number; + DamageLoopTime: number; +} +export interface Stun { + Dummy: number; +} +export interface Intoxication { + DefaultDelay: number; + DefaultResidueTime: number; + DamageHealth: number; + HealthLoopTime: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovedAfterDeath: boolean; + HealExperience: number; + RemovePrice: number; +} +export interface Regeneration { + LoopTime: number; + MinimumHealthPercentage: number; + Energy: number; + Hydration: number; + BodyHealth: BodyHealth; + Influences: Influences; +} +export interface BodyHealth { + Head: BodyHealthValue; + Chest: BodyHealthValue; + Stomach: BodyHealthValue; + LeftArm: BodyHealthValue; + RightArm: BodyHealthValue; + LeftLeg: BodyHealthValue; + RightLeg: BodyHealthValue; +} +export interface BodyHealthValue { + Value: number; +} +export interface Influences { + LightBleeding: Influence; + HeavyBleeding: Influence; + Fracture: Influence; + RadExposure: Influence; + Intoxication: Influence; +} +export interface Influence { + HealthSlowDownPercentage: number; + EnergySlowDownPercentage: number; + HydrationSlowDownPercentage: number; +} +export interface Wound { + WorkingTime: number; + ThresholdMin: number; + ThresholdMax: number; +} +export interface Berserk { + DefaultDelay: number; + WorkingTime: number; + DefaultResidueTime: number; +} +export interface Flash { + Dummy: number; +} +export interface MedEffect { + LoopTime: number; + StartDelay: number; + DrinkStartDelay: number; + FoodStartDelay: number; + DrugsStartDelay: number; + MedKitStartDelay: number; + MedicalStartDelay: number; + StimulatorStartDelay: number; +} +export interface Pain { + TremorDelay: number; + HealExperience: number; +} +export interface PainKiller { + Dummy: number; +} +export interface SandingScreen { + Dummy: number; +} +export interface IMusclePainEffect { + GymEffectivity: number; + OfflineDurationMax: number; + OfflineDurationMin: number; + TraumaChance: number; +} +export interface Stimulator { + BuffLoopTime: number; + Buffs: Buffs; +} +export interface Buffs { + BuffsSJ1TGLabs: Buff[]; + BuffsSJ6TGLabs: Buff[]; + BuffsPropital: Buff[]; + BuffsZagustin: Buff[]; + BuffseTGchange: Buff[]; + BuffsAdrenaline: Buff[]; + BuffsGoldenStarBalm: Buff[]; + Buffs_drink_aquamari: Buff[]; + Buffs_drink_maxenergy: Buff[]; + Buffs_drink_milk: Buff[]; + Buffs_drink_tarcola: Buff[]; + Buffs_drink_hotrod: Buff[]; + Buffs_drink_juice_army: Buff[]; + Buffs_drink_water: Buff[]; + Buffs_food_borodinskiye: Buff[]; + Buffs_food_condensed_milk: Buff[]; + Buffs_food_emelya: Buff[]; + Buffs_food_mayonez: Buff[]; + Buffs_food_mre: Buff[]; + Buffs_food_sugar: Buff[]; + Buffs_drink_vodka: Buff[]; + Buffs_drink_jack: Buff[]; + Buffs_drink_moonshine: Buff[]; + Buffs_drink_purewater: Buff[]; + Buffs_3bTG: Buff[]; + Buffs_AHF1M: Buff[]; + Buffs_L1: Buff[]; + Buffs_MULE: Buff[]; + Buffs_Meldonin: Buff[]; + Buffs_Obdolbos: Buff[]; + Buffs_P22: Buff[]; + Buffs_KultistsToxin: Buff[]; + Buffs_BodyTemperature: Buff[]; + Buffs_Antidote: Buff[]; + Buffs_melee_bleed: Buff[]; + Buffs_melee_blunt: Buff[]; + Buffs_hultafors: Buff[]; + Buffs_drink_vodka_BAD: Buff[]; + Buffs_food_alyonka: Buff[]; + Buffs_food_slippers: Buff[]; + Buffs_knife: Buff[]; +} +export interface Buff { + BuffType: string; + Chance: number; + Delay: number; + Duration: number; + Value: number; + AbsoluteValue: boolean; + SkillName: string; +} +export interface Tremor { + DefaultDelay: number; + DefaultResidueTime: number; +} +export interface ChronicStaminaFatigue { + EnergyRate: number; + WorkingTime: number; + TicksEvery: number; + EnergyRatePerStack: number; +} +export interface Fracture2 { + DefaultDelay: number; + DefaultResidueTime: number; + HealExperience: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovePrice: number; + RemovedAfterDeath: boolean; + BulletHitProbability: Probability; + FallingProbability: Probability; +} +export interface HeavyBleeding2 { + DefaultDelay: number; + DefaultResidueTime: number; + DamageEnergy: number; + DamageHealth: number; + EnergyLoopTime: number; + HealthLoopTime: number; + DamageHealthDehydrated: number; + HealthLoopTimeDehydrated: number; + LifeTimeDehydrated: number; + EliteVitalityDuration: number; + HealExperience: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovePrice: number; + RemovedAfterDeath: boolean; + Probability: Probability; +} +export interface Probability { + FunctionType: string; + K: number; + B: number; + Threshold: number; +} +export interface LightBleeding2 { + DefaultDelay: number; + DefaultResidueTime: number; + DamageEnergy: number; + DamageHealth: number; + EnergyLoopTime: number; + HealthLoopTime: number; + DamageHealthDehydrated: number; + HealthLoopTimeDehydrated: number; + LifeTimeDehydrated: number; + EliteVitalityDuration: number; + HealExperience: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovePrice: number; + RemovedAfterDeath: boolean; + Probability: Probability; +} +export interface BodyTemperature { + DefaultBuildUpTime: number; + DefaultResidueTime: number; + LoopTime: number; +} +export interface HealPrice { + HealthPointPrice: number; + HydrationPointPrice: number; + EnergyPointPrice: number; + TrialLevels: number; + TrialRaids: number; +} +export interface ProfileHealthSettings { + BodyPartsSettings: BodyPartsSettings; + HealthFactorsSettings: HealthFactorsSettings; + DefaultStimulatorBuff: string; +} +export interface BodyPartsSettings { + Head: BodyPartsSetting; + Chest: BodyPartsSetting; + Stomach: BodyPartsSetting; + LeftArm: BodyPartsSetting; + RightArm: BodyPartsSetting; + LeftLeg: BodyPartsSetting; + RightLeg: BodyPartsSetting; +} +export interface BodyPartsSetting { + Minimum: number; + Maximum: number; + Default: number; + OverDamageReceivedMultiplier: number; +} +export interface HealthFactorsSettings { + Energy: HealthFactorSetting; + Hydration: HealthFactorSetting; + Temperature: HealthFactorSetting; + Poisoning: HealthFactorSetting; + Radiation: HealthFactorSetting; +} +export interface HealthFactorSetting { + Minimum: number; + Maximum: number; + Default: number; +} +export interface Rating { + levelRequired: number; + limit: number; + categories: Categories; +} +export interface Categories { + experience: boolean; + kd: boolean; + surviveRatio: boolean; + avgEarnings: boolean; + kills: boolean; + raidCount: boolean; + longestShot: boolean; + timeOnline: boolean; + inventoryFullCost: boolean; + ragFairStanding: boolean; +} +export interface Tournament { + categories: Categories2; + limit: number; + levelRequired: number; +} +export interface Categories2 { + dogtags: boolean; +} +export interface RagFair { + enabled: boolean; + priceStabilizerEnabled: boolean; + includePveTraderSales: boolean; + priceStabilizerStartIntervalInHours: number; + minUserLevel: number; + communityTax: number; + communityItemTax: number; + communityRequirementTax: number; + offerPriorityCost: number; + offerDurationTimeInHour: number; + offerDurationTimeInHourAfterRemove: number; + priorityTimeModifier: number; + maxRenewOfferTimeInHour: number; + renewPricePerHour: number; + maxActiveOfferCount: MaxActiveOfferCount[]; + balancerRemovePriceCoefficient: number; + balancerMinPriceCount: number; + balancerAveragePriceCoefficient: number; + delaySinceOfferAdd: number; + uniqueBuyerTimeoutInDays: number; + ratingSumForIncrease: number; + ratingIncreaseCount: number; + ratingSumForDecrease: number; + ratingDecreaseCount: number; + maxSumForIncreaseRatingPerOneSale: number; + maxSumForDecreaseRatingPerOneSale: number; + maxSumForRarity: MaxSumForRarity; + ChangePriceCoef: number; + balancerUserItemSaleCooldownEnabled: boolean; + balancerUserItemSaleCooldown: number; + youSellOfferMaxStorageTimeInHour: number; + yourOfferDidNotSellMaxStorageTimeInHour: number; + isOnlyFoundInRaidAllowed: boolean; + sellInOnePiece: number; +} +export interface MaxActiveOfferCount { + from: number; + to: number; + count: number; +} +export interface MaxSumForRarity { + Common: RarityMaxSum; + Rare: RarityMaxSum; + Superrare: RarityMaxSum; + Not_exist: RarityMaxSum; +} +export interface RarityMaxSum { + value: number; +} +export interface Handbook { + defaultCategory: string; +} +export interface Stamina { + Capacity: number; + SprintDrainRate: number; + BaseRestorationRate: number; + JumpConsumption: number; + GrenadeHighThrow: number; + GrenadeLowThrow: number; + AimDrainRate: number; + AimRangeFinderDrainRate: number; + OxygenCapacity: number; + OxygenRestoration: number; + WalkOverweightLimits: xyz; + BaseOverweightLimits: xyz; + SprintOverweightLimits: xyz; + WalkSpeedOverweightLimits: xyz; + CrouchConsumption: xyz; + WalkConsumption: xyz; + StandupConsumption: xyz; + TransitionSpeed: xyz; + SprintAccelerationLowerLimit: number; + SprintSpeedLowerLimit: number; + SprintSensitivityLowerLimit: number; + AimConsumptionByPose: xyz; + RestorationMultiplierByPose: xyz; + OverweightConsumptionByPose: xyz; + AimingSpeedMultiplier: number; + WalkVisualEffectMultiplier: number; + HandsCapacity: number; + HandsRestoration: number; + ProneConsumption: number; + BaseHoldBreathConsumption: number; + SoundRadius: xyz; + ExhaustedMeleeSpeed: number; + FatigueRestorationRate: number; + FatigueAmountToCreateEffect: number; + ExhaustedMeleeDamageMultiplier: number; + FallDamageMultiplier: number; + SafeHeightOverweight: number; + SitToStandConsumption: number; + StaminaExhaustionCausesJiggle: boolean; + StaminaExhaustionStartsBreathSound: boolean; + StaminaExhaustionRocksCamera: boolean; + HoldBreathStaminaMultiplier: xyz; + PoseLevelIncreaseSpeed: xyz; + PoseLevelDecreaseSpeed: xyz; + PoseLevelConsumptionPerNotch: xyz; +} +export interface StaminaRestoration { + LowerLeftPoint: number; + LowerRightPoint: number; + LeftPlatoPoint: number; + RightPlatoPoint: number; + RightLimit: number; + ZeroValue: number; +} +export interface StaminaDrain { + LowerLeftPoint: number; + LowerRightPoint: number; + LeftPlatoPoint: number; + RightPlatoPoint: number; + RightLimit: number; + ZeroValue: number; +} +export interface RequirementReferences { + Alpinist: Alpinist[]; +} +export interface Alpinist { + Requirement: string; + Id: string; + Count: number; + RequiredSlot: string; + RequirementTip: string; +} +export interface RestrictionsInRaid { + TemplateId: string; + Value: number; +} +export interface Insurance { + MaxStorageTimeInHour: number; +} +export interface SkillsSettings { + SkillProgressRate: number; + WeaponSkillProgressRate: number; + WeaponSkillRecoilBonusPerLevel: number; + HideoutManagement: HideoutManagement; + Crafting: Crafting; + Metabolism: Metabolism; + Immunity: Immunity; + Endurance: Endurance; + Strength: Strength; + Vitality: Vitality; + Health: Health2; + StressResistance: StressResistance; + Throwing: Throwing; + RecoilControl: RecoilControl; + Pistol: WeaponSkills; + Revolver: WeaponSkills; + SMG: any[]; + Assault: WeaponSkills; + Shotgun: WeaponSkills; + Sniper: WeaponSkills; + LMG: any[]; + HMG: any[]; + Launcher: any[]; + AttachedLauncher: any[]; + Melee: IMeleeSkill; + DMR: WeaponSkills; + BearAssaultoperations: any[]; + BearAuthority: any[]; + BearAksystems: any[]; + BearHeavycaliber: any[]; + BearRawpower: any[]; + UsecArsystems: any[]; + UsecDeepweaponmodding_Settings: any[]; + UsecLongrangeoptics_Settings: any[]; + UsecNegotiations: any[]; + UsecTactics: any[]; + BotReload: any[]; + CovertMovement: CovertMovement; + FieldMedicine: any[]; + Search: Search; + Sniping: any[]; + ProneMovement: any[]; + FirstAid: any[]; + LightVests: ArmorSkills; + HeavyVests: ArmorSkills; + WeaponModding: any[]; + AdvancedModding: any[]; + NightOps: any[]; + SilentOps: any[]; + Lockpicking: any[]; + WeaponTreatment: WeaponTreatment; + MagDrills: MagDrills; + Freetrading: any[]; + Auctions: any[]; + Cleanoperations: any[]; + Barter: any[]; + Shadowconnections: any[]; + Taskperformance: any[]; + Perception: Perception; + Intellect: Intellect; + Attention: Attention; + Charisma: Charisma; + Memory: Memory; + Surgery: Surgery; + AimDrills: AimDrills; + BotSound: any[]; + TroubleShooting: TroubleShooting; +} +export interface IMeleeSkill { + BuffSettings: IBuffSettings; +} +export interface ArmorSkills { + BuffMaxCount: number; + BuffSettings: IBuffSettings; + Counters: IArmorCounters; + MoveSpeedPenaltyReductionHVestsReducePerLevel: number; + RicochetChanceHVestsCurrentDurabilityThreshold: number; + RicochetChanceHVestsEliteLevel: number; + RicochetChanceHVestsMaxDurabilityThreshold: number; + MeleeDamageLVestsReducePerLevel: number; + MoveSpeedPenaltyReductionLVestsReducePerLevel: number; + WearAmountRepairLVestsReducePerLevel: number; + WearChanceRepairLVestsReduceEliteLevel: number; +} +export interface IArmorCounters { + armorDurability: ISkillCounter; +} +export interface HideoutManagement { + SkillPointsPerAreaUpgrade: number; + SkillPointsPerCraft: number; + ConsumptionReductionPerLevel: number; + SkillBoostPercent: number; + SkillPointsRate: SkillPointsRate; + EliteSlots: EliteSlots; +} +export interface SkillPointsRate { + Generator: Generator; + AirFilteringUnit: SkillPointRate; + WaterCollector: SkillPointRate; + SolarPower: SkillPointRate; +} +export interface SkillPointRate { + ResourceSpent: number; + PointsGained: number; +} +export interface EliteSlots { + Generator: EliteSlot; + AirFilteringUnit: EliteSlot; + WaterCollector: EliteSlot; + BitcoinFarm: EliteSlot; +} +export interface EliteSlot { + Slots: number; + Container: number; +} +export interface Crafting { + PointsPerCraftingCycle: number; + CraftingCycleHours: number; + PointsPerUniqueCraftCycle: number; + UniqueCraftsPerCycle: number; + CraftTimeReductionPerLevel: number; + ProductionTimeReductionPerLevel: number; + EliteExtraProductions: number; + CraftingPointsToInteligence: number; +} +export interface Metabolism { + HydrationRecoveryRate: number; + EnergyRecoveryRate: number; + IncreasePositiveEffectDurationRate: number; + DecreaseNegativeEffectDurationRate: number; + DecreasePoisonDurationRate: number; +} +export interface Immunity { + ImmunityMiscEffects: number; + ImmunityPoisonBuff: number; + ImmunityPainKiller: number; + HealthNegativeEffect: number; + StimulatorNegativeBuff: number; +} +export interface Endurance { + MovementAction: number; + SprintAction: number; + GainPerFatigueStack: number; + QTELevelMultipliers: Record>; +} +export interface Strength { + SprintActionMin: number; + SprintActionMax: number; + MovementActionMin: number; + MovementActionMax: number; + PushUpMin: number; + PushUpMax: number; + QTELevelMultipliers: IQTELevelMultiplier[]; + FistfightAction: number; + ThrowAction: number; +} +export interface IQTELevelMultiplier { + Level: number; + Multiplier: number; +} +export interface Vitality { + DamageTakenAction: number; + HealthNegativeEffect: number; +} +export interface Health2 { + SkillProgress: number; +} +export interface StressResistance { + HealthNegativeEffect: number; + LowHPDuration: number; +} +export interface Throwing { + ThrowAction: number; +} +export interface RecoilControl { + RecoilAction: number; + RecoilBonusPerLevel: number; +} +export interface WeaponSkills { + WeaponReloadAction: number; + WeaponShotAction: number; + WeaponFixAction: number; + WeaponChamberAction: number; +} +export interface CovertMovement { + MovementAction: number; +} +export interface Search { + SearchAction: number; + FindAction: number; +} +export interface WeaponTreatment { + BuffMaxCount: number; + BuffSettings: IBuffSettings; + Counters: IWeaponTreatmentCounters; + DurLossReducePerLevel: number; + SkillPointsPerRepair: number; + Filter: any[]; + WearAmountRepairGunsReducePerLevel: number; + WearChanceRepairGunsReduceEliteLevel: number; +} +export interface IWeaponTreatmentCounters { + firearmsDurability: ISkillCounter; +} +export interface IBuffSettings { + CommonBuffChanceLevelBonus: number; + CommonBuffMinChanceValue: number; + CurrentDurabilityLossToRemoveBuff?: number; + MaxDurabilityLossToRemoveBuff?: number; + RareBuffChanceCoff: number; + ReceivedDurabilityMaxPercent: number; +} +export interface MagDrills { + RaidLoadedAmmoAction: number; + RaidUnloadedAmmoAction: number; + MagazineCheckAction: number; +} +export interface Perception { + DependentSkillRatios: ISkillRatio[]; + OnlineAction: number; + UniqueLoot: number; +} +export interface ISkillRatio { + Ratio: number; + SkillId: string; +} +export interface Intellect { + Counters: IIntellectCounters; + ExamineAction: number; + SkillProgress: number; + RepairAction: number; + WearAmountReducePerLevel: number; + WearChanceReduceEliteLevel: number; + RepairPointsCostReduction: number; +} +export interface IIntellectCounters { + armorDurability: ISkillCounter; + firearmsDurability: ISkillCounter; + meleeWeaponDurability: ISkillCounter; +} +export interface ISkillCounter { + divisor: number; + points: number; +} +export interface Attention { + DependentSkillRatios: ISkillRatio[]; + ExamineWithInstruction: number; + FindActionFalse: number; + FindActionTrue: number; +} +export interface Charisma { + BonusSettings: IBonusSettings; + Counters: ICharismaSkillCounters; + SkillProgressInt: number; + SkillProgressAtn: number; + SkillProgressPer: number; +} +export interface ICharismaSkillCounters { + insuranceCost: ISkillCounter; + repairCost: ISkillCounter; + repeatableQuestCompleteCount: ISkillCounter; + restoredHealthCost: ISkillCounter; + scavCaseCost: ISkillCounter; +} +export interface IBonusSettings { + EliteBonusSettings: IEliteBonusSettings; + LevelBonusSettings: ILevelBonusSettings; +} +export interface IEliteBonusSettings { + FenceStandingLossDiscount: number; + RepeatableQuestExtraCount: number; + ScavCaseDiscount: number; +} +export interface ILevelBonusSettings { + HealthRestoreDiscount: number; + HealthRestoreTraderDiscount: number; + InsuranceDiscount: number; + InsuranceTraderDiscount: number; + PaidExitDiscount: number; + RepeatableQuestChangeDiscount: number; +} +export interface Memory { + AnySkillUp: number; + SkillProgress: number; +} +export interface Surgery { + SurgeryAction: number; + SkillProgress: number; +} +export interface AimDrills { + WeaponShotAction: number; +} +export interface TroubleShooting { + MalfRepairSpeedBonusPerLevel: number; + SkillPointsPerMalfFix: number; + EliteDurabilityChanceReduceMult: number; + EliteAmmoChanceReduceMult: number; + EliteMagChanceReduceMult: number; +} +export interface Aiming { + ProceduralIntensityByPose: xyz; + AimProceduralIntensity: number; + HeavyWeight: number; + LightWeight: number; + MaxTimeHeavy: number; + MinTimeHeavy: number; + MaxTimeLight: number; + MinTimeLight: number; + RecoilScaling: number; + RecoilDamping: number; + CameraSnapGlobalMult: number; + RecoilXIntensityByPose: xyz; + RecoilYIntensityByPose: xyz; + RecoilZIntensityByPose: xyz; + RecoilCrank: boolean; + RecoilHandDamping: number; + RecoilConvergenceMult: number; + RecoilVertBonus: number; + RecoilBackBonus: number; +} +export interface Malfunction { + AmmoMalfChanceMult: number; + MagazineMalfChanceMult: number; + MalfRepairHardSlideMult: number; + MalfRepairOneHandBrokenMult: number; + MalfRepairTwoHandsBrokenMult: number; + AllowMalfForBots: boolean; + ShowGlowAttemptsCount: number; + OutToIdleSpeedMultForPistol: number; + IdleToOutSpeedMultOnMalf: number; + TimeToQuickdrawPistol: number; + DurRangeToIgnoreMalfs: xyz; + DurFeedWt: number; + DurMisfireWt: number; + DurJamWt: number; + DurSoftSlideWt: number; + DurHardSlideMinWt: number; + DurHardSlideMaxWt: number; + AmmoMisfireWt: number; + AmmoFeedWt: number; + AmmoJamWt: number; + OverheatFeedWt: number; + OverheatJamWt: number; + OverheatSoftSlideWt: number; + OverheatHardSlideMinWt: number; + OverheatHardSlideMaxWt: number; +} +export interface Overheat { + MinOverheat: number; + MaxOverheat: number; + OverheatProblemsStart: number; + ModHeatFactor: number; + ModCoolFactor: number; + MinWearOnOverheat: number; + MaxWearOnOverheat: number; + MinWearOnMaxOverheat: number; + MaxWearOnMaxOverheat: number; + OverheatWearLimit: number; + MaxCOIIncreaseMult: number; + MinMalfChance: number; + MaxMalfChance: number; + DurReduceMinMult: number; + DurReduceMaxMult: number; + BarrelMoveRndDuration: number; + BarrelMoveMaxMult: number; + FireratePitchMult: number; + FirerateReduceMinMult: number; + FirerateReduceMaxMult: number; + FirerateOverheatBorder: number; + EnableSlideOnMaxOverheat: boolean; + StartSlideOverheat: number; + FixSlideOverheat: number; + AutoshotMinOverheat: number; + AutoshotChance: number; + AutoshotPossibilityDuration: number; + MaxOverheatCoolCoef: number; +} +export interface FenceSettings { + FenceId: string; + Levels: Record; + paidExitStandingNumerator: number; +} +export interface FenceLevel { + SavageCooldownModifier: number; + ScavCaseTimeModifier: number; + PaidExitCostModifier: number; + BotFollowChance: number; + ScavEquipmentSpawnChanceModifier: number; + PriceModifier: number; + HostileBosses: boolean; + HostileScavs: boolean; + ScavAttackSupport: boolean; + ExfiltrationPriceModifier: number; + AvailableExits: number; +} +export interface Inertia { + InertiaLimits: xyz; + InertiaLimitsStep: number; + ExitMovementStateSpeedThreshold: xyz; + WalkInertia: xyz; + FallThreshold: number; + SpeedLimitAfterFallMin: xyz; + SpeedLimitAfterFallMax: xyz; + SpeedLimitDurationMin: xyz; + SpeedLimitDurationMax: xyz; + SpeedInertiaAfterJump: xyz; + BaseJumpPenaltyDuration: number; + DurationPower: number; + BaseJumpPenalty: number; + PenaltyPower: number; + InertiaTiltCurveMin: xyz; + InertiaTiltCurveMax: xyz; + InertiaBackwardCoef: xyz; + TiltInertiaMaxSpeed: xyz; + TiltStartSideBackSpeed: xyz; + TiltMaxSideBackSpeed: xyz; + TiltAcceleration: xyz; + AverageRotationFrameSpan: number; + SprintSpeedInertiaCurveMin: xyz; + SprintSpeedInertiaCurveMax: xyz; + SprintBrakeInertia: xyz; + SprintTransitionMotionPreservation: xyz; + WeaponFlipSpeed: xyz; + PreSprintAccelerationLimits: xyz; + SprintAccelerationLimits: xyz; + SideTime: xyz; + DiagonalTime: xyz; + MaxTimeWithoutInput: xyz; + MinDirectionBlendTime: number; + MoveTimeRange: xyz; + ProneDirectionAccelerationRange: xyz; + ProneSpeedAccelerationRange: xyz; + MinMovementAccelerationRangeRight: xyz; + MaxMovementAccelerationRangeRight: xyz; +} +export interface xyz { + x: number; + y: number; + z: number; +} +export interface Ballistic { + GlobalDamageDegradationCoefficient: number; +} +export interface RepairSettings { + ItemEnhancementSettings: IItemEnhancementSettings; + MinimumLevelToApplyBuff: number; + RepairStrategies: IRepairStrategies; + armorClassDivisor: number; + durabilityPointCostArmor: number; + durabilityPointCostGuns: number; +} +export interface IItemEnhancementSettings { + DamageReduction: IPriceModifier; + MalfunctionProtections: IPriceModifier; + WeaponSpread: IPriceModifier; +} +export interface IPriceModifier { + PriceModifier: number; +} +export interface IRepairStrategies { + Armor: IRepairStrategy; + Firearms: IRepairStrategy; +} +export interface IRepairStrategy { + BuffTypes: string[]; + Filter: string[]; +} +export interface BotPreset { + UseThis: boolean; + Role: string; + BotDifficulty: string; + VisibleAngle: number; + VisibleDistance: number; + ScatteringPerMeter: number; + HearingSense: number; + SCATTERING_DIST_MODIF: number; + MAX_AIMING_UPGRADE_BY_TIME: number; + FIRST_CONTACT_ADD_SEC: number; + COEF_IF_MOVE: number; +} +export interface BotWeaponScattering { + Name: string; + PriorityScatter1meter: number; + PriorityScatter10meter: number; + PriorityScatter100meter: number; +} +export interface Preset { + _id: string; + _type: string; + _changeWeaponName: boolean; + _name: string; + _parent: string; + _items: Item[]; + /** Default presets have this property */ + _encyclopedia?: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/ILocation.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/ILocation.d.ts new file mode 100644 index 0000000..42fac06 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/ILocation.d.ts @@ -0,0 +1,6 @@ +import { ILocationBase } from "./ILocationBase"; +import { ILooseLoot } from "./ILooseLoot"; +export interface ILocation { + base: ILocationBase; + looseLoot: ILooseLoot; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/ILocationBase.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/ILocationBase.d.ts new file mode 100644 index 0000000..1c3a2fa --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/ILocationBase.d.ts @@ -0,0 +1,212 @@ +export interface ILocationBase { + AccessKeys: string[]; + AirdropParameters: AirdropParameter[]; + Area: number; + AveragePlayTime: number; + AveragePlayerLevel: number; + Banners: Banner[]; + BossLocationSpawn: BossLocationSpawn[]; + BotAssault: number; + BotEasy: number; + BotHard: number; + BotImpossible: number; + BotLocationModifier: BotLocationModifier; + BotMarksman: number; + BotMax: number; + BotMaxPlayer: number; + BotMaxTimePlayer: number; + BotNormal: number; + BotSpawnTimeOffMax: number; + BotSpawnTimeOffMin: number; + BotSpawnTimeOnMax: number; + BotSpawnTimeOnMin: number; + BotStart: number; + BotStop: number; + Description: string; + DisabledForScav: boolean; + DisabledScavExits: string; + Enabled: boolean; + EnableCoop: boolean; + GlobalLootChanceModifier: number; + IconX: number; + IconY: number; + Id: string; + Insurance: boolean; + IsSecret: boolean; + Locked: boolean; + Loot: any[]; + MaxBotPerZone: number; + MaxDistToFreePoint: number; + MaxPlayers: number; + MinDistToExitPoint: number; + MinDistToFreePoint: number; + MinMaxBots: MinMaxBot[]; + MinPlayers: number; + MaxCoopGroup: number; + Name: string; + NewSpawn: boolean; + OcculsionCullingEnabled: boolean; + OldSpawn: boolean; + OpenZones: string; + Preview: Preview; + RequiredPlayerLevel: number; + PmcMaxPlayersInGroup: number; + ScavMaxPlayersInGroup: number; + Rules: string; + SafeLocation: boolean; + Scene: Scene; + SpawnPointParams: SpawnPointParam[]; + UnixDateTime: number; + _Id: string; + doors: any[]; + EscapeTimeLimit: number; + EscapeTimeLimitCoop: number; + exit_access_time: number; + exit_count: number; + exit_time: number; + exits: Exit[]; + filter_ex: string[]; + limits: ILimit[]; + matching_min_seconds: number; + GenerateLocalLootCache: boolean; + maxItemCountInLocation: MaxItemCountInLocation[]; + sav_summon_seconds: number; + tmp_location_field_remove_me: number; + users_gather_seconds: number; + users_spawn_seconds_n: number; + users_spawn_seconds_n2: number; + users_summon_seconds: number; + waves: Wave[]; +} +export interface ILimit { + min: number; + max: number; + items: any[]; +} +export interface AirdropParameter { + AirdropPointDeactivateDistance: number; + MinPlayersCountToSpawnAirdrop: number; + PlaneAirdropChance: number; + PlaneAirdropCooldownMax: number; + PlaneAirdropCooldownMin: number; + PlaneAirdropEnd: number; + PlaneAirdropMax: number; + PlaneAirdropStartMax: number; + PlaneAirdropStartMin: number; + UnsuccessfulTryPenalty: number; +} +export interface Banner { + id: string; + pic: Pic; +} +export interface Pic { + path: string; + rcid: string; +} +export interface BossLocationSpawn { + BossChance: number; + BossDifficult: string; + BossEscortAmount: string; + BossEscortDifficult: string; + BossEscortType: string; + BossName: string; + BossPlayer: boolean; + BossZone: string; + RandomTimeSpawn: boolean; + Time: number; + TriggerId: string; + TriggerName: string; + Delay?: number; + Supports?: BossSupport[]; + sptId?: string; +} +export interface BossSupport { + BossEscortAmount: string; + BossEscortDifficult: string[]; + BossEscortType: string; +} +export interface BotLocationModifier { + AccuracySpeed: number; + DistToActivate: number; + DistToPersueAxemanCoef: number; + DistToSleep: number; + GainSight: number; + KhorovodChance: number; + MagnetPower: number; + MarksmanAccuratyCoef: number; + Scattering: number; + VisibleDistance: number; +} +export interface MinMaxBot { + WildSpawnType: WildSpawnType; + max: number; + min: number; +} +export interface Preview { + path: string; + rcid: string; +} +export interface Scene { + path: string; + rcid: string; +} +export interface SpawnPointParam { + BotZoneName: string; + Categories: string[]; + ColliderParams: ColliderParams; + DelayToCanSpawnSec: number; + Id: string; + Infiltration: string; + Position: xyz; + Rotation: number; + Sides: string[]; +} +export interface ColliderParams { + _parent: string; + _props: Props; +} +export interface Props { + Center: xyz; + Radius: number; +} +export interface xyz { + x: number; + y: number; + z: number; +} +export interface Exit { + Chance: number; + Count: number; + EntryPoints: string; + ExfiltrationTime: number; + ExfiltrationType: string; + RequiredSlot?: string; + Id: string; + MaxTime: number; + MinTime: number; + Name: string; + PassageRequirement: string; + PlayersCount: number; + RequirementTip: string; +} +export interface MaxItemCountInLocation { + TemplateId: string; + Value: number; +} +export interface Wave { + BotPreset: string; + BotSide: string; + SpawnPoints: string; + WildSpawnType: WildSpawnType; + isPlayers: boolean; + number: number; + slots_max: number; + slots_min: number; + time_max: number; + time_min: number; + sptId?: string; +} +export declare enum WildSpawnType { + ASSAULT = "assault", + MARKSMAN = "marksman" +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/ILocationsSourceDestinationBase.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/ILocationsSourceDestinationBase.d.ts new file mode 100644 index 0000000..7f8d915 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/ILocationsSourceDestinationBase.d.ts @@ -0,0 +1,9 @@ +import { ILocations } from "../../spt/server/ILocations"; +export interface ILocationsGenerateAllResponse { + locations: ILocations; + paths: Path[]; +} +export interface Path { + Source: string; + Destination: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/ILooseLoot.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/ILooseLoot.d.ts new file mode 100644 index 0000000..14b795e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/ILooseLoot.d.ts @@ -0,0 +1,45 @@ +export interface ILooseLoot { + spawnpointCount: SpawnpointCount; + spawnpointsForced: SpawnpointsForced[]; + spawnpoints: Spawnpoint[]; +} +export interface SpawnpointCount { + mean: number; + std: number; +} +export interface SpawnpointsForced { + locationId: string; + probability: number; + template: SpawnpointTemplate; +} +export interface SpawnpointTemplate { + Id: string; + IsStatic: boolean; + useGravity: boolean; + randomRotation: boolean; + Position: Xyz; + Rotation: Xyz; + IsGroupPosition: boolean; + GroupPositions: any[]; + Root: any; + Items: Item[]; +} +export interface Item { + _id: string; + _tpl?: string; +} +export interface Spawnpoint { + locationId: string; + probability: number; + template: SpawnpointTemplate; + itemDistribution: ItemDistribution[]; +} +export interface Xyz { + x: number; + y: number; + z: number; +} +export interface ItemDistribution { + tpl: string; + relativeProbability: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/IMetricsTableData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/IMetricsTableData.d.ts new file mode 100644 index 0000000..873ef82 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/IMetricsTableData.d.ts @@ -0,0 +1,7 @@ +export interface IMetricsTableData { + Keys: number[]; + NetProcessingBins: number[]; + RenderBins: number[]; + GameUpdateBins: number[]; + MemoryMeasureInterval: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/IPmcData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/IPmcData.d.ts new file mode 100644 index 0000000..5703e4b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/IPmcData.d.ts @@ -0,0 +1,3 @@ +import { IBotBase } from "./tables/IBotBase"; +export interface IPmcData extends IBotBase { +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/request/IBaseInteractionRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/request/IBaseInteractionRequestData.d.ts new file mode 100644 index 0000000..7303275 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/request/IBaseInteractionRequestData.d.ts @@ -0,0 +1,9 @@ +export interface IBaseInteractionRequestData { + Action: string; + fromOwner?: OwnerInfo; + toOwner?: OwnerInfo; +} +export interface OwnerInfo { + id: string; + type: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IBotBase.d.ts new file mode 100644 index 0000000..dd7c478 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IBotBase.d.ts @@ -0,0 +1,378 @@ +import { HideoutAreas } from "../../../enums/HideoutAreas"; +import { MemberCategory } from "../../../enums/MemberCategory"; +import { QuestStatus } from "../../../enums/QuestStatus"; +import { IRagfairOffer } from "../../ragfair/IRagfairOffer"; +import { Item, Upd } from "./IItem"; +import { IPmcDataRepeatableQuest } from "./IRepeatableQuests"; +export interface IBotBase { + _id: string; + aid: string; + savage?: string; + Info: Info; + Customization: Customization; + Health: Health; + Inventory: Inventory; + Skills: Skills; + Stats: Stats; + Encyclopedia: Record; + ConditionCounters: ConditionCounters; + BackendCounters: Record; + InsuredItems: InsuredItem[]; + Hideout: Hideout; + Quests: Quest[]; + TradersInfo: Record; + UnlockedInfo: IUnlockedInfo; + RagfairInfo: RagfairInfo; + RepeatableQuests: IPmcDataRepeatableQuest[]; + Bonuses: Bonus[]; + Notes: Notes; + CarExtractCounts: CarExtractCounts; + SurvivorClass: SurvivorClass; + WishList: string[]; + /** SPT specific property used during bot generation in raid */ + sptIsPmc?: boolean; +} +export interface IUnlockedInfo { + unlockedProductionRecipe: string[]; +} +export interface Info { + EntryPoint: string; + Nickname: string; + LowerNickname: string; + Side: string; + Voice: string; + Level: number; + Experience: number; + RegistrationDate: number; + GameVersion: string; + AccountType: number; + MemberCategory: MemberCategory; + lockedMoveCommands: boolean; + SavageLockTime: number; + LastTimePlayedAsSavage: number; + Settings: Settings; + NicknameChangeDate: number; + NeedWipeOptions: any[]; + lastCompletedWipe: LastCompleted; + Bans: IBan[]; + BannedState: boolean; + BannedUntil: number; + IsStreamerModeAvailable: boolean; + lastCompletedEvent?: LastCompleted; +} +export interface Settings { + Role: string; + BotDifficulty: string; + Experience: number; + StandingForKill: number; + AggressorBonus: number; +} +export interface IBan { + type: BanType; + dateTime: number; +} +export declare enum BanType { + CHAT = 0, + RAGFAIR = 1, + VOIP = 2, + TRADING = 3, + ONLINE = 4, + FRIENDS = 5, + CHANGE_NICKNAME = 6 +} +export interface Customization { + Head: string; + Body: string; + Feet: string; + Hands: string; +} +export interface Health { + Hydration: CurrentMax; + Energy: CurrentMax; + Temperature: CurrentMax; + BodyParts: BodyPartsHealth; + UpdateTime: number; +} +export interface BodyPartsHealth { + Head: BodyPartHealth; + Chest: BodyPartHealth; + Stomach: BodyPartHealth; + LeftArm: BodyPartHealth; + RightArm: BodyPartHealth; + LeftLeg: BodyPartHealth; + RightLeg: BodyPartHealth; +} +export interface BodyPartHealth { + Health: CurrentMax; + Effects?: Record; +} +export interface BodyPartEffectProperties { + Time: number; +} +export interface CurrentMax { + Current: number; + Maximum: number; +} +export interface Inventory { + items: Item[]; + equipment: string; + stash: string; + sortingTable: string; + questRaidItems: string; + questStashItems: string; + fastPanel: FastPanel; +} +export interface FastPanel { +} +export interface Skills { + Common: Common[]; + Mastering: Mastering[]; + Points: number; +} +export interface Common { + Id: string; + Progress: number; + PointsEarnedDuringSession?: number; + LastAccess?: number; + max?: number; + min?: number; +} +export interface Mastering { + Id: string; + Progress: number; + max?: number; + min?: number; +} +export interface Stats { + CarriedQuestItems: string[]; + Victims: Victim[]; + TotalSessionExperience: number; + LastSessionDate: number; + SessionCounters: SessionCounters; + OverallCounters: OverallCounters; + SessionExperienceMult?: number; + ExperienceBonusMult?: number; + Aggressor?: Aggressor; + DroppedItems?: IDroppedItem[]; + FoundInRaidItems?: FoundInRaidItem[]; + DamageHistory?: DamageHistory; + DeathCause?: DeathCause; + LastPlayerState?: LastPlayerState; + TotalInGameTime: number; + SurvivorClass?: string; +} +export interface IDroppedItem { + QuestId: string; + ItemId: string; + ZoneId: string; +} +export interface FoundInRaidItem { + QuestId: string; + ItemId: string; +} +export interface Victim { + AccountId: string; + ProfileId: string; + Name: string; + Side: string; + BodyPart: string; + Time: string; + Distance: number; + Level: number; + Weapon: string; + Role: string; +} +export interface SessionCounters { + Items: CounterKeyValue[]; +} +export interface OverallCounters { + Items: CounterKeyValue[]; +} +export interface CounterKeyValue { + Key: string[]; + Value: number; +} +export interface ConditionCounters { + Counters: Counter[]; +} +export interface Counter { + id: string; + value: number; + qid: string; +} +export interface Aggressor { + AccountId: string; + ProfileId: string; + MainProfileNickname: string; + Name: string; + Side: string; + BodyPart: string; + HeadSegment: string; + WeaponName: string; + Category: string; +} +export interface DamageHistory { + LethalDamagePart: string; + LethalDamage: LethalDamage; + BodyParts: BodyPartsDamageHistory; +} +export interface LethalDamage { + Amount: number; + Type: string; + SourceId: string; + OverDamageFrom: string; + Blunt: boolean; + ImpactsCount: number; +} +export interface BodyPartsDamageHistory { + Head: DamageStats[]; + Chest: DamageStats[]; + Stomach: DamageStats[]; + LeftArm: DamageStats[]; + RightArm: DamageStats[]; + LeftLeg: DamageStats[]; + RightLeg: DamageStats[]; + Common: DamageStats[]; +} +export interface DamageStats { + Amount: number; + Type: string; + SourceId: string; + OverDamageFrom: string; + Blunt: boolean; + ImpactsCount: number; +} +export interface DeathCause { + DamageType: string; + Side: string; + Role: string; + WeaponId: string; +} +export interface LastPlayerState { + Info: LastPlayerStateInfo; + Customization: Record; + Equipment: any; +} +export interface LastPlayerStateInfo { + Nickname: string; + Side: string; + Level: number; + MemberCategory: string; +} +export interface BackendCounter { + id: string; + qid?: string; + value: number; +} +export interface InsuredItem { + tid: string; + itemId: string; +} +export interface Hideout { + Production: Record; + Areas: HideoutArea[]; + Improvements: Record; + sptUpdateLastRunTimestamp: number; +} +export interface IHideoutImprovement { + completed: boolean; + improveCompleteTimestamp: number; +} +export interface Productive { + Products: Product[]; + /** Seconds passed of production */ + Progress?: number; + /** Is craft in some state of being worked on by client (crafting/ready to pick up) */ + inProgress?: boolean; + StartTimestamp?: number; + SkipTime?: number; + /** Seconds needed to fully craft */ + ProductionTime?: number; + sptIsScavCase?: boolean; +} +export interface Production extends Productive { + RecipeId: string; + SkipTime: number; + ProductionTime: number; +} +export interface ScavCase extends Productive { + RecipeId: string; +} +export interface Product { + _id: string; + _tpl: string; + upd?: Upd; +} +export interface HideoutArea { + type: HideoutAreas; + level: number; + active: boolean; + passiveBonusesEnabled: boolean; + completeTime: number; + constructing: boolean; + slots: HideoutSlot[]; + lastRecipe: string; +} +export interface HideoutSlot { + /** SPT specific value to keep track of what index this slot is (0,1,2,3 etc) */ + locationIndex: number; + item?: HideoutItem[]; +} +export interface HideoutItem { + _id: string; + _tpl: string; + upd?: Upd; +} +export interface LastCompleted { + $oid: string; +} +export interface Notes { + Notes: Note[]; +} +export interface CarExtractCounts { +} +export declare enum SurvivorClass { + UNKNOWN = 0, + NEUTRALIZER = 1, + MARAUDER = 2, + PARAMEDIC = 3, + SURVIVOR = 4 +} +export interface Quest { + qid: string; + startTime: number; + status: QuestStatus; + statusTimers?: Record; + /** SPT specific property */ + completedConditions?: string[]; + availableAfter?: number; +} +export interface TraderInfo { + loyaltyLevel: number; + salesSum: number; + disabled: boolean; + standing: number; + nextResupply: number; + unlocked: boolean; +} +export interface RagfairInfo { + rating: number; + isRatingGrowing: boolean; + offers: IRagfairOffer[]; +} +export interface Bonus { + id?: string; + type: string; + templateId?: string; + passive?: boolean; + production?: boolean; + visible?: boolean; + value?: number; + icon?: string; + filter?: string[]; + skillType?: string; +} +export interface Note { + Time: number; + Text: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/IBotCore.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IBotCore.d.ts new file mode 100644 index 0000000..16a782d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IBotCore.d.ts @@ -0,0 +1,133 @@ +export interface IBotCore { + SAVAGE_KILL_DIST: number; + SOUND_DOOR_BREACH_METERS: number; + SOUND_DOOR_OPEN_METERS: number; + STEP_NOISE_DELTA: number; + JUMP_NOISE_DELTA: number; + GUNSHOT_SPREAD: number; + GUNSHOT_SPREAD_SILENCE: number; + BASE_WALK_SPEREAD2: number; + MOVE_SPEED_COEF_MAX: number; + SPEED_SERV_SOUND_COEF_A: number; + SPEED_SERV_SOUND_COEF_B: number; + G: number; + STAY_COEF: number; + SIT_COEF: number; + LAY_COEF: number; + MAX_ITERATIONS: number; + START_DIST_TO_COV: number; + MAX_DIST_TO_COV: number; + STAY_HEIGHT: number; + CLOSE_POINTS: number; + COUNT_TURNS: number; + SIMPLE_POINT_LIFE_TIME_SEC: number; + DANGER_POINT_LIFE_TIME_SEC: number; + DANGER_POWER: number; + COVER_DIST_CLOSE: number; + GOOD_DIST_TO_POINT: number; + COVER_TOOFAR_FROM_BOSS: number; + COVER_TOOFAR_FROM_BOSS_SQRT: number; + MAX_Y_DIFF_TO_PROTECT: number; + FLARE_POWER: number; + MOVE_COEF: number; + PRONE_POSE: number; + LOWER_POSE: number; + MAX_POSE: number; + FLARE_TIME: number; + MAX_REQUESTS__PER_GROUP: number; + UPDATE_GOAL_TIMER_SEC: number; + DIST_NOT_TO_GROUP: number; + DIST_NOT_TO_GROUP_SQR: number; + LAST_SEEN_POS_LIFETIME: number; + DELTA_GRENADE_START_TIME: number; + DELTA_GRENADE_END_TIME: number; + DELTA_GRENADE_RUN_DIST: number; + DELTA_GRENADE_RUN_DIST_SQRT: number; + PATROL_MIN_LIGHT_DIST: number; + HOLD_MIN_LIGHT_DIST: number; + STANDART_BOT_PAUSE_DOOR: number; + ARMOR_CLASS_COEF: number; + SHOTGUN_POWER: number; + RIFLE_POWER: number; + PISTOL_POWER: number; + SMG_POWER: number; + SNIPE_POWER: number; + GESTUS_PERIOD_SEC: number; + GESTUS_AIMING_DELAY: number; + GESTUS_REQUEST_LIFETIME: number; + GESTUS_FIRST_STAGE_MAX_TIME: number; + GESTUS_SECOND_STAGE_MAX_TIME: number; + GESTUS_MAX_ANSWERS: number; + GESTUS_FUCK_TO_SHOOT: number; + GESTUS_DIST_ANSWERS: number; + GESTUS_DIST_ANSWERS_SQRT: number; + GESTUS_ANYWAY_CHANCE: number; + TALK_DELAY: number; + CAN_SHOOT_TO_HEAD: boolean; + CAN_TILT: boolean; + TILT_CHANCE: number; + MIN_BLOCK_DIST: number; + MIN_BLOCK_TIME: number; + COVER_SECONDS_AFTER_LOSE_VISION: number; + MIN_ARG_COEF: number; + MAX_ARG_COEF: number; + DEAD_AGR_DIST: number; + MAX_DANGER_CARE_DIST_SQRT: number; + MAX_DANGER_CARE_DIST: number; + MIN_MAX_PERSON_SEARCH: number; + PERCENT_PERSON_SEARCH: number; + LOOK_ANYSIDE_BY_WALL_SEC_OF_ENEMY: number; + CLOSE_TO_WALL_ROTATE_BY_WALL_SQRT: number; + SHOOT_TO_CHANGE_RND_PART_MIN: number; + SHOOT_TO_CHANGE_RND_PART_MAX: number; + SHOOT_TO_CHANGE_RND_PART_DELTA: number; + FORMUL_COEF_DELTA_DIST: number; + FORMUL_COEF_DELTA_SHOOT: number; + FORMUL_COEF_DELTA_FRIEND_COVER: number; + SUSPETION_POINT_DIST_CHECK: number; + MAX_BASE_REQUESTS_PER_PLAYER: number; + MAX_HOLD_REQUESTS_PER_PLAYER: number; + MAX_GO_TO_REQUESTS_PER_PLAYER: number; + MAX_COME_WITH_ME_REQUESTS_PER_PLAYER: number; + CORE_POINT_MAX_VALUE: number; + CORE_POINTS_MAX: number; + CORE_POINTS_MIN: number; + BORN_POISTS_FREE_ONLY_FAREST_BOT: boolean; + BORN_POINSTS_FREE_ONLY_FAREST_PLAYER: boolean; + SCAV_GROUPS_TOGETHER: boolean; + LAY_DOWN_ANG_SHOOT: number; + HOLD_REQUEST_TIME_SEC: number; + TRIGGERS_DOWN_TO_RUN_WHEN_MOVE: number; + MIN_DIST_TO_RUN_WHILE_ATTACK_MOVING: number; + MIN_DIST_TO_RUN_WHILE_ATTACK_MOVING_OTHER_ENEMIS: number; + MIN_DIST_TO_STOP_RUN: number; + JUMP_SPREAD_DIST: number; + LOOK_TIMES_TO_KILL: number; + COME_INSIDE_TIMES: number; + TOTAL_TIME_KILL: number; + TOTAL_TIME_KILL_AFTER_WARN: number; + MOVING_AIM_COEF: number; + VERTICAL_DIST_TO_IGNORE_SOUND: number; + DEFENCE_LEVEL_SHIFT: number; + MIN_DIST_CLOSE_DEF: number; + USE_ID_PRIOR_WHO_GO: boolean; + SMOKE_GRENADE_RADIUS_COEF: number; + GRENADE_PRECISION: number; + MAX_WARNS_BEFORE_KILL: number; + CARE_ENEMY_ONLY_TIME: number; + MIDDLE_POINT_COEF: number; + MAIN_TACTIC_ONLY_ATTACK: boolean; + LAST_DAMAGE_ACTIVE: number; + SHALL_DIE_IF_NOT_INITED: boolean; + CHECK_BOT_INIT_TIME_SEC: number; + WEAPON_ROOT_Y_OFFSET: number; + DELTA_SUPRESS_DISTANCE_SQRT: number; + DELTA_SUPRESS_DISTANCE: number; + WAVE_COEF_LOW: number; + WAVE_COEF_MID: number; + WAVE_COEF_HIGH: number; + WAVE_COEF_HORDE: number; + WAVE_ONLY_AS_ONLINE: boolean; + LOCAL_BOTS_COUNT: number; + AXE_MAN_KILLS_END: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/IBotType.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IBotType.d.ts new file mode 100644 index 0000000..e02d990 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IBotType.d.ts @@ -0,0 +1,159 @@ +import { MinMax } from "../../../common/MinMax"; +import { Skills } from "./IBotBase"; +export interface IBotType { + appearance: Appearance; + chances: Chances; + difficulty: Difficulties; + experience: Experience; + firstName: string[]; + generation: Generation; + health: Health; + inventory: Inventory; + lastName: string[]; + skills: Skills; +} +export interface Appearance { + body: Record; + feet: Record; + hands: string[]; + head: string[]; + voice: string[]; +} +export interface Chances { + equipment: EquipmentChances; + mods: ModsChances; +} +export interface EquipmentChances { + ArmBand: number; + ArmorVest: number; + Backpack: number; + Earpiece: number; + Eyewear: number; + FaceCover: number; + FirstPrimaryWeapon: number; + Headwear: number; + Holster: number; + Pockets: number; + Scabbard: number; + SecondPrimaryWeapon: number; + SecuredContainer: number; + TacticalVest: number; +} +export interface ModsChances { + mod_charge: number; + mod_equipment: number; + mod_equipment_000: number; + mod_equipment_001: number; + mod_equipment_002: number; + mod_flashlight: number; + mod_foregrip: number; + mod_launcher: number; + mod_magazine: number; + mod_mount: number; + mod_mount_000: number; + mod_mount_001: number; + mod_muzzle: number; + mod_nvg: number; + mod_pistol_grip: number; + mod_reciever: number; + mod_scope: number; + mod_scope_000: number; + mod_scope_001: number; + mod_scope_002: number; + mod_scope_003: number; + mod_sight_front: number; + mod_sight_rear: number; + mod_stock: number; + mod_stock_000: number; + mod_stock_akms: number; + mod_tactical: number; + mod_tactical_000: number; + mod_tactical_001: number; + mod_tactical_002: number; + mod_tactical_003: number; +} +export interface Difficulties { + easy: Difficulty; + normal: Difficulty; + hard: Difficulty; + impossible: Difficulty; +} +export interface Difficulty { + Aiming: Record; + Boss: Record; + Change: Record; + Core: Record; + Cover: Record; + Grenade: Record; + Hearing: Record; + Lay: Record; + Look: Record; + Mind: Record; + Move: Record; + Patrol: Record; + Scattering: Record; + Shoot: Record; +} +export interface Experience { + aggressorBonus: number; + level: MinMax; + reward: MinMax; + standingForKill: number; +} +export interface Generation { + items: ItemMinMax; +} +export interface ItemMinMax { + grenades: MinMax; + healing: MinMax; + drugs: MinMax; + stims: MinMax; + looseLoot: MinMax; + magazines: MinMax; + specialItems: MinMax; +} +export interface Health { + BodyParts: BodyPart[]; + Energy: MinMax; + Hydration: MinMax; + Temperature: MinMax; +} +export interface BodyPart { + Chest: MinMax; + Head: MinMax; + LeftArm: MinMax; + LeftLeg: MinMax; + RightArm: MinMax; + RightLeg: MinMax; + Stomach: MinMax; +} +export interface Inventory { + equipment: Equipment; + Ammo: Record>; + items: Items; + mods: Mods; +} +export interface Equipment { + ArmBand: Record; + ArmorVest: Record; + Backpack: Record; + Earpiece: Record; + Eyewear: Record; + FaceCover: Record; + FirstPrimaryWeapon: Record; + Headwear: Record; + Holster: Record; + Pockets: Record; + Scabbard: Record; + SecondPrimaryWeapon: Record; + SecuredContainer: Record; + TacticalVest: Record; +} +export interface Items { + Backpack: string[]; + Pockets: string[]; + SecuredContainer: string[]; + SpecialLoot: string[]; + TacticalVest: string[]; +} +export type Mods = Record>; diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/ICustomizationItem.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/ICustomizationItem.d.ts new file mode 100644 index 0000000..8bfeece --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/ICustomizationItem.d.ts @@ -0,0 +1,33 @@ +export interface ICustomizationItem { + _id: string; + _name: string; + _parent: string; + _type: string; + _props: Props; + _proto: string; +} +export interface Props { + Name: string; + ShortName: string; + Description: string; + Side: string[]; + BodyPart: string; + AvailableAsDefault?: boolean; + Body: string; + Hands: string; + Feet: string; + Prefab: Prefab; + WatchPrefab: Prefab; + IntegratedArmorVest: boolean; + WatchPosition: Xyz; + WatchRotation: Xyz; +} +export interface Prefab { + path: string; + rcid: string; +} +export interface Xyz { + x: number; + y: number; + z: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/IHandbookBase.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IHandbookBase.d.ts new file mode 100644 index 0000000..7d7db07 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IHandbookBase.d.ts @@ -0,0 +1,16 @@ +export interface IHandbookBase { + Categories: Category[]; + Items: HandbookItem[]; +} +export interface Category { + Id: string; + ParentId?: string; + Icon: string; + Color: string; + Order: string; +} +export interface HandbookItem { + Id: string; + ParentId: string; + Price: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/IItem.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IItem.d.ts new file mode 100644 index 0000000..ce00ae9 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IItem.d.ts @@ -0,0 +1,120 @@ +export interface Item { + _id: string; + _tpl: string; + parentId?: string; + slotId?: string; + location?: Location | number; + upd?: Upd; +} +export interface Upd { + Buff?: Buff; + OriginalStackObjectsCount?: number; + Togglable?: Togglable; + Map?: Map; + Tag?: Tag; + sptPresetId?: string; + FaceShield?: FaceShield; + StackObjectsCount?: number; + UnlimitedCount?: boolean; + Repairable?: Repairable; + RecodableComponent?: RecodableComponent; + FireMode?: FireMode; + SpawnedInSession?: boolean; + Light?: Light; + Key?: Key; + Resource?: Resource; + Sight?: Sight; + MedKit?: MedKit; + FoodDrink?: FoodDrink; + Dogtag?: Dogtag; + BuyRestrictionMax?: number; + BuyRestrictionCurrent?: number; + Foldable?: Foldable; + SideEffect?: SideEffect; + RepairKit?: RepairKit; +} +export interface Buff { + rarity: string; + buffType: string; + value: number; + thresholdDurability?: number; +} +export interface Togglable { + On: boolean; +} +export interface Map { + Markers: MapMarker[]; +} +export interface MapMarker { + X: number; + Y: number; +} +export interface Tag { + Color: number; + Name: string; +} +export interface FaceShield { + Hits: number; +} +export interface Repairable { + Durability: number; + MaxDurability: number; +} +export interface RecodableComponent { + IsEncoded: boolean; +} +export interface MedKit { + HpResource: number; +} +export interface Sight { + ScopesCurrentCalibPointIndexes: number[]; + ScopesSelectedModes: number[]; + SelectedScope: number; +} +export interface Foldable { + Folded: boolean; +} +export interface FireMode { + FireMode: string; +} +export interface FoodDrink { + HpPercent: number; +} +export interface Key { + NumberOfUsages: number; +} +export interface Resource { + Value: number; + UnitsConsumed: number; +} +export interface Light { + IsActive: boolean; + SelectedMode: number; +} +export interface Dogtag { + AccountId: string; + ProfileId: string; + Nickname: string; + Side: string; + Level: number; + Time: string; + Status: string; + KillerAccountId: string; + KillerProfileId: string; + KillerName: string; + WeaponName: string; +} +export interface Location { + x: number; + y: number; + r: string | number; + isSearched?: boolean; + /** SPT property? */ + rotation?: string | boolean; +} +export interface SideEffect { + Value: number; +} +export interface RepairKit { + Resource: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/ILocationsBase.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/ILocationsBase.d.ts new file mode 100644 index 0000000..2c96af3 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/ILocationsBase.d.ts @@ -0,0 +1,10 @@ +export interface ILocationsBase { + locations: Locations; + paths: Path[]; +} +export interface Locations { +} +export interface Path { + Source: string; + Destination: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/ILootBase.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/ILootBase.d.ts new file mode 100644 index 0000000..e4baac5 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/ILootBase.d.ts @@ -0,0 +1,64 @@ +import { Item } from "./IItem"; +export interface ILootBase { + staticAmmo: Record; + staticContainers: Record; + staticLoot: Record; +} +export interface IStaticAmmoDetails { + tpl: string; + relativeProbability: number; +} +export interface IStaticContainerDetails { + staticWeapons: IStaticWeaponProps[]; + staticContainers: IStaticContainerProps[]; + staticForced: IStaticForcedProps[]; +} +export interface IStaticWeaponProps { + Id: string; + IsStatic: boolean; + useGravity: boolean; + randomRotation: boolean; + Position: Xyz; + Rotation: Xyz; + IsGroupPosition: boolean; + GroupPositions: any[]; + Root: string; + Items: Item[]; +} +export interface IStaticContainerProps { + Id: string; + IsStatic: boolean; + useGravity: boolean; + randomRotation: boolean; + Position: Xyz; + Rotation: Xyz; + IsGroupPosition: boolean; + GroupPositions: any[]; + Root: any; + Items: StaticItem[]; +} +export interface Xyz { + x: number; + y: number; + z: number; +} +export interface StaticItem { + _id: any; + _tpl: string; +} +export interface IStaticForcedProps { + containerId: string; + itemTpl: string; +} +export interface IStaticLootDetails { + itemcountDistribution: ItemCountDistribution[]; + itemDistribution: ItemDistribution[]; +} +export interface ItemCountDistribution { + count: number; + relativeProbability: number; +} +export interface ItemDistribution { + tpl: string; + relativeProbability: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/IMatch.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IMatch.d.ts new file mode 100644 index 0000000..c30cb48 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IMatch.d.ts @@ -0,0 +1,10 @@ +export interface IMatch { + metrics: Metrics; +} +export interface Metrics { + Keys: number[]; + NetProcessingBins: number[]; + RenderBins: number[]; + GameUpdateBins: number[]; + MemoryMeasureInterval: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/IProfileTemplate.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IProfileTemplate.d.ts new file mode 100644 index 0000000..66ebbe8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IProfileTemplate.d.ts @@ -0,0 +1,27 @@ +import { Dialogue, WeaponBuild } from "../../profile/IAkiProfile"; +import { IPmcData } from "../IPmcData"; +export interface IProfileTemplates { + Standard: IProfileSides; + "Left Behind": IProfileSides; + "Prepare To Escape": IProfileSides; + "Edge Of Darkness": IProfileSides; +} +export interface IProfileSides { + usec: TemplateSide; + bear: TemplateSide; +} +export interface TemplateSide { + character: IPmcData; + suits: string[]; + dialogues: Record; + weaponbuilds: WeaponBuild[]; + trader: ProfileTraderTemplate; +} +export interface ProfileTraderTemplate { + initialLoyaltyLevel: number; + setQuestsAvailableForStart?: boolean; + setQuestsAvailableForFinish?: boolean; + initialStanding: number; + initialSalesSum: number; + jaegerUnlocked: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/IQuest.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IQuest.d.ts new file mode 100644 index 0000000..5c939e1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IQuest.d.ts @@ -0,0 +1,118 @@ +import { QuestRewardType } from "../../../enums/QuestRewardType"; +import { QuestStatus } from "../../../enums/QuestStatus"; +import { Item } from "./IItem"; +export interface IQuest { + QuestName?: string; + _id: string; + canShowNotificationsInGame: boolean; + conditions: Conditions; + description: string; + failMessageText: string; + name: string; + note: string; + traderId: string; + location: string; + image: string; + type: string; + isKey: boolean; + questStatus: any; + restartable: boolean; + instantComplete: boolean; + secretQuest: boolean; + startedMessageText: string; + successMessageText: string; + templateId: string; + rewards: Rewards; + status: string | number; + KeyQuest: boolean; + changeQuestMessageText: string; + side: string; +} +export interface Conditions { + Started: AvailableForConditions[]; + AvailableForFinish: AvailableForConditions[]; + AvailableForStart: AvailableForConditions[]; + Success: AvailableForConditions[]; + Fail: AvailableForConditions[]; +} +export interface AvailableForConditions { + _parent: string; + _props: AvailableForProps; + dynamicLocale?: boolean; +} +export interface AvailableForProps { + id: string; + index: number; + parentId: string; + isEncoded: boolean; + dynamicLocale: boolean; + value?: number; + compareMethod?: string; + visibilityConditions?: VisibilityCondition[]; + target?: string | string[]; + status?: QuestStatus[]; + availableAfter?: number; + dispersion?: number; + onlyFoundInRaid?: boolean; + oneSessionOnly?: boolean; + doNotResetIfCounterCompleted?: boolean; + dogtagLevel?: number; + maxDurability?: number; + minDurability?: number; + counter?: AvailableForCounter; + plantTime?: number; + zoneId?: string; + type?: boolean; + countInRaid?: boolean; +} +export interface AvailableForCounter { + id: string; + conditions: CounterCondition[]; +} +export interface CounterCondition { + _parent: string; + _props: CounterProps; +} +export interface CounterProps { + id: string; + target: string[] | string; + compareMethod?: string; + value?: string; + weapon?: string[]; + equipmentInclusive?: string[][]; + weaponModsInclusive?: string[][]; + status?: string[]; + bodyPart?: string[]; + daytime?: DaytimeCounter; +} +export interface DaytimeCounter { + from: number; + to: number; +} +export interface VisibilityCondition { + id: string; + value: number; + dynamicLocale: boolean; + oneSessionOnly: boolean; +} +export interface Rewards { + AvailableForStart: Reward[]; + AvailableForFinish: Reward[]; + Started: Reward[]; + Success: Reward[]; + Fail: Reward[]; + FailRestartable: Reward[]; + Expired: Reward[]; +} +export interface Reward extends Item { + value?: string | number; + id: string; + type: QuestRewardType; + index: number; + target?: string; + items?: Item[]; + loyaltyLevel?: number; + traderId?: string; + unknown?: boolean; + findInRaid?: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/IRepeatableQuests.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IRepeatableQuests.d.ts new file mode 100644 index 0000000..3a33f2e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/IRepeatableQuests.d.ts @@ -0,0 +1,220 @@ +import { Item } from "./IItem"; +export interface IReward { + index: number; + type: string; + value: number; + target?: string; + items?: Item[]; +} +export interface IRepeatableQuestDatabase { + templates: ITemplates; + rewards: IRewardOptions; + data: IOptions; + samples: ISampleQuests[]; +} +export interface ITemplates { + Elimination: IRepeatableQuest; + Completion: IRepeatableQuest; + Exploration: IRepeatableQuest; +} +export interface IPmcDataRepeatableQuest { + id?: string; + name: string; + activeQuests: IRepeatableQuest[]; + inactiveQuests: IRepeatableQuest[]; + endTime: number; + changeRequirement: TChangeRequirementRecord; +} +export type TChangeRequirementRecord = Record; +export interface IChangeRequirement { + changeCost: IChangeCost[]; + changeStandingCost: number; +} +export interface IChangeCost { + templateId: string; + count: number; +} +export interface IRepeatableQuest { + _id: any; + traderId: string; + location: any; + image: string; + type: string; + isKey: boolean; + restartable: boolean; + instantComplete: boolean; + secretQuest: boolean; + canShowNotificationsInGame: boolean; + rewards: IRewards; + conditions: IConditions; + side: string; + name: string; + note: string; + description: string; + successMessageText: string; + failMessageText: string; + startedMessageText: string; + changeQuestMessageText: string; + templateId: string; + changeCost: IChangeCost[]; + changeStandingCost: number; +} +export interface IRewards { + Started: IReward[]; + Success: IReward[]; + Fail: IReward[]; +} +export interface IConditions { + AvailableForStart: any[]; + AvailableForFinish: IAvailableFor[]; + Fail: any[]; +} +export interface IAvailableFor { + _props: IAvailableForProps; + _parent: string; + dynamicLocale: boolean; +} +export interface IAvailableForProps { + id: string; + parentId: string; + dynamicLocale: boolean; + index: number; + visibilityConditions: IVisibilityCondition[]; + value: number; +} +export interface IVisibilityCondition { + id: string; + oneSessionOnly: boolean; + value: number; + index: number; + dynamicLocale: boolean; +} +export interface IAvailableForPropsCounter extends IAvailableForProps { + type: string; + oneSessionOnly: boolean; + doNotResetIfCounterCompleted: boolean; + counter: ICounter; +} +export interface ICounter { + id: string; + conditions: ICondition[]; +} +export interface ICondition { + _props: IConditionProps; + _parent: string; +} +export interface IConditionProps { + id: string; + dynamicLocale: boolean; +} +export interface IElimination extends IRepeatableQuest { + conditions: IEliminationConditions; +} +export interface IEliminationConditions extends IConditions { + AvailableForFinish: IEliminationAvailableFor[]; +} +export interface IEliminationAvailableFor extends IAvailableFor { + _props: IEliminationAvailableForProps; +} +export interface IEliminationAvailableForProps extends IAvailableForPropsCounter { + counter: IEliminationCounter; +} +export interface IEliminationCounter extends ICounter { + conditions: IEliminationCondition[]; +} +export interface IEliminationCondition extends ICondition { + _props: ILocationConditionProps | IKillConditionProps; +} +export interface IExploration extends IRepeatableQuest { + conditions: IExplorationConditions; +} +export interface IExplorationConditions extends IConditions { + AvailableForFinish: IExplorationAvailableFor[]; +} +export interface IExplorationAvailableFor extends IAvailableFor { + _props: IExplorationAvailableForProps; +} +export interface IExplorationAvailableForProps extends IAvailableForPropsCounter { + counter: IExplorationCounter; +} +export interface IExplorationCounter extends ICounter { + conditions: IExplorationCondition[]; +} +export interface IExplorationCondition extends ICondition { + _props: ILocationConditionProps | IExitStatusConditionProps | IExitNameConditionProps; +} +export interface ICompletion extends IRepeatableQuest { + conditions: ICompletionConditions; +} +export interface ICompletionConditions extends IConditions { + AvailableForFinish: ICompletionAvailableFor[]; +} +export interface ICompletionAvailableFor extends IAvailableFor { + _props: ICompletionAvailableForProps; +} +export interface ICompletionAvailableForProps extends IAvailableForProps { + target: string[]; + minDurability: number; + maxDurability: number; + dogtagLevel: number; + onlyFoundInRaid: boolean; +} +export interface ILocationConditionProps extends IConditionProps { + target: string[]; +} +export interface IKillConditionProps extends IConditionProps { + target: string; + value: number; + savageRole?: string[]; + bodyPart?: string[]; + distance?: IDistanceCheck; +} +export interface IDistanceCheck { + compareMethod: string; + value: number; +} +export interface IExitStatusConditionProps extends IConditionProps { + status: string[]; +} +export interface IExitNameConditionProps extends IConditionProps { + exitName: string; +} +export interface IRewardOptions { + itemsBlacklist: string[]; +} +export interface IOptions { + Completion: ICompletionFilter; +} +export interface ICompletionFilter { + itemsBlacklist: ItemsBlacklist[]; + itemsWhitelist: ItemsWhitelist[]; +} +export interface ItemsBlacklist { + minPlayerLevel: number; + itemIds: string[]; +} +export interface ItemsWhitelist { + minPlayerLevel: number; + itemIds: string[]; +} +export interface ISampleQuests { + _id: string; + traderId: string; + location: string; + image: string; + type: string; + isKey: boolean; + restartable: boolean; + instantComplete: boolean; + secretQuest: boolean; + canShowNotificationsInGame: boolean; + rewards: IRewards; + conditions: IConditions; + name: string; + note: string; + description: string; + successMessageText: string; + failMessageText: string; + startedMessageText: string; + templateId: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/ITemplateItem.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/ITemplateItem.d.ts new file mode 100644 index 0000000..cbad0a6 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/ITemplateItem.d.ts @@ -0,0 +1,467 @@ +export interface ITemplateItem { + _id: string; + _name: string; + _parent: string; + _type: string; + _props: Props; + _proto: string; +} +export interface Props { + Name?: string; + ShortName?: string; + Description?: string; + Weight?: number; + BackgroundColor?: string; + Width?: number; + Height?: number; + StackMaxSize?: number; + Rarity?: string; + SpawnChance?: number; + CreditsPrice?: number; + ItemSound?: string; + Prefab?: Prefab; + UsePrefab?: Prefab; + StackObjectsCount?: number; + NotShownInSlot?: boolean; + ExaminedByDefault?: boolean; + ExamineTime?: number; + IsUndiscardable?: boolean; + IsUnsaleable?: boolean; + IsUnbuyable?: boolean; + IsUngivable?: boolean; + IsUnremovable?: boolean; + IsLockedafterEquip?: boolean; + IsSpecialSlotOnly?: boolean; + QuestItem?: boolean; + QuestStashMaxCount?: number; + LootExperience?: number; + ExamineExperience?: number; + HideEntrails?: boolean; + InsuranceDisabled?: boolean; + RepairCost?: number; + RepairSpeed?: number; + ExtraSizeLeft?: number; + ExtraSizeRight?: number; + ExtraSizeUp?: number; + ExtraSizeDown?: number; + ExtraSizeForceAdd?: boolean; + MergesWithChildren?: boolean; + CanSellOnRagfair?: boolean; + CanRequireOnRagfair?: boolean; + ConflictingItems?: string[]; + Unlootable?: boolean; + UnlootableFromSlot?: string; + UnlootableFromSide?: string[]; + AnimationVariantsNumber?: number; + DiscardingBlock?: boolean; + DropSoundType?: string; + RagFairCommissionModifier?: number; + IsAlwaysAvailableForInsurance?: boolean; + DiscardLimit?: number; + MaxResource?: number; + Resource?: number; + DogTagQualities?: boolean; + Grids?: Grid[]; + Slots?: Slot[]; + CanPutIntoDuringTheRaid?: boolean; + CantRemoveFromSlotsDuringRaid?: string[]; + KeyIds?: string[]; + TagColor?: number; + TagName?: string; + Durability?: number; + Accuracy?: number; + Recoil?: number; + Loudness?: number; + EffectiveDistance?: number; + Ergonomics?: number; + Velocity?: number; + RaidModdable?: boolean; + ToolModdable?: boolean; + BlocksFolding?: boolean; + BlocksCollapsible?: boolean; + IsAnimated?: boolean; + HasShoulderContact?: boolean; + SightingRange?: number; + DoubleActionAccuracyPenaltyMult?: number; + ModesCount?: any; + DurabilityBurnModificator?: number; + HeatFactor?: number; + CoolFactor?: number; + muzzleModType?: string; + CustomAimPlane?: string; + sightModType?: string; + aimingSensitivity?: number; + SightModesCount?: number; + OpticCalibrationDistances?: number[]; + ScopesCount?: number; + AimSensitivity?: number | number[][]; + Zooms?: number[][]; + CalibrationDistances?: number[][]; + Intensity?: number; + Mask?: string; + MaskSize?: number; + NoiseIntensity?: number; + NoiseScale?: number; + Color?: Color; + DiffuseIntensity?: number; + HasHinge?: boolean; + RampPalette?: string; + DepthFade?: number; + RoughnessCoef?: number; + SpecularCoef?: number; + MainTexColorCoef?: number; + MinimumTemperatureValue?: number; + RampShift?: number; + HeatMin?: number; + ColdMax?: number; + IsNoisy?: boolean; + IsFpsStuck?: boolean; + IsGlitch?: boolean; + IsMotionBlurred?: boolean; + IsPixelated?: boolean; + PixelationBlockCount?: number; + ShiftsAimCamera?: number; + magAnimationIndex?: number; + Cartridges?: Slot[]; + CanFast?: boolean; + CanHit?: boolean; + CanAdmin?: boolean; + LoadUnloadModifier?: number; + CheckTimeModifier?: number; + CheckOverride?: number; + ReloadMagType?: string; + VisibleAmmoRangesString?: string; + MalfunctionChance?: number; + IsShoulderContact?: boolean; + Foldable?: boolean; + Retractable?: boolean; + SizeReduceRight?: number; + CenterOfImpact?: number; + ShotgunDispersion?: number; + IsSilencer?: boolean; + DeviationCurve?: number; + DeviationMax?: number; + SearchSound?: string; + BlocksArmorVest?: boolean; + speedPenaltyPercent?: number; + GridLayoutName?: string; + SpawnFilter?: any[]; + containType?: any[]; + sizeWidth?: number; + sizeHeight?: number; + isSecured?: boolean; + spawnTypes?: string; + lootFilter?: any[]; + spawnRarity?: string; + minCountSpawn?: number; + maxCountSpawn?: number; + openedByKeyID?: any[]; + RigLayoutName?: string; + MaxDurability?: number; + armorZone?: string[]; + armorClass?: string | number; + mousePenalty?: number; + weaponErgonomicPenalty?: number; + BluntThroughput?: number; + ArmorMaterial?: string; + ArmorType?: string; + weapClass?: string; + weapUseType?: string; + ammoCaliber?: string; + OperatingResource?: number; + RepairComplexity?: number; + durabSpawnMin?: number; + durabSpawnMax?: number; + isFastReload?: boolean; + RecoilForceUp?: number; + RecoilForceBack?: number; + Convergence?: number; + RecoilAngle?: number; + weapFireType?: string[]; + RecolDispersion?: number; + SingleFireRate?: number; + CanQueueSecondShot?: boolean; + bFirerate?: number; + bEffDist?: number; + bHearDist?: number; + isChamberLoad?: boolean; + chamberAmmoCount?: number; + isBoltCatch?: boolean; + defMagType?: string; + defAmmo?: string; + AdjustCollimatorsToTrajectory?: boolean; + shotgunDispersion?: number; + Chambers?: Slot[]; + CameraRecoil?: number; + CameraSnap?: number; + ReloadMode?: string; + AimPlane?: number; + TacticalReloadStiffnes?: Xyz; + TacticalReloadFixation?: number; + RecoilCenter?: Xyz; + RotationCenter?: Xyz; + RotationCenterNoStock?: Xyz; + FoldedSlot?: string; + CompactHandling?: boolean; + MinRepairDegradation?: number; + MaxRepairDegradation?: number; + IronSightRange?: number; + IsFlareGun?: boolean; + IsGrenadeLauncher?: boolean; + IsOneoff?: boolean; + MustBoltBeOpennedForExternalReload?: boolean; + MustBoltBeOpennedForInternalReload?: boolean; + NoFiremodeOnBoltcatch?: boolean; + BoltAction?: boolean; + HipAccuracyRestorationDelay?: number; + HipAccuracyRestorationSpeed?: number; + HipInnaccuracyGain?: number; + ManualBoltCatch?: boolean; + BurstShotsCount?: number; + BaseMalfunctionChance?: number; + AllowJam?: boolean; + AllowFeed?: boolean; + AllowMisfire?: boolean; + AllowSlide?: boolean; + DurabilityBurnRatio?: number; + HeatFactorGun?: number; + CoolFactorGun?: number; + CoolFactorGunMods?: number; + HeatFactorByShot?: number; + AllowOverheat?: boolean; + DoubleActionAccuracyPenalty?: number; + RecoilPosZMult?: number; + MinRepairKitDegradation?: number; + MaxRepairKitDegradation?: number; + BlocksEarpiece?: boolean; + BlocksEyewear?: boolean; + BlocksHeadwear?: boolean; + BlocksFaceCover?: boolean; + Indestructibility?: number; + headSegments?: string[]; + FaceShieldComponent?: boolean; + FaceShieldMask?: string; + MaterialType?: string; + RicochetParams?: Xyz; + DeafStrength?: string; + BlindnessProtection?: number; + Distortion?: number; + CompressorTreshold?: number; + CompressorAttack?: number; + CompressorRelease?: number; + CompressorGain?: number; + CutoffFreq?: number; + Resonance?: number; + CompressorVolume?: number; + AmbientVolume?: number; + DryVolume?: number; + foodUseTime?: number; + foodEffectType?: string; + StimulatorBuffs?: string; + effects_health?: IHealthEffect[] | Record>; + effects_damage?: any; + MaximumNumberOfUsage?: number; + knifeHitDelay?: number; + knifeHitSlashRate?: number; + knifeHitStabRate?: number; + knifeHitRadius?: number; + knifeHitSlashDam?: number; + knifeHitStabDam?: number; + knifeDurab?: number; + PrimaryDistance?: number; + SecondryDistance?: number; + SlashPenetration?: number; + StabPenetration?: number; + PrimaryConsumption?: number; + SecondryConsumption?: number; + DeflectionConsumption?: number; + AppliedTrunkRotation?: Xyz; + AppliedHeadRotation?: Xyz; + DisplayOnModel?: boolean; + AdditionalAnimationLayer?: number; + StaminaBurnRate?: number; + ColliderScaleMultiplier?: Xyz; + ConfigPathStr?: string; + MaxMarkersCount?: number; + scaleMin?: number; + scaleMax?: number; + medUseTime?: number; + medEffectType?: string; + MaxHpResource?: number; + hpResourceRate?: number; + apResource?: number; + krResource?: number; + MaxOpticZoom?: number; + MaxRepairResource?: number; + TargetItemFilter?: string[]; + RepairQuality?: number; + RepairType?: string; + StackMinRandom?: number; + StackMaxRandom?: number; + ammoType?: string; + InitialSpeed?: number; + BallisticCoeficient?: number; + BulletMassGram?: number; + BulletDiameterMilimeters?: number; + Damage?: number; + ammoAccr?: number; + ammoRec?: number; + ammoDist?: number; + buckshotBullets?: number; + PenetrationPower?: number; + PenetrationPowerDiviation?: number; + ammoHear?: number; + ammoSfx?: string; + MisfireChance?: number; + MinFragmentsCount?: number; + MaxFragmentsCount?: number; + ammoShiftChance?: number; + casingName?: string; + casingEjectPower?: number; + casingMass?: number; + casingSounds?: string; + ProjectileCount?: number; + PenetrationChance?: number; + RicochetChance?: number; + FragmentationChance?: number; + Deterioration?: number; + SpeedRetardation?: number; + Tracer?: boolean; + TracerColor?: string; + TracerDistance?: number; + ArmorDamage?: number; + Caliber?: string; + StaminaBurnPerDamage?: number; + HeavyBleedingDelta?: number; + LightBleedingDelta?: number; + ShowBullet?: boolean; + HasGrenaderComponent?: boolean; + FuzeArmTimeSec?: number; + ExplosionStrength?: number; + MinExplosionDistance?: number; + MaxExplosionDistance?: number; + FragmentsCount?: number; + FragmentType?: string; + ShowHitEffectOnExplode?: boolean; + ExplosionType?: string; + AmmoLifeTimeSec?: number; + Contusion?: Xyz; + ArmorDistanceDistanceDamage?: Xyz; + Blindness?: Xyz; + IsLightAndSoundShot?: boolean; + LightAndSoundShotAngle?: number; + LightAndSoundShotSelfContusionTime?: number; + LightAndSoundShotSelfContusionStrength?: number; + MalfMisfireChance?: number; + MalfFeedChance?: number; + StackSlots?: StackSlot[]; + type?: string; + eqMin?: number; + eqMax?: number; + rate?: number; + ThrowType?: string; + ExplDelay?: number; + Strength?: number; + ContusionDistance?: number; + throwDamMax?: number; + explDelay?: number; + EmitTime?: number; + CanBeHiddenDuringThrow?: boolean; + MinTimeToContactExplode?: number; + ExplosionEffectType?: string; + LinkedWeapon?: string; + UseAmmoWithoutShell?: boolean; +} +export interface IHealthEffect { + type: string; + value: number; +} +export interface Prefab { + path: string; + rcid: string; +} +export interface Grid { + _name: string; + _id: string; + _parent: string; + _props: GridProps; + _proto: string; +} +export interface GridProps { + filters: GridFilter[]; + cellsH: number; + cellsV: number; + minCount: number; + maxCount: number; + maxWeight: number; + isSortingTable: boolean; +} +export interface GridFilter { + Filter: string[]; + ExcludedFilter: string[]; +} +export interface Slot { + _name: string; + _id: string; + _parent: string; + _props: SlotProps; + _max_count?: number; + _required: boolean; + _mergeSlotWithChildren: boolean; + _proto: string; +} +export interface SlotProps { + filters: SlotFilter[]; +} +export interface SlotFilter { + Shift?: number; + Filter: string[]; + AnimationIndex?: number; +} +export interface Xyz { + x: number; + y: number; + z: number; +} +export interface StackSlot { + _name?: string; + _id: string; + _parent: string; + _max_count: number; + _props: StackSlotProps; + _proto: string; + upd: any; +} +export interface StackSlotProps { + filters: SlotFilter[]; +} +export interface EffectsHealth { + Energy: EffectsHealthProps; + Hydration: EffectsHealthProps; +} +export interface EffectsHealthProps { + value: number; +} +export interface EffectsDamage { + Pain: EffectDamageProps; + LightBleeding: EffectDamageProps; + HeavyBleeding: EffectDamageProps; + Contusion: EffectDamageProps; + RadExposure: EffectDamageProps; + Fracture: EffectDamageProps; + DestroyedPart: EffectDamageProps; +} +export interface EffectDamageProps { + delay: number; + duration: number; + fadeOut: number; + cost?: number; + healthPenaltyMin?: number; + healthPenaltyMax?: number; +} +export interface Color { + r: number; + g: number; + b: number; + a: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/common/tables/ITrader.d.ts b/TypeScript/16ImporterUtil/types/models/eft/common/tables/ITrader.d.ts new file mode 100644 index 0000000..1fcfbaa --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/common/tables/ITrader.d.ts @@ -0,0 +1,99 @@ +import { Item } from "./IItem"; +export interface ITrader { + assort: ITraderAssort; + base: ITraderBase; + dialogue?: Record; + questassort: Record>; + suits?: ISuit[]; +} +export interface ITraderBase { + refreshTraderRagfairOffers: boolean; + _id: string; + availableInRaid: boolean; + avatar: string; + balance_dol: number; + balance_eur: number; + balance_rub: number; + buyer_up: boolean; + currency: string; + customization_seller: boolean; + discount: number; + discount_end: number; + gridHeight: number; + insurance: Insurance; + items_buy: IItemBuyData; + items_buy_prohibited: IItemBuyData; + location: string; + loyaltyLevels: LoyaltyLevel[]; + medic: boolean; + name: string; + nextResupply: number; + nickname: string; + repair: Repair; + sell_category: string[]; + surname: string; + unlockedByDefault: boolean; +} +export interface IItemBuyData { + category: string[]; + id_list: string[]; +} +export interface Insurance { + availability: boolean; + excluded_category: string[]; + max_return_hour: number; + max_storage_time: number; + min_payment: number; + min_return_hour: number; +} +export interface LoyaltyLevel { + buy_price_coef: number; + exchange_price_coef: number; + heal_price_coef: number; + insurance_price_coef: number; + minLevel: number; + minSalesSum: number; + minStanding: number; + repair_price_coef: number; +} +export interface Repair { + availability: boolean; + currency: string; + currency_coefficient: number; + excluded_category: string[]; + /** Doesn't exist in client object */ + excluded_id_list: any[]; + quality: number; +} +export interface ITraderAssort { + nextResupply: number; + items: Item[]; + barter_scheme: Record; + loyal_level_items: Record; +} +export interface IBarterScheme { + count: number; + _tpl: string; + onlyFunctional?: boolean; + sptQuestLocked?: boolean; +} +export interface ISuit { + _id: string; + tid: string; + suiteId: string; + isActive: boolean; + requirements: Requirements; +} +export interface Requirements { + loyaltyLevel: number; + profileLevel: number; + standing: number; + skillRequirements: string[]; + questRequirements: string[]; + itemRequirements: ItemRequirement[]; +} +export interface ItemRequirement { + count: number; + _tpl: string; + onlyFunctional: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/customization/IBuyClothingRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/customization/IBuyClothingRequestData.d.ts new file mode 100644 index 0000000..d19b70d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/customization/IBuyClothingRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IBuyClothingRequestData { + Action: "CustomizationBuy"; + offer: string; + items: ClothingItem[]; +} +export interface ClothingItem { + del: boolean; + id: string; + count: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/customization/IGetSuitsResponse.d.ts b/TypeScript/16ImporterUtil/types/models/eft/customization/IGetSuitsResponse.d.ts new file mode 100644 index 0000000..cbb909d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/customization/IGetSuitsResponse.d.ts @@ -0,0 +1,4 @@ +export interface IGetSuitsResponse { + _id: string; + suites: string[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/customization/IWearClothingRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/customization/IWearClothingRequestData.d.ts new file mode 100644 index 0000000..122d9cf --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/customization/IWearClothingRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IWearClothingRequestData { + Action: "CustomizationWear"; + suites: string[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/dialog/IChatServer.d.ts b/TypeScript/16ImporterUtil/types/models/eft/dialog/IChatServer.d.ts new file mode 100644 index 0000000..48cacc4 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/dialog/IChatServer.d.ts @@ -0,0 +1,16 @@ +export interface IChatServer { + _id: string; + RegistrationId: number; + VersionId: string; + Ip: string; + Port: number; + DateTime: number; + Chats: IChat[]; + Regions: string[]; + /** Possibly removed */ + IsDeveloper?: boolean; +} +export interface IChat { + _id: string; + Members: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/dialog/IFriendRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/dialog/IFriendRequestData.d.ts new file mode 100644 index 0000000..9c326ac --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/dialog/IFriendRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IFriendRequestData { + to: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetAllAttachmentsRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetAllAttachmentsRequestData.d.ts new file mode 100644 index 0000000..53d8289 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetAllAttachmentsRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetAllAttachmentsRequestData { + dialogId: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetAllAttachmentsResponse.d.ts b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetAllAttachmentsResponse.d.ts new file mode 100644 index 0000000..076d414 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetAllAttachmentsResponse.d.ts @@ -0,0 +1,6 @@ +import { Message } from "../profile/IAkiProfile"; +export interface IGetAllAttachmentsResponse { + messages: Message[]; + profiles: any[]; + hasMessagesWithRewards: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetChatServerListRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetChatServerListRequestData.d.ts new file mode 100644 index 0000000..8f1beac --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetChatServerListRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetChatServerListRequestData { + VersionId: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetFriendListDataResponse.d.ts b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetFriendListDataResponse.d.ts new file mode 100644 index 0000000..f8d700c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetFriendListDataResponse.d.ts @@ -0,0 +1,16 @@ +import { MemberCategory } from "../../enums/MemberCategory"; +export interface IGetFriendListDataResponse { + Friends: Friend[]; + Ignore: string[]; + InIgnoreList: string[]; +} +export interface Friend { + _id: string; + Info: Info; +} +export interface Info { + Nickname: string; + Side: string; + Level: number; + MemberCategory: MemberCategory; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetMailDialogInfoRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetMailDialogInfoRequestData.d.ts new file mode 100644 index 0000000..eed84b1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetMailDialogInfoRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetMailDialogInfoRequestData { + dialogId: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetMailDialogListRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetMailDialogListRequestData.d.ts new file mode 100644 index 0000000..f8fbf5d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetMailDialogListRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IGetMailDialogListRequestData { + limit: number; + offset: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetMailDialogViewRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetMailDialogViewRequestData.d.ts new file mode 100644 index 0000000..43d416e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetMailDialogViewRequestData.d.ts @@ -0,0 +1,7 @@ +import { MessageType } from "../../enums/MessageType"; +export interface IGetMailDialogViewRequestData { + type: MessageType; + dialogId: string; + limit: number; + time: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetMailDialogViewResponseData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetMailDialogViewResponseData.d.ts new file mode 100644 index 0000000..4f8b946 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/dialog/IGetMailDialogViewResponseData.d.ts @@ -0,0 +1,7 @@ +import { IPmcData } from "../common/IPmcData"; +import { Message } from "../profile/IAkiProfile"; +export interface IGetMailDialogViewResponseData { + messages: Message[]; + profiles: IPmcData[]; + hasMessagesWithRewards: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/dialog/IPinDialogRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/dialog/IPinDialogRequestData.d.ts new file mode 100644 index 0000000..57b8a00 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/dialog/IPinDialogRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IPinDialogRequestData { + dialogId: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/dialog/IRemoveDialogRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/dialog/IRemoveDialogRequestData.d.ts new file mode 100644 index 0000000..874b828 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/dialog/IRemoveDialogRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IRemoveDialogRequestData { + dialogId: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/dialog/ISendMessageRequest.d.ts b/TypeScript/16ImporterUtil/types/models/eft/dialog/ISendMessageRequest.d.ts new file mode 100644 index 0000000..dd79deb --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/dialog/ISendMessageRequest.d.ts @@ -0,0 +1,7 @@ +import { MessageType } from "../../enums/MessageType"; +export interface ISendMessageRequest { + dialogId: string; + type: MessageType; + text: string; + replyTo: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/dialog/ISetDialogReadRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/dialog/ISetDialogReadRequestData.d.ts new file mode 100644 index 0000000..2076232 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/dialog/ISetDialogReadRequestData.d.ts @@ -0,0 +1,3 @@ +export interface ISetDialogReadRequestData { + dialogs: string[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/game/ICheckVersionResponse.d.ts b/TypeScript/16ImporterUtil/types/models/eft/game/ICheckVersionResponse.d.ts new file mode 100644 index 0000000..fa8aa6f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/game/ICheckVersionResponse.d.ts @@ -0,0 +1,4 @@ +export interface ICheckVersionResponse { + isvalid: boolean; + latestVersion: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/game/IGameConfigResponse.d.ts b/TypeScript/16ImporterUtil/types/models/eft/game/IGameConfigResponse.d.ts new file mode 100644 index 0000000..e1b7587 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/game/IGameConfigResponse.d.ts @@ -0,0 +1,21 @@ +export interface IGameConfigResponse { + aid: string; + lang: string; + languages: Record; + ndaFree: boolean; + taxonomy: number; + activeProfileId: string; + backend: Backend; + utc_time: number; + /** Total in game time */ + totalInGame: number; + reportAvailable: boolean; + twitchEventMember: boolean; +} +export interface Backend { + Lobby: string; + Trading: string; + Messaging: string; + Main: string; + RagFair: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/game/IGameEmptyCrcRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/game/IGameEmptyCrcRequestData.d.ts new file mode 100644 index 0000000..a3ecad9 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/game/IGameEmptyCrcRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGameEmptyCrcRequestData { + crc: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/game/IGameKeepAliveResponse.d.ts b/TypeScript/16ImporterUtil/types/models/eft/game/IGameKeepAliveResponse.d.ts new file mode 100644 index 0000000..170ce6a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/game/IGameKeepAliveResponse.d.ts @@ -0,0 +1,4 @@ +export interface IGameKeepAliveResponse { + msg: string; + utc_time: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/game/IGameLogoutResponseData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/game/IGameLogoutResponseData.d.ts new file mode 100644 index 0000000..0f52050 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/game/IGameLogoutResponseData.d.ts @@ -0,0 +1,3 @@ +export interface IGameLogoutResponseData { + status: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/game/IGameStartResponse.d.ts b/TypeScript/16ImporterUtil/types/models/eft/game/IGameStartResponse.d.ts new file mode 100644 index 0000000..9f0ab6d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/game/IGameStartResponse.d.ts @@ -0,0 +1,3 @@ +export interface IGameStartResponse { + utc_time: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/game/IGetItemPricesResponse.d.ts b/TypeScript/16ImporterUtil/types/models/eft/game/IGetItemPricesResponse.d.ts new file mode 100644 index 0000000..ab6e818 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/game/IGetItemPricesResponse.d.ts @@ -0,0 +1,5 @@ +export interface IGetItemPricesResponse { + supplyNextTime: number; + prices: Record; + currencyCourses: Record; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/game/IReportNicknameRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/game/IReportNicknameRequestData.d.ts new file mode 100644 index 0000000..087c58b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/game/IReportNicknameRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IReportNicknameRequestData { + uid: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/game/IServerDetails.d.ts b/TypeScript/16ImporterUtil/types/models/eft/game/IServerDetails.d.ts new file mode 100644 index 0000000..101cf99 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/game/IServerDetails.d.ts @@ -0,0 +1,4 @@ +export interface IServerDetails { + ip: string; + port: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/game/IVersionValidateRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/game/IVersionValidateRequestData.d.ts new file mode 100644 index 0000000..0aa0fed --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/game/IVersionValidateRequestData.d.ts @@ -0,0 +1,11 @@ +export interface IVersionValidateRequestData { + version: Version; + develop: boolean; +} +export interface Version { + major: string; + minor: string; + game: string; + backend: string; + taxonomy: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/health/Effect.d.ts b/TypeScript/16ImporterUtil/types/models/eft/health/Effect.d.ts new file mode 100644 index 0000000..62d95a8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/health/Effect.d.ts @@ -0,0 +1,7 @@ +export declare enum Effect { + FRACTURE = "Fracture", + LIGHT_BLEEDING = "LightBleeding", + HEAVY_BLEEDING = "HeavyBleeding", + MILD_MUSCLE_PAIN = "MildMusclePain", + SEVERE_MUSCLE_PAIN = "SevereMusclePain" +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/health/IHealthTreatmentRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/health/IHealthTreatmentRequestData.d.ts new file mode 100644 index 0000000..7fb80a8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/health/IHealthTreatmentRequestData.d.ts @@ -0,0 +1,29 @@ +export interface IHealthTreatmentRequestData { + Action: "RestoreHealth"; + trader: string; + items: Item[]; + difference: Difference; + timestamp: number; +} +export interface Item { + id: string; + count: number; +} +export interface Difference { + BodyParts: BodyParts; + Energy: number; + Hydration: number; +} +export interface BodyParts { + Head: BodyPart; + Chest: BodyPart; + Stomach: BodyPart; + LeftArm: BodyPart; + RightArm: BodyPart; + LeftLeg: BodyPart; + RightLeg: BodyPart; +} +export interface BodyPart { + Health: number; + Effects: string[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/health/IOffraidEatRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/health/IOffraidEatRequestData.d.ts new file mode 100644 index 0000000..8e2b6c3 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/health/IOffraidEatRequestData.d.ts @@ -0,0 +1,7 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface IOffraidEatRequestData extends IBaseInteractionRequestData { + Action: "Eat"; + item: string; + count: number; + time: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/health/IOffraidHealRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/health/IOffraidHealRequestData.d.ts new file mode 100644 index 0000000..26b02bd --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/health/IOffraidHealRequestData.d.ts @@ -0,0 +1,18 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface IOffraidHealRequestData extends IBaseInteractionRequestData { + Action: "Heal"; + item: string; + part: BodyPart; + count: number; + time: number; +} +export declare enum BodyPart { + HEAD = "Head", + CHEST = "Chest", + STOMACH = "Stomach", + LEFT_ARM = "LeftArm", + RIGHT_ARM = "RightArm", + LEFT_LEG = "LeftLeg", + RIGHT_LEG = "RightLeg", + COMMON = "Common" +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/health/ISyncHealthRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/health/ISyncHealthRequestData.d.ts new file mode 100644 index 0000000..20e32f6 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/health/ISyncHealthRequestData.d.ts @@ -0,0 +1,21 @@ +export interface ISyncHealthRequestData { + Health: Health; + IsAlive: boolean; + Hydration?: number; + Energy?: number; + Temperature?: number; +} +export interface Health { + Head?: BodyPartHealth; + Chest?: BodyPartHealth; + Stomach?: BodyPartHealth; + LeftArm?: BodyPartHealth; + RightArm?: BodyPartHealth; + LeftLeg?: BodyPartHealth; + RightLeg?: BodyPartHealth; +} +export interface BodyPartHealth { + Maximum: number; + Current: number; + Effects: Record; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/health/IWorkoutData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/health/IWorkoutData.d.ts new file mode 100644 index 0000000..ba629d2 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/health/IWorkoutData.d.ts @@ -0,0 +1,4 @@ +export interface IWorkoutData extends Record { + skills: any; + effects: any; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/HideoutUpgradeCompleteRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/HideoutUpgradeCompleteRequestData.d.ts new file mode 100644 index 0000000..8583e8d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/HideoutUpgradeCompleteRequestData.d.ts @@ -0,0 +1,5 @@ +export interface HideoutUpgradeCompleteRequestData { + Action: string; + areaType: number; + timestamp: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHandleQTEEventRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHandleQTEEventRequestData.d.ts new file mode 100644 index 0000000..5dda485 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHandleQTEEventRequestData.d.ts @@ -0,0 +1,8 @@ +export interface IHandleQTEEventRequestData { + Action: string; + /** true if QTE was successful, otherwise false */ + results: boolean[]; + /** Id of the QTE object used from db/hideout/qte.json */ + id: string; + timestamp: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutArea.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutArea.d.ts new file mode 100644 index 0000000..fa5ca20 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutArea.d.ts @@ -0,0 +1,72 @@ +export interface IHideoutArea { + _id: string; + type: number; + enabled: boolean; + needsFuel: boolean; + requirements: IAreaRequirement[]; + takeFromSlotLocked: boolean; + craftGivesExp: boolean; + displayLevel: boolean; + enableAreaRequirements: boolean; + stages: Record; +} +export interface IAreaRequirement { + areaType: number; + requiredlevel: number; + type: string; +} +export interface Stage { + autoUpgrade: boolean; + bonuses: StageBonus[]; + constructionTime: number; + description: string; + displayInterface: boolean; + improvements: IStageImprovement[]; + requirements: IStageRequirement[]; + slots: number; +} +export interface IStageImprovement { + id: string; + bonuses: IStageImprovementBonus[]; + improvementTime: number; + requirements: IStageImprovementRequirement[]; +} +export interface IStageImprovementBonus { + passive: boolean; + production: boolean; + type: string; + value: number; + visible: boolean; +} +export interface IStageImprovementRequirement { + count: number; + isEncoded: boolean; + isFunctional: boolean; + templateId: string; + type: string; +} +export interface IStageRequirement { + areaType?: number; + requiredLevel?: number; + type: string; + templateId?: string; + count?: number; + isEncoded: false; + isFunctional?: boolean; + traderId?: string; + loyaltyLevel?: number; + skillName?: string; + skillLevel?: number; +} +export interface StageBonus { + value: number; + passive: boolean; + production: boolean; + visible: boolean; + skillType?: string; + type: string; + filter?: string[]; + icon?: string; + id?: string; + templateId?: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutContinuousProductionStartRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutContinuousProductionStartRequestData.d.ts new file mode 100644 index 0000000..3ef00c6 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutContinuousProductionStartRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IHideoutContinuousProductionStartRequestData { + Action: "HideoutContinuousProductionStart"; + recipeId: string; + timestamp: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutImproveAreaRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutImproveAreaRequestData.d.ts new file mode 100644 index 0000000..7e927bf --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutImproveAreaRequestData.d.ts @@ -0,0 +1,13 @@ +export interface IHideoutImproveAreaRequestData { + Action: "HideoutImproveArea"; + /** Hideout area id from areas.json */ + id: string; + areaType: number; + items: HideoutItem[]; + timestamp: number; +} +export interface HideoutItem { + /** Hideout inventory id that was used by improvement action */ + id: string; + count: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutProduction.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutProduction.d.ts new file mode 100644 index 0000000..2367e08 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutProduction.d.ts @@ -0,0 +1,23 @@ +export interface IHideoutProduction { + _id: string; + areaType: number; + requirements: Requirement[]; + productionTime: number; + endProduct: string; + isEncoded: boolean; + locked: boolean; + needFuelForAllProductionTime: boolean; + continuous: boolean; + count: number; + productionLimitCount: number; +} +export interface Requirement { + templateId?: string; + count?: number; + isEncoded?: boolean; + isFunctional?: boolean; + type: string; + areaType?: number; + requiredLevel?: number; + resource?: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutPutItemInRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutPutItemInRequestData.d.ts new file mode 100644 index 0000000..8326c55 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutPutItemInRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IHideoutPutItemInRequestData { + Action: "HideoutPutItemsInAreaSlots"; + areaType: number; + items: Record; + timestamp: number; +} +export interface ItemDetails { + count: number; + id: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutScavCase.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutScavCase.d.ts new file mode 100644 index 0000000..e0b9a27 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutScavCase.d.ts @@ -0,0 +1,18 @@ +import { MinMax } from "../../common/MinMax"; +export interface IHideoutScavCase { + _id: string; + ProductionTime: number; + Requirements: Requirement[]; + EndProducts: EndProducts; +} +export interface Requirement { + templateId: string; + count: number; + isFunctional: boolean; + type: string; +} +export interface EndProducts { + Common: MinMax; + Rare: MinMax; + Superrare: MinMax; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutScavCaseStartRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutScavCaseStartRequestData.d.ts new file mode 100644 index 0000000..72fda86 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutScavCaseStartRequestData.d.ts @@ -0,0 +1,15 @@ +export interface IHideoutScavCaseStartRequestData { + Action: "HideoutScavCaseProductionStart"; + recipeId: string; + items: HideoutItem[]; + tools: Tool[]; + timestamp: number; +} +export interface HideoutItem { + id: string; + count: number; +} +export interface Tool { + id: string; + count: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutSettingsBase.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutSettingsBase.d.ts new file mode 100644 index 0000000..8e45939 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutSettingsBase.d.ts @@ -0,0 +1,6 @@ +export interface IHideoutSettingsBase { + generatorSpeedWithoutFuel: number; + generatorFuelFlowRate: number; + airFilterUnitFlowRate: number; + gpuBoostRate: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutSingleProductionStartRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutSingleProductionStartRequestData.d.ts new file mode 100644 index 0000000..1ed542a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutSingleProductionStartRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IHideoutSingleProductionStartRequestData { + Action: "HideoutSingleProductionStart"; + recipeId: string; + items: Item[]; + timestamp: number; +} +export interface Item { + id: string; + count: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutTakeItemOutRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutTakeItemOutRequestData.d.ts new file mode 100644 index 0000000..83a740a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutTakeItemOutRequestData.d.ts @@ -0,0 +1,6 @@ +export interface IHideoutTakeItemOutRequestData { + Action: "HideoutTakeItemsFromAreaSlots"; + areaType: number; + slots: number[]; + timestamp: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutTakeProductionRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutTakeProductionRequestData.d.ts new file mode 100644 index 0000000..a6847ef --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutTakeProductionRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IHideoutTakeProductionRequestData { + Action: "HideoutTakeProduction"; + recipeId: string; + timestamp: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutToggleAreaRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutToggleAreaRequestData.d.ts new file mode 100644 index 0000000..cdea513 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutToggleAreaRequestData.d.ts @@ -0,0 +1,6 @@ +export interface IHideoutToggleAreaRequestData { + Action: "HideoutToggleArea"; + areaType: number; + enabled: boolean; + timestamp: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutUpgradeCompleteRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutUpgradeCompleteRequestData.d.ts new file mode 100644 index 0000000..545311e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutUpgradeCompleteRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IHideoutUpgradeCompleteRequestData { + Action: "HideoutUpgradeComplete"; + areaType: number; + timestamp: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutUpgradeRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutUpgradeRequestData.d.ts new file mode 100644 index 0000000..dfbfdca --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IHideoutUpgradeRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IHideoutUpgradeRequestData { + Action: "HideoutUpgrade"; + areaType: number; + items: HideoutItem[]; + timestamp: number; +} +export interface HideoutItem { + count: number; + id: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IQteData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IQteData.d.ts new file mode 100644 index 0000000..f842b84 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IQteData.d.ts @@ -0,0 +1,38 @@ +export interface IQteData { + Id: string; + Type: string; + Area: string; + AreaLevel: number; + QuickTimeEvents: IQuickTimeEvent[]; + Requirements: IQteRequirement[]; + Results: Record; +} +export interface IQuickTimeEvent { + Type: string; + Position: number; + StartDelay: number; + EndDelay: number; + Speed: number; + SuccessRange: string; + Key: string; +} +export interface IQteRequirement { + type: string; +} +export interface IQteResult { + Energy: number; + Hydration: number; + RewardsRange: IQteEffect[]; +} +export interface IQteEffect { + Type: string; + SkillId: string; + levelMultipliers: ISkillLevelMultiplier[]; + Time: number; + Weight: number; + Result: string; +} +export interface ISkillLevelMultiplier { + level: number; + multiplier: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/hideout/IRecordShootingRangePoints.d.ts b/TypeScript/16ImporterUtil/types/models/eft/hideout/IRecordShootingRangePoints.d.ts new file mode 100644 index 0000000..5bfd2fd --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/hideout/IRecordShootingRangePoints.d.ts @@ -0,0 +1,4 @@ +export interface IRecordShootingRangePoints { + Action: "RecordShootingRangePoints"; + points: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/httpResponse/IGetBodyResponseData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/httpResponse/IGetBodyResponseData.d.ts new file mode 100644 index 0000000..b5dc5c1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/httpResponse/IGetBodyResponseData.d.ts @@ -0,0 +1,5 @@ +export interface IGetBodyResponseData { + err: number; + errmsg: any; + (data: Type): Type; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/httpResponse/INullResponseData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/httpResponse/INullResponseData.d.ts new file mode 100644 index 0000000..a3ae838 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/httpResponse/INullResponseData.d.ts @@ -0,0 +1,5 @@ +export interface INullResponseData { + err: number; + errmsg: any; + data: null; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inRaid/IRegisterPlayerRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inRaid/IRegisterPlayerRequestData.d.ts new file mode 100644 index 0000000..e2d9cf1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inRaid/IRegisterPlayerRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IRegisterPlayerRequestData { + crc: number; + locationId: string; + variantId: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inRaid/ISaveProgressRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inRaid/ISaveProgressRequestData.d.ts new file mode 100644 index 0000000..6930261 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inRaid/ISaveProgressRequestData.d.ts @@ -0,0 +1,8 @@ +import { IPmcData } from "../common/IPmcData"; +import { ISyncHealthRequestData } from "../health/ISyncHealthRequestData"; +export interface ISaveProgressRequestData { + exit: string; + profile: IPmcData; + isPlayerScav: boolean; + health: ISyncHealthRequestData; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/insurance/IGetInsuranceCostRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/insurance/IGetInsuranceCostRequestData.d.ts new file mode 100644 index 0000000..0e32e96 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/insurance/IGetInsuranceCostRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IGetInsuranceCostRequestData { + traders: string[]; + items: string[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/insurance/IGetInsuranceCostResponseData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/insurance/IGetInsuranceCostResponseData.d.ts new file mode 100644 index 0000000..4579fdb --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/insurance/IGetInsuranceCostResponseData.d.ts @@ -0,0 +1 @@ +export type IGetInsuranceCostResponseData = Record>; diff --git a/TypeScript/16ImporterUtil/types/models/eft/insurance/IInsureRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/insurance/IInsureRequestData.d.ts new file mode 100644 index 0000000..f657bb7 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/insurance/IInsureRequestData.d.ts @@ -0,0 +1,6 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface IInsureRequestData extends IBaseInteractionRequestData { + Action: "Insure"; + tid: string; + items: string[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IAddItemRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IAddItemRequestData.d.ts new file mode 100644 index 0000000..61516d6 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IAddItemRequestData.d.ts @@ -0,0 +1,9 @@ +export interface IAddItemRequestData { + tid: string; + items: AddItem[]; +} +export interface AddItem { + count: number; + isPreset?: boolean; + item_id: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IAddItemTempObject.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IAddItemTempObject.d.ts new file mode 100644 index 0000000..62d4b64 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IAddItemTempObject.d.ts @@ -0,0 +1,7 @@ +import { Item, Location } from "../common/tables/IItem"; +export interface IAddItemTempObject { + itemRef: Item; + count: number; + isPreset: boolean; + location?: Location; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryAddRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryAddRequestData.d.ts new file mode 100644 index 0000000..462e0de --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryAddRequestData.d.ts @@ -0,0 +1,6 @@ +import { Container, IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryAddRequestData extends IInventoryBaseActionRequestData { + Action: "Add"; + item: string; + container: Container; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryBaseActionRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryBaseActionRequestData.d.ts new file mode 100644 index 0000000..6d7c190 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryBaseActionRequestData.d.ts @@ -0,0 +1,27 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface IInventoryBaseActionRequestData extends IBaseInteractionRequestData { +} +export interface To { + id: string; + container: string; + location?: ToLocation | number; +} +export interface ToLocation { + x: number; + y: number; + r: string; + rotation?: string; + isSearched: boolean; +} +export interface Container { + id: string; + container: string; + location?: Location | number; +} +export interface Location { + x: number; + y: number; + r: string; + rotation?: string; + isSearched: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryBindRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryBindRequestData.d.ts new file mode 100644 index 0000000..ff35066 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryBindRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryBindRequestData extends IInventoryBaseActionRequestData { + Action: "Bind"; + item: string; + index: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryCreateMarkerRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryCreateMarkerRequestData.d.ts new file mode 100644 index 0000000..1e1ecef --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryCreateMarkerRequestData.d.ts @@ -0,0 +1,12 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryCreateMarkerRequestData extends IInventoryBaseActionRequestData { + Action: "CreateMapMarker"; + item: string; + mapMarker: MapMarker; +} +export interface MapMarker { + Type: string; + X: number; + Y: number; + Note: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryDeleteMarkerRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryDeleteMarkerRequestData.d.ts new file mode 100644 index 0000000..0657e1b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryDeleteMarkerRequestData.d.ts @@ -0,0 +1,7 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryDeleteMarkerRequestData extends IInventoryBaseActionRequestData { + Action: "DeleteMapMarker"; + item: string; + X: number; + Y: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryEditMarkerRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryEditMarkerRequestData.d.ts new file mode 100644 index 0000000..e2857e1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryEditMarkerRequestData.d.ts @@ -0,0 +1,14 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryEditMarkerRequestData extends IInventoryBaseActionRequestData { + Action: "EditMapMarker"; + item: string; + X: number; + Y: number; + mapMarker: MapMarker; +} +export interface MapMarker { + Type: string; + X: number; + Y: number; + Note: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryExamineRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryExamineRequestData.d.ts new file mode 100644 index 0000000..614711f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryExamineRequestData.d.ts @@ -0,0 +1,10 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryExamineRequestData extends IInventoryBaseActionRequestData { + Action: "Examine"; + item: string; + fromOwner: IFromOwner; +} +export interface IFromOwner { + id: string; + type: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryFoldRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryFoldRequestData.d.ts new file mode 100644 index 0000000..a5fb2a1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryFoldRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryFoldRequestData extends IInventoryBaseActionRequestData { + Action: "Fold"; + item: string; + value: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryMergeRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryMergeRequestData.d.ts new file mode 100644 index 0000000..3fcfa35 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryMergeRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryMergeRequestData extends IInventoryBaseActionRequestData { + Action: "Merge"; + item: string; + with: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryMoveRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryMoveRequestData.d.ts new file mode 100644 index 0000000..b767908 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryMoveRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData, To } from "./IInventoryBaseActionRequestData"; +export interface IInventoryMoveRequestData extends IInventoryBaseActionRequestData { + Action: "Move"; + item: string; + to: To; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryReadEncyclopediaRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryReadEncyclopediaRequestData.d.ts new file mode 100644 index 0000000..5487b20 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryReadEncyclopediaRequestData.d.ts @@ -0,0 +1,5 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryReadEncyclopediaRequestData extends IInventoryBaseActionRequestData { + Action: "ReadEncyclopedia"; + ids: string[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryRemoveRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryRemoveRequestData.d.ts new file mode 100644 index 0000000..07d1a52 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryRemoveRequestData.d.ts @@ -0,0 +1,5 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryRemoveRequestData extends IInventoryBaseActionRequestData { + Action: "Remove"; + item: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventorySortRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventorySortRequestData.d.ts new file mode 100644 index 0000000..a0b7928 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventorySortRequestData.d.ts @@ -0,0 +1,20 @@ +import { Upd } from "../common/tables/IItem"; +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventorySortRequestData extends IInventoryBaseActionRequestData { + Action: "ApplyInventoryChanges"; + changedItems: ChangedItem[]; +} +export interface ChangedItem { + _id: string; + _tpl: string; + parentId: string; + slotId: string; + location: Location; + upd: Upd; +} +export interface Location { + x: number; + y: number; + r: string; + isSearched: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventorySplitRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventorySplitRequestData.d.ts new file mode 100644 index 0000000..730ae71 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventorySplitRequestData.d.ts @@ -0,0 +1,7 @@ +import { Container, IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventorySplitRequestData extends IInventoryBaseActionRequestData { + Action: "Split"; + item: string; + container: Container; + count: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventorySwapRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventorySwapRequestData.d.ts new file mode 100644 index 0000000..1b0464d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventorySwapRequestData.d.ts @@ -0,0 +1,11 @@ +import { OwnerInfo } from "../common/request/IBaseInteractionRequestData"; +import { IInventoryBaseActionRequestData, To } from "./IInventoryBaseActionRequestData"; +export interface IInventorySwapRequestData extends IInventoryBaseActionRequestData { + Action: "Swap"; + item: string; + to: To; + item2: string; + to2: To; + fromOwner2: OwnerInfo; + toOwner2: OwnerInfo; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryTagRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryTagRequestData.d.ts new file mode 100644 index 0000000..f021661 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryTagRequestData.d.ts @@ -0,0 +1,7 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryTagRequestData extends IInventoryBaseActionRequestData { + Action: "Tag"; + item: string; + TagName: string; + TagColor: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryToggleRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryToggleRequestData.d.ts new file mode 100644 index 0000000..0955440 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryToggleRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryToggleRequestData extends IInventoryBaseActionRequestData { + Action: "Toggle"; + item: string; + value: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryTransferRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryTransferRequestData.d.ts new file mode 100644 index 0000000..cf4391b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IInventoryTransferRequestData.d.ts @@ -0,0 +1,7 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryTransferRequestData extends IInventoryBaseActionRequestData { + Action: "Transfer"; + item: string; + with: string; + count: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/inventory/IOpenRandomLootContainerRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/inventory/IOpenRandomLootContainerRequestData.d.ts new file mode 100644 index 0000000..3c45124 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/inventory/IOpenRandomLootContainerRequestData.d.ts @@ -0,0 +1,11 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IOpenRandomLootContainerRequestData extends IInventoryBaseActionRequestData { + Action: "OpenRandomLootContainer"; + /** Container item opened */ + item: string; + to: To[]; +} +export interface To { + /** Player character (pmc/scav) id items will be sent to */ + id: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/itemEvent/IEmptyItemEventRouterResponse.d.ts b/TypeScript/16ImporterUtil/types/models/eft/itemEvent/IEmptyItemEventRouterResponse.d.ts new file mode 100644 index 0000000..689fe75 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/itemEvent/IEmptyItemEventRouterResponse.d.ts @@ -0,0 +1,4 @@ +import { IItemEventRouterBase } from "./IItemEventRouterBase"; +export interface IEmptyItemEventRouterResponse extends IItemEventRouterBase { + profileChanges: ""; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/itemEvent/IItemEventRouterBase.d.ts b/TypeScript/16ImporterUtil/types/models/eft/itemEvent/IItemEventRouterBase.d.ts new file mode 100644 index 0000000..dbf6330 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/itemEvent/IItemEventRouterBase.d.ts @@ -0,0 +1,71 @@ +import { QuestStatus } from "../../../models/enums/QuestStatus"; +import { Health, Productive, Skills, TraderInfo } from "../common/tables/IBotBase"; +import { Item, Upd } from "../common/tables/IItem"; +import { IQuest } from "../common/tables/IQuest"; +import { IPmcDataRepeatableQuest } from "../common/tables/IRepeatableQuests"; +import { IRagfairOffer } from "../ragfair/IRagfairOffer"; +export interface IItemEventRouterBase { + warnings: Warning[]; + profileChanges: TProfileChanges | ""; +} +export type TProfileChanges = Record; +export interface Warning { + index: number; + errmsg: string; + code?: string; + data?: any; +} +export interface ProfileChange { + _id: string; + experience: number; + quests: IQuest[]; + ragFairOffers: IRagfairOffer[]; + builds: BuildChange[]; + items: ItemChanges; + production: Record; + /** Hideout area improvement id */ + improvements: Record; + skills: Skills; + health: Health; + traderRelations: Record; + repeatableQuests?: IPmcDataRepeatableQuest[]; + recipeUnlocked: Record; + questsStatus: QuestStatusChange[]; +} +export interface QuestStatusChange { + qid: string; + startTime: number; + status: QuestStatus; + statusTimers: Record; + completedConditions: string[]; + availableAfter: number; +} +export interface BuildChange { + id: string; + name: string; + root: string; + items: Item[]; +} +export interface ItemChanges { + new: Product[]; + change: Product[]; + del: Product[]; +} +export interface Improvement { + completed: boolean; + improveCompleteTimestamp: number; +} +export interface Product { + _id: string; + _tpl?: string; + parentId?: string; + slotId?: string; + location?: ItemChangeLocation; + upd?: Upd; +} +export interface ItemChangeLocation { + x: number; + y: number; + r: number; + isSearched?: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/itemEvent/IItemEventRouterRequest.d.ts b/TypeScript/16ImporterUtil/types/models/eft/itemEvent/IItemEventRouterRequest.d.ts new file mode 100644 index 0000000..515b49a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/itemEvent/IItemEventRouterRequest.d.ts @@ -0,0 +1,21 @@ +export interface IItemEventRouterRequest { + data: Daum[]; + tm: number; + reload: number; +} +export interface Daum { + Action: string; + item: string; + to: To; +} +export interface To { + id: string; + container: string; + location?: Location; +} +export interface Location { + x: number; + y: number; + r: string; + isSearched: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/itemEvent/IItemEventRouterResponse.d.ts b/TypeScript/16ImporterUtil/types/models/eft/itemEvent/IItemEventRouterResponse.d.ts new file mode 100644 index 0000000..72a9b5b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/itemEvent/IItemEventRouterResponse.d.ts @@ -0,0 +1,3 @@ +import { IItemEventRouterBase } from "./IItemEventRouterBase"; +export interface IItemEventRouterResponse extends IItemEventRouterBase { +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/launcher/IChangeRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/launcher/IChangeRequestData.d.ts new file mode 100644 index 0000000..f0a7838 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/launcher/IChangeRequestData.d.ts @@ -0,0 +1,4 @@ +import { ILoginRequestData } from "./ILoginRequestData"; +export interface IChangeRequestData extends ILoginRequestData { + change: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/launcher/IGetMiniProfileRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/launcher/IGetMiniProfileRequestData.d.ts new file mode 100644 index 0000000..a14c7c9 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/launcher/IGetMiniProfileRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IGetMiniProfileRequestData { + username: string; + password: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/launcher/ILoginRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/launcher/ILoginRequestData.d.ts new file mode 100644 index 0000000..e965813 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/launcher/ILoginRequestData.d.ts @@ -0,0 +1,4 @@ +export interface ILoginRequestData { + username: string; + password: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/launcher/IMiniProfile.d.ts b/TypeScript/16ImporterUtil/types/models/eft/launcher/IMiniProfile.d.ts new file mode 100644 index 0000000..c12661a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/launcher/IMiniProfile.d.ts @@ -0,0 +1,14 @@ +export interface IMiniProfile { + username: string; + nickname: string; + side: string; + currlvl: number; + currexp: number; + prevexp: number; + nextlvl: number; + maxlvl: number; + akiData: AkiData; +} +export interface AkiData { + version: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/launcher/IRegisterData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/launcher/IRegisterData.d.ts new file mode 100644 index 0000000..61a8bbe --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/launcher/IRegisterData.d.ts @@ -0,0 +1,4 @@ +import { ILoginRequestData } from "./ILoginRequestData"; +export interface IRegisterData extends ILoginRequestData { + edition: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/launcher/IRemoveProfileData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/launcher/IRemoveProfileData.d.ts new file mode 100644 index 0000000..4cc5618 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/launcher/IRemoveProfileData.d.ts @@ -0,0 +1,2 @@ +import { ILoginRequestData } from "./ILoginRequestData"; +export type IRemoveProfileData = ILoginRequestData; diff --git a/TypeScript/16ImporterUtil/types/models/eft/location/IGetLocationRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/location/IGetLocationRequestData.d.ts new file mode 100644 index 0000000..04e84d9 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/location/IGetLocationRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IGetLocationRequestData { + crc: number; + locationId: string; + variantId: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/match/ICreateGroupRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/match/ICreateGroupRequestData.d.ts new file mode 100644 index 0000000..7413a8a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/match/ICreateGroupRequestData.d.ts @@ -0,0 +1,6 @@ +import { RaidMode } from "../../enums/RaidMode"; +export interface ICreateGroupRequestData { + location: string; + raidMode: RaidMode; + startInGroup: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/match/IEndOfflineRaidRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/match/IEndOfflineRaidRequestData.d.ts new file mode 100644 index 0000000..811e9a2 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/match/IEndOfflineRaidRequestData.d.ts @@ -0,0 +1,6 @@ +export interface IEndOfflineRaidRequestData { + crc: number; + exitStatus: string; + exitName: any; + raidSeconds: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/match/IGetGroupStatusRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/match/IGetGroupStatusRequestData.d.ts new file mode 100644 index 0000000..55d7079 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/match/IGetGroupStatusRequestData.d.ts @@ -0,0 +1,9 @@ +import { RaidMode } from "../../enums/RaidMode"; +export interface IGetGroupStatusRequestData { + location: string; + savage: boolean; + dt: string; + keyId: string; + raidMode: RaidMode; + startInGroup: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/match/IGetProfileRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/match/IGetProfileRequestData.d.ts new file mode 100644 index 0000000..86b5bbd --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/match/IGetProfileRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetProfileRequestData { + profileId: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/match/IGetRaidConfigurationRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/match/IGetRaidConfigurationRequestData.d.ts new file mode 100644 index 0000000..cbcc2f6 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/match/IGetRaidConfigurationRequestData.d.ts @@ -0,0 +1,30 @@ +export interface IGetRaidConfigurationRequestData { + timeVariant: string; + raidMode: string; + metabolismDisabled: boolean; + playersSpawnPlace: string; + timeAndWeatherSettings: TimeAndWeatherSettings; + botSettings: BotSettings; + wavesSettings: WavesSettings; + location: string; +} +export interface TimeAndWeatherSettings { + isRandomTime: boolean; + isRandomWeather: boolean; + cloudinessType: string; + rainType: string; + windType: string; + fogType: string; + timeFlowType: string; + hourOfDay: number; +} +export interface BotSettings { + isScavWars: boolean; + botAmount: string; +} +export interface WavesSettings { + botAmount: string; + botDifficulty: string; + isBosses: boolean; + isTaggedAndCursed: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/match/IJoinMatchRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/match/IJoinMatchRequestData.d.ts new file mode 100644 index 0000000..cd34f7b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/match/IJoinMatchRequestData.d.ts @@ -0,0 +1,12 @@ +export interface IJoinMatchRequestData { + location: string; + savage: boolean; + dt: string; + servers: Server[]; + keyId: string; +} +export interface Server { + ping: number; + ip: string; + port: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/match/IJoinMatchResult.d.ts b/TypeScript/16ImporterUtil/types/models/eft/match/IJoinMatchResult.d.ts new file mode 100644 index 0000000..81c9055 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/match/IJoinMatchResult.d.ts @@ -0,0 +1,13 @@ +export interface IJoinMatchResult { + profileid: string; + status: string; + sid: string; + ip: string; + port: number; + version: string; + location: string; + raidMode: string; + mode: string; + shortid: string; + additional_info: any[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/match/IPutMetricsRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/match/IPutMetricsRequestData.d.ts new file mode 100644 index 0000000..d9ed214 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/match/IPutMetricsRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IPutMetricsRequestData { + sid: string; + settings: any; + SharedSettings: any; + HardwareDescription: any; + Location: string; + Metrics: any; + ClientEvents: any; + SpikeSamples: any[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/match/IUpdatePingRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/match/IUpdatePingRequestData.d.ts new file mode 100644 index 0000000..defbd66 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/match/IUpdatePingRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IUpdatePingRequestData { + servers: any[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/notes/INoteActionData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/notes/INoteActionData.d.ts new file mode 100644 index 0000000..610657f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/notes/INoteActionData.d.ts @@ -0,0 +1,10 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface INoteActionData extends IBaseInteractionRequestData { + Action: string; + index: number; + note: INote; +} +export interface INote { + Time: number; + Text: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/notifier/INotifier.d.ts b/TypeScript/16ImporterUtil/types/models/eft/notifier/INotifier.d.ts new file mode 100644 index 0000000..b248636 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/notifier/INotifier.d.ts @@ -0,0 +1,14 @@ +export interface INotifierChannel { + server: string; + channel_id: string; + url: string; + notifierServer: string; + ws: string; +} +import { Message } from "../profile/IAkiProfile"; +export interface INotification { + type: "RagfairOfferSold" | "new_message" | "ping"; + eventId: string; + dialogId?: string; + message?: Message; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/notifier/ISelectProfileRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/notifier/ISelectProfileRequestData.d.ts new file mode 100644 index 0000000..2bc3d1e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/notifier/ISelectProfileRequestData.d.ts @@ -0,0 +1,3 @@ +export interface ISelectProfileRequestData { + uid: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/notifier/ISelectProfileResponse.d.ts b/TypeScript/16ImporterUtil/types/models/eft/notifier/ISelectProfileResponse.d.ts new file mode 100644 index 0000000..ecb668a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/notifier/ISelectProfileResponse.d.ts @@ -0,0 +1,6 @@ +import { INotifierChannel } from "./INotifier"; +export interface ISelectProfileResponse { + status: string; + notifier: INotifierChannel; + notifierServer: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/player/IPlayerIncrementSkillLevelRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/player/IPlayerIncrementSkillLevelRequestData.d.ts new file mode 100644 index 0000000..2f9827c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/player/IPlayerIncrementSkillLevelRequestData.d.ts @@ -0,0 +1,21 @@ +import { Skills } from "../common/tables/IBotBase"; +export interface IPlayerIncrementSkillLevelRequestData { + _id: string; + experience: number; + quests: any[]; + ragFairOffers: any[]; + builds: any[]; + items: Items; + production: Production; + skills: Skills; + traderRelations: TraderRelations; +} +export interface Items { + new: any[]; + change: any[]; + del: any[]; +} +export interface Production { +} +export interface TraderRelations { +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts new file mode 100644 index 0000000..99c61f1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts @@ -0,0 +1,25 @@ +export interface IPresetBuildActionRequestData { + Action: string; + id: string; + name: string; + root: string; + items: Item[]; +} +export interface Item { + _id: string; + _tpl: string; + upd?: Upd; + parentId?: string; + slotId?: string; +} +export interface Upd { + Repairable: Repairable; + FireMode: FireMode; +} +export interface Repairable { + MaxDurability: number; + Durability: number; +} +export interface FireMode { + FireMode: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/profile/GetProfileStatusResponseData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/profile/GetProfileStatusResponseData.d.ts new file mode 100644 index 0000000..1228c2e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/profile/GetProfileStatusResponseData.d.ts @@ -0,0 +1,18 @@ +export interface GetProfileStatusResponseData { + maxPveCountExceeded: false; + profiles: ProfileData[]; +} +export interface ProfileData { + profileid: string; + profileToken: string; + status: string; + ip: string; + port: number; + sid: string; + version?: string; + location?: string; + raidMode?: string; + mode?: string; + shortId?: string; + additional_info?: any[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/profile/IAkiProfile.d.ts b/TypeScript/16ImporterUtil/types/models/eft/profile/IAkiProfile.d.ts new file mode 100644 index 0000000..2cea0c8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/profile/IAkiProfile.d.ts @@ -0,0 +1,176 @@ +import { MessageType } from "../../enums/MessageType"; +import { IPmcData } from "../common/IPmcData"; +import { Item } from "../common/tables/IItem"; +export interface IAkiProfile { + info: Info; + characters: Characters; + suits: string[]; + weaponbuilds: WeaponBuild[]; + dialogues: Record; + aki: Aki; + vitality: Vitality; + inraid: Inraid; + insurance: Insurance[]; + /** Assort purchases made by player since last trader refresh */ + traderPurchases?: Record>; +} +export declare class TraderPurchaseData { + count: number; + purchaseTimestamp: number; +} +export interface Info { + id: string; + username: string; + password: string; + wipe: boolean; + edition: string; +} +export interface Characters { + pmc: IPmcData; + scav: IPmcData; +} +export interface WeaponBuild { + id: string; + name: string; + root: string; + items: Item[]; +} +export interface Dialogue { + _id: string; + messages: Message[]; + pinned: boolean; + new: number; + attachmentsNew: number; +} +export interface DialogueInfo { + attachmentsNew: number; + new: number; + type: MessageType; + pinned: boolean; + message: MessagePreview; + _id: string; +} +export interface Message { + _id: string; + uid: string; + type: MessageType; + dt: number; + UtcDateTime?: number; + Member?: IUpdatableChatMember; + templateId: string; + text?: string; + hasRewards: boolean; + rewardCollected: boolean; + items: MessageItems; + maxStorageTime?: number; + systemData?: ISystemData; + profileChangeEvents?: any[]; +} +export interface MessagePreview { + uid: string; + type: MessageType; + dt: number; + templateId: string; + text?: string; +} +export interface MessageItems { + stash?: string; + data?: Item[]; +} +export interface ISystemData { + date?: string; + time?: string; + location?: string; + buyerNickname?: string; + soldItem?: string; + itemCount?: number; +} +export interface IUpdatableChatMember { + Nickname: string; + Side: string; + Level: number; + MemberCategory: string; + Ignored: boolean; + Banned: boolean; +} +export interface DateTime { + date: string; + time: string; +} +export interface Aki { + version: string; + mods?: ModDetails[]; +} +export interface ModDetails { + name: string; + version: string; + author: string; + dateAdded: number; +} +export interface Vitality { + health: Health; + effects: Effects; +} +export interface Health { + Hydration: number; + Energy: number; + Temperature: number; + Head: number; + Chest: number; + Stomach: number; + LeftArm: number; + RightArm: number; + LeftLeg: number; + RightLeg: number; +} +export interface Effects { + Head: Head; + Chest: Chest; + Stomach: Stomach; + LeftArm: LeftArm; + RightArm: RightArm; + LeftLeg: LeftLeg; + RightLeg: RightLeg; +} +export interface Head { +} +export interface Chest { +} +export interface Stomach { +} +export interface LeftArm { + Fracture?: number; +} +export interface RightArm { + Fracture?: number; +} +export interface LeftLeg { + Fracture?: number; +} +export interface RightLeg { + Fracture?: number; +} +export interface Inraid { + location: string; + character: string; +} +export interface Insurance { + scheduledTime: number; + traderId: string; + messageContent: MessageContent; + items: Item[]; +} +export interface MessageContent { + ragfair?: MessageContentRagfair; + text?: string; + templateId: string; + type: MessageType; + maxStorageTime?: number; + profileChangeEvents?: any[]; + systemData?: ISystemData; +} +export interface MessageContentRagfair { + offerId: string; + count: number; + handbookId: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/profile/IProfileChangeNicknameRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/profile/IProfileChangeNicknameRequestData.d.ts new file mode 100644 index 0000000..4a61196 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/profile/IProfileChangeNicknameRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IProfileChangeNicknameRequestData { + nickname: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/profile/IProfileChangeVoiceRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/profile/IProfileChangeVoiceRequestData.d.ts new file mode 100644 index 0000000..91058ce --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/profile/IProfileChangeVoiceRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IProfileChangeVoiceRequestData { + voice: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/profile/IProfileCreateRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/profile/IProfileCreateRequestData.d.ts new file mode 100644 index 0000000..93cc656 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/profile/IProfileCreateRequestData.d.ts @@ -0,0 +1,6 @@ +export interface IProfileCreateRequestData { + side: string; + nickname: string; + headId: string; + voiceId: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/profile/ISearchFriendRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/profile/ISearchFriendRequestData.d.ts new file mode 100644 index 0000000..e63e386 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/profile/ISearchFriendRequestData.d.ts @@ -0,0 +1,3 @@ +export interface ISearchFriendRequestData { + nickname: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/profile/ISearchFriendResponse.d.ts b/TypeScript/16ImporterUtil/types/models/eft/profile/ISearchFriendResponse.d.ts new file mode 100644 index 0000000..96d88b2 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/profile/ISearchFriendResponse.d.ts @@ -0,0 +1,9 @@ +export interface ISearchFriendResponse { + _id: string; + Info: Info; +} +export interface Info { + Nickname: string; + Side: string; + Level: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/profile/IValidateNicknameRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/profile/IValidateNicknameRequestData.d.ts new file mode 100644 index 0000000..9cca7e7 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/profile/IValidateNicknameRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IValidateNicknameRequestData { + nickname: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/quests/IAcceptQuestRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/quests/IAcceptQuestRequestData.d.ts new file mode 100644 index 0000000..0e4821a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/quests/IAcceptQuestRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IAcceptQuestRequestData { + Action: "QuestAccept"; + qid: string; + type: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/quests/ICompleteQuestRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/quests/ICompleteQuestRequestData.d.ts new file mode 100644 index 0000000..36a6db3 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/quests/ICompleteQuestRequestData.d.ts @@ -0,0 +1,6 @@ +export interface ICompleteQuestRequestData { + Action: string; + /** Quest Id */ + qid: string; + removeExcessItems: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/quests/IFailQuestRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/quests/IFailQuestRequestData.d.ts new file mode 100644 index 0000000..5881d91 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/quests/IFailQuestRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IFailQuestRequestData { + Action: "QuestComplete"; + qid: string; + removeExcessItems: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/quests/IHandoverQuestRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/quests/IHandoverQuestRequestData.d.ts new file mode 100644 index 0000000..63f10a8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/quests/IHandoverQuestRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IHandoverQuestRequestData { + Action: "QuestHandover"; + qid: string; + conditionId: string; + items: Item[]; +} +export interface Item { + id: string; + count: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/quests/IListQuestsRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/quests/IListQuestsRequestData.d.ts new file mode 100644 index 0000000..91f0b8c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/quests/IListQuestsRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IListQuestsRequestData { + completed: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/quests/IRepeatableQuestChangeRequest.d.ts b/TypeScript/16ImporterUtil/types/models/eft/quests/IRepeatableQuestChangeRequest.d.ts new file mode 100644 index 0000000..015f58e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/quests/IRepeatableQuestChangeRequest.d.ts @@ -0,0 +1,4 @@ +export interface IRepeatableQuestChangeRequest { + Action: "RepeatableQuestChange"; + qid: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/ragfair/IAddOfferRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/ragfair/IAddOfferRequestData.d.ts new file mode 100644 index 0000000..465ee02 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/ragfair/IAddOfferRequestData.d.ts @@ -0,0 +1,13 @@ +export interface IAddOfferRequestData { + Action: string; + sellInOnePiece: boolean; + items: string[]; + requirements: Requirement[]; +} +export interface Requirement { + _tpl: string; + count: number; + level: number; + side: number; + onlyFunctional: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/ragfair/IExtendOfferRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/ragfair/IExtendOfferRequestData.d.ts new file mode 100644 index 0000000..2a4a876 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/ragfair/IExtendOfferRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IExtendOfferRequestData { + offerId: string; + renewalTime: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/ragfair/IGetItemPriceResult.d.ts b/TypeScript/16ImporterUtil/types/models/eft/ragfair/IGetItemPriceResult.d.ts new file mode 100644 index 0000000..676322a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/ragfair/IGetItemPriceResult.d.ts @@ -0,0 +1,5 @@ +export interface IGetItemPriceResult { + avg: number; + min: number; + max: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/ragfair/IGetMarketPriceRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/ragfair/IGetMarketPriceRequestData.d.ts new file mode 100644 index 0000000..00f8f17 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/ragfair/IGetMarketPriceRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetMarketPriceRequestData { + templateId: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/ragfair/IGetOffersResult.d.ts b/TypeScript/16ImporterUtil/types/models/eft/ragfair/IGetOffersResult.d.ts new file mode 100644 index 0000000..fbc631d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/ragfair/IGetOffersResult.d.ts @@ -0,0 +1,7 @@ +import { IRagfairOffer } from "./IRagfairOffer"; +export interface IGetOffersResult { + categories?: Record; + offers: IRagfairOffer[]; + offersCount: number; + selectedCategory: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/ragfair/IRagfairOffer.d.ts b/TypeScript/16ImporterUtil/types/models/eft/ragfair/IRagfairOffer.d.ts new file mode 100644 index 0000000..792ec7d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/ragfair/IRagfairOffer.d.ts @@ -0,0 +1,45 @@ +import { MemberCategory } from "../../enums/MemberCategory"; +import { Item } from "../common/tables/IItem"; +export interface IRagfairOffer { + sellResult?: SellResult[]; + _id: string; + items: Item[]; + requirements: OfferRequirement[]; + root: string; + intId: number; + /** Handbook price */ + itemsCost: number; + /** Rouble price */ + requirementsCost: number; + startTime: number; + endTime: number; + sellInOnePiece: boolean; + loyaltyLevel: number; + buyRestrictionMax?: number; + buyRestrictionCurrent?: number; + locked: boolean; + unlimitedCount: boolean; + /** Rouble price */ + summaryCost: number; + user: IRagfairOfferUser; + notAvailable: boolean; + CurrentItemCount: number; + priority: boolean; +} +export interface OfferRequirement { + _tpl: string; + count: number; + onlyFunctional: boolean; +} +export interface IRagfairOfferUser { + id: string; + nickname?: string; + rating?: number; + memberType: MemberCategory; + avatar?: string; + isRatingGrowing?: boolean; +} +export interface SellResult { + sellTime: number; + amount: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/ragfair/IRemoveOfferRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/ragfair/IRemoveOfferRequestData.d.ts new file mode 100644 index 0000000..d926615 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/ragfair/IRemoveOfferRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IRemoveOfferRequestData { + Action: string; + offerId: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/ragfair/ISearchRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/ragfair/ISearchRequestData.d.ts new file mode 100644 index 0000000..56d093b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/ragfair/ISearchRequestData.d.ts @@ -0,0 +1,33 @@ +import { RagfairSort } from "../../enums/RagfairSort"; +export interface ISearchRequestData { + page: number; + limit: number; + sortType: RagfairSort; + sortDirection: number; + currency: number; + priceFrom: number; + priceTo: number; + quantityFrom: number; + quantityTo: number; + conditionFrom: number; + conditionTo: number; + oneHourExpiration: boolean; + removeBartering: boolean; + offerOwnerType: OfferOwnerType; + onlyFunctional: boolean; + updateOfferCount: boolean; + handbookId: string; + linkedSearchId: string; + neededSearchId: string; + buildItems: BuildItems; + buildCount: number; + tm: number; + reload: number; +} +export declare enum OfferOwnerType { + ANYOWNERTYPE = 0, + TRADEROWNERTYPE = 1, + PLAYEROWNERTYPE = 2 +} +export interface BuildItems { +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/ragfair/ISendRagfairReportRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/ragfair/ISendRagfairReportRequestData.d.ts new file mode 100644 index 0000000..2d14d20 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/ragfair/ISendRagfairReportRequestData.d.ts @@ -0,0 +1,3 @@ +export interface ISendRagfairReportRequestData { + offerId: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/repair/IBaseRepairActionDataRequest.d.ts b/TypeScript/16ImporterUtil/types/models/eft/repair/IBaseRepairActionDataRequest.d.ts new file mode 100644 index 0000000..e645fb3 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/repair/IBaseRepairActionDataRequest.d.ts @@ -0,0 +1,3 @@ +export interface IBaseRepairActionDataRequest { + Action: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/repair/IRepairActionDataRequest.d.ts b/TypeScript/16ImporterUtil/types/models/eft/repair/IRepairActionDataRequest.d.ts new file mode 100644 index 0000000..263d400 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/repair/IRepairActionDataRequest.d.ts @@ -0,0 +1,10 @@ +import { IBaseRepairActionDataRequest } from "./IBaseRepairActionDataRequest"; +export interface IRepairActionDataRequest extends IBaseRepairActionDataRequest { + Action: "Repair"; + repairKitsInfo: RepairKitsInfo[]; + target: string; +} +export interface RepairKitsInfo { + _id: string; + count: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/repair/ITraderRepairActionDataRequest.d.ts b/TypeScript/16ImporterUtil/types/models/eft/repair/ITraderRepairActionDataRequest.d.ts new file mode 100644 index 0000000..e3d469d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/repair/ITraderRepairActionDataRequest.d.ts @@ -0,0 +1,10 @@ +import { IBaseRepairActionDataRequest } from "./IBaseRepairActionDataRequest"; +export interface ITraderRepairActionDataRequest extends IBaseRepairActionDataRequest { + Action: "TraderRepair"; + tid: string; + repairItems: RepairItem[]; +} +export interface RepairItem { + _id: string; + count: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/trade/IProcessBaseTradeRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/trade/IProcessBaseTradeRequestData.d.ts new file mode 100644 index 0000000..a9ef757 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/trade/IProcessBaseTradeRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IProcessBaseTradeRequestData { + Action: string; + type: string; + tid: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/trade/IProcessBuyTradeRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/trade/IProcessBuyTradeRequestData.d.ts new file mode 100644 index 0000000..a9e4c17 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/trade/IProcessBuyTradeRequestData.d.ts @@ -0,0 +1,14 @@ +import { IProcessBaseTradeRequestData } from "./IProcessBaseTradeRequestData"; +export interface IProcessBuyTradeRequestData extends IProcessBaseTradeRequestData { + Action: "buy_from_trader" | "TradingConfirm" | "RestoreHealth" | ""; + type: string; + tid: string; + item_id: string; + count: number; + scheme_id: number; + scheme_items: SchemeItem[]; +} +export interface SchemeItem { + id: string; + count: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/trade/IProcessRagfairTradeRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/trade/IProcessRagfairTradeRequestData.d.ts new file mode 100644 index 0000000..889dfd1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/trade/IProcessRagfairTradeRequestData.d.ts @@ -0,0 +1,13 @@ +export interface IProcessRagfairTradeRequestData { + Action: string; + offers: Offer[]; +} +export interface Offer { + id: string; + count: number; + items: Item[]; +} +export interface Item { + id: string; + count: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/trade/IProcessSellTradeRequestData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/trade/IProcessSellTradeRequestData.d.ts new file mode 100644 index 0000000..dee0cd5 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/trade/IProcessSellTradeRequestData.d.ts @@ -0,0 +1,13 @@ +import { IProcessBaseTradeRequestData } from "./IProcessBaseTradeRequestData"; +export interface IProcessSellTradeRequestData extends IProcessBaseTradeRequestData { + Action: "sell_to_trader"; + type: string; + tid: string; + price: number; + items: Item[]; +} +export interface Item { + id: string; + count: number; + scheme_id: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/weather/IWeatherData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/weather/IWeatherData.d.ts new file mode 100644 index 0000000..1f5d5b5 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/weather/IWeatherData.d.ts @@ -0,0 +1,21 @@ +import { WindDirection } from "../../../models/enums/WindDirection"; +export interface IWeatherData { + acceleration: number; + time: string; + date: string; + weather?: IWeather; +} +export interface IWeather { + pressure: number; + temp: number; + fog: number; + rain_intensity: number; + rain: number; + wind_gustiness: number; + wind_direction: WindDirection; + wind_speed: number; + cloud: number; + time: string; + date: string; + timestamp: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/eft/wishlist/IWishlistActionData.d.ts b/TypeScript/16ImporterUtil/types/models/eft/wishlist/IWishlistActionData.d.ts new file mode 100644 index 0000000..9217864 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/eft/wishlist/IWishlistActionData.d.ts @@ -0,0 +1,4 @@ +export interface IWishlistActionData { + Action: string; + templateId: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/AmmoTypes.d.ts b/TypeScript/16ImporterUtil/types/models/enums/AmmoTypes.d.ts new file mode 100644 index 0000000..254b410 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/AmmoTypes.d.ts @@ -0,0 +1,208 @@ +export declare enum Grenade { + M386_HE_GRENADE = "5ede475b549eed7c6d5c18fb", + M576_MP_APERS_GRENADE = "5ede475339ee016e8c534742", + M433_HEDP_GRENADE = "5f0c892565703e5c461894e9", + M406_HE_GRENADE = "5ede4739e0350d05467f73e8", + M381_HE_GRENADE = "5ede474b0c226a66f5402622", + M441_HE_GRENADE = "5ede47405b097655935d7d16" +} +export declare enum Ammo762x51 { + M62_TRACER = "5a608bf24f39f98ffc77720e", + M80 = "58dd3ad986f77403051cba8f", + M61 = "5a6086ea4f39f99cd479502f", + BCP_FMJ = "5e023e53d4353e3302577c4c", + ULTRA_NOSLER = "5e023e88277cce2b522ff2b1", + TCW_SP = "5e023e6e34d52a55c3304f71", + M993 = "5efb0c1bd79ff02a1f5e68d9" +} +export declare enum Ammo762x54 { + SNB_GZH = "560d61e84bdc2da74d8b4571", + LPS_GZH = "5887431f2459777e1612938f", + PS_GZH = "59e77a2386f7742ee578960a", + T46M_GZH = "5e023cf8186a883be655e54f", + BT_GZH = "5e023d34e8a400319a28ed44", + BS_GZH = "5e023d48186a883be655e551" +} +export declare enum Ammo86x70 { + TAC_X = "5fc382b6d6fa9c00c571bbc3", + UCW = "5fc382c1016cce60e8341b20", + AP = "5fc382a9d724d907e2077dab", + FMJ = "5fc275cf85fd526b824a571a" +} +export declare enum Ammo46x30 { + AP_SX = "5ba26835d4351e0035628ff5", + ACTION_SX = "5ba26812d4351e003201fef1", + FMJ_SX = "5ba2678ad4351e44f824b344", + SUBSONIC_SX = "5ba26844d4351e00334c9475" +} +export declare enum Ammo57x28 { + SS198LF = "5cc80f79e4a949033c7343b2", + R37_F = "5cc86832d7f00c000d3a6e6c", + SS190 = "5cc80f38e4a949001152b560", + R37_X = "5cc86840d7f00c002412c56c", + L191 = "5cc80f53e4a949000e1ea4f8", + SS197SR = "5cc80f8fe4a949033b0224a2", + SB193 = "5cc80f67e4a949035e43bbba" +} +export declare enum Ammo762x25 { + FMJ43 = "5735ff5c245977640e39ba7e", + LRN = "573601b42459776410737435", + P_GL = "5736026a245977644601dc61", + PST_GZH = "573603562459776430731618", + LRNPC = "573602322459776445391df1", + AKBS = "5735fdcd2459776445391d61", + PT_GZH = "573603c924597764442bd9cb" +} +export declare enum Ammo9x18 { + PM_SP8_GZH = "5737218f245977612125ba51", + P_GZH = "573719762459775a626ccbc1", + PSTM_GZH = "57371aab2459775a77142f22", + RG028_GZH = "573720e02459776143012541", + BZHT_GZH = "573718ba2459775a75491131", + PM_PSV = "5737207f24597760ff7b25f2", + SP7_GZH = "57372140245977611f70ee91", + PBM_GZH = "573719df2459775a626ccbc2", + PSO_GZH = "57371f8d24597761006c6a81", + PST_GZH = "5737201124597760fc4431f1", + PS_GS_PPO = "57371f2b24597761224311f1", + PRS_GS = "57371eb62459776125652ac1", + PPT_GZH = "57371e4124597760ff7b25f1", + PPE_GZH = "57371b192459775a9f58a5e0" +} +export declare enum Ammo9x19 { + PSO_GZH = "58864a4f2459770fcc257101", + PST_GZH = "56d59d3ad2720bdb418b4577", + GREEN_TRACER = "5c3df7d588a4501f290594e5", + RIP = "5c0d56a986f774449d5de529", + AP_63 = "5c925fa22e221601da359b7b", + LUGER_CCI = "5a3c16fe86f77452b62de32a", + PBP_GZH = "5efb0da7a29a85116f6ea05f", + QUAKEMAKER = "5efb0e16aeb21837e749c7ff" +} +export declare enum Ammo9x21 { + P_GZH = "5a26abfac4a28232980eabff", + PS_GZH = "5a269f97c4a282000b151807", + PE_GZH = "5a26ac06c4a282000c5a90a8", + BT_GZH = "5a26ac0ec4a28200741e1e18" +} +export declare enum Ammo9x33R { + FMJ = "62330b3ed4dc74626d570b95", + HOLLOW_POINT = "62330bfadc5883093563729b", + SOFT_POINT = "62330c40bdd19b369e1e53d1", + JACKET_HP = "62330c18744e5e31df12f516" +} +export declare enum Ammo1143x23ACP { + MATCH_FMJ = "5e81f423763d9f754677bf2e", + HYDRA_SHOK = "5efb0fc6aeb21837e749c801", + LASERMATCH_FMJ = "5efb0d4f4bc50b58e81710f3", + AP = "5efb0cabfb3e451d70735af5", + RIP = "5ea2a8e200685063ec28c05a" +} +export declare enum Ammo545x39 { + PS_GS = "56dff3afd2720bba668b4567", + SP = "56dff421d2720b5f5a8b4567", + PPBS_GS_IGOLNIK = "5c0d5e4486f77478390952fe", + BS_7N40 = "61962b617c6c7b169525f168", + PRS_GS = "56dff338d2720bbd668b4569", + BT_GS = "56dff061d2720bb5668b4567", + US_GS = "56dff4ecd2720b5f5a8b4568", + BP_GS = "56dfef82d2720bbd668b4567", + HP = "56dff216d2720bbd668b4568", + BS_GS = "56dff026d2720bb8668b4567", + T_GS = "56dff4a2d2720bbd668b456a", + PP_GS = "56dff2ced2720bb4668b4567", + FMJ = "56dff0bed2720bb0668b4567" +} +export declare enum Ammo556x45 { + M856 = "59e68f6f86f7746c9f75e846", + MK255_MOD_0_RRLP = "59e6918f86f7746c9f75e849", + M995 = "59e690b686f7746c9f75e848", + M855A1 = "54527ac44bdc2d36668b4567", + M856A1 = "59e6906286f7746c9f75e847", + M855 = "54527a984bdc2d4e668b4567", + HP = "59e6927d86f77411da468256", + FMJ = "59e6920f86f77411d82aa167", + WARMAGEDDON = "5c0d5ae286f7741e46554302", + MK_318_MOD_0_SOST = "60194943740c5d77f6705eea", + SSA_AP = "601949593ae8f707c4608daa" +} +export declare enum Ammo762x35 { + M62_TRACER = "619636be6db0f2477964e710", + BCP_FMJ = "5fbe3ffdf8b6a877a729ea82", + AP = "5fd20ff893a8961fc660a954", + V_MAX = "6196364158ef8c428c287d9f", + WHISPER = "6196365d58ef8c428c287da1" +} +export declare enum Ammo762x39 { + PS_GZH = "5656d7c34bdc2d9d198b4587", + HP = "59e4d3d286f774176a36250a", + US_GZH = "59e4d24686f7741776641ac7", + T45M1_GZH = "59e4cf5286f7741778269d8a", + BP_GZH = "59e0d99486f7744a32234762", + MAI_AP = "601aa3d2b2bcb34913271e6d" +} +export declare enum Ammo9x39 { + SP5_GS = "57a0dfb82459774d3078b56c", + BP_GS = "5c0d688c86f77413ae3407b2", + SP6_GS = "57a0e5022459774d1673f889", + SPP_GS = "5c0d668f86f7747ccb7f13b2", + PAB9_GS = "61962d879bb3d20b0946d385" +} +export declare enum Ammo366TKM { + FMJ = "59e6542b86f77411dc52a77a", + GEKSA = "59e6658b86f77411d949b250", + EKO = "59e655cb86f77411dc52a77b", + APM = "5f0596629e22f464da6bbdd9" +} +export declare enum Ammo127x55 { + PS12 = "5cadf6ddae9215051e1c23b2", + PS12B = "5cadf6eeae921500134b2799", + PS12A = "5cadf6e5ae921500113bb973" +} +export declare enum Ammo12Gauge { + BUCKSHOT_7MM = "560d5e524bdc2d25448b4571", + MAGNUM_85MM = "5d6e6806a4b936088465b17e", + RIP = "5c0d591486f7744c505b416f", + BMG_SLUG_50CAL = "5d6e68c4a4b9361b93413f79", + BUCKSHOT_525MM = "5d6e6772a4b936088465b17c", + EXPRESS_65MM = "5d6e67fba4b9361bc73bc779", + FLECHETTE = "5d6e6911a4b9361bd5780d52", + FTX_CUSTOM_LITE_SLUG = "5d6e68e6a4b9361c140bcfe0", + AP20_ARMOR_PIERCING_SLUG = "5d6e68a8a4b9360b6c0d54e2", + DUAL_SABOT_SLUG = "5d6e68dea4b9361bcc29e659", + POLEVA_6U_SLUG = "5d6e689ca4b9361bc8618956", + POLEVA_3_SLUG = "5d6e6891a4b9361bd473feea", + GRIZZLY_40_SLUG = "5d6e6869a4b9361c140bcfde", + SUPERFORMANCE_HP_SLUG = "5d6e68d1a4b93622fe60e845", + COPPER_SABOT_PREMIER_HP_SLUG = "5d6e68b3a4b9361bca7e50b5", + LEAD_SLUG = "58820d1224597753c90aeb13" +} +export declare enum Ammo20Gauge { + BUCKSHOT_75MM = "5a38ebd9c4a282000d722a5b", + STAR_SLUG = "5d6e6a05a4b93618084f58d0", + BUCKSHOT_73MM = "5d6e69c7a4b9360b6c0d54e4", + DEVASTATOR_SLUG = "5d6e6a5fa4b93614ec501745", + BUCKSHOT_56MM = "5d6e695fa4b936359b35d852", + POLEVA_6U_SLUG = "5d6e6a42a4b9364f07165f52", + POLEVA_3_SLUG = "5d6e6a53a4b9361bd473feec", + BUCKSHOT_62MM = "5d6e69b9a4b9361bc8618958" +} +export declare enum Ammo23x75 { + SHRAPNEL10_BUCKSHOT = "5e85a9a6eacf8c039e4e2ac1", + SHRAPNEL25_BUCKSHOT = "5f647f31b6238e5dd066e196", + ZVEZDA_FLASHBANG = "5e85a9f4add9fe03027d9bf1", + BARRIKADA_SLUG = "5e85aa1a988a8701445df1f5" +} +export declare enum Ammo30x29 { + VOG_30 = "5d70e500a4b9364de70d38ce" +} +export declare enum Ammo127x108 { + B32 = "5cde8864d7f00c0010373be1", + BZT_44M = "5d2f2ab648f03550091993ca" +} +export declare enum Ammo26x75 { + GREEN_FLARE = "62389aaba63f32501b1b444f", + RED_FLARE = "62389ba9a63f32501b1b4451", + WHITE_FLARE = "62389bc9423ed1685422dc57", + YELLOW_FLARE = "62389be94d5d474bf712e709" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/BackendErrorCodes.d.ts b/TypeScript/16ImporterUtil/types/models/enums/BackendErrorCodes.d.ts new file mode 100644 index 0000000..6614b75 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/BackendErrorCodes.d.ts @@ -0,0 +1,67 @@ +export declare enum BackendErrorCodes { + NONE = 0, + UNKNOWN_ERROR = 200, + NOT_AUTHORIZED = 201, + NEED_AUTHORIZATION_CODE = 209, + WRONG_AUTHORIZATION_CODE = 211, + NEED_CAPTCHA = 214, + NO_NEED_CAPTCHA = 215, + CAPTCHA_FAILED = 218, + CAPTCHA_BRUTE_FORCED = 219, + NO_ROOM_IN_STASH = 223, + NICKNAME_NOT_UNIQUE = 225, + NICKNAME_NOT_VALID = 226, + UNSUPPORTED_CLIENT_VERSION = 232, + REPORT_NOT_ALLOWED = 238, + NICKNAME_IS_ABUSIVE = 241, + NICKNAME_CHANGE_TIMEOUT = 242, + NOT_MODIFIED = 304, + HTTP_BAD_REQUEST = 400, + HTTP_NOT_AUTHORIZED = 401, + HTTP_FORBIDDEN = 403, + HTTP_NOT_FOUND = 404, + HTTP_METHOD_NOT_ALLOWED = 405, + UNKNOWN_TRADING_ERROR = 500, + HTTPNOTIMPLEMENTED = 501, + HTTPBADGATEWAY = 502, + HTTPSERVICEUNAVAILABLE = 503, + HTTPGATEWAYTIMEOUT = 504, + TRADEROUTOFMONEY = 505, + HTTPVARIANTALSONEGOTIATES = 506, + PRICECHANGED = 509, + TRADERDISABLED = 512, + ITEMHASBEENSOLD = 513, + NOTENOUGHSPACEFORMONEY = 518, + HTTPINVALIDSSLCERTIFICATE = 526, + UNKNOWNRAGFAIRERROR = 550, + UNKNOWNRAGFAIRERROR2 = 551, + UNKNOWNMATCHMAKERERROR = 600, + SESSIONPARAMETERSERROR = 601, + SESSIONLOST = 602, + SERVERNOTREGISTERED = 604, + UNKNOWNQUESTERROR = 700, + QUESTBADPARAM = 702, + QUESTNOTFOUND = 703, + QUESTISUNAVAILABLE = 704, + NOFREESPACEFORREWARDS = 705, + WRONGQUESTSTATUS = 706, + CANTCOMPLETEQUEST = 707, + UNKNOWNMAILERROR = 900, + TOOMANYFRIENDREQUESTS = 925, + UNKNOWNSCRIPTEXECUTIONERROR = 1000, + UNKNOWNREPAIRINGERROR = 1200, + UNKNOWNINSURANCEERROR = 1300, + UNKNOWNCURRENCYEXCHANGEERROR = 1400, + OFFERNOTFOUND = 1503, + NOTENOUGHSPACE = 1505, + OFFEROUTOFSTOCK = 1506, + OFFERSOLD = 1507, + RAGFAIRUNAVAILABLE = 1511, + BANNEDERRORCODE = 1513, + INSUFFICIENTNUMBERINSTOCK = 1516, + TOOMANYITEMSTOSELL = 1517, + EXAMINATIONFAILED = 22001, + ITEMALREADYEXAMINED = 22002, + UNKNOWNNGINXERROR = 9000, + PARSERESPONSEERROR = 9001 +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/BaseClasses.d.ts b/TypeScript/16ImporterUtil/types/models/enums/BaseClasses.d.ts new file mode 100644 index 0000000..c6e880a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/BaseClasses.d.ts @@ -0,0 +1,95 @@ +export declare enum BaseClasses { + WEAPON = "5422acb9af1c889c16000029", + UBGL = "55818b014bdc2ddc698b456b", + ARMOR = "5448e54d4bdc2dcc718b4568", + ARMOREDEQUIPMENT = "57bef4c42459772e8d35a53b", + HEADWEAR = "5a341c4086f77401f2541505", + FACECOVER = "5a341c4686f77469e155819e", + VEST = "5448e5284bdc2dcb718b4567", + BACKPACK = "5448e53e4bdc2d60728b4567", + COMPOUND = "566162e44bdc2d3f298b4573", + VISORS = "5448e5724bdc2ddf718b4568", + FOOD = "5448e8d04bdc2ddf718b4569", + GAS_BLOCK = "56ea9461d2720b67698b456f", + RAIL_COVER = "55818b1d4bdc2d5b648b4572", + DRINK = "5448e8d64bdc2dce718b4568", + BARTER_ITEM = "5448eb774bdc2d0a728b4567", + INFO = "5448ecbe4bdc2d60728b4568", + MEDKIT = "5448f39d4bdc2d0a728b4568", + DRUGS = "5448f3a14bdc2d27728b4569", + STIMULATOR = "5448f3a64bdc2d60728b456a", + MEDICAL = "5448f3ac4bdc2dce718b4569", + MEDICAL_SUPPLIES = "57864c8c245977548867e7f1", + MOD = "5448fe124bdc2da5018b4567", + FUNCTIONAL_MOD = "550aa4154bdc2dd8348b456b", + FUEL = "5d650c3e815116009f6201d2", + GEAR_MOD = "55802f3e4bdc2de7118b4584", + STOCK = "55818a594bdc2db9688b456a", + FOREGRIP = "55818af64bdc2d5b648b4570", + MASTER_MOD = "55802f4a4bdc2ddb688b4569", + MOUNT = "55818b224bdc2dde698b456f", + MUZZLE = "5448fe394bdc2d0d028b456c", + SIGHTS = "5448fe7a4bdc2d6f028b456b", + MEDS = "543be5664bdc2dd4348b4569", + MAP = "567849dd4bdc2d150f8b456e", + MONEY = "543be5dd4bdc2deb348b4569", + NIGHTVISION = "5a2c3a9486f774688b05e574", + KEY = "543be5e94bdc2df1348b4568", + KEY_MECHANICAL = "5c99f98d86f7745c314214b3", + KEYCARD = "5c164d2286f774194c5e69fa", + EQUIPMENT = "543be5f84bdc2dd4348b456a", + THROW_WEAPON = "543be6564bdc2df4348b4568", + FOOD_DRINK = "543be6674bdc2df1348b4569", + PISTOL = "5447b5cf4bdc2d65278b4567", + REVOLVER = "617f1ef5e8b54b0998387733", + SMG = "5447b5e04bdc2d62278b4567", + ASSAULT_RIFLE = "5447b5f14bdc2d61278b4567", + ASSAULT_CARBINE = "5447b5fc4bdc2d87278b4567", + SHOTGUN = "5447b6094bdc2dc3278b4567", + MARKSMAN_RIFLE = "5447b6194bdc2d67278b4567", + SNIPER_RIFLE = "5447b6254bdc2dc3278b4568", + MACHINE_GUN = "5447bed64bdc2d97278b4568", + GRENADE_LAUNCHER = "5447bedf4bdc2d87278b4568", + SPECIAL_WEAPON = "5447bee84bdc2dc3278b4569", + SPEC_ITEM = "5447e0e74bdc2d3c308b4567", + KNIFE = "5447e1d04bdc2dff2f8b4567", + AMMO = "5485a8684bdc2da71d8b4567", + AMMO_BOX = "543be5cb4bdc2deb348b4568", + LOOT_CONTAINER = "566965d44bdc2d814c8b4571", + MOD_CONTAINER = "5448bf274bdc2dfc2f8b456a", + SEARCHABLE_ITEM = "566168634bdc2d144c8b456c", + STASH = "566abbb64bdc2d144c8b457d", + SORTING_TABLE = "6050cac987d3f925bf016837", + LOCKABLE_CONTAINER = "5671435f4bdc2d96058b4569", + SIMPLE_CONTAINER = "5795f317245977243854e041", + INVENTORY = "55d720f24bdc2d88028b456d", + STATIONARY_CONTAINER = "567583764bdc2d98058b456e", + POCKETS = "557596e64bdc2dc2118b4571", + ARMBAND = "5b3f15d486f77432d0509248", + DOG_TAG_USEC = "59f32c3b86f77472a31742f0", + DOG_TAG_BEAR = "59f32bb586f774757e1e8442", + JEWELRY = "57864a3d24597754843f8721", + ELECTRONICS = "57864a66245977548f04a81f", + BUILDING_MATERIAL = "57864ada245977548638de91", + TOOL = "57864bb7245977548b3b66c2", + HOUSEHOLD_GOODS = "57864c322459775490116fbf", + LUBRICANT = "57864e4c24597754843f8723", + BATTERY = "57864ee62459775490116fc1", + ASSAULT_SCOPE = "55818add4bdc2d5b648b456f", + TACTICAL_COMBO = "55818b164bdc2ddc698b456c", + FLASHLIGHT = "55818b084bdc2d5b648b4571", + MAGAZINE = "5448bc234bdc2d3c308b4569", + LIGHT_LASER_DESIGNATOR = "55818b0e4bdc2dde698b456e", + FLASH_HIDER = "550aa4bf4bdc2dd6348b456b", + COLLIMATOR = "55818ad54bdc2ddc698b4569", + IRON_SIGHT = "55818ac54bdc2d5b648b456e", + COMPACT_COLLIMATOR = "55818acf4bdc2dde698b456b", + COMPENSATOR = "550aa4af4bdc2dd4348b456e", + OPTIC_SCOPE = "55818ae44bdc2dde698b456c", + SPECIAL_SCOPE = "55818aeb4bdc2ddc698b456a", + OTHER = "590c745b86f7743cc433c5f2", + SILENCER = "550aa4cd4bdc2dd8348b456c", + PORTABLE_RANGE_FINDER = "61605ddea09d851a0a0c1bbc", + ITEM = "54009119af1c881c07000029", + CYLINDER_MAGAZINE = "610720f290b75a49ff2e5e25" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/BotAmount.d.ts b/TypeScript/16ImporterUtil/types/models/enums/BotAmount.d.ts new file mode 100644 index 0000000..9ef9cab --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/BotAmount.d.ts @@ -0,0 +1,7 @@ +export declare enum BotAmount { + AS_ONLINE = "AsOnline", + LOW = "Low", + MEDIUM = "Medium", + HIGH = "High", + HORDE = "Horde" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/BotDifficulty.d.ts b/TypeScript/16ImporterUtil/types/models/enums/BotDifficulty.d.ts new file mode 100644 index 0000000..80e45ad --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/BotDifficulty.d.ts @@ -0,0 +1,8 @@ +export declare enum BotDifficulty { + AS_ONLINE = "AsOnline", + EASY = "Easy", + MEDIUM = "Medium", + HARD = "Hard", + IMPOSSIBLE = "Impossible", + RANDOM = "Random" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/ConfigTypes.d.ts b/TypeScript/16ImporterUtil/types/models/enums/ConfigTypes.d.ts new file mode 100644 index 0000000..9c48b68 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/ConfigTypes.d.ts @@ -0,0 +1,23 @@ +export declare enum ConfigTypes { + AIRDROP = "aki-airdrop", + BOT = "aki-bot", + CORE = "aki-core", + HEALTH = "aki-health", + HIDEOUT = "aki-hideout", + HTTP = "aki-http", + IN_RAID = "aki-inraid", + INSURANCE = "aki-insurance", + INVENTORY = "aki-inventory", + ITEM = "aki-item", + LOCALE = "aki-locale", + LOCATION = "aki-location", + MATCH = "aki-match", + PLAYERSCAV = "aki-playerscav", + QUEST = "aki-quest", + RAGFAIR = "aki-ragfair", + REPAIR = "aki-repair", + SCAVCASE = "aki-scavcase", + TRADER = "aki-trader", + WEATHER = "aki-weather", + SEASONAL_EVENT = "aki-seasonalevents" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/ContainerTypes.d.ts b/TypeScript/16ImporterUtil/types/models/enums/ContainerTypes.d.ts new file mode 100644 index 0000000..e6b330a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/ContainerTypes.d.ts @@ -0,0 +1,29 @@ +export declare enum CommonContainers { + AMMO_CASE = "5aafbde786f774389d0cbc0f", + DOCUMENTS_CASE = "590c60fc86f77412b13fddcf", + DOGTAG_CASE = "5c093e3486f77430cb02e593", + GRENADE_CASE = "5e2af55f86f7746d4159f07c", + INJECTOR_CASE = "619cbf7d23893217ec30b689", + ITEM_CASE = "59fb042886f7746c5005a7b2", + KEY_TOOL = "59fafd4b86f7745ca07e1232", + KEYCARD_HOLDER = "619cbf9e0a7c3a1a2731940a", + SCAV_JUNKBOX = "5b7c710788a4506dec015957", + MAGAZINE_CASE = "5c127c4486f7745625356c13", + MEDICINE_CASE = "5aafbcd986f7745e590fff23", + MONEY_CASE = "59fb016586f7746d0d4b423a", + HOLODILNICK_THERMAL_BAG = "5c093db286f7740a1b2617e3", + PISTOL_CASE = "567143bf4bdc2d1a0f8b4567", + SICC_ORGANIZATIONAL_POUCH = "5d235bb686f77443f4331278", + SIMPLE_WALLET = "5783c43d2459774bbe137486", + THICC_ITEM_CASE = "5c0a840b86f7742ffa4f2482", + THICC_WEAPON_CASE = "5b6d9ce188a4501afc1b2b25", + WEAPON_CASE = "59fb023c86f7746d0d4b423c", + WZ_WALLET = "60b0f6c058e0b0481a09ad11" +} +export declare enum SecuredContainers { + ALPHA = "544a11ac4bdc2d470e8b456a", + BETA = "5857a8b324597729ab0a0e7d", + EPSILON = "59db794186f77448bc595262", + GAMMA = "5857a8bc2459772bad15db29", + KAPPA = "5c093ca986f7740a1867ab12" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/ELocationName.d.ts b/TypeScript/16ImporterUtil/types/models/enums/ELocationName.d.ts new file mode 100644 index 0000000..c52ae87 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/ELocationName.d.ts @@ -0,0 +1,13 @@ +export declare enum ELocationName { + FACTORY_DAY = "factory4_day", + FACTORY_NIGHT = "factory4_night", + BIGMAP = "bigmap", + WOODS = "Woods", + SHORELINE = "Shoreline", + INTERCHANGE = "Interchange", + LIGHTHOUSE = "Lighthouse", + LABORATORY = "laboratory", + RESERVE = "RezervBase", + STREETS = "TarkovStreets", + ANY = "any" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/EquipmentSlots.d.ts b/TypeScript/16ImporterUtil/types/models/enums/EquipmentSlots.d.ts new file mode 100644 index 0000000..35c18ff --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/EquipmentSlots.d.ts @@ -0,0 +1,16 @@ +export declare enum EquipmentSlots { + HEADWEAR = "Headwear", + EARPIECE = "Earpiece", + FACE_COVER = "FaceCover", + ARMOR_VEST = "ArmorVest", + EYEWEAR = "Eyewear", + ARM_BAND = "ArmBand", + TACTICAL_VEST = "TacticalVest", + POCKETS = "Pockets", + BACKPACK = "Backpack", + SECURED_CONTAINER = "SecuredContainer", + FIRST_PRIMARY_WEAPON = "FirstPrimaryWeapon", + SECOND_PRIMARY_WEAPON = "SecondPrimaryWeapon", + HOLSTER = "Holster", + SCABBARD = "Scabbard" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/ExitStatis.d.ts b/TypeScript/16ImporterUtil/types/models/enums/ExitStatis.d.ts new file mode 100644 index 0000000..78d9733 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/ExitStatis.d.ts @@ -0,0 +1,7 @@ +export declare enum ExitStatus { + SURVIVED = 0, + KILLED = 1, + LEFT = 2, + RUNNER = 3, + MISSINGINACTION = 4 +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/HideoutAreas.d.ts b/TypeScript/16ImporterUtil/types/models/enums/HideoutAreas.d.ts new file mode 100644 index 0000000..c8313d9 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/HideoutAreas.d.ts @@ -0,0 +1,27 @@ +export declare enum HideoutAreas { + NOTSET = -1, + VENTS = 0, + SECURITY = 1, + LAVATORY = 2, + STASH = 3, + GENERATOR = 4, + HEATING = 5, + WATER_COLLECTOR = 6, + MEDSTATION = 7, + NUTRITION_UNIT = 8, + REST_SPACE = 9, + WORKBENCH = 10, + INTEL_CENTER = 11, + SHOOTING_RANGE = 12, + LIBRARY = 13, + SCAV_CASE = 14, + ILLUMINATION = 15, + PLACE_OF_FAME = 16, + AIR_FILTERING = 17, + SOLAR_POWER = 18, + BOOZE_GENERATOR = 19, + BITCOIN_FARM = 20, + CHRISTMAS_TREE = 21, + EMERGENCY_WALL = 22, + GYM = 23 +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/HideoutEventActions.d.ts b/TypeScript/16ImporterUtil/types/models/enums/HideoutEventActions.d.ts new file mode 100644 index 0000000..aa04131 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/HideoutEventActions.d.ts @@ -0,0 +1,13 @@ +export declare enum HideoutEventActions { + HIDEOUT_UPGRADE = "HideoutUpgrade", + HIDEOUT_UPGRADE_COMPLETE = "HideoutUpgradeComplete", + HIDEOUT_PUT_ITEMS_IN_AREA_SLOTS = "HideoutPutItemsInAreaSlots", + HIDEOUT_TAKE_ITEMS_FROM_AREA_SLOTS = "HideoutTakeItemsFromAreaSlots", + HIDEOUT_TOGGLE_AREA = "HideoutToggleArea", + HIDEOUT_SINGLE_PRODUCTION_START = "HideoutSingleProductionStart", + HIDEOUT_SCAV_CASE_PRODUCTION_START = "HideoutScavCaseProductionStart", + HIDEOUT_CONTINUOUS_PRODUCTION_START = "HideoutContinuousProductionStart", + HIDEOUT_TAKE_PRODUCTION = "HideoutTakeProduction", + HIDEOUT_RECORD_SHOOTING_RANGE_POINTS = "RecordShootingRangePoints", + HIDEOUT_IMPROVE_AREA = "HideoutImproveArea" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/ItemEventActions.d.ts b/TypeScript/16ImporterUtil/types/models/enums/ItemEventActions.d.ts new file mode 100644 index 0000000..94061f8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/ItemEventActions.d.ts @@ -0,0 +1,20 @@ +export declare enum ItemEventActions { + MOVE = "Move", + REMOVE = "Remove", + SPLIT = "Split", + MERGE = "Merge", + TRANSFER = "Transfer", + SWAP = "Swap", + FOLD = "Fold", + TOGGLE = "Toggle", + TAG = "Tag", + BIND = "Bind", + EXAMINE = "Examine", + READ_ENCYCLOPEDIA = "ReadEncyclopedia", + APPLY_INVENTORY_CHANGES = "ApplyInventoryChanges", + CREATE_MAP_MARKER = "CreateMapMarker", + DELETE_MAP_MARKER = "DeleteMapMarker", + EDIT_MAP_MARKER = "EditMapMarker", + OPEN_RANDOM_LOOT_CONTAINER = "OpenRandomLootContainer", + HIDEOUT_QTE_EVENT = "HideoutQuickTimeEvent" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/MemberCategory.d.ts b/TypeScript/16ImporterUtil/types/models/enums/MemberCategory.d.ts new file mode 100644 index 0000000..a81380e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/MemberCategory.d.ts @@ -0,0 +1,13 @@ +export declare enum MemberCategory { + DEFAULT = 0, + DEVELOPER = 1, + UNIQUE_ID = 2, + TRADER = 4, + GROUP = 8, + SYSTEM = 16, + CHAT_MODERATOR = 32, + CHAT_MODERATOR_WITH_PERMANENT_BAN = 64, + UNIT_TEST = 128, + SHERPA = 256, + EMISSARY = 512 +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/MessageType.d.ts b/TypeScript/16ImporterUtil/types/models/enums/MessageType.d.ts new file mode 100644 index 0000000..1b0c649 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/MessageType.d.ts @@ -0,0 +1,16 @@ +export declare enum MessageType { + USER_MESSAGE = 1, + NPC_TRADER = 2, + AUCTION_MESSAGE = 3, + FLEAMARKET_MESSAGE = 4, + ADMIN_MESSAGE = 5, + GROUP_CHAT_MESSAGE = 6, + SYSTEM_MESSAGE = 7, + INSURANCE_RETURN = 8, + GLOBAL_CHAT = 9, + QUEST_START = 10, + QUEST_FAIL = 11, + QUEST_SUCCESS = 12, + MESSAGE_WITH_ITEMS = 13, + INITIAL_SUPPORT = 14 +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/Money.d.ts b/TypeScript/16ImporterUtil/types/models/enums/Money.d.ts new file mode 100644 index 0000000..0d39613 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/Money.d.ts @@ -0,0 +1,5 @@ +export declare enum Money { + ROUBLES = "5449016a4bdc2d6f028b456f", + EUROS = "569668774bdc2da2298b4568", + DOLLARS = "5696686a4bdc2da3298b456a" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/QuestRewardType.d.ts b/TypeScript/16ImporterUtil/types/models/enums/QuestRewardType.d.ts new file mode 100644 index 0000000..ff8c5f4 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/QuestRewardType.d.ts @@ -0,0 +1,9 @@ +export declare enum QuestRewardType { + SKILL = "Skill", + EXPERIENCE = "Experience", + TRADER_STANDING = "TraderStanding", + TRADER_UNLOCK = "TraderUnlock", + ITEM = "Item", + ASSORTMENT_UNLOCK = "AssortmentUnlock", + PRODUCTIONS_SCHEME = "ProductionScheme" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/QuestStatus.d.ts b/TypeScript/16ImporterUtil/types/models/enums/QuestStatus.d.ts new file mode 100644 index 0000000..e706c05 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/QuestStatus.d.ts @@ -0,0 +1,12 @@ +export declare enum QuestStatus { + Locked = 0, + AvailableForStart = 1, + Started = 2, + AvailableForFinish = 3, + Success = 4, + Fail = 5, + FailRestartable = 6, + MarkedAsFailed = 7, + Expired = 8, + AvailableAfter = 9 +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/RagfairSort.d.ts b/TypeScript/16ImporterUtil/types/models/enums/RagfairSort.d.ts new file mode 100644 index 0000000..798a5e7 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/RagfairSort.d.ts @@ -0,0 +1,7 @@ +export declare enum RagfairSort { + ID = 0, + RATING = 3, + OFFER_TITLE = 4, + PRICE = 5, + EXPIRY = 6 +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/RaidMode.d.ts b/TypeScript/16ImporterUtil/types/models/enums/RaidMode.d.ts new file mode 100644 index 0000000..e20cf3f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/RaidMode.d.ts @@ -0,0 +1,5 @@ +export declare enum RaidMode { + ONLINE = "Online", + LOCAL = "Local", + COOP = "Coop" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/SkillTypes.d.ts b/TypeScript/16ImporterUtil/types/models/enums/SkillTypes.d.ts new file mode 100644 index 0000000..4eb90af --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/SkillTypes.d.ts @@ -0,0 +1,52 @@ +export declare enum SkillTypes { + HIDEOUT_MANAGEMENT = "HideoutManagement", + CRAFTING = "Crafting", + METABOLISM = "Metabolism", + IMMUNITY = "Immunity", + ENDURANCE = "Endurance", + STRENGTH = "Strength", + VITALITY = "Vitality", + HEALTH = "Health", + STRESS_RESISTANCE = "StressResistance", + THROWING = "Throwing", + RECOIL_CONTROL = "RecoilControl", + COVERT_MOVEMENT = "CovertMovement", + FIELD_MEDICINE = "FieldMedicine", + SEARCH = "Search", + SNIPING = "Sniping", + PERCEPTION = "Perception", + INTELLECT = "Intellect", + ATTENTION = "Attention", + CHARISMA = "Charisma", + MEMORY = "Memory", + SURGERY = "Surgery", + AIM_DRILLS = "AimDrills", + TROUBLESHOOTING = "TroubleShooting", + PRONE_MOVEMENT = "ProneMovement", + FIRST_AID = "FirstAid", + LIGHT_VESTS = "LightVests", + HEAVY_VESTS = "HeavyVests", + WEAPON_MODDING = "WeaponModding", + ADVANCED_MODDING = "AdvancedModding", + NIGHT_OPS = "NightOps", + SILENT_OPS = "SilentOps", + LOCKPICKING = "Lockpicking", + WEAPON_TREATMENT = "WeaponTreatment", + MAG_DRILLS = "MagDrills", + FREE_TRADING = "Freetrading", + AUCTIONS = "Auctions", + CLEAN_OPS = "Cleanoperations", + BARTER = "Barter", + SHADOW_CONNECTIONS = "Shadowconnections", + TASK_PERFORMANCE = "Taskperformance", + BEAR_ASSAULT_OPS = "BearAssaultoperations", + BEAR_AUTHORITY = "BearAuthority", + BEAR_AK_SYSTEMS = "BearAksystems", + BEAR_HEAVY_CAL = "BearHeavycaliber", + BEAR_RAW_POWER = "BearRawpower", + USEC_AR_SYSTEMS = "UsecArsystems", + USEC_DEEP_WEAPON_MOD = "UsecDeepweaponmodding_Settings", + USEC_LONG_RANGE_OPTICS = "UsecLongrangeoptics_Settings", + USEC_NEGOTIATIONS = "UsecNegotiations", + USEC_TACTICS = "UsecTactics" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/Traders.d.ts b/TypeScript/16ImporterUtil/types/models/enums/Traders.d.ts new file mode 100644 index 0000000..ffea725 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/Traders.d.ts @@ -0,0 +1,11 @@ +export declare enum Traders { + PRAPOR = "54cb50c76803fa8b248b4571", + THERAPIST = "54cb57776803fa99248b456e", + FENCE = "579dc571d53a0658a154fbec", + SKIER = "58330581ace78e27b8b10cee", + PEACEKEEPER = "5935c25fb3acc3127c3d8cd9", + MECHANIC = "5a7c2eca46aef81a7ca2145d", + RAGMAN = "5ac3b934156ae10c4430e83c", + JAEGER = "5c0647fdd443bc2504c2d371", + LIGHTHOUSEKEEPER = "638f541a29ffd1183d187f57" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/WeaponSkillTypes.d.ts b/TypeScript/16ImporterUtil/types/models/enums/WeaponSkillTypes.d.ts new file mode 100644 index 0000000..1e20a2d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/WeaponSkillTypes.d.ts @@ -0,0 +1,14 @@ +export declare enum WeaponSkillTypes { + PISTOL = "Pistol", + REVOLVER = "Revolver", + SMG = "SMG", + ASSAULT = "Assault", + SHOTGUN = "Shotgun", + SNIPER = "Sniper", + LMG = "LMG", + HMG = "HMG", + DMR = "DMR", + LAUNCHER = "Launcher", + ATTACHED_LAUNCHER = "AttachedLauncher", + MELEE = "Melee" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/WeaponTypes.d.ts b/TypeScript/16ImporterUtil/types/models/enums/WeaponTypes.d.ts new file mode 100644 index 0000000..867b052 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/WeaponTypes.d.ts @@ -0,0 +1,151 @@ +export declare enum Weapons127x55 { + ASH_12 = "5cadfbf7ae92152ac412eeef" +} +export declare enum Weapons86x70 { + MK_18 = "5fc22d7c187fea44d52eda44", + AXMC = "627e14b21713922ded6f2c15" +} +export declare enum Weapons9x39 { + AS_VAL = "57c44b372459772d2b39b8ce", + VSS_VINTOREZ = "57838ad32459774a17445cd2" +} +export declare enum Weapons762x54R { + SVDS = "5c46fbd72e2216398b5a8c9c", + MP_18 = "61f7c9e189e6fb1a5e3ea78d", + MOSIN_INFANTRY = "5bfd297f0db834001a669119", + MOSIN_SNIPER = "5ae08f0a5acfc408fb1398a1", + SV_98 = "55801eed4bdc2d89578b4588" +} +export declare enum Weapons762x51 { + VPO_101 = "5c501a4d2e221602b412b540", + DT_MDR_762 = "5dcbd56fdbd3d91b3e5468d5", + SA_58 = "5b0bbe4e5acfc40dc528a72d", + SCARH_BLACK = "6183afd850224f204c1da514", + SCARH_FDE = "6165ac306ef05c2ce828ef74", + HK_G28 = "6176aca650224f204c1da3fb", + M1A = "5aafa857e5b5b00018480968", + RFB = "5f2a9575926fd9352339381f", + RSASS = "5a367e5dc4a282000e49738f", + SR_25 = "5df8ce05b11454561e39243b", + DVL_10 = "588892092459774ac91d4b11", + M700 = "5bfea6e90db834001b7347f3", + T5000M = "5df24cf80dee1b22f862e9bc" +} +export declare enum Weapons366TKM { + VPO_209 = "59e6687d86f77411d949b251", + VPO_215 = "5de652c31b7e3716273428be" +} +export declare enum Weapons762x39 { + OP_SKS = "587e02ff24597743df3deaeb", + SKS = "574d967124597745970e7c94", + AK_103 = "5ac66d2e5acfc43b321d4b53", + AK_104 = "5ac66d725acfc43b321d4b60", + AKM = "59d6088586f774275f37482f", + AKMN = "5a0ec13bfcdbcb00165aa685", + AKMS = "59ff346386f77477562ff5e2", + AKMSN = "5abcbc27d8ce8700182eceeb", + MK47_MUTANT = "606587252535c57a13424cfd", + RD_704 = "628a60ae6b1d481ff772e9c8", + VPO_136 = "59e6152586f77473dc057aa1" +} +export declare enum Weapons762x35 { + MCX = "5fbcc1d9016cce60e8341ab3" +} +export declare enum Weapons556x45 { + ADAR_2_15 = "5c07c60e0db834002330051f", + AK_101 = "5ac66cb05acfc40198510a10", + AK_102 = "5ac66d015acfc400180ae6e4", + DT_MDR_556 = "5c488a752e221602b412af63", + HK_416A5 = "5bb2475ed4351e00853264e3", + HK_G36 = "623063e994fc3f7b302a9696", + M4A1 = "5447a9cd4bdc2dbd208b4567", + SCARL_BLACK = "6184055050224f204c1da540", + SCARL_FDE = "618428466ef05c2ce828f218", + TX15_DML = "5d43021ca4b9362eab4b5e25" +} +export declare enum Weapons545x39 { + AK_105 = "5ac66d9b5acfc4001633997a", + AK_74 = "5bf3e03b0db834001d2c4a9c", + AK_74M = "5ac4cd105acfc40016339859", + AK_74N = "5644bd2b4bdc2d3b4c8b4572", + AKS_74 = "5bf3e0490db83400196199af", + AKS_74N = "5ab8e9fcd8ce870019439434", + AKS_74U = "57dc2fa62459775949412633", + AKS_74UB = "5839a40f24597726f856b511", + AKS_74UN = "583990e32459771419544dd2", + SAG_AK = "628b5638ad252a16da6dd245", + SAG_AK_SHORT = "628b9c37a733087d0d7fe84b", + RPK_16 = "5beed0f50db834001c062b12" +} +export declare enum Weapons57x28FN { + FN_57_BLACK = "5d3eb3b0a4b93615055e84d2", + FN_57_FDE = "5d67abc1a4b93614ec50137f", + FN_P90 = "5cc82d76e24e8d00134b4b83" +} +export declare enum Weapons46x30HK { + MP7A1 = "5ba26383d4351e00334c93d9", + MP7A2 = "5bd70322209c4d00d7167b8f" +} +export declare enum Weapons1143x23 { + M1911A1 = "5e81c3cbac2bb513793cdc75", + M45A1 = "5f36a0e5fbf956000b716b65", + USP45 = "6193a720f8ee7e52e42109ed", + UMP45 = "5fc3e272f8b6a877a729eac5", + VECTOR45 = "5fb64bc92b1b027b1f50bcf2" +} +export declare enum Weapons9x33R { + CR_50DS = "61a4c8884f95bc3b2c5dc96f" +} +export declare enum Weapons9x21 { + SR_1MP = "59f98b4986f7746f546d2cef" +} +export declare enum Weapons9x19 { + GLOCK_17 = "5a7ae0c351dfba0017554310", + GLOCK_18C = "5b1fa9b25acfc40018633c01", + M9A3 = "5cadc190ae921500103bb3b6", + MP_443 = "576a581d2459771e7b1bc4f1", + P226R = "56d59856d2720bd8418b456a", + PL_15 = "602a9740da11d6478d5a06dc", + CR_200DS = "624c2e8614da335f1e034d8c", + MP5 = "5926bb2186f7744b1c6c6e60", + MP5K = "5d2f0d8048f0356c925bc3b0", + MP9 = "5e00903ae9dc277128008b87", + MP9_N = "5de7bd7bfd6b4e6e2276dc25", + MPX = "58948c8e86f77409493f7266", + PP_19_01 = "59984ab886f7743e98271174", + SAIGA_9 = "59f9cabd86f7743a10721f46", + STM_9 = "60339954d62c9b14ed777c06", + VECTOR_9MM = "5fc3f2d5900b1d5091531e57" +} +export declare enum Weapons9x18 { + APB = "5abccb7dd8ce87001773e277", + APS = "5a17f98cfcdbcb0980087290", + PB_SILENCED = "56e0598dd2720bb5668b45a6", + PM = "5448bd6b4bdc2dfc2f8b4569", + PM_T = "579204f224597773d619e051", + PP9_KLIN = "57f4c844245977379d5c14d1", + PP91_KEDR = "57d14d2524597714373db789", + PP91_KEDRB = "57f3c6bd24597738e730fa2f" +} +export declare enum Weapons762x25 { + TT = "571a12c42459771f627b58a0", + TT_GOLD = "5b3b713c5acfc4330140bd8d", + PPSH_41 = "5ea03f7400685063ec28bfa8" +} +export declare enum Weapons12Gauge { + M3_SUPER90 = "6259b864ebedf17603599e88", + M590A1 = "5e870397991fd70db46995c8", + M870 = "5a7828548dc32e5a9c28b516", + MP_133 = "54491c4f4bdc2db1078b4568", + MP_153 = "56dee2bdd2720bc8328b4567", + MP_155 = "606dae0ab0e443224b421bb7", + MP_43_1C = "5580223e4bdc2d1c128b457f", + MTS_255_12 = "60db29ce99594040e04c4a27", + SAIGA_12GA = "576165642459773c7a400233" +} +export declare enum Weapons20Gauge { + TOZ_106 = "5a38e6bac4a2826c6e06d79b" +} +export declare enum Weapons23x75 { + KS_23M = "5e848cc2988a8701445df1e8" +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/WeatherType.d.ts b/TypeScript/16ImporterUtil/types/models/enums/WeatherType.d.ts new file mode 100644 index 0000000..d31fefe --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/WeatherType.d.ts @@ -0,0 +1,19 @@ +export declare enum WeatherType { + CLEAR_DAY = 1, + CLEAR_WIND = 2, + CLEAR_NIGHT = 3, + PARTLY_CLOUD_DAY = 4, + PARTLY_CLOUD_NIGHT = 5, + CLEAR_FOG_DAY = 6, + CLEAR_FOG_NIGHT = 7, + CLOUDFOG = 8, + FOG = 9, + MOSTLY_CLOUD = 10, + LIGHT_RAIN = 11, + RAIN = 12, + CLOUD_WIND = 13, + CLOUD_WIND_RAIN = 14, + FULL_CLOUD = 15, + THUNDER_CLOUD = 16, + NONE = 0 +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/WildSpawnTypeNumber.d.ts b/TypeScript/16ImporterUtil/types/models/enums/WildSpawnTypeNumber.d.ts new file mode 100644 index 0000000..ff806fe --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/WildSpawnTypeNumber.d.ts @@ -0,0 +1,33 @@ +export declare enum WildSpawnTypeNumber { + ASSAULT = 1, + MARKSMAN = 2, + BOSSTEST = 4, + BOSSBULLY = 8, + FOLLOWERTEST = 16, + FOLLOWERBULLY = 32, + BOSSKILLA = 64, + BOSSKOJANIY = 128, + FOLLOWERKOJANIY = 256, + PMCBOT = 512, + CURSEDASSAULT = 1024, + BOSSGLUHAR = 2048, + FOLLOWERGLUHARASSAULT = 4096, + FOLLOWERGLUHARSECURITY = 8192, + FOLLOWERGLUHARSCOUT = 16384, + FOLLOWERGLUHARSNIPE = 32768, + FOLLOWERSANITAR = 65536, + BOSSSANITAR = 131072, + TEST = 262144, + ASSAULTGROUP = 524288, + SECTANTWARRIOR = 1048576, + SECTANTPRIEST = 2097152, + BOSSTAGILLA = 4194304, + FOLLOWERTAGILLA = 8388608, + EXUSEC = 16777216, + GIFTER = 33554432, + BOSSKNIGHT = 67108864, + FOLLOWERBIGPIPE = 134217728, + FOLLOWERBIRDEYE = 268435456, + SPTUSEC = 536870912, + SPTBEAR = 1073741824 +} diff --git a/TypeScript/16ImporterUtil/types/models/enums/WindDirection.d.ts b/TypeScript/16ImporterUtil/types/models/enums/WindDirection.d.ts new file mode 100644 index 0000000..fb30b20 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/enums/WindDirection.d.ts @@ -0,0 +1,10 @@ +export declare enum WindDirection { + EAST = 1, + NORTH = 2, + WEST = 3, + SOUTH = 4, + SE = 5, + SW = 6, + NW = 7, + NE = 8 +} diff --git a/TypeScript/16ImporterUtil/types/models/external/HttpFramework.d.ts b/TypeScript/16ImporterUtil/types/models/external/HttpFramework.d.ts new file mode 100644 index 0000000..64a37d6 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/external/HttpFramework.d.ts @@ -0,0 +1,33 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +export type HandleFn = (_: string, req: IncomingMessage, resp: ServerResponse) => void; +/** + * Associates handlers, HTTP methods and a base url to a listener using a proxy + * @param basePath The base path + * @returns The decorator that create the listener proxy + */ +export declare const Listen: (basePath: string) => any>(Base: T) => T; +/** + * HTTP DELETE decorator + */ +export declare const Delete: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP GET decorator + */ +export declare const Get: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP OPTIONS decorator + */ +export declare const Options: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP PATCH decorator + */ +export declare const Patch: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP POST decorator + */ +export declare const Post: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP PUT decorator + */ +export declare const Put: (path?: string) => (target: any, propertyKey: string) => void; diff --git a/TypeScript/16ImporterUtil/types/models/external/IPostAkiLoadMod.d.ts b/TypeScript/16ImporterUtil/types/models/external/IPostAkiLoadMod.d.ts new file mode 100644 index 0000000..f6950e8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/external/IPostAkiLoadMod.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPostAkiLoadMod { + postAkiLoad(container: DependencyContainer): void; +} diff --git a/TypeScript/16ImporterUtil/types/models/external/IPostAkiLoadModAsync.d.ts b/TypeScript/16ImporterUtil/types/models/external/IPostAkiLoadModAsync.d.ts new file mode 100644 index 0000000..073ce6e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/external/IPostAkiLoadModAsync.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPostAkiLoadModAsync { + postAkiLoadAsync(container: DependencyContainer): Promise; +} diff --git a/TypeScript/16ImporterUtil/types/models/external/IPostDBLoadMod.d.ts b/TypeScript/16ImporterUtil/types/models/external/IPostDBLoadMod.d.ts new file mode 100644 index 0000000..ca7c682 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/external/IPostDBLoadMod.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPostDBLoadMod { + postDBLoad(container: DependencyContainer): void; +} diff --git a/TypeScript/16ImporterUtil/types/models/external/IPostDBLoadModAsync.d.ts b/TypeScript/16ImporterUtil/types/models/external/IPostDBLoadModAsync.d.ts new file mode 100644 index 0000000..b23825a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/external/IPostDBLoadModAsync.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPostDBLoadModAsync { + postDBLoadAsync(container: DependencyContainer): Promise; +} diff --git a/TypeScript/16ImporterUtil/types/models/external/IPreAkiLoadMod.d.ts b/TypeScript/16ImporterUtil/types/models/external/IPreAkiLoadMod.d.ts new file mode 100644 index 0000000..ae7579e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/external/IPreAkiLoadMod.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPreAkiLoadMod { + preAkiLoad(container: DependencyContainer): void; +} diff --git a/TypeScript/16ImporterUtil/types/models/external/IPreAkiLoadModAsync.d.ts b/TypeScript/16ImporterUtil/types/models/external/IPreAkiLoadModAsync.d.ts new file mode 100644 index 0000000..1249ff1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/external/IPreAkiLoadModAsync.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPreAkiLoadModAsync { + preAkiLoadAsync(container: DependencyContainer): Promise; +} diff --git a/TypeScript/16ImporterUtil/types/models/external/tsyringe.d.ts b/TypeScript/16ImporterUtil/types/models/external/tsyringe.d.ts new file mode 100644 index 0000000..56a7e58 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/external/tsyringe.d.ts @@ -0,0 +1,2 @@ +import type { DependencyContainer } from "tsyringe"; +export type { DependencyContainer }; diff --git a/TypeScript/16ImporterUtil/types/models/spt/bindings/Route.d.ts b/TypeScript/16ImporterUtil/types/models/spt/bindings/Route.d.ts new file mode 100644 index 0000000..1b29d7d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/bindings/Route.d.ts @@ -0,0 +1,3 @@ +export interface IRoute { + aki: any; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/bots/BotGenerationDetails.d.ts b/TypeScript/16ImporterUtil/types/models/spt/bots/BotGenerationDetails.d.ts new file mode 100644 index 0000000..26571a2 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/bots/BotGenerationDetails.d.ts @@ -0,0 +1,18 @@ +export interface BotGenerationDetails { + /** Should the bot be generated as a PMC */ + isPmc: boolean; + /** assault/pmcBot etc */ + role: string; + /** Side of bot */ + side: string; + /** Active players current level */ + playerLevel: number; + /** Delta of highest level of bot */ + botRelativeLevelDeltaMax: number; + /** How many to create and store */ + botCountToGenerate: number; + /** Desired difficulty of the bot */ + botDifficulty: string; + /** Will the generated bot be a player scav */ + isPlayerScav: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/bots/BotLootCache.d.ts b/TypeScript/16ImporterUtil/types/models/spt/bots/BotLootCache.d.ts new file mode 100644 index 0000000..aedf7b0 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/bots/BotLootCache.d.ts @@ -0,0 +1,23 @@ +import { ITemplateItem } from "../../eft/common/tables/ITemplateItem"; +export declare class BotLootCache { + backpackLoot: ITemplateItem[]; + pocketLoot: ITemplateItem[]; + vestLoot: ITemplateItem[]; + combinedPoolLoot: ITemplateItem[]; + specialItems: ITemplateItem[]; + healingItems: ITemplateItem[]; + drugItems: ITemplateItem[]; + stimItems: ITemplateItem[]; + grenadeItems: ITemplateItem[]; +} +export declare enum LootCacheType { + SPECIAL = "Special", + BACKPACK = "Backpack", + POCKET = "Pocket", + VEST = "Vest", + COMBINED = "Combined", + HEALING_ITEMS = "HealingItems", + DRUG_ITEMS = "DrugItems", + STIM_ITEMS = "StimItems", + GRENADE_ITEMS = "GrenadeItems" +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/bots/GenerateWeaponResult.d.ts b/TypeScript/16ImporterUtil/types/models/spt/bots/GenerateWeaponResult.d.ts new file mode 100644 index 0000000..56fa481 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/bots/GenerateWeaponResult.d.ts @@ -0,0 +1,10 @@ +import { Mods } from "../../eft/common/tables/IBotType"; +import { Item } from "../../eft/common/tables/IItem"; +import { ITemplateItem } from "../../eft/common/tables/ITemplateItem"; +export declare class GenerateWeaponResult { + weapon: Item[]; + chosenAmmoTpl: string; + chosenUbglAmmoTpl: string; + weaponMods: Mods; + weaponTemplate: ITemplateItem; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IBotCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IBotCallbacks.d.ts new file mode 100644 index 0000000..2c42813 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IBotCallbacks.d.ts @@ -0,0 +1,10 @@ +import { IGenerateBotsRequestData } from "../../eft/bot/IGenerateBotsRequestData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IBotBase } from "../../eft/common/tables/IBotBase"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +export interface IBotCallbacks { + getBotLimit(url: string, info: IEmptyRequestData, sessionID: string): string; + getBotDifficulty(url: string, info: IEmptyRequestData, sessionID: string): string; + generateBots(url: string, info: IGenerateBotsRequestData, sessionID: string): IGetBodyResponseData; + getBotCap(): string; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IBundleCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IBundleCallbacks.d.ts new file mode 100644 index 0000000..7e37c6e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IBundleCallbacks.d.ts @@ -0,0 +1,5 @@ +export interface IBundleCallbacks { + 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; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/ICustomizationCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/ICustomizationCallbacks.d.ts new file mode 100644 index 0000000..d10027f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/ICustomizationCallbacks.d.ts @@ -0,0 +1,12 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IBuyClothingRequestData } from "../../eft/customization/IBuyClothingRequestData"; +import { IWearClothingRequestData } from "../../eft/customization/IWearClothingRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { ISuit } from "../../eft/common/tables/ITrader"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface ICustomizationCallbacks { + getSuits(url: string, info: any, sessionID: string): IGetBodyResponseData; + getTraderSuits(url: string, info: any, sessionID: string): IGetBodyResponseData; + wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse; + buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IDataCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IDataCallbacks.d.ts new file mode 100644 index 0000000..b4f4f8c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IDataCallbacks.d.ts @@ -0,0 +1,25 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGlobals } from "../../eft/common/IGlobals"; +import { IQuest } from "../../eft/common/tables/IQuest"; +import { IHideoutArea } from "../../eft/hideout/IHideoutArea"; +import { IHideoutProduction } from "../../eft/hideout/IHideoutProduction"; +import { IHideoutScavCase } from "../../eft/hideout/IHideoutScavCase"; +import { IHideoutSettingsBase } from "../../eft/hideout/IHideoutSettingsBase"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { ISettingsBase } from "../server/ISettingsBase"; +export interface IDataCallbacks { + getSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getGlobals(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateItems(url: string, info: IEmptyRequestData, sessionID: string): string; + getTemplateHandbook(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateCharacter(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateQuests(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutAreas(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + gethideoutProduction(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutScavcase(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocalesLanguages(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + getLocalesMenu(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocalesGlobal(url: string, info: IEmptyRequestData, sessionID: string): string; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IDialogueCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IDialogueCallbacks.d.ts new file mode 100644 index 0000000..fe2115a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IDialogueCallbacks.d.ts @@ -0,0 +1,34 @@ +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../../eft/httpResponse/INullResponseData"; +import { IGetMailDialogViewRequestData } from "../../eft/dialog/IGetMailDialogViewRequestData"; +import { IGetMailDialogInfoRequestData } from "../../eft/dialog/IGetMailDialogInfoRequestData"; +import { IRemoveDialogRequestData } from "../../eft/dialog/IRemoveDialogRequestData"; +import { IGetMailDialogListRequestData } from "../../eft/dialog/IGetMailDialogListRequestData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IFriendRequestData } from "../../eft/dialog/IFriendRequestData"; +import { IPinDialogRequestData } from "../../eft/dialog/IPinDialogRequestData"; +import { ISetDialogReadRequestData } from "../../eft/dialog/ISetDialogReadRequestData"; +import { IGetAllAttachmentsRequestData } from "../../eft/dialog/IGetAllAttachmentsRequestData"; +import { IGetChatServerListRequestData } from "../../eft/dialog/IGetChatServerListRequestData"; +import { IGetFriendListDataResponse } from "../../eft/dialog/IGetFriendListDataResponse"; +import { ISendMessageRequest } from "../../eft/dialog/ISendMessageRequest"; +import { IGetMailDialogViewResponseData } from "../../eft/dialog/IGetMailDialogViewResponseData"; +import { IGetAllAttachmentsResponse } from "../../eft/dialog/IGetAllAttachmentsResponse"; +import { DialogueInfo } from "../../eft/profile/IAkiProfile"; +export interface IDialogueCallbacks { + getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData; + removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData; + pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData; + unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData; + setRead(url: string, info: ISetDialogReadRequestData, sessionID: string): IGetBodyResponseData; + getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData; + listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; + sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData; + update(): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IGameCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IGameCallbacks.d.ts new file mode 100644 index 0000000..38ebc5f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IGameCallbacks.d.ts @@ -0,0 +1,16 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGameEmptyCrcRequestData } from "../../eft/game/IGameEmptyCrcRequestData"; +import { IVersionValidateRequestData } from "../../eft/game/IVersionValidateRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../../eft/httpResponse/INullResponseData"; +import { IGameConfigResponse } from "../../eft/game/IGameConfigResponse"; +export interface IGameCallbacks { + versionValidate(url: string, info: IVersionValidateRequestData, sessionID: string): INullResponseData; + gameStart(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + gameLogout(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getGameConfig(url: string, info: IGameEmptyCrcRequestData, sessionID: string): IGetBodyResponseData; + getServer(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + validateGameVersion(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + gameKeepalive(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getVersion(url: string, info: IEmptyRequestData, sessionID: string): string; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IHandbookCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IHandbookCallbacks.d.ts new file mode 100644 index 0000000..5857a3e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IHandbookCallbacks.d.ts @@ -0,0 +1,3 @@ +export interface IHandbookCallbacks { + load(): void; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IHealthCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IHealthCallbacks.d.ts new file mode 100644 index 0000000..d238c7a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IHealthCallbacks.d.ts @@ -0,0 +1,13 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IAkiProfile } from "../../eft/profile/IAkiProfile"; +import { ISyncHealthRequestData } from "../../eft/health/ISyncHealthRequestData"; +import { IOffraidEatRequestData } from "../../eft/health/IOffraidEatRequestData"; +import { IOffraidHealRequestData } from "../../eft/health/IOffraidHealRequestData"; +import { IHealthTreatmentRequestData } from "../../eft/health/IHealthTreatmentRequestData"; +export interface IHealthCallbacks { + onLoad(sessionID: string): IAkiProfile; + syncHealth(url: string, info: ISyncHealthRequestData, sessionID: string): any; + offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): any; + offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): any; + healthTreatment(pmcData: IPmcData, info: IHealthTreatmentRequestData, sessionID: string): any; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IHideoutCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IHideoutCallbacks.d.ts new file mode 100644 index 0000000..ad2af48 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IHideoutCallbacks.d.ts @@ -0,0 +1,23 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IHideoutUpgradeRequestData } from "../../eft/hideout/IHideoutUpgradeRequestData"; +import { IHideoutUpgradeCompleteRequestData } from "../../eft/hideout/IHideoutUpgradeCompleteRequestData"; +import { IHideoutScavCaseStartRequestData } from "../../eft/hideout/IHideoutScavCaseStartRequestData"; +import { IHideoutPutItemInRequestData } from "../../eft/hideout/IHideoutPutItemInRequestData"; +import { IHideoutTakeItemOutRequestData } from "../../eft/hideout/IHideoutTakeItemOutRequestData"; +import { IHideoutToggleAreaRequestData } from "../../eft/hideout/IHideoutToggleAreaRequestData"; +import { IHideoutSingleProductionStartRequestData } from "../../eft/hideout/IHideoutSingleProductionStartRequestData"; +import { IHideoutContinuousProductionStartRequestData } from "../../eft/hideout/IHideoutContinuousProductionStartRequestData"; +import { IHideoutTakeProductionRequestData } from "../../eft/hideout/IHideoutTakeProductionRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface IHideoutCallbacks { + 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: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse; + update(timeSinceLastRun: number): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IHttpCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IHttpCallbacks.d.ts new file mode 100644 index 0000000..3ecd945 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IHttpCallbacks.d.ts @@ -0,0 +1,5 @@ +export interface IHttpCallbacks { + load(): void; + sendImage(sessionID: string, req: any, resp: any, body: any): void; + getImage(): string; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IInraidCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IInraidCallbacks.d.ts new file mode 100644 index 0000000..e959b98 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IInraidCallbacks.d.ts @@ -0,0 +1,14 @@ +import { INullResponseData } from "../../eft/httpResponse/INullResponseData"; +import { IAkiProfile } from "../../eft/profile/IAkiProfile"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IRegisterPlayerRequestData } from "../../eft/inRaid/IRegisterPlayerRequestData"; +import { ISaveProgressRequestData } from "../../eft/inRaid/ISaveProgressRequestData"; +export interface IInraidCallbacks { + onLoad(sessionID: string): IAkiProfile; + 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; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IInsuranceCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IInsuranceCallbacks.d.ts new file mode 100644 index 0000000..082112d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IInsuranceCallbacks.d.ts @@ -0,0 +1,10 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IAkiProfile } from "../../eft/profile/IAkiProfile"; +import { IGetInsuranceCostRequestData } from "../../eft/insurance/IGetInsuranceCostRequestData"; +import { IInsureRequestData } from "../../eft/insurance/IInsureRequestData"; +export interface IInsuranceCallbacks { + onLoad(sessionID: string): IAkiProfile; + getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): any; + insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): any; + update(secondsSinceLastRun: number): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IInventoryCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IInventoryCallbacks.d.ts new file mode 100644 index 0000000..e53f7d0 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IInventoryCallbacks.d.ts @@ -0,0 +1,36 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IInventoryFoldRequestData } from "../../eft/inventory/IInventoryFoldRequestData"; +import { IInventorySplitRequestData } from "../../eft/inventory/IInventorySplitRequestData"; +import { IInventoryMoveRequestData } from "../../eft/inventory/IInventoryMoveRequestData"; +import { IInventoryMergeRequestData } from "../../eft/inventory/IInventoryMergeRequestData"; +import { IInventoryRemoveRequestData } from "../../eft/inventory/IInventoryRemoveRequestData"; +import { IInventoryTransferRequestData } from "../../eft/inventory/IInventoryTransferRequestData"; +import { IInventorySwapRequestData } from "../../eft/inventory/IInventorySwapRequestData"; +import { IInventoryToggleRequestData } from "../../eft/inventory/IInventoryToggleRequestData"; +import { IInventoryTagRequestData } from "../../eft/inventory/IInventoryTagRequestData"; +import { IInventoryBindRequestData } from "../../eft/inventory/IInventoryBindRequestData"; +import { IInventoryExamineRequestData } from "../../eft/inventory/IInventoryExamineRequestData"; +import { IInventoryReadEncyclopediaRequestData } from "../../eft/inventory/IInventoryReadEncyclopediaRequestData"; +import { IInventorySortRequestData } from "../../eft/inventory/IInventorySortRequestData"; +import { IInventoryCreateMarkerRequestData } from "../../eft/inventory/IInventoryCreateMarkerRequestData"; +import { IInventoryDeleteMarkerRequestData } from "../../eft/inventory/IInventoryDeleteMarkerRequestData"; +import { IInventoryEditMarkerRequestData } from "../../eft/inventory/IInventoryEditMarkerRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface IInventoryCallbacks { + 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; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IItemEventCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IItemEventCallbacks.d.ts new file mode 100644 index 0000000..59db771 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IItemEventCallbacks.d.ts @@ -0,0 +1,6 @@ +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { IItemEventRouterRequest } from "../../eft/itemEvent/IItemEventRouterRequest"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface IItemEventCallbacks { + handleEvents(url: string, info: IItemEventRouterRequest, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/ILauncherCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/ILauncherCallbacks.d.ts new file mode 100644 index 0000000..52dfec6 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/ILauncherCallbacks.d.ts @@ -0,0 +1,20 @@ +import { IRegisterData } from "../../eft/launcher/IRegisterData"; +import { IRemoveProfileData } from "../../eft/launcher/IRemoveProfileData"; +import { ILoginRequestData } from "../../eft/launcher/ILoginRequestData"; +import { IChangeRequestData } from "../../eft/launcher/IChangeRequestData"; +import { IGetMiniProfileRequestData } from "../../eft/launcher/IGetMiniProfileRequestData.js"; +export interface ILauncherCallbacks { + 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"; + getMiniProfile(url: string, info: IGetMiniProfileRequestData, sessionID: string): string; + getAllMiniProfiles(url: string, info: any, sessionID: string): string; + getServerVersion(): string; + ping(url: string, info: any, sessionID: string): string; + removeProfile(url: string, info: IRemoveProfileData, sessionID: string): string; + getCompatibleTarkovVersion(): string; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/ILocationCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/ILocationCallbacks.d.ts new file mode 100644 index 0000000..71656a4 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/ILocationCallbacks.d.ts @@ -0,0 +1,8 @@ +import { IGetLocationRequestData } from "../../eft/location/IGetLocationRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { ILocationsGenerateAllResponse } from "../../eft/common/ILocationsSourceDestinationBase"; +import { ILocationBase } from "../../eft/common/ILocationBase"; +export interface ILocationCallbacks { + getLocationData(url: string, info: any, sessionID: string): IGetBodyResponseData; + getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IModCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IModCallbacks.d.ts new file mode 100644 index 0000000..1a4cd7b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IModCallbacks.d.ts @@ -0,0 +1,6 @@ +export interface IModCallbacks { + load(): void; + 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; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/INoteCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/INoteCallbacks.d.ts new file mode 100644 index 0000000..8453a4f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/INoteCallbacks.d.ts @@ -0,0 +1,8 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { INoteActionData } from "../../eft/notes/INoteActionData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface INoteCallbacks { + addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/INotifierCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/INotifierCallbacks.d.ts new file mode 100644 index 0000000..a211310 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/INotifierCallbacks.d.ts @@ -0,0 +1,17 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { INotifierChannel } from "../../eft/notifier/INotifier"; +import { ISelectProfileRequestData } from "../../eft/notifier/ISelectProfileRequestData"; +export interface INotifierCallbacks { + /** + * 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; + createNotifierChannel(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + selectProfile(url: string, info: ISelectProfileRequestData, sessionID: string): IGetBodyResponseData; + notify(url: string, info: any, sessionID: string): string; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IPresetBuildCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IPresetBuildCallbacks.d.ts new file mode 100644 index 0000000..97c6487 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IPresetBuildCallbacks.d.ts @@ -0,0 +1,10 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IPresetBuildActionRequestData } from "../../eft/presetBuild/IPresetBuildActionRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { WeaponBuild } from "../../eft/profile/IAkiProfile"; +export interface IPresetBuildCallbacks { + getHandbookUserlist(url: string, info: any, sessionID: string): IGetBodyResponseData; + saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; + removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IPresetCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IPresetCallbacks.d.ts new file mode 100644 index 0000000..4169857 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IPresetCallbacks.d.ts @@ -0,0 +1,3 @@ +export interface IPresetCallbacks { + load(): void; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IProfileCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IProfileCallbacks.d.ts new file mode 100644 index 0000000..9d4d2df --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IProfileCallbacks.d.ts @@ -0,0 +1,21 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../../eft/httpResponse/INullResponseData"; +import { IProfileChangeNicknameRequestData } from "../../eft/profile/IProfileChangeNicknameRequestData"; +import { IProfileChangeVoiceRequestData } from "../../eft/profile/IProfileChangeVoiceRequestData"; +import { IProfileCreateRequestData } from "../../eft/profile/IProfileCreateRequestData"; +import { IValidateNicknameRequestData } from "../../eft/profile/IValidateNicknameRequestData"; +import { ISearchFriendRequestData } from "../../eft/profile/ISearchFriendRequestData"; +import { ISearchFriendResponse } from "../../eft/profile/ISearchFriendResponse"; +export interface IProfileCallbacks { + onLoad(sessionID: string): any; + createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData; + getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData; + changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData; + validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData; + getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getProfileStatus(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + searchFriend(url: string, info: ISearchFriendRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IQuestCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IQuestCallbacks.d.ts new file mode 100644 index 0000000..1c4d0c3 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IQuestCallbacks.d.ts @@ -0,0 +1,19 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IAcceptQuestRequestData } from "../../eft/quests/IAcceptQuestRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { IListQuestsRequestData } from "../../eft/quests/IListQuestsRequestData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { ICompleteQuestRequestData } from "../../eft/quests/ICompleteQuestRequestData"; +import { IHandoverQuestRequestData } from "../../eft/quests/IHandoverQuestRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IQuest } from "../../eft/common/tables/IQuest"; +import { IPmcDataRepeatableQuest } from "../../eft/common/tables/IRepeatableQuests"; +import { IRepeatableQuestChangeRequest } from "../../eft/quests/IRepeatableQuestChangeRequest"; +export interface IQuestCallbacks { + 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; + activityPeriods(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IRagfairCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IRagfairCallbacks.d.ts new file mode 100644 index 0000000..9282bd4 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IRagfairCallbacks.d.ts @@ -0,0 +1,21 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { ISearchRequestData } from "../../eft/ragfair/ISearchRequestData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGetMarketPriceRequestData } from "../../eft/ragfair/IGetMarketPriceRequestData"; +import { IAddOfferRequestData } from "../../eft/ragfair/IAddOfferRequestData"; +import { IRemoveOfferRequestData } from "../../eft/ragfair/IRemoveOfferRequestData"; +import { IExtendOfferRequestData } from "../../eft/ragfair/IExtendOfferRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IGetItemPriceResult } from "../../eft/ragfair/IGetItemPriceResult"; +export interface IRagfairCallbacks { + load(): void; + search(url: string, info: ISearchRequestData, sessionID: string): IGetBodyResponseData; + getMarketPrice(url: string, info: IGetMarketPriceRequestData, sessionID: string): IGetBodyResponseData; + getItemPrices(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + addOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse; + removeOffer(pmcData: IPmcData, info: IRemoveOfferRequestData, sessionID: string): IItemEventRouterResponse; + extendOffer(pmcData: IPmcData, info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse; + update(timeSinceLastRun: number): boolean; + updatePlayer(timeSinceLastRun: number): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IRepairCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IRepairCallbacks.d.ts new file mode 100644 index 0000000..e8183c9 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IRepairCallbacks.d.ts @@ -0,0 +1,8 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IRepairActionDataRequest } from "../../eft/repair/IRepairActionDataRequest"; +import { ITraderRepairActionDataRequest } from "../../eft/repair/ITraderRepairActionDataRequest"; +export interface IRepairCallbacks { + traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/ISaveCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/ISaveCallbacks.d.ts new file mode 100644 index 0000000..1ad3b82 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/ISaveCallbacks.d.ts @@ -0,0 +1,4 @@ +export interface ISaveCallbacks { + load(): void; + update(secondsSinceLastRun: number): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/ITradeCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/ITradeCallbacks.d.ts new file mode 100644 index 0000000..2f41d54 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/ITradeCallbacks.d.ts @@ -0,0 +1,8 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IProcessRagfairTradeRequestData } from "../../eft/trade/IProcessRagfairTradeRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBaseTradeRequestData } from "../../eft/trade/IProcessBaseTradeRequestData"; +export interface ITradeCallbacks { + processTrade(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse; + processRagfairTrade(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/ITraderCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/ITraderCallbacks.d.ts new file mode 100644 index 0000000..e0d7d06 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/ITraderCallbacks.d.ts @@ -0,0 +1,11 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IBarterScheme, ITraderAssort, ITraderBase } from "../../eft/common/tables/ITrader"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +export interface ITraderCallbacks { + load(): void; + getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + update(): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IWeatherCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IWeatherCallbacks.d.ts new file mode 100644 index 0000000..9ac72ae --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IWeatherCallbacks.d.ts @@ -0,0 +1,5 @@ +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +export interface IWeatherCallbacks { + getWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/callbacks/IWishlistCallbacks.d.ts b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IWishlistCallbacks.d.ts new file mode 100644 index 0000000..e5d519c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/callbacks/IWishlistCallbacks.d.ts @@ -0,0 +1,7 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IWishlistActionData } from "../../eft/wishlist/IWishlistActionData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface IWishlistCallbacks { + addToWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; + removeFromWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IAirdropConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IAirdropConfig.d.ts new file mode 100644 index 0000000..627b603 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IAirdropConfig.d.ts @@ -0,0 +1,33 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IAirdropConfig extends IBaseConfig { + kind: "aki-airdrop"; + airdropChancePercent: AirdropChancePercent; + planeMinFlyHeight: number; + planeMaxFlyHeight: number; + planeVolume: number; + planeSpeed: number; + crateFallSpeed: number; + airdropMinStartTimeSeconds: number; + airdropMaxStartTimeSeconds: number; + loot: AirdropLoot; +} +export interface AirdropChancePercent { + bigmap: number; + woods: number; + lighthouse: number; + shoreline: number; + interchange: number; + reserve: number; + tarkovStreets: number; +} +export interface AirdropLoot { + presetCount: MinMax; + itemCount: MinMax; + itemBlacklist: string[]; + itemTypeWhitelist: string[]; + /** key: item base type: value: max count */ + itemLimits: Record; + itemStackLimits: Record; + armorLevelWhitelist: number[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IBaseConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IBaseConfig.d.ts new file mode 100644 index 0000000..8b6ba88 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IBaseConfig.d.ts @@ -0,0 +1,3 @@ +export interface IBaseConfig { + kind: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IBotConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IBotConfig.d.ts new file mode 100644 index 0000000..fcbc179 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IBotConfig.d.ts @@ -0,0 +1,110 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +import { IBotDurability } from "./IBotDurability"; +import { IPmcConfig } from "./IPmcConfig"; +export interface IBotConfig extends IBaseConfig { + kind: "aki-bot"; + /** How many variants of each bot should be generated on raid start */ + presetBatch: PresetBatch; + /** What bot types should be classified as bosses */ + bosses: string[]; + /** Control weapon/armor durability min/max values for each bot type */ + durability: IBotDurability; + /** Control the weighting of how expensive an average loot item is on a PMC or Scav */ + lootNValue: LootNvalue; + /** Control what bots are added to a bots revenge list key: bottype, value: bottypes to revenge on seeing their death */ + revenge: Record; + /** PMC bot specific config settings */ + pmc: IPmcConfig; + /** Control how many items are allowed to spawn on a bot + * key: bottype, value: */ + itemSpawnLimits: Record>; + /** Blacklist/whitelist items on a bot */ + equipment: Record; + /** Show a bots botType value after their name */ + showTypeInNickname: boolean; + /** Max number of bots that can be spawned in a raid at any one time */ + maxBotCap: Record; + chanceAssaultScavHasPlayerScavName: number; + /** How many stacks of secret ammo should a bot have in its bot secure container */ + secureContainerAmmoStackCount: number; + /** Batch generation size when type not available in cache */ + botGenerationBatchSizePerType: number; +} +export interface PresetBatch { + assault: number; + bossBully: number; + bossGluhar: number; + bossKilla: number; + bossKojaniy: number; + bossSanitar: number; + bossTagilla: number; + bossKnight: number; + bossTest: number; + cursedAssault: number; + followerBully: number; + followerGluharAssault: number; + followerGluharScout: number; + followerGluharSecurity: number; + followerGluharSnipe: number; + followerKojaniy: number; + followerSanitar: number; + followerTagilla: number; + followerBirdEye: number; + followerBigPipe: number; + followerTest: number; + marksman: number; + pmcBot: number; + sectantPriest: number; + sectantWarrior: number; + gifter: number; + test: number; + exUsec: number; +} +export interface LootNvalue { + scav: number; + pmc: number; +} +export interface EquipmentFilters { + weaponModLimits: ModLimits; + weaponSightWhitelist: Record; + faceShieldIsActiveChancePercent?: number; + lightLaserIsActiveChancePercent?: number; + nvgIsActiveChancePercent?: number; + randomisation: RandomisationDetails[]; + blacklist: EquipmentFilterDetails[]; + whitelist: EquipmentFilterDetails[]; + clothing: WeightingAdjustmentDetails[]; + weightingAdjustments: WeightingAdjustmentDetails[]; +} +export interface ModLimits { + /** How many scopes are allowed on a weapon - hard coded to work with OPTIC_SCOPE, ASSAULT_SCOPE, COLLIMATOR, COMPACT_COLLIMATOR */ + scopeLimit?: number; + /** How many lasers or lights are allowed on a weapon - hard coded to work with TACTICAL_COMBO, and FLASHLIGHT */ + lightLaserLimit?: number; +} +export interface RandomisationDetails { + levelRange: MinMax; + generation?: Record; + randomisedWeaponModSlots?: string[]; + randomisedArmorSlots?: string[]; + /** Equipment chances */ + equipment?: Record; + /** Modc chances */ + mods?: Record; +} +export interface EquipmentFilterDetails { + levelRange: MinMax; + equipment: Record; + cartridge: Record; +} +export interface WeightingAdjustmentDetails { + levelRange: MinMax; + ammo?: AdjustmentDetails; + equipment?: AdjustmentDetails; + clothing?: AdjustmentDetails; +} +export interface AdjustmentDetails { + add: Record>; + edit: Record>; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IBotDurability.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IBotDurability.d.ts new file mode 100644 index 0000000..a4ff53c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IBotDurability.d.ts @@ -0,0 +1,45 @@ +export interface IBotDurability { + default: DefaultDurability; + pmc: PmcDurability; + boss: BotDurability; + follower: BotDurability; + assault: BotDurability; + cursedassault: BotDurability; + marksman: BotDurability; + pmcbot: BotDurability; + exusec: BotDurability; + gifter: BotDurability; + sectantpriest: BotDurability; + sectantwarrior: BotDurability; +} +/** Durability values to be used when a more specific bot type cant be found */ +export interface DefaultDurability { + armor: ArmorDurability; + weapon: WeaponDurability; +} +export interface PmcDurability { + armor: PmcDurabilityArmor; + weapon: WeaponDurability; +} +export interface PmcDurabilityArmor { + lowestMaxPercent: number; + highestMaxPercent: number; + maxDelta: number; + minDelta: number; +} +export interface BotDurability { + armor: ArmorDurability; + weapon: WeaponDurability; +} +export interface ArmorDurability { + maxDelta: number; + minDelta: number; + minLimitPercent: number; +} +export interface WeaponDurability { + lowestMax: number; + highestMax: number; + maxDelta: number; + minDelta: number; + minLimitPercent: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/ICoreConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/ICoreConfig.d.ts new file mode 100644 index 0000000..b2819a4 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/ICoreConfig.d.ts @@ -0,0 +1,8 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface ICoreConfig extends IBaseConfig { + kind: "aki-core"; + akiVersion: string; + projectName: string; + compatibleTarkovVersion: string; + commit: string; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IHealthConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IHealthConfig.d.ts new file mode 100644 index 0000000..fdbf656 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IHealthConfig.d.ts @@ -0,0 +1,14 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IHealthConfig extends IBaseConfig { + kind: "aki-health"; + healthMultipliers: HealthMultipliers; + save: Save; +} +export interface HealthMultipliers { + death: number; + blacked: number; +} +export interface Save { + health: boolean; + effects: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IHideoutConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IHideoutConfig.d.ts new file mode 100644 index 0000000..0785f1e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IHideoutConfig.d.ts @@ -0,0 +1,7 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IHideoutConfig extends IBaseConfig { + kind: "aki-hideout"; + runIntervalSeconds: number; + hoursForSkillCrafting: number; + hideoutWallAppearTimeSeconds: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IHttpConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IHttpConfig.d.ts new file mode 100644 index 0000000..3fe4787 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IHttpConfig.d.ts @@ -0,0 +1,7 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IHttpConfig extends IBaseConfig { + webSocketPingDelayMs: number; + kind: "aki-http"; + ip: string; + port: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IInRaidConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IInRaidConfig.d.ts new file mode 100644 index 0000000..3ae2972 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IInRaidConfig.d.ts @@ -0,0 +1,22 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IInRaidConfig extends IBaseConfig { + kind: "aki-inraid"; + MIAOnRaidEnd: boolean; + raidMenuSettings: RaidMenuSettings; + save: Save; + carExtracts: string[]; + carExtractBaseStandingGain: number; + scavExtractGain: number; +} +export interface RaidMenuSettings { + aiAmount: string; + aiDifficulty: string; + bossEnabled: boolean; + scavWars: boolean; + taggedAndCursed: boolean; + enablePve: boolean; +} +export interface Save { + loot: boolean; + durability: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IInsuranceConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IInsuranceConfig.d.ts new file mode 100644 index 0000000..fd498bc --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IInsuranceConfig.d.ts @@ -0,0 +1,10 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IInsuranceConfig extends IBaseConfig { + kind: "aki-insurance"; + insuranceMultiplier: Record; + returnChancePercent: Record; + blacklistedEquipment: string[]; + slotIdsWithChanceOfNotReturning: string[]; + returnTimeOverrideSeconds: number; + runIntervalSeconds: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IInventoryConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IInventoryConfig.d.ts new file mode 100644 index 0000000..4642b9b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IInventoryConfig.d.ts @@ -0,0 +1,11 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IInventoryConfig extends IBaseConfig { + kind: "aki-inventory"; + newItemsMarkedFound: boolean; + randomLootContainers: Record; +} +export interface RewardDetails { + rewardCount: number; + foundInRaid: boolean; + rewardTplPool: Record; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IItemConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IItemConfig.d.ts new file mode 100644 index 0000000..5ecccc2 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IItemConfig.d.ts @@ -0,0 +1,5 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IItemConfig extends IBaseConfig { + kind: "aki-item"; + blacklist: string[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/ILocaleConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/ILocaleConfig.d.ts new file mode 100644 index 0000000..0a8955c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/ILocaleConfig.d.ts @@ -0,0 +1,10 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface ILocaleConfig extends IBaseConfig { + kind: "aki-locale"; + /** e.g. ru/en/cn/fr etc, or 'system', will take computer locale setting */ + gameLocale: string; + /** e.g. ru/en/cn/fr etc, or 'system', will take computer locale setting */ + serverLocale: string; + /** Languages server can be translated into */ + serverSupportedLocales: string[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/ILocationConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/ILocationConfig.d.ts new file mode 100644 index 0000000..f808ad8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/ILocationConfig.d.ts @@ -0,0 +1,37 @@ +import { BossLocationSpawn, Wave } from "../../../models/eft/common/ILocationBase"; +import { IBaseConfig } from "./IBaseConfig"; +export interface ILocationConfig extends IBaseConfig { + kind: "aki-location"; + fixEmptyBotWaves: boolean; + fixRoguesTakingAllSpawnsOnLighthouse: boolean; + lighthouseRogueSpawnTimeSeconds: number; + looseLootMultiplier: LootMultiplier; + staticLootMultiplier: LootMultiplier; + customWaves: CustomWaves; + /** Open zones to add to map */ + openZones: Record; + /** Key = map id, value = item tpls that should only have one forced loot spawn position */ + forcedLootSingleSpawnById: Record; +} +export interface CustomWaves { + boss: Record; + normal: Record; +} +export interface LootMultiplier { + bigmap: number; + develop: number; + factory4_day: number; + factory4_night: number; + interchange: number; + laboratory: number; + rezervbase: number; + shoreline: number; + woods: number; + hideout: number; + lighthouse: number; + privatearea: number; + suburbs: number; + tarkovstreets: number; + terminal: number; + town: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IMatchConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IMatchConfig.d.ts new file mode 100644 index 0000000..92c4d77 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IMatchConfig.d.ts @@ -0,0 +1,5 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IMatchConfig extends IBaseConfig { + kind: "aki-match"; + enabled: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IPlayerScavConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IPlayerScavConfig.d.ts new file mode 100644 index 0000000..3a65e83 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IPlayerScavConfig.d.ts @@ -0,0 +1,25 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IPlayerScavConfig extends IBaseConfig { + kind: "aki-playerscav"; + karmaLevel: Record; +} +export interface KarmaLevel { + botTypeForLoot: string; + modifiers: Modifiers; + itemLimits: ItemLimits; + equipmentBlacklist: Record; + labsAccessCardChancePercent: number; +} +export interface Modifiers { + equipment: Record; + mod: Record; +} +export interface ItemLimits { + healing: MinMax; + drugs: MinMax; + stims: MinMax; + looseLoot: MinMax; + magazines: MinMax; + grenades: MinMax; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IPmcConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IPmcConfig.d.ts new file mode 100644 index 0000000..979122c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IPmcConfig.d.ts @@ -0,0 +1,29 @@ +import { MinMax } from "../../common/MinMax"; +export interface IPmcConfig { + dynamicLoot: DynamicLoot; + useDifficultyOverride: boolean; + difficulty: string; + looseWeaponInBackpackChancePercent: number; + looseWeaponInBackpackLootMinMax: MinMax; + isUsec: number; + usecType: string; + bearType: string; + chanceSameSideIsHostilePercent: number; + /** key: location, value: type for usec/bear */ + pmcType: Record>>; + maxBackpackLootTotalRub: number; + maxPocketLootTotalRub: number; + maxVestLootTotalRub: number; + convertIntoPmcChance: Record; + enemyTypes: string[]; + botRelativeLevelDeltaMax: number; +} +export interface PmcTypes { + usec: string; + bear: string; +} +export interface DynamicLoot { + whitelist: string[]; + blacklist: string[]; + moneyStackLimits: Record; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IQuestConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IQuestConfig.d.ts new file mode 100644 index 0000000..9adfaba --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IQuestConfig.d.ts @@ -0,0 +1,96 @@ +import { ELocationName } from "../../enums/ELocationName"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IQuestConfig extends IBaseConfig { + kind: "aki-quest"; + redeemTime: number; + questTemplateIds: IPlayerTypeQuestIds; + repeatableQuests: IRepeatableQuestConfig[]; + locationIdMap: Record; + bearOnlyQuests: string[]; + usecOnlyQuests: string[]; +} +export interface IPlayerTypeQuestIds { + pmc: IQuestTypeIds; + scav: IQuestTypeIds; +} +export interface IQuestTypeIds { + Elimination: string; + Completion: string; + Exploration: string; +} +export interface IRepeatableQuestConfig { + name: string; + side: string; + types: string[]; + resetTime: number; + numQuests: number; + minPlayerLevel: number; + rewardScaling: IRewardScaling; + locations: Record; + traderWhitelist: ITraderWhitelist[]; + questConfig: IRepeatableQuestTypesConfig; + /** Item base types to block when generating rewards */ + rewardBaseTypeBlacklist: string[]; + /** Item tplIds to ignore when generating rewards */ + rewardBlacklist: string[]; + rewardAmmoStackMinSize: number; +} +export interface IRewardScaling { + levels: number[]; + experience: number[]; + roubles: number[]; + items: number[]; + reputation: number[]; + rewardSpread: number; +} +export interface ITraderWhitelist { + traderId: string; + questTypes: string[]; +} +export interface IRepeatableQuestTypesConfig { + Exploration: IExploration; + Completion: ICompletion; + Elimination: IElimination; +} +export interface IExploration { + maxExtracts: number; + specificExits: ISpecificExits; +} +export interface ISpecificExits { + probability: number; + passageRequirementWhitelist: string[]; +} +export interface ICompletion { + minRequestedAmount: number; + maxRequestedAmount: number; + minRequestedBulletAmount: number; + maxRequestedBulletAmount: number; + useWhitelist: boolean; + useBlacklist: boolean; +} +export interface IElimination { + targets: ITarget[]; + bodyPartProb: number; + bodyParts: IBodyPart[]; + specificLocationProb: number; + distLocationBlacklist: string[]; + distProb: number; + maxDist: number; + minDist: number; + maxKills: number; + minKills: number; +} +export interface IProbabilityObject { + key: string; + relativeProbability: number; + data?: any; +} +export interface ITarget extends IProbabilityObject { + data: IBossInfo; +} +export interface IBossInfo { + isBoss: boolean; +} +export interface IBodyPart extends IProbabilityObject { + data: string[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IRagfairConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IRagfairConfig.d.ts new file mode 100644 index 0000000..3fa04de --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IRagfairConfig.d.ts @@ -0,0 +1,77 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IRagfairConfig extends IBaseConfig { + kind: "aki-ragfair"; + runIntervalSeconds: number; + sell: Sell; + traders: Record; + dynamic: Dynamic; +} +export interface Sell { + fees: boolean; + chance: Chance; + time: Time; + reputation: Reputation; + simulatedSellHours: number; +} +export interface Chance { + base: number; + overpriced: number; + underpriced: number; +} +export interface Time { + base: number; + min: number; + max: number; +} +export interface Reputation { + gain: number; + loss: number; +} +export interface Dynamic { + purchasesAreFoundInRaid: boolean; + barter: Barter; + offerAdjustment: OfferAdjustment; + expiredOfferThreshold: number; + offerItemCount: MinMax; + price: MinMax; + presetPrice: MinMax; + showDefaultPresetsOnly: boolean; + endTimeSeconds: MinMax; + condition: Condition; + stackablePercent: MinMax; + nonStackableCount: MinMax; + rating: MinMax; + currencies: Record; + showAsSingleStack: string[]; + removeSeasonalItemsWhenNotInEvent: boolean; + blacklist: Blacklist; +} +export interface Barter { + enable: boolean; + chancePercent: number; + itemCountMin: number; + itemCountMax: number; + priceRangeVariancePercent: number; + minRoubleCostToBecomeBarter: number; + itemTypeBlacklist: string[]; +} +export interface OfferAdjustment { + maxPriceDifferenceBelowHandbookPercent: number; + handbookPriceMultipier: number; + priceThreshholdRub: number; +} +export interface Condition { + conditionChance: number; + min: number; + max: number; +} +export interface Blacklist { + /** + * show/hide trader items that are blacklisted by bsg + */ + traderItems: boolean; + custom: string[]; + enableBsgList: boolean; + enableQuestList: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IRepairConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IRepairConfig.d.ts new file mode 100644 index 0000000..b6db332 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IRepairConfig.d.ts @@ -0,0 +1,25 @@ +import { MinMax } from "../../../models/common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IRepairConfig extends IBaseConfig { + kind: "aki-repair"; + priceMultiplier: number; + applyRandomizeDurabilityLoss: boolean; + weaponSkillRepairGain: number; + armorKitSkillPointGainPerRepairPointMultiplier: number; + repairKit: RepairKit; +} +export interface RepairKit { + armor: BonusSettings; + weapon: BonusSettings; +} +export interface BonusSettings { + rarityWeight: Record; + bonusTypeWeight: Record; + common: Record; + rare: Record; +} +export interface BonusValues { + valuesMinMax: MinMax; + /** What dura is buff active between (min max of current max) */ + activeDurabilityPercentMinMax: MinMax; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IScavCaseConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IScavCaseConfig.d.ts new file mode 100644 index 0000000..df5dae0 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IScavCaseConfig.d.ts @@ -0,0 +1,27 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IScavCaseConfig extends IBaseConfig { + kind: "aki-scavcase"; + rewardItemValueRangeRub: Record; + moneyRewards: MoneyRewards; + ammoRewards: AmmoRewards; + rewardItemParentBlacklist: string[]; + rewardItemBlacklist: string[]; +} +export interface MoneyRewards { + moneyRewardChancePercent: number; + rubCount: MoneyLevels; + usdCount: MoneyLevels; + eurCount: MoneyLevels; +} +export interface MoneyLevels { + common: MinMax; + rare: MinMax; + superrare: MinMax; +} +export interface AmmoRewards { + ammoRewardChancePercent: number; + ammoRewardBlacklist: Record; + ammoRewardValueRangeRub: Record; + minStackSize: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/ISeasonalEventConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/ISeasonalEventConfig.d.ts new file mode 100644 index 0000000..cedf9a9 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/ISeasonalEventConfig.d.ts @@ -0,0 +1,21 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface ISeasonalEventConfig extends IBaseConfig { + kind: "aki-seasonalevents"; + enableSeasonalEventDetection: boolean; + /** event / botType / equipSlot / itemid */ + eventGear: Record>>>; + events: ISeasonalEvent[]; + gifterSettings: GifterSetting[]; +} +export interface ISeasonalEvent { + name: string; + startDay: number; + startMonth: number; + endDay: number; + endMonth: number; +} +export interface GifterSetting { + map: string; + zones: string; + spawnChance: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/ITraderConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/ITraderConfig.d.ts new file mode 100644 index 0000000..56c7d35 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/ITraderConfig.d.ts @@ -0,0 +1,35 @@ +import { MinMax } from "../../../models/common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface ITraderConfig extends IBaseConfig { + kind: "aki-trader"; + updateTime: UpdateTime[]; + updateTimeDefault: number; + /** What % of max durability an item needs to sell to a trader*/ + durabilityPurchaseThreshhold: Record; + traderPriceMultipler: number; + persistPurchaseDataInProfile: boolean; + fence: FenceConfig; +} +export interface UpdateTime { + traderId: string; + seconds: number; +} +export interface FenceConfig { + discountOptions: DiscountOptions; + partialRefreshTimeSeconds: number; + partialRefreshChangePercent: number; + assortSize: number; + maxPresetsPercent: number; + itemPriceMult: number; + presetPriceMult: number; + armorMaxDurabilityPercentMinMax: MinMax; + presetMaxDurabilityPercentMinMax: MinMax; + itemTypeLimits: Record; + regenerateAssortsOnRefresh: boolean; + blacklist: string[]; +} +export interface DiscountOptions { + assortSize: number; + itemPriceMult: number; + presetPriceMult: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/config/IWeatherConfig.d.ts b/TypeScript/16ImporterUtil/types/models/spt/config/IWeatherConfig.d.ts new file mode 100644 index 0000000..41a1c83 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/config/IWeatherConfig.d.ts @@ -0,0 +1,23 @@ +import { WindDirection } from "../../../models/enums/WindDirection"; +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IWeatherConfig extends IBaseConfig { + kind: "aki-weather"; + acceleration: number; + weather: Weather; +} +export interface Weather { + clouds: MinMax; + windSpeed: WeatherSettings; + windDirection: WeatherSettings; + windGustiness: MinMax; + rain: WeatherSettings; + rainIntensity: MinMax; + fog: WeatherSettings; + temp: MinMax; + pressure: MinMax; +} +export interface WeatherSettings { + values: T[]; + weights: number[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/controllers/IBotController.d.ts b/TypeScript/16ImporterUtil/types/models/spt/controllers/IBotController.d.ts new file mode 100644 index 0000000..010e208 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/controllers/IBotController.d.ts @@ -0,0 +1,13 @@ +import { IGenerateBotsRequestData } from "../../eft/bot/IGenerateBotsRequestData"; +import { IBotBase } from "../../eft/common/tables/IBotBase"; +import { IBotCore } from "../../eft/common/tables/IBotCore"; +import { Difficulty } from "../../eft/common/tables/IBotType"; +export interface IBotController { + getBotLimit(type: string): number; + getBotDifficulty(type: string, difficulty: string): IBotCore | Difficulty; + isBotPmc(botRole: string): boolean; + isBotBoss(botRole: string): boolean; + isBotFollower(botRole: string): boolean; + generate(info: IGenerateBotsRequestData, playerScav: boolean): IBotBase[]; + getBotCap(): number; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/generators/IBotGenerator.d.ts b/TypeScript/16ImporterUtil/types/models/spt/generators/IBotGenerator.d.ts new file mode 100644 index 0000000..9043945 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/generators/IBotGenerator.d.ts @@ -0,0 +1,10 @@ +import { Inventory as PmcInventory } from "../../eft/common/tables/IBotBase"; +import { Inventory, Chances, Generation } from "../../eft/common/tables/IBotType"; +export interface IBotGenerator { + generateInventory(templateInventory: Inventory, equipmentChances: Chances, generation: Generation, botRole: string, isPmc: boolean): PmcInventory; +} +export interface IExhaustableArray { + getRandomValue(): T; + getFirstValue(): T; + hasValues(): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/generators/ILocationGenerator.d.ts b/TypeScript/16ImporterUtil/types/models/spt/generators/ILocationGenerator.d.ts new file mode 100644 index 0000000..530ceca --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/generators/ILocationGenerator.d.ts @@ -0,0 +1,6 @@ +import { IStaticContainerProps, IStaticLootDetails, IStaticAmmoDetails, IStaticForcedProps } from "../../eft/common/tables/ILootBase"; +import { ILooseLoot, SpawnpointTemplate } from "../../eft/common/ILooseLoot"; +export interface ILocationGenerator { + generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record, staticAmmoDist: Record, locationName: string): IStaticContainerProps; + generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record, locationName: string): SpawnpointTemplate[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/generators/IPMCLootGenerator.d.ts b/TypeScript/16ImporterUtil/types/models/spt/generators/IPMCLootGenerator.d.ts new file mode 100644 index 0000000..a9db89b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/generators/IPMCLootGenerator.d.ts @@ -0,0 +1,4 @@ +export interface IPMCLootGenerator { + generatePMCPocketLootPool(): string[]; + generatePMCBackpackLootPool(): string[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/generators/IRagfairAssortGenerator.d.ts b/TypeScript/16ImporterUtil/types/models/spt/generators/IRagfairAssortGenerator.d.ts new file mode 100644 index 0000000..6670540 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/generators/IRagfairAssortGenerator.d.ts @@ -0,0 +1,4 @@ +import { Item } from "../../eft/common/tables/IItem"; +export interface IRagfairAssortGenerator { + getAssortItems(): Item[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/generators/IRagfairOfferGenerator.d.ts b/TypeScript/16ImporterUtil/types/models/spt/generators/IRagfairOfferGenerator.d.ts new file mode 100644 index 0000000..30b4be5 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/generators/IRagfairOfferGenerator.d.ts @@ -0,0 +1,6 @@ +import { IBarterScheme } from "../../eft/common/tables/ITrader"; +import { IRagfairOffer } from "../../eft/ragfair/IRagfairOffer"; +import { Item } from "../../eft/common/tables/IItem"; +export interface IRagfairOfferGenerator { + createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece: boolean): IRagfairOffer; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/hideout/ScavCaseRewardCountsAndPrices.d.ts b/TypeScript/16ImporterUtil/types/models/spt/hideout/ScavCaseRewardCountsAndPrices.d.ts new file mode 100644 index 0000000..1b5af39 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/hideout/ScavCaseRewardCountsAndPrices.d.ts @@ -0,0 +1,11 @@ +export interface ScavCaseRewardCountsAndPrices { + common: RewardCountAndPriceDetails; + rare: RewardCountAndPriceDetails; + superrare: RewardCountAndPriceDetails; +} +export interface RewardCountAndPriceDetails { + minCount: number; + maxCount: number; + minPriceRub: number; + maxPriceRub: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/logging/LogBackgroundColor.d.ts b/TypeScript/16ImporterUtil/types/models/spt/logging/LogBackgroundColor.d.ts new file mode 100644 index 0000000..1dd369b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/logging/LogBackgroundColor.d.ts @@ -0,0 +1,11 @@ +export declare enum LogBackgroundColor { + DEFAULT = "", + BLACK = "blackBG", + RED = "redBG", + GREEN = "greenBG", + YELLOW = "yellowBG", + BLUE = "blueBG", + MAGENTA = "magentaBG", + CYAN = "cyanBG", + WHITE = "whiteBG" +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/16ImporterUtil/types/models/spt/logging/LogTextColor.d.ts new file mode 100644 index 0000000..6c7abf3 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/logging/LogTextColor.d.ts @@ -0,0 +1,11 @@ +export declare enum LogTextColor { + BLACK = "black", + RED = "red", + GREEN = "green", + YELLOW = "yellow", + BLUE = "blue", + MAGENTA = "magenta", + CYAN = "cyan", + WHITE = "white", + GRAY = "" +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/logging/SptLogger.d.ts b/TypeScript/16ImporterUtil/types/models/spt/logging/SptLogger.d.ts new file mode 100644 index 0000000..ea1b3d8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/logging/SptLogger.d.ts @@ -0,0 +1,7 @@ +export interface SptLogger { + error: (msg: string | Record) => void; + warn: (msg: string | Record) => void; + succ?: (msg: string | Record) => void; + info: (msg: string | Record) => void; + debug: (msg: string | Record) => void; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/mod/IModLoader.d.ts b/TypeScript/16ImporterUtil/types/models/spt/mod/IModLoader.d.ts new file mode 100644 index 0000000..9a71f61 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/mod/IModLoader.d.ts @@ -0,0 +1,5 @@ +import { DependencyContainer } from "tsyringe"; +export interface IModLoader { + load(container: DependencyContainer): void; + getModPath(mod: string): string; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/mod/IPackageJsonData.d.ts b/TypeScript/16ImporterUtil/types/models/spt/mod/IPackageJsonData.d.ts new file mode 100644 index 0000000..06f7454 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/mod/IPackageJsonData.d.ts @@ -0,0 +1,13 @@ +export interface IPackageJsonData { + incompatibilities?: string[]; + dependencies?: Record; + modDependencies?: Record; + name: string; + author: string; + version: string; + akiVersion: string; + licence: string; + main: string; + isBundleMod: boolean; + contributors: string[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/mod/NewItemDetails.d.ts b/TypeScript/16ImporterUtil/types/models/spt/mod/NewItemDetails.d.ts new file mode 100644 index 0000000..fc69a06 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/mod/NewItemDetails.d.ts @@ -0,0 +1,39 @@ +import { ITemplateItem, Props } from "../../eft/common/tables/ITemplateItem"; +export declare abstract class NewItemDetailsBase { + /** Price of the item on flea market */ + fleaPriceRoubles: number; + /** Price of the item in the handbook */ + handbookPriceRoubles: number; + /** + * A dictionary for locale settings, key = langauge (e.g. en,cn,es-mx,jp,fr) + * If a language is not included, the first item in the array will be used in its place + */ + locales: Record; +} +export declare class NewItemFromCloneDetails extends NewItemDetailsBase { + /** Id of the item to copy and use as a base */ + itemTplToClone: string; + /** Item properties that should be applied over the top of the cloned base */ + overrideProperties: Props; + /** ParentId for the new item (item type) */ + parentId: string; + /** + * the id the new item should have, leave blank to have one generated for you + * This is often known as the TplId, or TemplateId + */ + newId: string; +} +export declare class NewItemDetails extends NewItemDetailsBase { + newItem: ITemplateItem; +} +export declare class LocaleDetails { + name: string; + shortName: string; + description: string; +} +export declare class CreateItemResult { + constructor(); + success: boolean; + itemId: string; + errors: string[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/ragfair/IRagfairServerPrices.d.ts b/TypeScript/16ImporterUtil/types/models/spt/ragfair/IRagfairServerPrices.d.ts new file mode 100644 index 0000000..c7d246a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/ragfair/IRagfairServerPrices.d.ts @@ -0,0 +1,4 @@ +export interface IRagfairServerPrices { + static: Record; + dynamic: Record; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/server/IDatabaseTables.d.ts b/TypeScript/16ImporterUtil/types/models/spt/server/IDatabaseTables.d.ts new file mode 100644 index 0000000..582d9e2 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/server/IDatabaseTables.d.ts @@ -0,0 +1,56 @@ +import { IQteData } from "../../../models/eft/hideout/IQteData"; +import { IGlobals } from "../../eft/common/IGlobals"; +import { IBotBase } from "../../eft/common/tables/IBotBase"; +import { IBotCore } from "../../eft/common/tables/IBotCore"; +import { IBotType } from "../../eft/common/tables/IBotType"; +import { ICustomizationItem } from "../../eft/common/tables/ICustomizationItem"; +import { IHandbookBase } from "../../eft/common/tables/IHandbookBase"; +import { ILootBase } from "../../eft/common/tables/ILootBase"; +import { IMatch } from "../../eft/common/tables/IMatch"; +import { IProfileTemplates } from "../../eft/common/tables/IProfileTemplate"; +import { IQuest } from "../../eft/common/tables/IQuest"; +import { IRepeatableQuestDatabase } from "../../eft/common/tables/IRepeatableQuests"; +import { ITemplateItem } from "../../eft/common/tables/ITemplateItem"; +import { ITrader } from "../../eft/common/tables/ITrader"; +import { IHideoutArea } from "../../eft/hideout/IHideoutArea"; +import { IHideoutProduction } from "../../eft/hideout/IHideoutProduction"; +import { IHideoutScavCase } from "../../eft/hideout/IHideoutScavCase"; +import { IHideoutSettingsBase } from "../../eft/hideout/IHideoutSettingsBase"; +import { ILocaleBase } from "./ILocaleBase"; +import { ILocations } from "./ILocations"; +import { IServerBase } from "./IServerBase"; +import { ISettingsBase } from "./ISettingsBase"; +export interface IDatabaseTables { + bots?: { + types: Record; + base: IBotBase; + core: IBotCore; + }; + hideout?: { + areas: IHideoutArea[]; + production: IHideoutProduction[]; + scavcase: IHideoutScavCase[]; + settings: IHideoutSettingsBase; + qte: IQteData[]; + }; + locales?: ILocaleBase; + locations?: ILocations; + loot?: ILootBase; + match?: IMatch; + templates?: { + character: string[]; + items: Record; + quests: Record; + repeatableQuests: IRepeatableQuestDatabase; + handbook: IHandbookBase; + customization: Record; + /** The profile templates listed in the launcher on profile creation, split by account type (e.g. Standard) then side (e.g. bear/usec) */ + profiles: IProfileTemplates; + /** Flea prices of items - gathered from online flea market dump */ + prices: Record; + }; + traders?: Record; + globals?: IGlobals; + server?: IServerBase; + settings?: ISettingsBase; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/server/ILocaleBase.d.ts b/TypeScript/16ImporterUtil/types/models/spt/server/ILocaleBase.d.ts new file mode 100644 index 0000000..3cdaf6f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/server/ILocaleBase.d.ts @@ -0,0 +1,5 @@ +export interface ILocaleBase { + global: Record>; + menu: Record; + languages: Record; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/server/ILocations.d.ts b/TypeScript/16ImporterUtil/types/models/spt/server/ILocations.d.ts new file mode 100644 index 0000000..18f0262 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/server/ILocations.d.ts @@ -0,0 +1,26 @@ +import { ILocationBase } from "../../eft/common/ILocationBase"; +import { ILooseLoot } from "../../eft/common/ILooseLoot"; +import { ILocationsBase } from "../../eft/common/tables/ILocationsBase"; +export interface ILocations { + bigmap?: ILocationData; + develop?: ILocationData; + factory4_day?: ILocationData; + factory4_night?: ILocationData; + hideout?: ILocationData; + interchange?: ILocationData; + laboratory?: ILocationData; + lighthouse?: ILocationData; + privatearea?: ILocationData; + rezervbase?: ILocationData; + shoreline?: ILocationData; + suburbs?: ILocationData; + tarkovstreets?: ILocationData; + terminal?: ILocationData; + town?: ILocationData; + woods?: ILocationData; + base?: ILocationsBase; +} +export interface ILocationData { + base: ILocationBase; + looseLoot?: ILooseLoot; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/server/IServerBase.d.ts b/TypeScript/16ImporterUtil/types/models/spt/server/IServerBase.d.ts new file mode 100644 index 0000000..d033db3 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/server/IServerBase.d.ts @@ -0,0 +1,4 @@ +export interface IServerBase { + ip: string; + port: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/server/ISettingsBase.d.ts b/TypeScript/16ImporterUtil/types/models/spt/server/ISettingsBase.d.ts new file mode 100644 index 0000000..2870cfb --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/server/ISettingsBase.d.ts @@ -0,0 +1,48 @@ +export interface ISettingsBase { + config: Config; +} +export interface Config { + AFKTimeoutSeconds: number; + AdditionalRandomDelaySeconds: number; + ClientSendRateLimit: number; + CriticalRetriesCount: number; + DefaultRetriesCount: number; + FirstCycleDelaySeconds: number; + FramerateLimit: FramerateLimit; + GroupStatusInterval: number; + GroupStatusButtonInterval: number; + KeepAliveInterval: number; + LobbyKeepAliveInterval: number; + Mark502and504AsNonImportant: boolean; + MemoryManagementSettings: MemoryManagementSettings; + NVidiaHighlights: boolean; + NextCycleDelaySeconds: number; + PingServerResultSendInterval: number; + PingServersInterval: number; + ReleaseProfiler: ReleaseProfiler; + RequestConfirmationTimeouts: number[]; + RequestsMadeThroughLobby: string[]; + SecondCycleDelaySeconds: number; + ShouldEstablishLobbyConnection: boolean; + TurnOffLogging: boolean; + WeaponOverlapDistanceCulling: number; + WebDiagnosticsEnabled: boolean; +} +export interface FramerateLimit { + MaxFramerateGameLimit: number; + MaxFramerateLobbyLimit: number; + MinFramerateLimit: number; +} +export interface MemoryManagementSettings { + AggressiveGC: boolean; + GigabytesRequiredToDisableGCDuringRaid: number; + HeapPreAllocationEnabled: boolean; + HeapPreAllocationMB: number; + OverrideRamCleanerSettings: boolean; + RamCleanerEnabled: boolean; +} +export interface ReleaseProfiler { + Enabled: boolean; + MaxRecords: number; + RecordTriggerValue: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/services/CustomPreset.d.ts b/TypeScript/16ImporterUtil/types/models/spt/services/CustomPreset.d.ts new file mode 100644 index 0000000..f07382e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/services/CustomPreset.d.ts @@ -0,0 +1,5 @@ +import { Preset } from "../../eft/common/IGlobals"; +export interface CustomPreset { + key: string; + preset: Preset; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/services/CustomTraderAssortData.d.ts b/TypeScript/16ImporterUtil/types/models/spt/services/CustomTraderAssortData.d.ts new file mode 100644 index 0000000..265a26a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/services/CustomTraderAssortData.d.ts @@ -0,0 +1,6 @@ +import { ITraderAssort } from "../../eft/common/tables/ITrader"; +import { Traders } from "../../enums/Traders"; +export interface CustomTraderAssortData { + traderId: Traders; + assorts: ITraderAssort; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/services/LootItem.d.ts b/TypeScript/16ImporterUtil/types/models/spt/services/LootItem.d.ts new file mode 100644 index 0000000..acb7606 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/services/LootItem.d.ts @@ -0,0 +1,6 @@ +export declare class LootItem { + id?: string; + tpl: string; + isPreset: boolean; + stackCount: number; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/services/LootRequest.d.ts b/TypeScript/16ImporterUtil/types/models/spt/services/LootRequest.d.ts new file mode 100644 index 0000000..8c197ee --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/services/LootRequest.d.ts @@ -0,0 +1,11 @@ +import { MinMax } from "../../common/MinMax"; +export declare class LootRequest { + presetCount: MinMax; + itemCount: MinMax; + itemBlacklist: string[]; + itemTypeWhitelist: string[]; + /** key: item base type: value: max count */ + itemLimits: Record; + itemStackLimits: Record; + armorLevelWhitelist: number[]; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/utils/IAsyncQueue.d.ts b/TypeScript/16ImporterUtil/types/models/spt/utils/IAsyncQueue.d.ts new file mode 100644 index 0000000..2be801a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/utils/IAsyncQueue.d.ts @@ -0,0 +1,4 @@ +import { ICommand } from "./ICommand"; +export interface IAsyncQueue { + waitFor(command: ICommand): Promise; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/utils/ICommand.d.ts b/TypeScript/16ImporterUtil/types/models/spt/utils/ICommand.d.ts new file mode 100644 index 0000000..696bb83 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/utils/ICommand.d.ts @@ -0,0 +1,4 @@ +export interface ICommand { + uuid: string; + cmd: () => Promise; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/utils/ILogger.d.ts b/TypeScript/16ImporterUtil/types/models/spt/utils/ILogger.d.ts new file mode 100644 index 0000000..2af3fac --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/utils/ILogger.d.ts @@ -0,0 +1,13 @@ +import { Daum } from "../../eft/itemEvent/IItemEventRouterRequest"; +import { LogBackgroundColor } from "../logging/LogBackgroundColor"; +import { LogTextColor } from "../logging/LogTextColor"; +export interface ILogger { + writeToLogFile(data: string | Daum): void; + log(data: string | Record | Error, color: string, backgroundColor?: string): void; + logWithColor(data: string | Record, textColor: LogTextColor, backgroundColor?: LogBackgroundColor): void; + error(data: string): void; + warning(data: string): void; + success(data: string): void; + info(data: string): void; + debug(data: string | Record, onlyShowInConsole?: boolean): void; +} diff --git a/TypeScript/16ImporterUtil/types/models/spt/utils/IUuidGenerator.d.ts b/TypeScript/16ImporterUtil/types/models/spt/utils/IUuidGenerator.d.ts new file mode 100644 index 0000000..3870469 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/models/spt/utils/IUuidGenerator.d.ts @@ -0,0 +1,3 @@ +export interface IUUidGenerator { + generate(): string; +} diff --git a/TypeScript/16ImporterUtil/types/routers/EventOutputHolder.d.ts b/TypeScript/16ImporterUtil/types/routers/EventOutputHolder.d.ts new file mode 100644 index 0000000..9a34219 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/EventOutputHolder.d.ts @@ -0,0 +1,41 @@ +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IHideoutImprovement, Productive } from "../models/eft/common/tables/IBotBase"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class EventOutputHolder { + protected jsonUtil: JsonUtil; + protected profileHelper: ProfileHelper; + protected timeUtil: TimeUtil; + /** What has client been informed of this game session */ + protected clientActiveSessionStorage: Record; + constructor(jsonUtil: JsonUtil, profileHelper: ProfileHelper, timeUtil: TimeUtil); + protected output: IItemEventRouterResponse; + getOutput(sessionID: string): IItemEventRouterResponse; + /** + * Reset the response object to a default state + * Occurs prior to event being handled by server + * @param sessionID Players id + */ + resetOutput(sessionID: string): void; + /** + * Update output object with most recent values from player profile + * @param sessionId Session id + */ + updateOutputProperties(sessionId: string): void; + /** + * Return all hideout Improvements from player profile, adjust completed Improvements' completed property to be true + * @param pmcData Player profile + * @returns dictionary of hideout improvements + */ + protected getImprovementsFromProfileAndFlagComplete(pmcData: IPmcData): Record; + /** + * Return productions from player profile except those completed crafts the client has already seen + * @param pmcData Player profile + * @returns dictionary of hideout productions + */ + protected getProductionsFromProfileAndFlagComplete(productions: Record): Record; +} diff --git a/TypeScript/16ImporterUtil/types/routers/HttpRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/HttpRouter.d.ts new file mode 100644 index 0000000..f75a47d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/HttpRouter.d.ts @@ -0,0 +1,16 @@ +/// +import { IncomingMessage } from "http"; +import { DynamicRouter, Router, StaticRouter } from "../di/Router"; +export declare class HttpRouter { + protected staticRouters: StaticRouter[]; + protected dynamicRoutes: DynamicRouter[]; + constructor(staticRouters: StaticRouter[], dynamicRoutes: DynamicRouter[]); + protected groupBy(list: T[], keyGetter: (t: T) => string): Map; + getResponse(req: IncomingMessage, info: any, sessionID: string): string; + protected handleRoute(url: string, info: any, sessionID: string, wrapper: ResponseWrapper, routers: Router[], dynamic: boolean): boolean; +} +declare class ResponseWrapper { + output: string; + constructor(output: string); +} +export {}; diff --git a/TypeScript/16ImporterUtil/types/routers/ImageRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/ImageRouter.d.ts new file mode 100644 index 0000000..675441c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/ImageRouter.d.ts @@ -0,0 +1,14 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { ImageRouteService } from "../services/mod/image/ImageRouteService"; +import { HttpFileUtil } from "../utils/HttpFileUtil"; +import { VFS } from "../utils/VFS"; +export declare class ImageRouter { + protected vfs: VFS; + protected imageRouteService: ImageRouteService; + protected httpFileUtil: HttpFileUtil; + constructor(vfs: VFS, imageRouteService: ImageRouteService, httpFileUtil: HttpFileUtil); + addRoute(key: string, valueToAdd: string): void; + sendImage(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void; + getImage(): string; +} diff --git a/TypeScript/16ImporterUtil/types/routers/ItemEventRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/ItemEventRouter.d.ts new file mode 100644 index 0000000..9c7f70e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/ItemEventRouter.d.ts @@ -0,0 +1,22 @@ +import { ItemEventRouterDefinition } from "../di/Router"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IItemEventRouterRequest } from "../models/eft/itemEvent/IItemEventRouterRequest"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { EventOutputHolder } from "./EventOutputHolder"; +export declare class ItemEventRouter { + protected logger: ILogger; + protected profileHelper: ProfileHelper; + protected itemEventRouters: ItemEventRouterDefinition[]; + protected localisationService: LocalisationService; + protected eventOutputHolder: EventOutputHolder; + constructor(logger: ILogger, profileHelper: ProfileHelper, itemEventRouters: ItemEventRouterDefinition[], localisationService: LocalisationService, eventOutputHolder: EventOutputHolder); + /** + * + * @param info Event request + * @param sessionID Session id + * @returns Item response + */ + handleEvents(info: IItemEventRouterRequest, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/routers/dynamic/BotDynamicRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/dynamic/BotDynamicRouter.d.ts new file mode 100644 index 0000000..6d0ab4b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/dynamic/BotDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { BotCallbacks } from "../../callbacks/BotCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class BotDynamicRouter extends DynamicRouter { + protected botCallbacks: BotCallbacks; + constructor(botCallbacks: BotCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/dynamic/BundleDynamicRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/dynamic/BundleDynamicRouter.d.ts new file mode 100644 index 0000000..a765410 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/dynamic/BundleDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { BundleCallbacks } from "../../callbacks/BundleCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class BundleDynamicRouter extends DynamicRouter { + protected bundleCallbacks: BundleCallbacks; + constructor(bundleCallbacks: BundleCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/dynamic/CustomizationDynamicRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/dynamic/CustomizationDynamicRouter.d.ts new file mode 100644 index 0000000..2db7cc5 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/dynamic/CustomizationDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { CustomizationCallbacks } from "../../callbacks/CustomizationCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class CustomizationDynamicRouter extends DynamicRouter { + protected customizationCallbacks: CustomizationCallbacks; + constructor(customizationCallbacks: CustomizationCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/dynamic/DataDynamicRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/dynamic/DataDynamicRouter.d.ts new file mode 100644 index 0000000..836ed8d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/dynamic/DataDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { DataCallbacks } from "../../callbacks/DataCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class DataDynamicRouter extends DynamicRouter { + protected dataCallbacks: DataCallbacks; + constructor(dataCallbacks: DataCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/dynamic/HttpDynamicRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/dynamic/HttpDynamicRouter.d.ts new file mode 100644 index 0000000..a152b4d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/dynamic/HttpDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { DynamicRouter } from "../../di/Router"; +import { ImageRouter } from "../ImageRouter"; +export declare class HttpDynamicRouter extends DynamicRouter { + protected imageRouter: ImageRouter; + constructor(imageRouter: ImageRouter); +} diff --git a/TypeScript/16ImporterUtil/types/routers/dynamic/InraidDynamicRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/dynamic/InraidDynamicRouter.d.ts new file mode 100644 index 0000000..7c0561f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/dynamic/InraidDynamicRouter.d.ts @@ -0,0 +1,7 @@ +import { InraidCallbacks } from "../../callbacks/InraidCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class InraidDynamicRouter extends DynamicRouter { + protected inraidCallbacks: InraidCallbacks; + constructor(inraidCallbacks: InraidCallbacks); + getTopLevelRoute(): string; +} diff --git a/TypeScript/16ImporterUtil/types/routers/dynamic/LocationDynamicRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/dynamic/LocationDynamicRouter.d.ts new file mode 100644 index 0000000..b8e5cdf --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/dynamic/LocationDynamicRouter.d.ts @@ -0,0 +1,7 @@ +import { LocationCallbacks } from "../../callbacks/LocationCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class LocationDynamicRouter extends DynamicRouter { + protected locationCallbacks: LocationCallbacks; + constructor(locationCallbacks: LocationCallbacks); + getTopLevelRoute(): string; +} diff --git a/TypeScript/16ImporterUtil/types/routers/dynamic/NotifierDynamicRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/dynamic/NotifierDynamicRouter.d.ts new file mode 100644 index 0000000..83c60c5 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/dynamic/NotifierDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { NotifierCallbacks } from "../../callbacks/NotifierCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class NotifierDynamicRouter extends DynamicRouter { + protected notifierCallbacks: NotifierCallbacks; + constructor(notifierCallbacks: NotifierCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/dynamic/TraderDynamicRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/dynamic/TraderDynamicRouter.d.ts new file mode 100644 index 0000000..5b7cc1b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/dynamic/TraderDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { TraderCallbacks } from "../../callbacks/TraderCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class TraderDynamicRouter extends DynamicRouter { + protected traderCallbacks: TraderCallbacks; + constructor(traderCallbacks: TraderCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/item_events/CustomizationItemEventRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/item_events/CustomizationItemEventRouter.d.ts new file mode 100644 index 0000000..32519b1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/item_events/CustomizationItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { CustomizationCallbacks } from "../../callbacks/CustomizationCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class CustomizationItemEventRouter extends ItemEventRouterDefinition { + protected customizationCallbacks: CustomizationCallbacks; + constructor(customizationCallbacks: CustomizationCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/routers/item_events/HealthItemEventRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/item_events/HealthItemEventRouter.d.ts new file mode 100644 index 0000000..2b2b91d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/item_events/HealthItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { HealthCallbacks } from "../../callbacks/HealthCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class HealthItemEventRouter extends ItemEventRouterDefinition { + protected healthCallbacks: HealthCallbacks; + constructor(healthCallbacks: HealthCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/routers/item_events/HideoutItemEventRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/item_events/HideoutItemEventRouter.d.ts new file mode 100644 index 0000000..44bd1cd --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/item_events/HideoutItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { HideoutCallbacks } from "../../callbacks/HideoutCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class HideoutItemEventRouter extends ItemEventRouterDefinition { + protected hideoutCallbacks: HideoutCallbacks; + constructor(hideoutCallbacks: HideoutCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/routers/item_events/InsuranceItemEventRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/item_events/InsuranceItemEventRouter.d.ts new file mode 100644 index 0000000..3b6ae8c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/item_events/InsuranceItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { InsuranceCallbacks } from "../../callbacks/InsuranceCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class InsuranceItemEventRouter extends ItemEventRouterDefinition { + protected insuranceCallbacks: InsuranceCallbacks; + constructor(insuranceCallbacks: InsuranceCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/routers/item_events/InventoryItemEventRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/item_events/InventoryItemEventRouter.d.ts new file mode 100644 index 0000000..d6a6ae5 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/item_events/InventoryItemEventRouter.d.ts @@ -0,0 +1,12 @@ +import { HideoutCallbacks } from "../../callbacks/HideoutCallbacks"; +import { InventoryCallbacks } from "../../callbacks/InventoryCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class InventoryItemEventRouter extends ItemEventRouterDefinition { + protected inventoryCallbacks: InventoryCallbacks; + protected hideoutCallbacks: HideoutCallbacks; + constructor(inventoryCallbacks: InventoryCallbacks, hideoutCallbacks: HideoutCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/routers/item_events/NoteItemEventRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/item_events/NoteItemEventRouter.d.ts new file mode 100644 index 0000000..71ed5d4 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/item_events/NoteItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { NoteCallbacks } from "../../callbacks/NoteCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class NoteItemEventRouter extends ItemEventRouterDefinition { + protected noteCallbacks: NoteCallbacks; + constructor(noteCallbacks: NoteCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/routers/item_events/PresetBuildItemEventRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/item_events/PresetBuildItemEventRouter.d.ts new file mode 100644 index 0000000..f2a7bf3 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/item_events/PresetBuildItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { PresetBuildCallbacks } from "../../callbacks/PresetBuildCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class PresetBuildItemEventRouter extends ItemEventRouterDefinition { + protected presetBuildCallbacks: PresetBuildCallbacks; + constructor(presetBuildCallbacks: PresetBuildCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/routers/item_events/QuestItemEventRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/item_events/QuestItemEventRouter.d.ts new file mode 100644 index 0000000..a092aa6 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/item_events/QuestItemEventRouter.d.ts @@ -0,0 +1,12 @@ +import { QuestCallbacks } from "../../callbacks/QuestCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../../models/spt/utils/ILogger"; +export declare class QuestItemEventRouter extends ItemEventRouterDefinition { + protected logger: ILogger; + protected questCallbacks: QuestCallbacks; + constructor(logger: ILogger, questCallbacks: QuestCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(eventAction: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/routers/item_events/RagfairItemEventRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/item_events/RagfairItemEventRouter.d.ts new file mode 100644 index 0000000..986d9e7 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/item_events/RagfairItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { RagfairCallbacks } from "../../callbacks/RagfairCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class RagfairItemEventRouter extends ItemEventRouterDefinition { + protected ragfairCallbacks: RagfairCallbacks; + constructor(ragfairCallbacks: RagfairCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/routers/item_events/RepairItemEventRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/item_events/RepairItemEventRouter.d.ts new file mode 100644 index 0000000..1c2768c --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/item_events/RepairItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { RepairCallbacks } from "../../callbacks/RepairCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class RepairItemEventRouter extends ItemEventRouterDefinition { + protected repairCallbacks: RepairCallbacks; + constructor(repairCallbacks: RepairCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/routers/item_events/TradeItemEventRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/item_events/TradeItemEventRouter.d.ts new file mode 100644 index 0000000..5d84559 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/item_events/TradeItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { TradeCallbacks } from "../../callbacks/TradeCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class TradeItemEventRouter extends ItemEventRouterDefinition { + protected tradeCallbacks: TradeCallbacks; + constructor(tradeCallbacks: TradeCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/routers/item_events/WishlistItemEventRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/item_events/WishlistItemEventRouter.d.ts new file mode 100644 index 0000000..9e3c2a0 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/item_events/WishlistItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { WishlistCallbacks } from "../../callbacks/WishlistCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class WishlistItemEventRouter extends ItemEventRouterDefinition { + protected wishlistCallbacks: WishlistCallbacks; + constructor(wishlistCallbacks: WishlistCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/routers/save_load/HealthSaveLoadRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/save_load/HealthSaveLoadRouter.d.ts new file mode 100644 index 0000000..26cb07a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/save_load/HealthSaveLoadRouter.d.ts @@ -0,0 +1,7 @@ +import { HandledRoute, SaveLoadRouter } from "../../di/Router"; +import { IAkiProfile } from "../../models/eft/profile/IAkiProfile"; +export declare class HealthSaveLoadRouter extends SaveLoadRouter { + constructor(); + getHandledRoutes(): HandledRoute[]; + handleLoad(profile: IAkiProfile): IAkiProfile; +} diff --git a/TypeScript/16ImporterUtil/types/routers/save_load/InraidSaveLoadRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/save_load/InraidSaveLoadRouter.d.ts new file mode 100644 index 0000000..40f388e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/save_load/InraidSaveLoadRouter.d.ts @@ -0,0 +1,7 @@ +import { HandledRoute, SaveLoadRouter } from "../../di/Router"; +import { IAkiProfile } from "../../models/eft/profile/IAkiProfile"; +export declare class InraidSaveLoadRouter extends SaveLoadRouter { + constructor(); + getHandledRoutes(): HandledRoute[]; + handleLoad(profile: IAkiProfile): IAkiProfile; +} diff --git a/TypeScript/16ImporterUtil/types/routers/save_load/InsuranceSaveLoadRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/save_load/InsuranceSaveLoadRouter.d.ts new file mode 100644 index 0000000..22d645e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/save_load/InsuranceSaveLoadRouter.d.ts @@ -0,0 +1,7 @@ +import { HandledRoute, SaveLoadRouter } from "../../di/Router"; +import { IAkiProfile } from "../../models/eft/profile/IAkiProfile"; +export declare class InsuranceSaveLoadRouter extends SaveLoadRouter { + constructor(); + getHandledRoutes(): HandledRoute[]; + handleLoad(profile: IAkiProfile): IAkiProfile; +} diff --git a/TypeScript/16ImporterUtil/types/routers/save_load/ProfileSaveLoadRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/save_load/ProfileSaveLoadRouter.d.ts new file mode 100644 index 0000000..f60af15 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/save_load/ProfileSaveLoadRouter.d.ts @@ -0,0 +1,7 @@ +import { HandledRoute, SaveLoadRouter } from "../../di/Router"; +import { IAkiProfile } from "../../models/eft/profile/IAkiProfile"; +export declare class ProfileSaveLoadRouter extends SaveLoadRouter { + constructor(); + getHandledRoutes(): HandledRoute[]; + handleLoad(profile: IAkiProfile): IAkiProfile; +} diff --git a/TypeScript/16ImporterUtil/types/routers/serializers/BundleSerializer.d.ts b/TypeScript/16ImporterUtil/types/routers/serializers/BundleSerializer.d.ts new file mode 100644 index 0000000..ca4d8b6 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/serializers/BundleSerializer.d.ts @@ -0,0 +1,14 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { Serializer } from "../../di/Serializer"; +import { BundleLoader } from "../../loaders/BundleLoader"; +import { ILogger } from "../../models/spt/utils/ILogger"; +import { HttpFileUtil } from "../../utils/HttpFileUtil"; +export declare class BundleSerializer extends Serializer { + protected logger: ILogger; + protected bundleLoader: BundleLoader; + protected httpFileUtil: HttpFileUtil; + constructor(logger: ILogger, bundleLoader: BundleLoader, httpFileUtil: HttpFileUtil); + serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void; + canHandle(route: string): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/routers/serializers/ImageSerializer.d.ts b/TypeScript/16ImporterUtil/types/routers/serializers/ImageSerializer.d.ts new file mode 100644 index 0000000..5de48ff --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/serializers/ImageSerializer.d.ts @@ -0,0 +1,10 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { Serializer } from "../../di/Serializer"; +import { ImageRouter } from "../ImageRouter"; +export declare class ImageSerializer extends Serializer { + protected imageRouter: ImageRouter; + constructor(imageRouter: ImageRouter); + serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void; + canHandle(route: string): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/routers/serializers/NotifySerializer.d.ts b/TypeScript/16ImporterUtil/types/routers/serializers/NotifySerializer.d.ts new file mode 100644 index 0000000..0d8cc89 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/serializers/NotifySerializer.d.ts @@ -0,0 +1,12 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { NotifierController } from "../../controllers/NotifierController"; +import { Serializer } from "../../di/Serializer"; +import { HttpServerHelper } from "../../helpers/HttpServerHelper"; +export declare class NotifySerializer extends Serializer { + protected notifierController: NotifierController; + protected httpServerHelper: HttpServerHelper; + constructor(notifierController: NotifierController, httpServerHelper: HttpServerHelper); + serialize(_sessionID: string, req: IncomingMessage, resp: ServerResponse, _: any): void; + canHandle(route: string): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/BotStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/BotStaticRouter.d.ts new file mode 100644 index 0000000..aeea220 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/BotStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { BotCallbacks } from "../../callbacks/BotCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class BotStaticRouter extends StaticRouter { + protected botCallbacks: BotCallbacks; + constructor(botCallbacks: BotCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/BundleStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/BundleStaticRouter.d.ts new file mode 100644 index 0000000..fb682fc --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/BundleStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { BundleCallbacks } from "../../callbacks/BundleCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class BundleStaticRouter extends StaticRouter { + protected bundleCallbacks: BundleCallbacks; + constructor(bundleCallbacks: BundleCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/CustomizationStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/CustomizationStaticRouter.d.ts new file mode 100644 index 0000000..21bc4bb --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/CustomizationStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { CustomizationCallbacks } from "../../callbacks/CustomizationCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class CustomizationStaticRouter extends StaticRouter { + protected customizationCallbacks: CustomizationCallbacks; + constructor(customizationCallbacks: CustomizationCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/DataStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/DataStaticRouter.d.ts new file mode 100644 index 0000000..84ba7fd --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/DataStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { DataCallbacks } from "../../callbacks/DataCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class DataStaticRouter extends StaticRouter { + protected dataCallbacks: DataCallbacks; + constructor(dataCallbacks: DataCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/DialogStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/DialogStaticRouter.d.ts new file mode 100644 index 0000000..546cdf1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/DialogStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { DialogueCallbacks } from "../../callbacks/DialogueCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class DialogStaticRouter extends StaticRouter { + protected dialogueCallbacks: DialogueCallbacks; + constructor(dialogueCallbacks: DialogueCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/GameStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/GameStaticRouter.d.ts new file mode 100644 index 0000000..a9a7496 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/GameStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { GameCallbacks } from "../../callbacks/GameCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class GameStaticRouter extends StaticRouter { + protected gameCallbacks: GameCallbacks; + constructor(gameCallbacks: GameCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/HealthStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/HealthStaticRouter.d.ts new file mode 100644 index 0000000..863fd5e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/HealthStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { HealthCallbacks } from "../../callbacks/HealthCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class HealthStaticRouter extends StaticRouter { + protected healthCallbacks: HealthCallbacks; + constructor(healthCallbacks: HealthCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/InraidStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/InraidStaticRouter.d.ts new file mode 100644 index 0000000..b29ad23 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/InraidStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { InraidCallbacks } from "../../callbacks/InraidCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class InraidStaticRouter extends StaticRouter { + protected inraidCallbacks: InraidCallbacks; + constructor(inraidCallbacks: InraidCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/InsuranceStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/InsuranceStaticRouter.d.ts new file mode 100644 index 0000000..5676499 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/InsuranceStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { InsuranceCallbacks } from "../../callbacks/InsuranceCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class InsuranceStaticRouter extends StaticRouter { + protected insuranceCallbacks: InsuranceCallbacks; + constructor(insuranceCallbacks: InsuranceCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/ItemEventStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/ItemEventStaticRouter.d.ts new file mode 100644 index 0000000..c30a7fc --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/ItemEventStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { ItemEventCallbacks } from "../../callbacks/ItemEventCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class ItemEventStaticRouter extends StaticRouter { + protected itemEventCallbacks: ItemEventCallbacks; + constructor(itemEventCallbacks: ItemEventCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/LauncherStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/LauncherStaticRouter.d.ts new file mode 100644 index 0000000..0040cbd --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/LauncherStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { LauncherCallbacks } from "../../callbacks/LauncherCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class LauncherStaticRouter extends StaticRouter { + protected launcherCallbacks: LauncherCallbacks; + constructor(launcherCallbacks: LauncherCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/LocationStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/LocationStaticRouter.d.ts new file mode 100644 index 0000000..b6de956 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/LocationStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { LocationCallbacks } from "../../callbacks/LocationCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class LocationStaticRouter extends StaticRouter { + protected locationCallbacks: LocationCallbacks; + constructor(locationCallbacks: LocationCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/MatchStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/MatchStaticRouter.d.ts new file mode 100644 index 0000000..9920a92 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/MatchStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { MatchCallbacks } from "../../callbacks/MatchCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class MatchStaticRouter extends StaticRouter { + protected matchCallbacks: MatchCallbacks; + constructor(matchCallbacks: MatchCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/NotifierStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/NotifierStaticRouter.d.ts new file mode 100644 index 0000000..8f1f5cc --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/NotifierStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { NotifierCallbacks } from "../../callbacks/NotifierCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class NotifierStaticRouter extends StaticRouter { + protected notifierCallbacks: NotifierCallbacks; + constructor(notifierCallbacks: NotifierCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/PresetStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/PresetStaticRouter.d.ts new file mode 100644 index 0000000..a9e7458 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/PresetStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { PresetBuildCallbacks } from "../../callbacks/PresetBuildCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class PresetStaticRouter extends StaticRouter { + protected presetCallbacks: PresetBuildCallbacks; + constructor(presetCallbacks: PresetBuildCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/ProfileStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/ProfileStaticRouter.d.ts new file mode 100644 index 0000000..83403f2 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/ProfileStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { ProfileCallbacks } from "../../callbacks/ProfileCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class ProfileStaticRouter extends StaticRouter { + protected profileCallbacks: ProfileCallbacks; + constructor(profileCallbacks: ProfileCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/QuestStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/QuestStaticRouter.d.ts new file mode 100644 index 0000000..8f7ca0a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/QuestStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { QuestCallbacks } from "../../callbacks/QuestCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class QuestStaticRouter extends StaticRouter { + protected questCallbacks: QuestCallbacks; + constructor(questCallbacks: QuestCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/RagfairStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/RagfairStaticRouter.d.ts new file mode 100644 index 0000000..6c41467 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/RagfairStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { RagfairCallbacks } from "../../callbacks/RagfairCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class RagfairStaticRouter extends StaticRouter { + protected ragfairCallbacks: RagfairCallbacks; + constructor(ragfairCallbacks: RagfairCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/TraderStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/TraderStaticRouter.d.ts new file mode 100644 index 0000000..41728a1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/TraderStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { TraderCallbacks } from "../../callbacks/TraderCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class TraderStaticRouter extends StaticRouter { + protected traderCallbacks: TraderCallbacks; + constructor(traderCallbacks: TraderCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/routers/static/WeatherStaticRouter.d.ts b/TypeScript/16ImporterUtil/types/routers/static/WeatherStaticRouter.d.ts new file mode 100644 index 0000000..72ed851 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/routers/static/WeatherStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { WeatherCallbacks } from "../../callbacks/WeatherCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class WeatherStaticRouter extends StaticRouter { + protected weatherCallbacks: WeatherCallbacks; + constructor(weatherCallbacks: WeatherCallbacks); +} diff --git a/TypeScript/16ImporterUtil/types/servers/ConfigServer.d.ts b/TypeScript/16ImporterUtil/types/servers/ConfigServer.d.ts new file mode 100644 index 0000000..a079be8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/servers/ConfigServer.d.ts @@ -0,0 +1,14 @@ +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigTypes } from "../models/enums/ConfigTypes"; +export declare class ConfigServer { + protected logger: ILogger; + protected vfs: VFS; + protected jsonUtil: JsonUtil; + protected configs: Record; + constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil); + getConfig(configType: ConfigTypes): T; + getConfigByString(configType: string): T; + initialize(): void; +} diff --git a/TypeScript/16ImporterUtil/types/servers/DatabaseServer.d.ts b/TypeScript/16ImporterUtil/types/servers/DatabaseServer.d.ts new file mode 100644 index 0000000..b3d29e9 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/servers/DatabaseServer.d.ts @@ -0,0 +1,6 @@ +import { IDatabaseTables } from "../models/spt/server/IDatabaseTables"; +export declare class DatabaseServer { + protected tableData: IDatabaseTables; + getTables(): IDatabaseTables; + setTables(tableData: IDatabaseTables): void; +} diff --git a/TypeScript/16ImporterUtil/types/servers/HttpServer.d.ts b/TypeScript/16ImporterUtil/types/servers/HttpServer.d.ts new file mode 100644 index 0000000..80c1d48 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/servers/HttpServer.d.ts @@ -0,0 +1,26 @@ +/// +import http, { IncomingMessage, ServerResponse } from "http"; +import { ApplicationContext } from "../context/ApplicationContext"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { ConfigServer } from "./ConfigServer"; +import { DatabaseServer } from "./DatabaseServer"; +import { IHttpListener } from "./http/IHttpListener"; +import { WebSocketServer } from "./WebSocketServer"; +export declare class HttpServer { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected httpServerHelper: HttpServerHelper; + protected localisationService: LocalisationService; + protected httpListeners: IHttpListener[]; + protected configServer: ConfigServer; + protected applicationContext: ApplicationContext; + protected webSocketServer: WebSocketServer; + constructor(logger: ILogger, databaseServer: DatabaseServer, httpServerHelper: HttpServerHelper, localisationService: LocalisationService, httpListeners: IHttpListener[], configServer: ConfigServer, applicationContext: ApplicationContext, webSocketServer: WebSocketServer); + protected httpConfig: IHttpConfig; + getCookies(req: http.IncomingMessage): any; + handleRequest(req: IncomingMessage, resp: ServerResponse): void; + load(): void; +} diff --git a/TypeScript/16ImporterUtil/types/servers/RagfairServer.d.ts b/TypeScript/16ImporterUtil/types/servers/RagfairServer.d.ts new file mode 100644 index 0000000..f49654a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/servers/RagfairServer.d.ts @@ -0,0 +1,43 @@ +import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator"; +import { TraderAssortHelper } from "../helpers/TraderAssortHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { RagfairCategoriesService } from "../services/RagfairCategoriesService"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { RagfairRequiredItemsService } from "../services/RagfairRequiredItemsService"; +import { ConfigServer } from "./ConfigServer"; +export declare class RagfairServer { + protected logger: ILogger; + protected ragfairOfferGenerator: RagfairOfferGenerator; + protected ragfairOfferService: RagfairOfferService; + protected ragfairCategoriesService: RagfairCategoriesService; + protected ragfairRequiredItemsService: RagfairRequiredItemsService; + protected localisationService: LocalisationService; + protected traderHelper: TraderHelper; + protected traderAssortHelper: TraderAssortHelper; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, ragfairOfferGenerator: RagfairOfferGenerator, ragfairOfferService: RagfairOfferService, ragfairCategoriesService: RagfairCategoriesService, ragfairRequiredItemsService: RagfairRequiredItemsService, localisationService: LocalisationService, traderHelper: TraderHelper, traderAssortHelper: TraderAssortHelper, configServer: ConfigServer); + load(): Promise; + update(): Promise; + /** + * Get traders who need to be periodically refreshed + * @returns string array of traders + */ + protected getUpdateableTraders(): string[]; + getAllCategories(): Record; + getBespokeCategories(offers: IRagfairOffer[]): Record; + /** + * Disable/Hide an offer from flea + * @param offerId + */ + hideOffer(offerId: string): void; + getOffer(offerID: string): IRagfairOffer; + getOffers(): IRagfairOffer[]; + removeOfferStack(offerID: string, amount: number): void; + doesOfferExist(offerId: string): boolean; + addPlayerOffers(): void; +} diff --git a/TypeScript/16ImporterUtil/types/servers/SaveServer.d.ts b/TypeScript/16ImporterUtil/types/servers/SaveServer.d.ts new file mode 100644 index 0000000..402befc --- /dev/null +++ b/TypeScript/16ImporterUtil/types/servers/SaveServer.d.ts @@ -0,0 +1,84 @@ +import { SaveLoadRouter } from "../di/Router"; +import { IAkiProfile, Info } from "../models/eft/profile/IAkiProfile"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +export declare class SaveServer { + protected vfs: VFS; + protected saveLoadRouters: SaveLoadRouter[]; + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected localisationService: LocalisationService; + protected logger: ILogger; + protected profileFilepath: string; + protected profiles: {}; + protected onBeforeSaveCallbacks: {}; + protected saveMd5: {}; + constructor(vfs: VFS, saveLoadRouters: SaveLoadRouter[], jsonUtil: JsonUtil, hashUtil: HashUtil, localisationService: LocalisationService, logger: ILogger); + /** + * Add callback to occur prior to saving profile changes + * @param id Id for save callback + * @param callback Callback to execute prior to running SaveServer.saveProfile() + */ + addBeforeSaveCallback(id: string, callback: (profile: Partial) => Partial): void; + /** + * Remove a callback from being executed prior to saving profile in SaveServer.saveProfile() + * @param id Id of callback to remove + */ + removeBeforeSaveCallback(id: string): void; + /** + * Load all profiles in /user/profiles folder into memory (this.profiles) + */ + load(): void; + /** + * Save changes for each profile from memory into user/profiles json + */ + save(): void; + /** + * Get a player profile from memory + * @param sessionId Session id + * @returns IAkiProfile + */ + getProfile(sessionId: string): IAkiProfile; + /** + * Get all profiles from memory + * @returns Dictionary of IAkiProfile + */ + getProfiles(): Record; + /** + * Delete a profile by id + * @param sessionID Id of profile to remove + * @returns true when deleted, false when profile not found + */ + deleteProfileById(sessionID: string): boolean; + /** + * Create a new profile in memory with empty pmc/scav objects + * @param profileInfo Basic profile data + */ + createProfile(profileInfo: Info): void; + /** + * Add full profile in memory by key (info.id) + * @param profileDetails Profile to save + */ + addProfile(profileDetails: IAkiProfile): void; + /** + * Look up profile json in user/profiles by id and store in memory + * Execute saveLoadRouters callbacks after being loaded into memory + * @param sessionID Id of profile to store in memory + */ + loadProfile(sessionID: string): void; + /** + * Save changes from in-memory profile to user/profiles json + * Execute onBeforeSaveCallbacks callbacks prior to being saved to json + * @param sessionID profile id (user/profiles/id.json) + */ + saveProfile(sessionID: string): void; + /** + * Remove a physical profile json from user/profiles + * @param sessionID Profile id to remove + * @returns true if file no longer exists + */ + removeProfile(sessionID: string): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/servers/WebSocketServer.d.ts b/TypeScript/16ImporterUtil/types/servers/WebSocketServer.d.ts new file mode 100644 index 0000000..5d40e6e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/servers/WebSocketServer.d.ts @@ -0,0 +1,27 @@ +/// +import http, { IncomingMessage } from "http"; +import WebSocket from "ws"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { INotification } from "../models/eft/notifier/INotifier"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ConfigServer } from "./ConfigServer"; +export declare class WebSocketServer { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected configServer: ConfigServer; + protected localisationService: LocalisationService; + protected httpServerHelper: HttpServerHelper; + constructor(logger: ILogger, randomUtil: RandomUtil, configServer: ConfigServer, localisationService: LocalisationService, httpServerHelper: HttpServerHelper); + protected httpConfig: IHttpConfig; + protected defaultNotification: INotification; + protected webSockets: Record; + protected websocketPingHandler: any; + setupWebSocket(httpServer: http.Server): void; + sendMessage(sessionID: string, output: INotification): void; + protected getRandomisedMessage(): string; + isConnectionWebSocket(sessionID: string): boolean; + protected wsOnConnection(ws: WebSocket.WebSocket, req: IncomingMessage): void; +} diff --git a/TypeScript/16ImporterUtil/types/servers/http/AkiHttpListener.d.ts b/TypeScript/16ImporterUtil/types/servers/http/AkiHttpListener.d.ts new file mode 100644 index 0000000..d02861e --- /dev/null +++ b/TypeScript/16ImporterUtil/types/servers/http/AkiHttpListener.d.ts @@ -0,0 +1,30 @@ +/// +/// +import { IncomingMessage, ServerResponse } from "http"; +import { Serializer } from "../../di/Serializer"; +import { ILogger } from "../../models/spt/utils/ILogger"; +import { HttpRouter } from "../../routers/HttpRouter"; +import { LocalisationService } from "../../services/LocalisationService"; +import { HttpResponseUtil } from "../../utils/HttpResponseUtil"; +import { JsonUtil } from "../../utils/JsonUtil"; +import { HttpBufferHandler } from "./HttpBufferHandler"; +import { IHttpListener } from "./IHttpListener"; +export declare class AkiHttpListener implements IHttpListener { + protected httpRouter: HttpRouter; + protected serializers: Serializer[]; + protected logger: ILogger; + protected requestsLogger: ILogger; + protected jsonUtil: JsonUtil; + protected httpResponse: HttpResponseUtil; + protected localisationService: LocalisationService; + protected httpBufferHandler: HttpBufferHandler; + constructor(httpRouter: HttpRouter, // TODO: delay required + serializers: Serializer[], logger: ILogger, requestsLogger: ILogger, jsonUtil: JsonUtil, httpResponse: HttpResponseUtil, localisationService: LocalisationService, httpBufferHandler: HttpBufferHandler); + canHandle(_: string, req: IncomingMessage): boolean; + handle(sessionId: string, req: IncomingMessage, resp: ServerResponse): void; + sendResponse(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: Buffer, output: string): void; + getResponse(sessionID: string, req: IncomingMessage, body: Buffer): string; + protected getBodyInfo(body: Buffer): any; + sendJson(resp: ServerResponse, output: string, sessionID: string): void; + sendZlibJson(resp: ServerResponse, output: string, sessionID: string): void; +} diff --git a/TypeScript/16ImporterUtil/types/servers/http/HttpBufferHandler.d.ts b/TypeScript/16ImporterUtil/types/servers/http/HttpBufferHandler.d.ts new file mode 100644 index 0000000..fec4936 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/servers/http/HttpBufferHandler.d.ts @@ -0,0 +1,6 @@ +export declare class HttpBufferHandler { + protected buffers: {}; + resetBuffer(sessionID: string): void; + putInBuffer(sessionID: any, data: any, bufLength: number): boolean; + getFromBuffer(sessionID: string): any; +} diff --git a/TypeScript/16ImporterUtil/types/servers/http/HttpMethods.d.ts b/TypeScript/16ImporterUtil/types/servers/http/HttpMethods.d.ts new file mode 100644 index 0000000..96031e2 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/servers/http/HttpMethods.d.ts @@ -0,0 +1,8 @@ +export declare enum HttpMethods { + OPTIONS = "OPTIONS", + GET = "GET", + POST = "POST", + PUT = "PUT", + PATCH = "PATCH", + DELETE = "DELETE" +} diff --git a/TypeScript/16ImporterUtil/types/servers/http/IHttpListener.d.ts b/TypeScript/16ImporterUtil/types/servers/http/IHttpListener.d.ts new file mode 100644 index 0000000..758bb5a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/servers/http/IHttpListener.d.ts @@ -0,0 +1,6 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +export interface IHttpListener { + canHandle(sessionId: string, req: IncomingMessage): boolean; + handle(sessionId: string, req: IncomingMessage, resp: ServerResponse): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/BotEquipmentFilterService.d.ts b/TypeScript/16ImporterUtil/types/services/BotEquipmentFilterService.d.ts new file mode 100644 index 0000000..089cfb5 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/BotEquipmentFilterService.d.ts @@ -0,0 +1,97 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { MinMax } from "../models/common/MinMax"; +import { EquipmentChances, Generation, IBotType, ModsChances } from "../models/eft/common/tables/IBotType"; +import { BotGenerationDetails } from "../models/spt/bots/BotGenerationDetails"; +import { AdjustmentDetails, EquipmentFilterDetails, EquipmentFilters, IBotConfig, WeightingAdjustmentDetails } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class BotEquipmentFilterService { + protected logger: ILogger; + protected botHelper: BotHelper; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + protected botEquipmentConfig: Record; + constructor(logger: ILogger, botHelper: BotHelper, configServer: ConfigServer); + /** + * Filter a bots data to exclude equipment and cartridges defines in the botConfig + * @param baseBotNode bots json data to filter + * @param botLevel Level of the bot + * @param botGenerationDetails details on how to generate a bot + */ + filterBotEquipment(baseBotNode: IBotType, botLevel: number, botGenerationDetails: BotGenerationDetails): void; + /** + * Iterate over the changes passed in and alter data in baseValues + * @param equipmentChanges Changes to apply + * @param baseValues Values to update + */ + protected adjustChances(equipmentChanges: Record, baseValues: EquipmentChances | ModsChances): void; + /** + * Iterate over the Generation changes and alter data in baseValues.Generation + * @param generationChanges Changes to apply + * @param baseBotGeneration dictionary to update + */ + protected adjustGenerationChances(generationChanges: Record, baseBotGeneration: Generation): void; + /** + * Get equipment settings for bot + * @param botEquipmentRole equipment role to return + * @returns EquipmentFilters object + */ + getBotEquipmentSettings(botEquipmentRole: string): EquipmentFilters; + /** + * Get weapon sight whitelist for a specific bot type + * @param botEquipmentRole equipment role of bot to look up + * @returns Dictionary of weapon type and their whitelisted scope types + */ + getBotWeaponSightWhitelist(botEquipmentRole: string): Record; + /** + * Get an object that contains equipment and cartridge blacklists for a specified bot type + * @param botRole Role of the bot we want the blacklist for + * @param playerLevel Level of the player + * @returns EquipmentBlacklistDetails object + */ + getBotEquipmentBlacklist(botRole: string, playerLevel: number): EquipmentFilterDetails; + /** + * Get the whitelist for a specific bot type that's within the players level + * @param botRole Bot type + * @param playerLevel Players level + * @returns EquipmentFilterDetails object + */ + protected getBotEquipmentWhitelist(botRole: string, playerLevel: number): EquipmentFilterDetails; + /** + * Retrieve clothing weighting adjustments from bot.json config + * @param botRole Bot type to get adjustments for + * @param playerLevel level of player + * @returns Weighting adjustments for bots clothing + */ + protected getBotClothingAdjustments(botRole: string, playerLevel: number): WeightingAdjustmentDetails; + /** + * Retrieve item weighting adjustments from bot.json config + * @param botRole Bot type to get adjustments for + * @param playerLevel level of player + * @returns Weighting adjustments for bot items + */ + protected getBotWeightingAdjustments(botRole: string, playerLevel: number): WeightingAdjustmentDetails; + /** + * Filter bot equipment based on blacklist and whitelist from config/bot.json + * Prioritizes whitelist first, if one is found blacklist is ignored + * @param baseBotNode bot .json file to update + * @param blacklist equipment blacklist + * @returns Filtered bot file + */ + protected filterEquipment(baseBotNode: IBotType, blacklist: EquipmentFilterDetails, whitelist: EquipmentFilterDetails): void; + /** + * Filter bot cartridges based on blacklist and whitelist from config/bot.json + * Prioritizes whitelist first, if one is found blacklist is ignored + * @param baseBotNode bot .json file to update + * @param blacklist equipment on this list should be excluded from the bot + * @param whitelist equipment on this list should be used exclusively + * @returns Filtered bot file + */ + protected filterCartridges(baseBotNode: IBotType, blacklist: EquipmentFilterDetails, whitelist: EquipmentFilterDetails): void; + /** + * Add/Edit weighting changes to bot items using values from config/bot.json/equipment + * @param weightingAdjustments Weighting change to apply to bot + * @param botItemPool Bot item dictionary to adjust + */ + protected adjustWeighting(weightingAdjustments: AdjustmentDetails, botItemPool: Record, showEditWarnings?: boolean): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/BotEquipmentModPoolService.d.ts b/TypeScript/16ImporterUtil/types/services/BotEquipmentModPoolService.d.ts new file mode 100644 index 0000000..adf59ff --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/BotEquipmentModPoolService.d.ts @@ -0,0 +1,65 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Mods } from "../models/eft/common/tables/IBotType"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { VFS } from "../utils/VFS"; +/** Store a mapping between weapons, their slots and the items that fit those slots */ +export declare class BotEquipmentModPoolService { + protected logger: ILogger; + protected vfs: VFS; + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + protected weaponModPool: Mods; + protected gearModPool: Mods; + protected weaponPoolGenerated: boolean; + protected armorPoolGenerated: boolean; + constructor(logger: ILogger, vfs: VFS, itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Store dictionary of mods for each item passed in + * @param items items to find related mods and store in modPool + */ + protected generatePool(items: ITemplateItem[], poolType: string): void; + /** + * Empty the mod pool + */ + resetPool(): void; + /** + * Get array of compatible mods for an items mod slot (generate pool if it doesnt exist already) + * @param itemTpl item to look up + * @param slotName slot to get compatible mods for + * @returns tpls that fit the slot + */ + getCompatibleModsForWeaponSlot(itemTpl: string, slotName: string): string[]; + /** + * Get array of compatible mods for an items mod slot (generate pool if it doesnt exist already) + * @param itemTpl item to look up + * @param slotName slot to get compatible mods for + * @returns tpls that fit the slot + */ + getCompatibleModsFoGearSlot(itemTpl: string, slotName: string): string[]; + /** + * Get mods for a piece of gear by its tpl + * @param itemTpl items tpl to look up mods for + * @returns Dictionary of mods (keys are mod slot names) with array of compatible mod tpls as value + */ + getModsForGearSlot(itemTpl: string): Record; + /** + * Get mods for a weapon by its tpl + * @param itemTpl Weapons tpl to look up mods for + * @returns Dictionary of mods (keys are mod slot names) with array of compatible mod tpls as value + */ + getModsForWeaponSlot(itemTpl: string): Record; + /** + * Create weapon mod pool and set generated flag to true + */ + protected generateWeaponPool(): void; + /** + * Create gear mod pool and set generated flag to true + */ + protected generateGearPool(): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/BotGenerationCacheService.d.ts b/TypeScript/16ImporterUtil/types/services/BotGenerationCacheService.d.ts new file mode 100644 index 0000000..a491b03 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/BotGenerationCacheService.d.ts @@ -0,0 +1,36 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { LocalisationService } from "./LocalisationService"; +export declare class BotGenerationCacheService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected localisationService: LocalisationService; + protected botHelper: BotHelper; + protected storedBots: Map; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, localisationService: LocalisationService, botHelper: BotHelper); + /** + * Store array of bots in cache, shuffle results before storage + * @param botsToStore Bots we want to store in the cache + */ + storeBots(key: string, botsToStore: IBotBase[]): void; + /** + * Find and return a bot based on its role + * Remove bot from internal array so it can't be retreived again + * @param key role to retreive (assault/bossTagilla etc) + * @returns IBotBase object + */ + getBot(key: string): IBotBase; + /** + * Remove all cached bot profiles + */ + clearStoredBots(): void; + /** + * Does cache have a bot with requested key + * @returns false if empty + */ + cacheHasBotOfRole(key: string): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/services/BotLootCacheService.d.ts b/TypeScript/16ImporterUtil/types/services/BotLootCacheService.d.ts new file mode 100644 index 0000000..dab7c6d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/BotLootCacheService.d.ts @@ -0,0 +1,95 @@ +import { PMCLootGenerator } from "../generators/PMCLootGenerator"; +import { Items } from "../models/eft/common/tables/IBotType"; +import { ITemplateItem, Props } from "../models/eft/common/tables/ITemplateItem"; +import { BotLootCache, LootCacheType } from "../models/spt/bots/BotLootCache"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { JsonUtil } from "../utils/JsonUtil"; +import { LocalisationService } from "./LocalisationService"; +import { RagfairPriceService } from "./RagfairPriceService"; +export declare class BotLootCacheService { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected pmcLootGenerator: PMCLootGenerator; + protected localisationService: LocalisationService; + protected ragfairPriceService: RagfairPriceService; + protected lootCache: Record; + constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, pmcLootGenerator: PMCLootGenerator, localisationService: LocalisationService, ragfairPriceService: RagfairPriceService); + /** + * Remove all cached bot loot data + */ + clearCache(): void; + /** + * Get the fully created loot array, ordered by price low to high + * @param botRole bot to get loot for + * @param isPmc is the bot a pmc + * @param lootType what type of loot is needed (backpack/pocket/stim/vest etc) + * @param lootPool the full pool of loot (needed when cache is empty) + * @returns ITemplateItem array + */ + getLootFromCache(botRole: string, isPmc: boolean, lootType: LootCacheType, lootPool: Items): ITemplateItem[]; + /** + * Generate loot for a bot and store inside a private class property + * @param botRole bots role (assault / pmcBot etc) + * @param lootPool the full pool of loot we use to create the various sub-categories with + * @param isPmc Is the bot a PMC (alteres what loot is cached) + */ + protected addLootToCache(botRole: string, isPmc: boolean, lootPool: Items): void; + /** + * Sort a pool of item objects by its flea price + * @param poolToSort pool of items to sort + */ + protected sortPoolByRagfairPrice(poolToSort: ITemplateItem[]): void; + /** + * Add unique items into combined pool + * @param combinedItemPool Pool of items to add to + * @param itemsToAdd items to add to combined pool if unique + */ + protected addUniqueItemsToPool(combinedItemPool: ITemplateItem[], itemsToAdd: ITemplateItem[]): void; + /** + * Ammo/grenades have this property + * @param props + * @returns + */ + protected isBulletOrGrenade(props: Props): boolean; + /** + * Internal and external magazine have this property + * @param props + * @returns + */ + protected isMagazine(props: Props): boolean; + /** + * Medical use items (e.g. morphine/lip balm/grizzly) + * @param props + * @returns + */ + protected isMedicalItem(props: Props): boolean; + /** + * Grenades have this property (e.g. smoke/frag/flash grenades) + * @param props + * @returns + */ + protected isGrenade(props: Props): boolean; + /** + * Check if a bot type exists inside the loot cache + * @param botRole role to check for + * @returns true if they exist + */ + protected botRoleExistsInCache(botRole: string): boolean; + /** + * If lootcache is null, init with empty property arrays + * @param botRole Bot role to hydrate + */ + protected initCacheForBotRole(botRole: string): void; + /** + * Compares two item prices by their flea (or handbook if that doesnt exist) price + * -1 when a < b + * 0 when a === b + * 1 when a > b + * @param itemAPrice + * @param itemBPrice + * @returns + */ + protected compareByValue(itemAPrice: number, itemBPrice: number): number; +} diff --git a/TypeScript/16ImporterUtil/types/services/BotWeaponModLimitService.d.ts b/TypeScript/16ImporterUtil/types/services/BotWeaponModLimitService.d.ts new file mode 100644 index 0000000..f8ebc2f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/BotWeaponModLimitService.d.ts @@ -0,0 +1,54 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class BotModLimits { + scope: ItemCount; + scopeMax: number; + scopeBaseTypes: string[]; + flashlightLaser: ItemCount; + flashlightLaserMax: number; + flashlgihtLaserBaseTypes: string[]; +} +export declare class ItemCount { + count: number; +} +export declare class BotWeaponModLimitService { + protected logger: ILogger; + protected configServer: ConfigServer; + protected itemHelper: ItemHelper; + protected botConfig: IBotConfig; + constructor(logger: ILogger, configServer: ConfigServer, itemHelper: ItemHelper); + /** + * Initalise mod limits to be used when generating a weapon + * @param botRole "assault", "bossTagilla" or "pmc" + * @returns BotModLimits object + */ + getWeaponModLimits(botRole: string): BotModLimits; + /** + * Check if weapon mod item is on limited list + has surpassed the limit set for it + * Exception: Always allow ncstar backup mount + * Exception: Always allow scopes with a scope for a parent + * Exception: Always disallow mounts that hold only scopes once scope limit reached + * Exception: Always disallow mounts that hold only flashlights once flashlight limit reached + * @param botRole role the bot has e.g. assault + * @param modTemplate mods template data + * @param modLimits limits set for weapon being generated for this bot + * @param modsParent The parent of the mod to be checked + * @returns true if over item limit + */ + weaponModHasReachedLimit(botRole: string, modTemplate: ITemplateItem, modLimits: BotModLimits, modsParent: ITemplateItem, weapon: Item[]): boolean; + /** + * Check if the specific item type on the weapon has reached the set limit + * @param modTpl log mod tpl if over type limit + * @param currentCount current number of this item on gun + * @param maxLimit mod limit allowed + * @param botRole role of bot we're checking weapon of + * @returns true if limit reached + */ + protected weaponModLimitReached(modTpl: string, currentCount: { + count: number; + }, maxLimit: number, botRole: string): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/services/CustomLocationWaveService.d.ts b/TypeScript/16ImporterUtil/types/services/CustomLocationWaveService.d.ts new file mode 100644 index 0000000..7d14f07 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/CustomLocationWaveService.d.ts @@ -0,0 +1,42 @@ +import { BossLocationSpawn, Wave } from "../models/eft/common/ILocationBase"; +import { ILocationConfig } from "../models/spt/config/ILocationConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class CustomLocationWaveService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected locationConfig: ILocationConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Add a boss wave to a map + * @param locationId e.g. factory4_day, bigmap + * @param waveToAdd Boss wave to add to map + */ + addBossWaveToMap(locationId: string, waveToAdd: BossLocationSpawn): void; + /** + * Add a normal bot wave to a map + * @param locationId e.g. factory4_day, bigmap + * @param waveToAdd Wave to add to map + */ + addNormalWaveToMap(locationId: string, waveToAdd: Wave): void; + /** + * Clear all custom boss waves from a map + * @param locationId e.g. factory4_day, bigmap + */ + clearBossWavesForMap(locationId: string): void; + /** + * Clear all custom normal waves from a map + * @param locationId e.g. factory4_day, bigmap + */ + clearNormalWavesForMap(locationId: string): void; + /** + * Add custom boss and normal waves to maps found in config/location.json to db + */ + applyWaveChangesToAllMaps(): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/FenceService.d.ts b/TypeScript/16ImporterUtil/types/services/FenceService.d.ts new file mode 100644 index 0000000..d143380 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/FenceService.d.ts @@ -0,0 +1,184 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { FenceLevel, Preset } from "../models/eft/common/IGlobals"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { ItemFilterService } from "./ItemFilterService"; +import { LocalisationService } from "./LocalisationService"; +/** + * Handle actions surrounding Fence + * e.g. generating or refreshing assorts / get next refresh time + */ +export declare class FenceService { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected timeUtil: TimeUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected itemHelper: ItemHelper; + protected presetHelper: PresetHelper; + protected itemFilterService: ItemFilterService; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + /** Main assorts you see at all rep levels */ + protected fenceAssort: ITraderAssort; + /** Assorts shown on a separte tab when you max out fence rep */ + protected fenceDiscountAssort: ITraderAssort; + protected traderConfig: ITraderConfig; + protected nextMiniRefreshTimestamp: number; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, timeUtil: TimeUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, presetHelper: PresetHelper, itemFilterService: ItemFilterService, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Replace main fence assort with new assort + * @param assort New assorts to replace old with + */ + protected setFenceAssort(assort: ITraderAssort): void; + /** + * Replace high rep level fence assort with new assort + * @param assort New assorts to replace old with + */ + protected setFenceDiscountAssort(assort: ITraderAssort): void; + /** + * Get assorts player can purchase + * Adjust prices based on fence level of player + * @param pmcProfile Player profile + * @returns ITraderAssort + */ + getFenceAssorts(pmcProfile: IPmcData): ITraderAssort; + /** + * Adjust all items contained inside an assort by a multiplier + * @param assort Assort that contains items with prices to adjust + * @param itemMultipler multipler to use on items + * @param presetMultiplier preset multipler to use on presets + */ + protected adjustAssortItemPrices(assort: ITraderAssort, itemMultipler: number, presetMultiplier: number): void; + /** + * Merge two trader assort files together + * @param firstAssort assort 1# + * @param secondAssort assort #2 + * @returns merged assort + */ + protected mergeAssorts(firstAssort: ITraderAssort, secondAssort: ITraderAssort): ITraderAssort; + /** + * Adjust assorts price by a modifier + * @param item assort item details + * @param assort assort to be modified + * @param modifier value to multiply item price by + * @param presetModifier value to multiply preset price by + */ + protected adjustItemPriceByModifier(item: Item, assort: ITraderAssort, modifier: number, presetModifier: number): void; + /** + * Get fence assorts with no price adjustments based on fence rep + * @returns ITraderAssort + */ + getRawFenceAssorts(): ITraderAssort; + /** + * Does fence need to perform a partial refresh because its passed the refresh timer defined in trader.json + * @returns true if it needs a partial refresh + */ + needsPartialRefresh(): boolean; + /** + * Replace a percentage of fence assorts with freshly generated items + */ + performPartialRefresh(): void; + /** + * Increment fence next refresh timestamp by current timestamp + partialRefreshTimeSeconds from config + */ + protected incrementPartialRefreshTime(): void; + /** + * Compare the current fence offer count to what the config wants it to be, + * If value is lower add extra count to value to generate more items to fill gap + * @param existingItemCountToReplace count of items to generate + * @returns number of items to generate + */ + protected getCountOfItemsToGenerate(existingItemCountToReplace: number): number; + /** + * Choose an item (not mod) at random and remove from assorts + */ + protected removeRandomItemFromAssorts(assort: ITraderAssort): void; + /** + * Get an integer rounded count of items to replace based on percentrage from traderConfig value + * @param totalItemCount total item count + * @returns rounded int of items to replace + */ + protected getCountOfItemsToReplace(totalItemCount: number): number; + /** + * Get the count of items fence offers + * @returns number + */ + getOfferCount(): number; + /** + * Create trader assorts for fence and store in fenceService cache + */ + generateFenceAssorts(): void; + /** + * Create skeleton to hold assort items + * @returns ITraderAssort object + */ + protected createBaseTraderAssortItem(): ITraderAssort; + /** + * Hydrate assorts parameter object with generated assorts + * @param assortCount Number of assorts to generate + * @param assorts object to add created assorts to + */ + protected createAssorts(assortCount: number, assorts: ITraderAssort, loyaltyLevel: number): void; + protected addItemAssorts(assortCount: number, fenceAssortIds: string[], assorts: ITraderAssort, fenceAssort: ITraderAssort, itemTypeCounts: Record, loyaltyLevel: number): void; + /** + * Add preset weapons to fence presets + * @param assortCount how many assorts to add to assorts + * @param defaultWeaponPresets a dictionary of default weapon presets + * @param assorts object to add presets to + * @param loyaltyLevel loyalty level to requre item at + */ + protected addPresets(desiredPresetCount: number, defaultWeaponPresets: Record, assorts: ITraderAssort, loyaltyLevel: number): void; + /** + * Randomise items' upd properties e.g. med packs/weapons/armor + * @param itemDetails Item being randomised + * @param itemToAdjust Item being edited + */ + protected randomiseItemUpdProperties(itemDetails: ITemplateItem, itemToAdjust: Item): void; + /** + * Construct item limit record to hold max and current item count + * @param limits limits as defined in config + * @returns record, key: item tplId, value: current/max item count allowed + */ + protected initItemLimitCounter(limits: Record): Record; + /** + * Get the next update timestamp for fence + * @returns future timestamp + */ + getNextFenceUpdateTimestamp(): number; + /** + * Get fence refresh time in seconds + */ + protected getFenceRefreshTime(): number; + /** + * Get fence level the passed in profile has + * @param pmcData Player profile + * @returns FenceLevel object + */ + getFenceInfo(pmcData: IPmcData): FenceLevel; + /** + * Remove an assort from fence by id + * @param assortIdToRemove assort id to remove from fence assorts + */ + removeFenceOffer(assortIdToRemove: string): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/HashCacheService.d.ts b/TypeScript/16ImporterUtil/types/services/HashCacheService.d.ts new file mode 100644 index 0000000..5320f28 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/HashCacheService.d.ts @@ -0,0 +1,19 @@ +import { ILogger } from "../models/spt/utils/ILogger"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +export declare class HashCacheService { + protected vfs: VFS; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected logger: ILogger; + protected jsonHashes: any; + protected modHashes: any; + protected readonly modCachePath = "./user/cache/modCache.json"; + constructor(vfs: VFS, hashUtil: HashUtil, jsonUtil: JsonUtil, logger: ILogger); + getStoredModHash(modName: string): string; + modContentMatchesStoredHash(modName: string, modContent: string): boolean; + hashMatchesStoredHash(modName: string, modHash: string): boolean; + storeModContent(modName: string, modContent: string): void; + storeModHash(modName: string, modHash: string): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/InsuranceService.d.ts b/TypeScript/16ImporterUtil/types/services/InsuranceService.d.ts new file mode 100644 index 0000000..886a298 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/InsuranceService.d.ts @@ -0,0 +1,78 @@ +import { ITraderBase } from "../models/eft/common/tables/ITrader"; +import { DialogueHelper } from "../helpers/DialogueHelper"; +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { SecureContainerHelper } from "../helpers/SecureContainerHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { InsuredItem } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; +import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { LocalisationService } from "./LocalisationService"; +export declare class InsuranceService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected secureContainerHelper: SecureContainerHelper; + protected randomUtil: RandomUtil; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected traderHelper: TraderHelper; + protected dialogueHelper: DialogueHelper; + protected handbookHelper: HandbookHelper; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected insured: Record>; + protected insuranceConfig: IInsuranceConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, secureContainerHelper: SecureContainerHelper, randomUtil: RandomUtil, timeUtil: TimeUtil, saveServer: SaveServer, traderHelper: TraderHelper, dialogueHelper: DialogueHelper, handbookHelper: HandbookHelper, localisationService: LocalisationService, configServer: ConfigServer); + insuranceExists(sessionId: string): boolean; + insuranceTraderArrayExists(sessionId: string, traderId: string): boolean; + getInsurance(sessionId: string): Record; + getInsuranceItems(sessionId: string, traderId: string): Item[]; + resetInsurance(sessionId: string): void; + resetInsuranceTraderArray(sessionId: string, traderId: string): void; + addInsuranceItemToArray(sessionId: string, traderId: string, itemToAdd: any): void; + /** + * Get the rouble price for an item by templateId + * @param itemTpl item tpl to get handbook price for + * @returns handbook price in roubles, Return 0 if not found + */ + getItemPrice(itemTpl: string): number; + /** + * Sends stored insured items as message to player + * @param pmcData profile to modify + * @param sessionID SessionId of current player + * @param mapId Id of the map player died/exited that caused the insurance to be issued on + */ + sendInsuredItems(pmcData: IPmcData, sessionID: string, mapId: string): void; + /** + * Get a timestamp of what insurance items should be sent to player based on the type of trader used to insure + * @param pmcData Player profile + * @param trader Trader used to insure items + * @returns Timestamp to return items to player in seconds + */ + protected getInsuranceReturnTimestamp(pmcData: IPmcData, trader: ITraderBase): number; + /** + * Store lost gear post-raid inside profile + * @param pmcData player profile to store gear in + * @param offraidData post-raid request object + * @param preRaidGear gear player wore prior to raid + * @param sessionID Session id + */ + storeLostGear(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; + storeInsuredItemsForReturn(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; + /** + * Add gear item to InsuredItems array in player profile + * @param pmcData profile to store item in + * @param insuredItem Item to store in profile + * @param actualItem item to store + * @param sessionID Session id + */ + protected addGearToSend(pmcData: IPmcData, insuredItem: InsuredItem, actualItem: Item, sessionID: string): void; + getPremium(pmcData: IPmcData, inventoryItem: Item, traderId: string): number; +} diff --git a/TypeScript/16ImporterUtil/types/services/ItemBaseClassService.d.ts b/TypeScript/16ImporterUtil/types/services/ItemBaseClassService.d.ts new file mode 100644 index 0000000..d7bc4bc --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/ItemBaseClassService.d.ts @@ -0,0 +1,39 @@ +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "./LocalisationService"; +/** + * Cache the baseids for each item in the tiems db inside a dictionary + */ +export declare class ItemBaseClassService { + protected logger: ILogger; + protected localisationService: LocalisationService; + protected databaseServer: DatabaseServer; + protected itemBaseClassesCache: Record; + protected cacheGenerated: boolean; + constructor(logger: ILogger, localisationService: LocalisationService, databaseServer: DatabaseServer); + /** + * Create cache and store inside ItemBaseClassService + */ + hydrateItemBaseClassCache(): void; + /** + * Helper method, recursivly iterate through items parent items, finding and adding ids to dictionary + * @param itemIdToUpdate item tpl to store base ids against in dictionary + * @param item item being checked + * @param allDbItems all items in db + */ + protected addBaseItems(itemIdToUpdate: string, item: ITemplateItem, allDbItems: Record): void; + /** + * Does item tpl inherit from the requested base class + * @param itemTpl item to check base classes of + * @param baseClass base class to check for + * @returns true if item inherits from base class passed in + */ + itemHasBaseClass(itemTpl: string, baseClasses: string[]): boolean; + /** + * Get base classes item inherits from + * @param itemTpl item to get base classes for + * @returns array of base classes + */ + getItemBaseClasses(itemTpl: string): string[]; +} diff --git a/TypeScript/16ImporterUtil/types/services/ItemFilterService.d.ts b/TypeScript/16ImporterUtil/types/services/ItemFilterService.d.ts new file mode 100644 index 0000000..b830d74 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/ItemFilterService.d.ts @@ -0,0 +1,24 @@ +import { IItemConfig } from "../models/spt/config/IItemConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +/** Centralise the handling of blacklisting items, uses blacklist found in config/item.json, stores items that should not be used by players / broken items */ +export declare class ItemFilterService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected blacklist: string[]; + protected itemConfig: IItemConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Check if the provided template id is blacklisted in config/item.json + * @param tpl template id + * @returns true if blacklisted + */ + isItemBlacklisted(tpl: string): boolean; + /** + * Return every template id blacklisted in config/item.json + * @returns string array of blacklisted tempalte ids + */ + getBlacklistedItems(): string[]; +} diff --git a/TypeScript/16ImporterUtil/types/services/LocaleService.d.ts b/TypeScript/16ImporterUtil/types/services/LocaleService.d.ts new file mode 100644 index 0000000..09c658b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/LocaleService.d.ts @@ -0,0 +1,41 @@ +import { ILocaleConfig } from "../models/spt/config/ILocaleConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +/** + * Handles getting locales from config or users machine + */ +export declare class LocaleService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected localeConfig: ILocaleConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Get the eft globals db file based on the configured locale in config/locale.json, if not found, fall back to 'en' + * @returns dictionary + */ + getLocaleDb(): Record; + /** + * Gets the game locale key from the locale.json file, + * if value is 'system' get system locale + * @returns locale e.g en/ge/cz/cn + */ + getDesiredGameLocale(): string; + /** + * Gets the game locale key from the locale.json file, + * if value is 'system' get system locale + * @returns locale e.g en/ge/cz/cn + */ + getDesiredServerLocale(): string; + /** + * Get array of languages supported for localisation + * @returns array of locales e.g. en/fr/cn + */ + getServerSupportedLocales(): string[]; + /** + * Get the locale of the computer running the server + * @returns langage part of locale e.g. 'en' part of 'en-US' + */ + protected getPlatformLocale(): string; +} diff --git a/TypeScript/16ImporterUtil/types/services/LocalisationService.d.ts b/TypeScript/16ImporterUtil/types/services/LocalisationService.d.ts new file mode 100644 index 0000000..519325d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/LocalisationService.d.ts @@ -0,0 +1,21 @@ +import { I18n } from "i18n"; +import { ILocaleConfig } from "../models/spt/config/ILocaleConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocaleService } from "./LocaleService"; +/** + * Handles translating server text into different langauges + */ +export declare class LocalisationService { + protected logger: ILogger; + protected localeService: LocaleService; + protected localeConfig: ILocaleConfig; + protected i18n: I18n; + constructor(logger: ILogger, localeService: LocaleService); + /** + * Get a localised value using the passed in key + * @param key Key to loop up locale for + * @param args optional arguments + * @returns Localised string + */ + getText(key: string, args?: any): string; +} diff --git a/TypeScript/16ImporterUtil/types/services/MatchLocationService.d.ts b/TypeScript/16ImporterUtil/types/services/MatchLocationService.d.ts new file mode 100644 index 0000000..c027bec --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/MatchLocationService.d.ts @@ -0,0 +1,9 @@ +import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class MatchLocationService { + protected timeUtil: TimeUtil; + protected locations: {}; + constructor(timeUtil: TimeUtil); + createGroup(sessionID: string, info: ICreateGroupRequestData): any; + deleteGroup(info: any): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/ModCompilerService.d.ts b/TypeScript/16ImporterUtil/types/services/ModCompilerService.d.ts new file mode 100644 index 0000000..a4bf3c8 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/ModCompilerService.d.ts @@ -0,0 +1,14 @@ +import { CompilerOptions } from "typescript"; +import type { ILogger } from "../models/spt/utils/ILogger"; +import { HashCacheService } from "./HashCacheService"; +import { VFS } from "../utils/VFS"; +export declare class ModCompilerService { + protected logger: ILogger; + protected hashCacheService: HashCacheService; + protected vfs: VFS; + constructor(logger: ILogger, hashCacheService: HashCacheService, vfs: VFS); + compileMod(modName: string, modPath: string, modTypeScriptFiles: string[]): Promise; + protected compile(fileNames: string[], options: CompilerOptions): Promise; + protected areFilesReady(fileNames: string[]): boolean; + protected delay(ms: number): Promise; +} diff --git a/TypeScript/16ImporterUtil/types/services/NotificationService.d.ts b/TypeScript/16ImporterUtil/types/services/NotificationService.d.ts new file mode 100644 index 0000000..65a84dd --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/NotificationService.d.ts @@ -0,0 +1,21 @@ +import { INotification } from "../models/eft/notifier/INotifier"; +export declare class NotificationService { + protected messageQueue: Record; + getMessageQueue(): Record; + getMessageFromQueue(sessionId: string): any[]; + updateMessageOnQueue(sessionId: string, value: any[]): void; + has(sessionID: string): boolean; + /** + * Pop first message from queue. + */ + pop(sessionID: string): any; + /** + * Add message to queue + */ + add(sessionID: string, message: INotification): void; + /** + * Get message queue for session + * @param sessionID + */ + get(sessionID: string): any[]; +} diff --git a/TypeScript/16ImporterUtil/types/services/OpenZoneService.d.ts b/TypeScript/16ImporterUtil/types/services/OpenZoneService.d.ts new file mode 100644 index 0000000..8e70b94 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/OpenZoneService.d.ts @@ -0,0 +1,28 @@ +import { ILocationConfig } from "../models/spt/config/ILocationConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { LocalisationService } from "./LocalisationService"; +/** Service for adding new zones to a maps OpenZones property */ +export declare class OpenZoneService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected locationConfig: ILocationConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Add open zone to specified map + * @param locationId map location (e.g. factory4_day) + * @param zoneToAdd zone to add + */ + addZoneToMap(locationId: string, zoneToAdd: string): void; + /** + * Add open zones to all maps found in config/location.json to db + */ + applyZoneChangesToAllMaps(): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/PaymentService.d.ts b/TypeScript/16ImporterUtil/types/services/PaymentService.d.ts new file mode 100644 index 0000000..ac131ea --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/PaymentService.d.ts @@ -0,0 +1,76 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBuyTradeRequestData } from "../models/eft/trade/IProcessBuyTradeRequestData"; +import { IProcessSellTradeRequestData } from "../models/eft/trade/IProcessSellTradeRequestData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { LocalisationService } from "./LocalisationService"; +export declare class PaymentService { + protected logger: ILogger; + protected httpResponse: HttpResponseUtil; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected traderHelper: TraderHelper; + protected itemHelper: ItemHelper; + protected inventoryHelper: InventoryHelper; + protected localisationService: LocalisationService; + protected paymentHelper: PaymentHelper; + constructor(logger: ILogger, httpResponse: HttpResponseUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, traderHelper: TraderHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, localisationService: LocalisationService, paymentHelper: PaymentHelper); + /** + * Take money and insert items into return to server request + * @param {IPmcData} pmcData Player profile + * @param {IProcessBuyTradeRequestData} request + * @param {string} sessionID + * @returns Object + */ + payMoney(pmcData: IPmcData, request: IProcessBuyTradeRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse; + /** + * Receive money back after selling + * @param {IPmcData} pmcData + * @param {number} amount + * @param {IProcessSellTradeRequestData} body + * @param {IItemEventRouterResponse} output + * @param {string} sessionID + * @returns IItemEventRouterResponse + */ + getMoney(pmcData: IPmcData, amount: number, body: IProcessSellTradeRequestData, output: IItemEventRouterResponse, sessionID: string): IItemEventRouterResponse; + /** + * Recursively checks if the given item is + * inside the stash, that is it has the stash as + * ancestor with slotId=hideout + */ + protected isItemInStash(pmcData: IPmcData, item: Item): boolean; + /** + * Remove currency from player stash/inventory + * @param pmcData Player profile to find and remove currency from + * @param currencyTpl Type of currency to pay + * @param amountToPay money value to pay + * @param sessionID Session id + * @param output output object to send to client + * @returns IItemEventRouterResponse + */ + addPaymentToOutput(pmcData: IPmcData, currencyTpl: string, amountToPay: number, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse; + /** + * Prioritise player stash first over player inventory + * Post-raid healing would often take money out of the players pockets/secure container + * @param a First money stack item + * @param b Second money stack item + * @param inventoryItems players inventory items + * @returns sort order + */ + protected prioritiseStashSort(a: Item, b: Item, inventoryItems: Item[]): number; + /** + * Recursivly check items parents to see if it is inside the players inventory, not stash + * @param itemId item id to check + * @param inventoryItems player inventory + * @returns true if its in inventory + */ + protected isInInventory(itemId: string, inventoryItems: Item[]): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/services/PlayerService.d.ts b/TypeScript/16ImporterUtil/types/services/PlayerService.d.ts new file mode 100644 index 0000000..1195b93 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/PlayerService.d.ts @@ -0,0 +1,22 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "./LocalisationService"; +export declare class PlayerService { + protected logger: ILogger; + protected localisationService: LocalisationService; + protected databaseServer: DatabaseServer; + constructor(logger: ILogger, localisationService: LocalisationService, databaseServer: DatabaseServer); + /** + * increases the profile skill and updates any output + * @param {Object} pmcData + * @param {String} skillName + * @param {Number} amount + */ + incrementSkillLevel(pmcData: IPmcData, skillName: string, amount: number): void; + /** + * @param {Object} pmcData + * @returns number + */ + calculateLevel(pmcData: IPmcData): number; +} diff --git a/TypeScript/16ImporterUtil/types/services/ProfileFixerService.d.ts b/TypeScript/16ImporterUtil/types/services/ProfileFixerService.d.ts new file mode 100644 index 0000000..8d23ebc --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/ProfileFixerService.d.ts @@ -0,0 +1,112 @@ +import { HideoutHelper } from "../helpers/HideoutHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Bonus, HideoutSlot } from "../models/eft/common/tables/IBotBase"; +import { IPmcDataRepeatableQuest, IRepeatableQuest } from "../models/eft/common/tables/IRepeatableQuests"; +import { StageBonus } from "../models/eft/hideout/IHideoutArea"; +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { HideoutAreas } from "../models/enums/HideoutAreas"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { TimeUtil } from "../utils/TimeUtil"; +import { Watermark } from "../utils/Watermark"; +import { LocalisationService } from "./LocalisationService"; +export declare class ProfileFixerService { + protected logger: ILogger; + protected watermark: Watermark; + protected hideoutHelper: HideoutHelper; + protected localisationService: LocalisationService; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, localisationService: LocalisationService, timeUtil: TimeUtil, databaseServer: DatabaseServer); + /** + * Find issues in the pmc profile data that may cause issues and fix them + * @param pmcProfile profile to check and fix + */ + checkForAndFixPmcProfileIssues(pmcProfile: IPmcData): void; + /** + * Add tag to profile to indicate when it was made + * @param fullProfile + */ + addMissingAkiVersionTagToProfile(fullProfile: IAkiProfile): void; + /** + * TODO - make this non-public - currently used by RepeatableQuestController + * Remove unused condition counters + * @param pmcProfile profile to remove old counters from + */ + removeDanglingConditionCounters(pmcProfile: IPmcData): void; + addLighthouseKeeperIfMissing(pmcProfile: IPmcData): void; + protected addUnlockedInfoObjectIfMissing(pmcProfile: IPmcData): void; + protected removeDanglingBackendCounters(pmcProfile: IPmcData): void; + protected getActiveRepeatableQuests(repeatableQuests: IPmcDataRepeatableQuest[]): IRepeatableQuest[]; + protected fixNullTraderSalesSums(pmcProfile: IPmcData): void; + protected addMissingBonusesProperty(pmcProfile: IPmcData): void; + /** + * Adjust profile quest status and statusTimers object values + * quest.status is numeric e.g. 2 + * quest.statusTimers keys are numeric as strings e.g. "2" + * @param pmcProfile profile to update + */ + protected updateProfileQuestDataValues(pmcProfile: IPmcData): void; + protected addMissingRepeatableQuestsProperty(pmcProfile: IPmcData): void; + protected addMissingWorkbenchWeaponSkills(pmcProfile: IPmcData): void; + /** + * Some profiles have hideout maxed and therefore no improvements + * @param pmcProfile Profile to add improvement data to + */ + protected addMissingWallImprovements(pmcProfile: IPmcData): void; + /** + * A new property was added to slot items "locationIndex", if this is missing, the hideout slot item must be removed + * @param pmcProfile Profile to find and remove slots from + */ + protected removeResourcesFromSlotsInHideoutWithoutLocationIndexValue(pmcProfile: IPmcData): void; + /** + * Hideout slots need to be in a specific order, locationIndex in ascending order + * @param pmcProfile profile to edit + */ + protected reorderHideoutAreasWithResouceInputs(pmcProfile: IPmcData): void; + /** + * add in objects equal to the number of slots + * @param areaType area to check + * @param pmcProfile profile to update + */ + protected addEmptyObjectsToHideoutAreaSlots(areaType: HideoutAreas, emptyItemCount: number, pmcProfile: IPmcData): void; + protected addObjectsToArray(count: number, slots: HideoutSlot[]): HideoutSlot[]; + /** + * In 18876 bsg changed the pockets tplid to be one that has 3 additional special slots + * @param pmcProfile + */ + protected updateProfilePocketsToNewId(pmcProfile: IPmcData): void; + addMissingArmorRepairSkill(pmcProfile: IPmcData): void; + /** + * Iterate over players hideout areas and find what's build, look for missing bonuses those areas give and add them if missing + * @param pmcProfile Profile to update + */ + addMissingHideoutBonusesToProfile(pmcProfile: IPmcData): void; + /** + * + * @param profileBonuses bonuses from profile + * @param bonus bonus to find + * @returns matching bonus + */ + protected getBonusFromProfile(profileBonuses: Bonus[], bonus: StageBonus): Bonus; + /** + * Checks profile inventiory for items that do not exist inside the items db + * @param pmcProfile Profile to check inventory of + */ + checkForOrphanedModdedItems(pmcProfile: IPmcData): void; + /** + * Add `Improvements` object to hideout if missing - added in eft 13.0.21469 + * @param pmcProfile profile to update + */ + addMissingUpgradesPropertyToHideout(pmcProfile: IPmcData): void; + /** + * Iterate over associated profile template and check all hideout areas exist, add if not + * @param fullProfile Profile to update + */ + addMissingHideoutAreasToProfile(fullProfile: IAkiProfile): void; + /** + * These used to be used for storing scav case rewards, rewards are now generated on pickup + * @param pmcProfile Profile to update + */ + removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/ProfileSnapshotService.d.ts b/TypeScript/16ImporterUtil/types/services/ProfileSnapshotService.d.ts new file mode 100644 index 0000000..445ffd0 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/ProfileSnapshotService.d.ts @@ -0,0 +1,30 @@ +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class ProfileSnapshotService { + protected jsonUtil: JsonUtil; + protected storedProfileSnapshots: Record; + constructor(jsonUtil: JsonUtil); + /** + * Store a profile into an in-memory object + * @param sessionID session id - acts as the key + * @param profile - profile to save + */ + storeProfileSnapshot(sessionID: string, profile: IAkiProfile): void; + /** + * Retreve a stored profile + * @param sessionID key + * @returns A player profile object + */ + getProfileSnapshot(sessionID: string): IAkiProfile; + /** + * Does a profile exists against the provided key + * @param sessionID key + * @returns true if exists + */ + hasProfileSnapshot(sessionID: string): boolean; + /** + * Remove a stored profile by key + * @param sessionID key + */ + clearProfileSnapshot(sessionID: string): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/RagfairCategoriesService.d.ts b/TypeScript/16ImporterUtil/types/services/RagfairCategoriesService.d.ts new file mode 100644 index 0000000..83910e5 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/RagfairCategoriesService.d.ts @@ -0,0 +1,40 @@ +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { ILogger } from "../models/spt/utils/ILogger"; +export declare class RagfairCategoriesService { + protected logger: ILogger; + protected categories: Record; + constructor(logger: ILogger); + /** + * Get all flea categories and their count of offers + * @returns item categories and count + */ + getAllCategories(): Record; + /** + * With the supplied items, get custom categories + * @returns a custom list of categories + */ + getBespokeCategories(offers: IRagfairOffer[]): Record; + /** + * Take an array of ragfair offers and create a dictionary of items with thier corrisponding offer count + * @param offers ragfair offers + * @returns categories and count + */ + protected processOffersIntoCategories(offers: IRagfairOffer[]): Record; + /** + * Increment or decrement a category array + * @param offer offer to process + * @param categories categories to update + * @param increment should item be incremented or decremented + */ + protected addOrIncrementCategory(offer: IRagfairOffer, categories: Record, increment?: boolean): void; + /** + * Increase category count by 1 + * @param offer + */ + incrementCategory(offer: IRagfairOffer): void; + /** + * Reduce category count by 1 + * @param offer + */ + decrementCategory(offer: IRagfairOffer): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/RagfairLinkedItemService.d.ts b/TypeScript/16ImporterUtil/types/services/RagfairLinkedItemService.d.ts new file mode 100644 index 0000000..51511f9 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/RagfairLinkedItemService.d.ts @@ -0,0 +1,21 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { DatabaseServer } from "../servers/DatabaseServer"; +export declare class RagfairLinkedItemService { + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected linkedItemsCache: Record>; + constructor(databaseServer: DatabaseServer, itemHelper: ItemHelper); + getLinkedItems(linkedSearchId: string): Iterable; + /** + * Create Dictionary of every item and the items associated with it + */ + protected buildLinkedItemTable(): void; + /** + * Add ammo to revolvers linked item dictionary + * @param cylinder Revolvers cylinder + * @param applyLinkedItems + */ + protected addRevolverCylinderAmmoToLinkedItems(cylinder: ITemplateItem, applyLinkedItems: (items: string[]) => void): void; + protected getFilters(item: ITemplateItem, slot: string): string[]; +} diff --git a/TypeScript/16ImporterUtil/types/services/RagfairOfferService.d.ts b/TypeScript/16ImporterUtil/types/services/RagfairOfferService.d.ts new file mode 100644 index 0000000..fc08d39 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/RagfairOfferService.d.ts @@ -0,0 +1,82 @@ +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { RagfairServerHelper } from "../helpers/RagfairServerHelper"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { RagfairOfferHolder } from "../utils/RagfairOfferHolder"; +import { TimeUtil } from "../utils/TimeUtil"; +import { LocalisationService } from "./LocalisationService"; +import { RagfairCategoriesService } from "./RagfairCategoriesService"; +export declare class RagfairOfferService { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected saveServer: SaveServer; + protected ragfairServerHelper: RagfairServerHelper; + protected ragfairCategoriesService: RagfairCategoriesService; + protected profileHelper: ProfileHelper; + protected eventOutputHolder: EventOutputHolder; + protected httpResponse: HttpResponseUtil; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected playerOffersLoaded: boolean; + protected expiredOffers: Record; + protected ragfairConfig: IRagfairConfig; + protected ragfairOfferHandler: RagfairOfferHolder; + constructor(logger: ILogger, timeUtil: TimeUtil, databaseServer: DatabaseServer, saveServer: SaveServer, ragfairServerHelper: RagfairServerHelper, ragfairCategoriesService: RagfairCategoriesService, profileHelper: ProfileHelper, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Get all offers + * @returns IRagfairOffer array + */ + getOffers(): IRagfairOffer[]; + getOfferByOfferId(offerId: string): IRagfairOffer; + getOffersOfType(templateId: string): IRagfairOffer[]; + addOffer(offer: IRagfairOffer): void; + addOfferToExpired(staleOffer: IRagfairOffer): void; + getExpiredOfferCount(): number; + /** + * Get an array of expired items not yet processed into new offers + * @returns items that need to be turned into offers + */ + getExpiredOfferItems(): Item[]; + resetExpiredOffers(): void; + /** + * Does the offer exist on the ragfair + * @param offerId offer id to check for + * @returns offer exists - true + */ + doesOfferExist(offerId: string): boolean; + /** + * Remove an offer from ragfair by offer id + * @param offerId Offer id to remove + */ + removeOfferById(offerId: string): void; + /** + * Reduce size of an offer stack by specified amount + * @param offerId Offer to adjust stack size of + * @param amount How much to deduct from offers stack size + */ + removeOfferStack(offerId: string, amount: number): void; + removeAllOffersByTrader(traderId: string): void; + /** + * Do the trader offers on flea need to be refreshed + * @param traderID Trader to check + * @returns true if they do + */ + traderOffersNeedRefreshing(traderID: string): boolean; + addPlayerOffers(): void; + expireStaleOffers(): void; + /** + * Remove stale offer from flea + * @param staleOffer Stale offer to process + */ + protected processStaleOffer(staleOffer: IRagfairOffer): void; + protected returnPlayerOffer(offer: IRagfairOffer): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/services/RagfairPriceService.d.ts b/TypeScript/16ImporterUtil/types/services/RagfairPriceService.d.ts new file mode 100644 index 0000000..8b68bc4 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/RagfairPriceService.d.ts @@ -0,0 +1,129 @@ +import { OnLoad } from "../di/OnLoad"; +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { Preset } from "../models/eft/common/IGlobals"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IBarterScheme } from "../models/eft/common/tables/ITrader"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { IRagfairServerPrices } from "../models/spt/ragfair/IRagfairServerPrices"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RandomUtil } from "../utils/RandomUtil"; +/** + * Stores flea prices for items as well as methods to interact with them + */ +export declare class RagfairPriceService implements OnLoad { + protected handbookHelper: HandbookHelper; + protected databaseServer: DatabaseServer; + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected presetHelper: PresetHelper; + protected traderHelper: TraderHelper; + protected randomUtil: RandomUtil; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + protected generatedDynamicPrices: boolean; + protected generatedStaticPrices: boolean; + protected prices: IRagfairServerPrices; + constructor(handbookHelper: HandbookHelper, databaseServer: DatabaseServer, logger: ILogger, itemHelper: ItemHelper, presetHelper: PresetHelper, traderHelper: TraderHelper, randomUtil: RandomUtil, configServer: ConfigServer); + /** + * Generate static (handbook) and dynamic (prices.json) flea prices, store inside class as dictionaries + */ + onLoad(): Promise; + getRoute(): string; + /** + * Iterate over all items of type "Item" in db and get template price, store in cache + */ + generateStaticPrices(): void; + /** + * Create a dictionary and store prices from prices.json in it + */ + protected generateDynamicPrices(): void; + /** + * Get the dynamic price for an item. If value doesn't exist, use static (handbook) value. + * if no static value, return 1 + * @param tplId Item tpl id to get price for + * @returns price in roubles + */ + getFleaPriceForItem(tplId: string): number; + /** + * get the dynamic (flea) price for an item + * Grabs prices from prices.json and stores in class if none currently exist + * @param itemTpl item template id to look up + * @returns price in roubles + */ + getDynamicPriceForItem(itemTpl: string): number; + /** + * Grab the static (handbook) for an item by its tplId + * @param itemTpl item template id to look up + * @returns price in roubles + */ + getStaticPriceForItem(itemTpl: string): number; + /** + * Get prices for all items on flea, priorities dynamic prices from prices.json, use handbook prices if missing + * @returns Dictionary of item tpls and rouble cost + */ + getAllFleaPrices(): Record; + getAllStaticPrices(): Record; + /** + * Get the percentage difference between two values + * @param a numerical value a + * @param b numerical value b + * @returns different in percent + */ + protected getPriceDifference(a: number, b: number): number; + /** + * Get the rouble price for an assorts barter scheme + * @param barterScheme + * @returns Rouble price + */ + getBarterPrice(barterScheme: IBarterScheme[]): number; + /** + * Generate a currency cost for an item and its mods + * @param items Item with mods to get price for + * @param desiredCurrency Currency price desired in + * @returns cost of item in desired currency + */ + getDynamicOfferPrice(items: Item[], desiredCurrency: string): number; + /** + * Check to see if an items price is below its handbook price and adjust accoring to values set to config/ragfair.json + * @param itemPrice price of item + * @param itemTpl item template Id being checked + * @returns adjusted price value in roubles + */ + protected adjustPriceIfBelowHandbook(itemPrice: number, itemTpl: string): number; + /** + * Multiply the price by a randomised curve where n = 2, shift = 2 + * @param existingPrice price to alter + * @param isPreset is the item we're multiplying a preset + * @returns multiplied price + */ + protected randomisePrice(existingPrice: number, isPreset: boolean): number; + /** + * Calculate the cost of a weapon preset by adding together the price of its mods + base price of default weapon preset + * @param item base weapon + * @param items weapon plus mods + * @param existingPrice price of existing base weapon + * @returns + */ + protected getWeaponPresetPrice(item: Item, items: Item[], existingPrice: number): number; + /** + * Get the highest price for an item that is stored in handbook or trader assorts + * @param itemTpl Item to get highest price of + * @returns rouble cost + */ + protected getHighestHandbookOrTraderPriceAsRouble(itemTpl: string): number; + /** + * Attempt to get the default preset for a weapon, failing that get the first preset in the array + * (assumes default = has encyclopedia entry) + * @param presets weapon presets to choose from + * @returns Default preset object + */ + protected getWeaponPreset(presets: Preset[], weapon: Item): { + isDefault: boolean; + preset: Preset; + }; +} diff --git a/TypeScript/16ImporterUtil/types/services/RagfairRequiredItemsService.d.ts b/TypeScript/16ImporterUtil/types/services/RagfairRequiredItemsService.d.ts new file mode 100644 index 0000000..95c3ddb --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/RagfairRequiredItemsService.d.ts @@ -0,0 +1,12 @@ +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { ILogger } from "../models/spt/utils/ILogger"; +export declare class RagfairRequiredItemsService { + protected logger: ILogger; + protected paymentHelper: PaymentHelper; + protected ragfairOfferService: RagfairOfferService; + protected requiredItemsCache: {}; + constructor(logger: ILogger, paymentHelper: PaymentHelper, ragfairOfferService: RagfairOfferService); + getRequiredItemsById(searchId: string): any; + buildRequiredItemTable(): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/RepairService.d.ts b/TypeScript/16ImporterUtil/types/services/RepairService.d.ts new file mode 100644 index 0000000..a3c6c7a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/RepairService.d.ts @@ -0,0 +1,128 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { QuestHelper } from "../helpers/QuestHelper"; +import { RepairHelper } from "../helpers/RepairHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { RepairKitsInfo } from "../models/eft/repair/IRepairActionDataRequest"; +import { RepairItem } from "../models/eft/repair/ITraderRepairActionDataRequest"; +import { BonusSettings, IRepairConfig } from "../models/spt/config/IRepairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { PaymentService } from "./PaymentService"; +export declare class RepairService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected randomUtil: RandomUtil; + protected itemHelper: ItemHelper; + protected traderHelper: TraderHelper; + protected weightedRandomHelper: WeightedRandomHelper; + protected paymentService: PaymentService; + protected repairHelper: RepairHelper; + protected configServer: ConfigServer; + protected repairConfig: IRepairConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, questHelper: QuestHelper, randomUtil: RandomUtil, itemHelper: ItemHelper, traderHelper: TraderHelper, weightedRandomHelper: WeightedRandomHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + /** + * Use trader to repair an items durability + * @param sessionID Session id + * @param pmcData profile to find item to repair in + * @param repairItemDetails details of the item to repair + * @param traderId Trader being used to repair item + * @returns RepairDetails object + */ + repairItemByTrader(sessionID: string, pmcData: IPmcData, repairItemDetails: RepairItem, traderId: string): RepairDetails; + /** + * + * @param sessionID Session id + * @param pmcData profile to take money from + * @param repairedItemId Repaired item id + * @param repairCost Cost to repair item in roubles + * @param traderId Id of the trader who repaired the item / who is paid + * @param output + */ + payForRepair(sessionID: string, pmcData: IPmcData, repairedItemId: string, repairCost: number, traderId: string, output: IItemEventRouterResponse): void; + /** + * Add skill points to profile after repairing an item + * @param sessionId Session id + * @param repairDetails details of item repaired, cost/item + * @param pmcData Profile to add points to + */ + addRepairSkillPoints(sessionId: string, repairDetails: RepairDetails, pmcData: IPmcData): void; + /** + * + * @param sessionId Session id + * @param pmcData Profile to update repaired item in + * @param repairKits Array of Repair kits to use + * @param itemToRepairId Item id to repair + * @param output IItemEventRouterResponse + * @returns Details of repair, item/price + */ + repairItemByKit(sessionId: string, pmcData: IPmcData, repairKits: RepairKitsInfo[], itemToRepairId: string, output: IItemEventRouterResponse): RepairDetails; + /** + * Calculate value repairkit points need to be divided by to get the durability points to be added to an item + * @param itemToRepairDetails Item to repair details + * @param isArmor Is the item being repaired armor + * @param pmcData Player profile + * @returns Number to divide kit points by + */ + protected getKitDivisor(itemToRepairDetails: ITemplateItem, isArmor: boolean, pmcData: IPmcData): number; + /** + * Get the bonus multiplier for a skill from a player profile + * @param skillBonusName Name of bonus to get multipler of + * @param pmcData Player profile to look in for skill + * @returns Multiplier value + */ + protected getBonusMultiplierValue(skillBonusName: string, pmcData: IPmcData): number; + /** + * Update repair kits Resource object if it doesn't exist + * @param repairKitDetails Repair kit details from db + * @param repairKitInInventory Repair kit to update + */ + protected addMaxResourceToKitIfMissing(repairKitDetails: ITemplateItem, repairKitInInventory: Item): void; + /** + * Chance to apply buff to an item (Armor/weapon) if repaired by armor kit + * @param repairDetails Repair details of item + * @param pmcData Player profile + */ + addBuffToItem(repairDetails: RepairDetails, pmcData: IPmcData): void; + /** + * Add buff to item + * @param itemConfig weapon/armor config + * @param repairDetails Details for item to repair + */ + protected addBuff(itemConfig: BonusSettings, repairDetails: RepairDetails): void; + /** + * Check if item should be buffed by checking the item type and relevant player skill level + * @param repairDetails Item that was repaired + * @param itemTpl tpl of item to be buffed + * @param pmcData Player profile + * @returns True if item should have buff applied + */ + protected shouldBuffItem(repairDetails: RepairDetails, pmcData: IPmcData): boolean; + /** + * Based on item, what underlying skill does this item use for buff settings + * @param itemTemplate Item to check for skill + * @returns Skill name + */ + protected getItemSkillType(itemTemplate: ITemplateItem): string; + /** + * Ensure multiplier is between 1 and 0.01 + * @param receiveDurabilityMaxPercent Max durabiltiy percent + * @param receiveDurabilityPercent current durability percent + * @returns durability multipler value + */ + protected getDurabilityMultiplier(receiveDurabilityMaxPercent: number, receiveDurabilityPercent: number): number; +} +export declare class RepairDetails { + repairCost?: number; + repairedItem: Item; + repairedItemIsArmor: boolean; + repairAmount: number; + repairedByKit: boolean; +} diff --git a/TypeScript/16ImporterUtil/types/services/SeasonalEventService.d.ts b/TypeScript/16ImporterUtil/types/services/SeasonalEventService.d.ts new file mode 100644 index 0000000..7474018 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/SeasonalEventService.d.ts @@ -0,0 +1,114 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { Config } from "../models/eft/common/IGlobals"; +import { Inventory } from "../models/eft/common/tables/IBotType"; +import { ISeasonalEvent, ISeasonalEventConfig } from "../models/spt/config/ISeasonalEventConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "./LocalisationService"; +export declare class SeasonalEventService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected localisationService: LocalisationService; + protected botHelper: BotHelper; + protected configServer: ConfigServer; + protected seasonalEventConfig: ISeasonalEventConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, localisationService: LocalisationService, botHelper: BotHelper, configServer: ConfigServer); + protected get events(): Record; + protected get christmasEventItems(): string[]; + protected get halloweenEventItems(): string[]; + /** + * Get an array of christmas items found in bots inventories as loot + * @returns array + */ + getChristmasEventItems(): string[]; + /** + * Get an array of halloween items found in bots inventories as loot + * @returns array + */ + getHalloweenEventItems(): string[]; + itemIsChristmasRelated(itemTpl: string): boolean; + itemIsHalloweenRelated(itemTpl: string): boolean; + /** + * Check if item id exists in christmas or halloween event arrays + * @param itemTpl item tpl to check for + * @returns + */ + itemIsSeasonalRelated(itemTpl: string): boolean; + /** + * Get an array of items that appear during a seasonal event + * returns multiple seasonal event items if they are both active + * @returns array of tpl strings + */ + getAllSeasonalEventItems(): string[]; + /** + * Get an array of seasonal items that should be blocked as seasonal is not active + * @returns Array of tpl strings + */ + getSeasonalEventItemsToBlock(): string[]; + /** + * Is a seasonal event currently active + * @returns true if event is active + */ + seasonalEventEnabled(): boolean; + /** + * is christmas event active + * @returns true if active + */ + christmasEventEnabled(): boolean; + /** + * is christmas event active + * @returns true if active + */ + halloweenEventEnabled(): boolean; + /** + * Is detection of seasonal events enabled (halloween / christmas) + * @returns true if seasonal events should be checked for + */ + isAutomaticEventDetectionEnabled(): boolean; + /** + * Get a dictionary of gear changes to apply to bots for a specific event e.g. Christmas/Halloween + * @param eventName Name of event to get gear changes for + * @returns bots with equipment changes + */ + protected getEventBotGear(eventName: string): Record>>; + /** + * Get the dates each seasonal event starts and ends at + * @returns Record with event name + start/end date + */ + getEventDetails(): ISeasonalEvent[]; + /** + * Check if current date falls inside any of the seasons events pased in, if so, handle them + */ + checkForAndEnableSeasonalEvents(): void; + /** + * Iterate through bots inventory and loot to find and remove christmas items (as defined in SeasonalEventService) + * @param nodeInventory Bots inventory to iterate over + * @param botRole the role of the bot being processed + */ + removeChristmasItemsFromBotInventory(nodeInventory: Inventory, botRole: string): void; + /** + * Make adjusted to server code based on the name of the event passed in + * @param globalConfig globals.json + * @param eventName Name of the event to enable. e.g. Christmas + */ + protected updateGlobalEvents(globalConfig: Config, eventName: string): void; + /** + * Add lootble items from backpack into patrol.ITEMS_TO_DROP difficulty property + */ + protected addLootItemsToGifterDropItemsList(): void; + /** + * Read in data from seasonalEvents.json and add found equipment items to bots + * @param eventName Name of the event to read equipment in from config + */ + protected addEventGearToBots(eventName: string): void; + protected addPumpkinsToScavBackpacks(): void; + /** + * Set Khorovod(dancing tree) chance to 100% on all maps that support it + */ + protected enableDancingTree(): void; + /** + * Add santa to maps + */ + protected addGifterBotToMaps(): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/TraderAssortService.d.ts b/TypeScript/16ImporterUtil/types/services/TraderAssortService.d.ts new file mode 100644 index 0000000..03b4e12 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/TraderAssortService.d.ts @@ -0,0 +1,11 @@ +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +export declare class TraderAssortService { + protected pristineTraderAssorts: Record; + getPristineTraderAssort(traderId: string): ITraderAssort; + /** + * Store trader assorts inside a class property + * @param traderId Traderid to store assorts against + * @param assort Assorts to store + */ + setPristineTraderAssort(traderId: string, assort: ITraderAssort): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/TraderPurchasePersisterService.d.ts b/TypeScript/16ImporterUtil/types/services/TraderPurchasePersisterService.d.ts new file mode 100644 index 0000000..7e7c88f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/TraderPurchasePersisterService.d.ts @@ -0,0 +1,34 @@ +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { TraderPurchaseData } from "../models/eft/profile/IAkiProfile"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { TimeUtil } from "../utils/TimeUtil"; +/** + * Help with storing limited item purchases from traders in profile to persist them over server restarts + */ +export declare class TraderPurchasePersisterService { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected profileHelper: ProfileHelper; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + constructor(logger: ILogger, timeUtil: TimeUtil, profileHelper: ProfileHelper, configServer: ConfigServer); + /** + * Get the purchases made from a trader for this profile before the last trader reset + * @param sessionId Session id + * @param traderId Trader to loop up purchases for + * @returns Dict of assort id and count purchased + */ + getProfileTraderPurchases(sessionId: string, traderId: string): Record; + /** + * Remove all trader purchase records from all profiles that exist + * @param traderId Traders id + */ + resetTraderPurchasesStoredInProfile(traderId: string): void; + /** + * Iterate over all server profiles and remove specific trader purchase data that has passed the trader refesh time + * @param traderId Trader id + */ + removeStalePurchasesFromProfiles(traderId: string): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/mod/CustomItemService.d.ts b/TypeScript/16ImporterUtil/types/services/mod/CustomItemService.d.ts new file mode 100644 index 0000000..87bda40 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/mod/CustomItemService.d.ts @@ -0,0 +1,80 @@ +import { ITemplateItem, Props } from "../../models/eft/common/tables/ITemplateItem"; +import { CreateItemResult, LocaleDetails, NewItemDetails, NewItemFromCloneDetails } from "../../models/spt/mod/NewItemDetails"; +import { IDatabaseTables } from "../../models/spt/server/IDatabaseTables"; +import { ILogger } from "../../models/spt/utils/ILogger"; +import { DatabaseServer } from "../../servers/DatabaseServer"; +import { HashUtil } from "../../utils/HashUtil"; +import { JsonUtil } from "../../utils/JsonUtil"; +export declare class CustomItemService { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected tables: IDatabaseTables; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer); + /** + * Create a new item from a cloned item base + * WARNING - If no item id is supplied, an id will be generated, this id will be random every time you add an item and will not be the same on each subsequent server start + * Add to the items db + * Add to the flea market + * Add to the handbook + * Add to the locales + * @param newItemDetails Item details for the new item to be created + * @returns tplId of the new item created + */ + createItemFromClone(newItemDetails: NewItemFromCloneDetails): CreateItemResult; + /** + * Create a new item without using an existing item as a template + * Add to the items db + * Add to the flea market + * Add to the handbook + * Add to the locales + * @param newItemDetails Details on what the item to be created + * @returns CreateItemResult containing the completed items Id + */ + createItem(newItemDetails: NewItemDetails): CreateItemResult; + /** + * If the id provided is an empty string, return a randomly generated guid, otherwise return the newId parameter + * @param newId id supplied to code + * @returns item id + */ + protected getOrGenerateIdForItem(newId: string): string; + /** + * Iterates through supplied properties and updates the cloned items properties with them + * Complex objects cannot have overrides, they must be fully hydrated with values if they are to be used + * @param overrideProperties new properties to apply + * @param itemClone item to update + */ + protected updateBaseItemPropertiesWithOverrides(overrideProperties: Props, itemClone: ITemplateItem): void; + /** + * Addd a new item object to the in-memory representation of items.json + * @param newItemId id of the item to add to items.json + * @param itemToAdd Item to add against the new id + */ + protected addToItemsDb(newItemId: string, itemToAdd: ITemplateItem): void; + /** + * Add a handbook price for an item + * @param newItemId id of the item being added + * @param parentId parent id of the item being added + * @param priceRoubles price of the item being added + */ + protected addToHandbookDb(newItemId: string, parentId: string, priceRoubles: number): void; + /** + * Iterate through the passed in locale data and add to each locale in turn + * If data is not provided for each langauge eft uses, the first object will be used in its place + * e.g. + * en[0] + * fr[1] + * + * No jp provided, so english will be used as a substitute + * @param localeDetails key is language, value are the new locale details + * @param newItemId id of the item being created + */ + protected addToLocaleDbs(localeDetails: Record, newItemId: string): void; + /** + * Add a price to the in-memory representation of prices.json, used to inform the flea of an items price on the market + * @param newItemId id of the new item + * @param fleaPriceRoubles Price of the new item + */ + protected addToFleaPriceDb(newItemId: string, fleaPriceRoubles: number): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/mod/dynamicRouter/DynamicRouterMod.d.ts b/TypeScript/16ImporterUtil/types/services/mod/dynamicRouter/DynamicRouterMod.d.ts new file mode 100644 index 0000000..abfe237 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/mod/dynamicRouter/DynamicRouterMod.d.ts @@ -0,0 +1,6 @@ +import { DynamicRouter, RouteAction } from "../../../di/Router"; +export declare class DynamicRouterMod extends DynamicRouter { + private topLevelRoute; + constructor(routes: RouteAction[], topLevelRoute: string); + getTopLevelRoute(): string; +} diff --git a/TypeScript/16ImporterUtil/types/services/mod/dynamicRouter/DynamicRouterModService.d.ts b/TypeScript/16ImporterUtil/types/services/mod/dynamicRouter/DynamicRouterModService.d.ts new file mode 100644 index 0000000..6742fc6 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/mod/dynamicRouter/DynamicRouterModService.d.ts @@ -0,0 +1,7 @@ +import { DependencyContainer } from "tsyringe"; +import { RouteAction } from "../../../di/Router"; +export declare class DynamicRouterModService { + private container; + constructor(container: DependencyContainer); + registerDynamicRouter(name: string, routes: RouteAction[], topLevelRoute: string): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/mod/httpListener/HttpListenerMod.d.ts b/TypeScript/16ImporterUtil/types/services/mod/httpListener/HttpListenerMod.d.ts new file mode 100644 index 0000000..2cdfbda --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/mod/httpListener/HttpListenerMod.d.ts @@ -0,0 +1,10 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { IHttpListener } from "../../../servers/http/IHttpListener"; +export declare class HttpListenerMod implements IHttpListener { + private canHandleOverride; + private handleOverride; + constructor(canHandleOverride: (sessionId: string, req: IncomingMessage) => boolean, handleOverride: (sessionId: string, req: IncomingMessage, resp: ServerResponse) => void); + canHandle(sessionId: string, req: IncomingMessage): boolean; + handle(sessionId: string, req: IncomingMessage, resp: ServerResponse): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/mod/httpListener/HttpListenerModService.d.ts b/TypeScript/16ImporterUtil/types/services/mod/httpListener/HttpListenerModService.d.ts new file mode 100644 index 0000000..9dd3473 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/mod/httpListener/HttpListenerModService.d.ts @@ -0,0 +1,8 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { DependencyContainer } from "tsyringe"; +export declare class HttpListenerModService { + protected container: DependencyContainer; + constructor(container: DependencyContainer); + registerHttpListener(name: string, canHandleOverride: (sessionId: string, req: IncomingMessage) => boolean, handleOverride: (sessionId: string, req: IncomingMessage, resp: ServerResponse) => void): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/mod/image/ImageRouteService.d.ts b/TypeScript/16ImporterUtil/types/services/mod/image/ImageRouteService.d.ts new file mode 100644 index 0000000..29569b2 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/mod/image/ImageRouteService.d.ts @@ -0,0 +1,6 @@ +export declare class ImageRouteService { + protected routes: Record; + addRoute(urlKey: string, route: string): void; + getByKey(urlKey: string): string; + existsByKey(urlKey: string): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/services/mod/onLoad/OnLoadMod.d.ts b/TypeScript/16ImporterUtil/types/services/mod/onLoad/OnLoadMod.d.ts new file mode 100644 index 0000000..a4b58b5 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/mod/onLoad/OnLoadMod.d.ts @@ -0,0 +1,8 @@ +import { OnLoad } from "../../../di/OnLoad"; +export declare class OnLoadMod implements OnLoad { + private onLoadOverride; + private getRouteOverride; + constructor(onLoadOverride: () => void, getRouteOverride: () => string); + onLoad(): Promise; + getRoute(): string; +} diff --git a/TypeScript/16ImporterUtil/types/services/mod/onLoad/OnLoadModService.d.ts b/TypeScript/16ImporterUtil/types/services/mod/onLoad/OnLoadModService.d.ts new file mode 100644 index 0000000..f402103 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/mod/onLoad/OnLoadModService.d.ts @@ -0,0 +1,6 @@ +import { DependencyContainer } from "tsyringe"; +export declare class OnLoadModService { + protected container: DependencyContainer; + constructor(container: DependencyContainer); + registerOnLoad(name: string, onLoad: () => void, getRoute: () => string): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/mod/onUpdate/OnUpdateMod.d.ts b/TypeScript/16ImporterUtil/types/services/mod/onUpdate/OnUpdateMod.d.ts new file mode 100644 index 0000000..8dfe6dd --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/mod/onUpdate/OnUpdateMod.d.ts @@ -0,0 +1,8 @@ +import { OnUpdate } from "../../../di/OnUpdate"; +export declare class OnUpdateMod implements OnUpdate { + private onUpdateOverride; + private getRouteOverride; + constructor(onUpdateOverride: (timeSinceLastRun: number) => boolean, getRouteOverride: () => string); + onUpdate(timeSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/16ImporterUtil/types/services/mod/onUpdate/OnUpdateModService.d.ts b/TypeScript/16ImporterUtil/types/services/mod/onUpdate/OnUpdateModService.d.ts new file mode 100644 index 0000000..05d735b --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/mod/onUpdate/OnUpdateModService.d.ts @@ -0,0 +1,6 @@ +import { DependencyContainer } from "tsyringe"; +export declare class OnUpdateModService { + protected container: DependencyContainer; + constructor(container: DependencyContainer); + registerOnUpdate(name: string, onUpdate: (timeSinceLastRun: number) => boolean, getRoute: () => string): void; +} diff --git a/TypeScript/16ImporterUtil/types/services/mod/staticRouter/StaticRouterMod.d.ts b/TypeScript/16ImporterUtil/types/services/mod/staticRouter/StaticRouterMod.d.ts new file mode 100644 index 0000000..1e62747 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/mod/staticRouter/StaticRouterMod.d.ts @@ -0,0 +1,6 @@ +import { RouteAction, StaticRouter } from "../../../di/Router"; +export declare class StaticRouterMod extends StaticRouter { + private topLevelRoute; + constructor(routes: RouteAction[], topLevelRoute: string); + getTopLevelRoute(): string; +} diff --git a/TypeScript/16ImporterUtil/types/services/mod/staticRouter/StaticRouterModService.d.ts b/TypeScript/16ImporterUtil/types/services/mod/staticRouter/StaticRouterModService.d.ts new file mode 100644 index 0000000..f28fd45 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/services/mod/staticRouter/StaticRouterModService.d.ts @@ -0,0 +1,7 @@ +import { DependencyContainer } from "tsyringe"; +import { RouteAction } from "../../../di/Router"; +export declare class StaticRouterModService { + protected container: DependencyContainer; + constructor(container: DependencyContainer); + registerStaticRouter(name: string, routes: RouteAction[], topLevelRoute: string): void; +} diff --git a/TypeScript/16ImporterUtil/types/utils/App.d.ts b/TypeScript/16ImporterUtil/types/utils/App.d.ts new file mode 100644 index 0000000..b947c83 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/App.d.ts @@ -0,0 +1,17 @@ +import { OnLoad } from "../di/OnLoad"; +import { OnUpdate } from "../di/OnUpdate"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { TimeUtil } from "./TimeUtil"; +export declare class App { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected localisationService: LocalisationService; + protected onLoadComponents: OnLoad[]; + protected onUpdateComponents: OnUpdate[]; + protected onUpdateLastRun: {}; + constructor(logger: ILogger, timeUtil: TimeUtil, localisationService: LocalisationService, onLoadComponents: OnLoad[], onUpdateComponents: OnUpdate[]); + load(): Promise; + protected update(onUpdateComponents: OnUpdate[]): Promise; + protected logUpdateException(err: any, updateable: OnUpdate): void; +} diff --git a/TypeScript/16ImporterUtil/types/utils/AyncQueue.d.ts b/TypeScript/16ImporterUtil/types/utils/AyncQueue.d.ts new file mode 100644 index 0000000..da6ab18 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/AyncQueue.d.ts @@ -0,0 +1,7 @@ +import { IAsyncQueue } from "../models/spt/utils/IAsyncQueue"; +import { ICommand } from "../models/spt/utils/ICommand"; +export declare class AsyncQueue implements IAsyncQueue { + protected commandsQueue: ICommand[]; + constructor(); + waitFor(command: ICommand): Promise; +} diff --git a/TypeScript/16ImporterUtil/types/utils/DatabaseImporter.d.ts b/TypeScript/16ImporterUtil/types/utils/DatabaseImporter.d.ts new file mode 100644 index 0000000..c09d63a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/DatabaseImporter.d.ts @@ -0,0 +1,35 @@ +import { OnLoad } from "../di/OnLoad"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ImageRouter } from "../routers/ImageRouter"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { EncodingUtil } from "./EncodingUtil"; +import { HashUtil } from "./HashUtil"; +import { ImporterUtil } from "./ImporterUtil"; +import { JsonUtil } from "./JsonUtil"; +import { VFS } from "./VFS"; +export declare class DatabaseImporter implements OnLoad { + protected logger: ILogger; + protected vfs: VFS; + protected jsonUtil: JsonUtil; + protected localisationService: LocalisationService; + protected databaseServer: DatabaseServer; + protected imageRouter: ImageRouter; + protected encodingUtil: EncodingUtil; + protected hashUtil: HashUtil; + protected importerUtil: ImporterUtil; + private hashedFile; + private valid; + private filepath; + constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, localisationService: LocalisationService, databaseServer: DatabaseServer, imageRouter: ImageRouter, encodingUtil: EncodingUtil, hashUtil: HashUtil, importerUtil: ImporterUtil); + onLoad(): Promise; + /** + * Read all json files in database folder and map into a json object + * @param filepath path to database folder + */ + protected hydrateDatabase(filepath: string): Promise; + private onReadValidate; + getRoute(): string; + private validateFile; + loadImages(filepath: string): void; +} diff --git a/TypeScript/16ImporterUtil/types/utils/EncodingUtil.d.ts b/TypeScript/16ImporterUtil/types/utils/EncodingUtil.d.ts new file mode 100644 index 0000000..dabb97a --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/EncodingUtil.d.ts @@ -0,0 +1,15 @@ +export declare class EncodingUtil { + encode(value: string, encode: EncodeType): string; + decode(value: string, encode: EncodeType): string; + fromBase64(value: string): string; + toBase64(value: string): string; + fromHex(value: string): string; + toHex(value: string): string; +} +export declare enum EncodeType { + BASE64 = "base64", + HEX = "hex", + ASCII = "ascii", + BINARY = "binary", + UTF8 = "utf8" +} diff --git a/TypeScript/16ImporterUtil/types/utils/HashUtil.d.ts b/TypeScript/16ImporterUtil/types/utils/HashUtil.d.ts new file mode 100644 index 0000000..a8500e1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/HashUtil.d.ts @@ -0,0 +1,21 @@ +/// +import crypto from "crypto"; +import { TimeUtil } from "./TimeUtil"; +export declare class HashUtil { + protected timeUtil: TimeUtil; + constructor(timeUtil: TimeUtil); + /** + * Create a 24 character id using the sha256 algorithm + current timestamp + * @returns 24 character hash + */ + generate(): string; + generateMd5ForData(data: string): string; + generateSha1ForData(data: string): string; + /** + * Create a hash for the data parameter + * @param algorithm algorithm to use to hash + * @param data data to be hashed + * @returns hash value + */ + generateHashForData(algorithm: string, data: crypto.BinaryLike): string; +} diff --git a/TypeScript/16ImporterUtil/types/utils/HttpFileUtil.d.ts b/TypeScript/16ImporterUtil/types/utils/HttpFileUtil.d.ts new file mode 100644 index 0000000..afc8409 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/HttpFileUtil.d.ts @@ -0,0 +1,8 @@ +/// +import { ServerResponse } from "http"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +export declare class HttpFileUtil { + protected httpServerHelper: HttpServerHelper; + constructor(httpServerHelper: HttpServerHelper); + sendFile(resp: ServerResponse, file: any): void; +} diff --git a/TypeScript/16ImporterUtil/types/utils/HttpResponseUtil.d.ts b/TypeScript/16ImporterUtil/types/utils/HttpResponseUtil.d.ts new file mode 100644 index 0000000..3a78618 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/HttpResponseUtil.d.ts @@ -0,0 +1,19 @@ +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { BackendErrorCodes } from "../models/enums/BackendErrorCodes"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "./JsonUtil"; +export declare class HttpResponseUtil { + protected jsonUtil: JsonUtil; + protected localisationService: LocalisationService; + constructor(jsonUtil: JsonUtil, localisationService: LocalisationService); + protected clearString(s: string): any; + noBody(data: any): any; + getBody(data: T, err?: number, errmsg?: any): IGetBodyResponseData; + getUnclearedBody(data: any, err?: number, errmsg?: any): string; + emptyResponse(): IGetBodyResponseData; + nullResponse(): INullResponseData; + emptyArrayResponse(): IGetBodyResponseData; + appendErrorToOutput(output: IItemEventRouterResponse, message?: string, errorCode?: BackendErrorCodes): IItemEventRouterResponse; +} diff --git a/TypeScript/16ImporterUtil/types/utils/ImporterUtil.d.ts b/TypeScript/16ImporterUtil/types/utils/ImporterUtil.d.ts new file mode 100644 index 0000000..75aaf54 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/ImporterUtil.d.ts @@ -0,0 +1,21 @@ +import { JsonUtil } from "./JsonUtil"; +import { VFS } from "./VFS"; +export declare class ImporterUtil { + protected vfs: VFS; + protected jsonUtil: JsonUtil; + constructor(vfs: VFS, jsonUtil: JsonUtil); + /** + * Load files into js objects recursively (asynchronous) + * @param filepath Path to folder with files + * @returns Promise return T type associated with this class + */ + loadRecursiveAsync(filepath: string, onReadCallback?: (fileWithPath: string, data: string) => void, onObjectDeserialized?: (fileWithPath: string, object: any) => void): Promise; + /** + * Load files into js objects recursively (synchronous) + * @param filepath Path to folder with files + * @returns + */ + loadRecursive(filepath: string, onReadCallback?: (fileWithPath: string, data: string) => void, onObjectDeserialized?: (fileWithPath: string, object: any) => void): T; + loadAsync(filepath: string, strippablePath?: string, onReadCallback?: (fileWithPath: string, data: string) => void, onObjectDeserialized?: (fileWithPath: string, object: any) => void): Promise; + protected placeObject(fileDeserialized: any, strippedFilePath: string, result: T, strippablePath: string): void; +} diff --git a/TypeScript/16ImporterUtil/types/utils/JsonUtil.d.ts b/TypeScript/16ImporterUtil/types/utils/JsonUtil.d.ts new file mode 100644 index 0000000..229dc26 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/JsonUtil.d.ts @@ -0,0 +1,27 @@ +import { ILogger } from "../models/spt/utils/ILogger"; +import { HashUtil } from "./HashUtil"; +import { VFS } from "./VFS"; +export declare class JsonUtil { + protected vfs: VFS; + protected hashUtil: HashUtil; + protected logger: ILogger; + protected fileHashes: any; + protected jsonCacheExists: boolean; + constructor(vfs: VFS, hashUtil: HashUtil, logger: ILogger); + /** + * From object to string + * @param data object to turn into JSON + * @param prettify Should output be prettified? + * @returns string + */ + serialize(data: T, prettify?: boolean): string; + /** + * From string to object + * @param jsonString json string to turn into object + * @returns object + */ + deserialize(jsonString: string, filename?: string): T; + deserializeWithCacheCheckAsync(jsonString: string, filePath: string): Promise; + deserializeWithCacheCheck(jsonString: string, filePath: string): T; + clone(data: T): T; +} diff --git a/TypeScript/16ImporterUtil/types/utils/MathUtil.d.ts b/TypeScript/16ImporterUtil/types/utils/MathUtil.d.ts new file mode 100644 index 0000000..ea5fd69 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/MathUtil.d.ts @@ -0,0 +1,53 @@ +export declare class MathUtil { + /** + * Helper to create the sum of all array elements + * @param {array} values The array with numbers of which to calculate the sum + * @return {number} sum(values) + */ + arraySum(values: number[]): number; + /** + * Helper to create the cumulative sum of all array elements + * arrayCumsum([1, 2, 3, 4]) = [1, 3, 6, 10] + * @param {array} values The array with numbers of which to calculate the cumulative sum + * @return {array} cumsum(values) + */ + arrayCumsum(values: number[]): number[]; + /** + * Helper to create the product of each element times factor + * @param {array} values The array of numbers which shall be multiplied by the factor + * @return {array} array times factor + */ + arrayProd(values: number[], factor: number): number[]; + /** + * Helper to add a constant to all array elements + * @param {array} values The array of numbers to which the summand should be added + * @return {array} array plus summand + */ + arrayAdd(values: number[], summand: number): number[]; + /** + * Map a value from an input range to an output range linearly + * + * Example: + * a_min = 0; a_max=1; + * b_min = 1; b_max=3; + * MathUtil.mapToRange(0.5, a_min, a_max, b_min, b_max) // returns 2 + * + * @param {number} x The value from input range to be mapped to output range + * @param {number} minIn min of input range + * @param {number} maxIn max of input range + * @param {number} minOut min of output range + * @param {number} maxOut max of outout range + * @return {number} the result of the mapping + */ + mapToRange(x: number, minIn: number, maxIn: number, minOut: number, maxOut: number): number; + /** + * Linear interpolation + * e.g. used to do a continuous integration for quest rewards which are defined for specific support centers of pmcLevel + * + * @param {string} xp the point of x at which to interpolate + * @param {array} x support points in x (of same length as y) + * @param {array} y support points in y (of same length as x) + * @return {number} y(xp) + */ + interp1(xp: number, x: number[], y: number[]): number; +} diff --git a/TypeScript/16ImporterUtil/types/utils/ObjectId.d.ts b/TypeScript/16ImporterUtil/types/utils/ObjectId.d.ts new file mode 100644 index 0000000..03aae56 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/ObjectId.d.ts @@ -0,0 +1,14 @@ +/// +import { TimeUtil } from "./TimeUtil"; +export declare class ObjectId { + protected timeUtil: TimeUtil; + constructor(timeUtil: TimeUtil); + protected randomBytes: Buffer; + protected constglobalCounter: number; + protected consttime: number; + protected globalCounter: number; + protected time: number; + incGlobalCounter(): number; + toHexString(byteArray: string | any[] | Buffer): string; + generate(): string; +} diff --git a/TypeScript/16ImporterUtil/types/utils/RagfairOfferHolder.d.ts b/TypeScript/16ImporterUtil/types/utils/RagfairOfferHolder.d.ts new file mode 100644 index 0000000..46d9e23 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/RagfairOfferHolder.d.ts @@ -0,0 +1,24 @@ +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +export declare class RagfairOfferHolder { + private offersById; + private offersByTemplate; + private offersByTrader; + constructor(); + getOfferById(id: string): IRagfairOffer; + getOffersByTemplate(templateId: string): Array; + getOffersByTrader(traderId: string): Array; + getOffers(): Array; + addOffers(offers: Array): void; + addOffer(offer: IRagfairOffer): void; + removeOffer(offer: IRagfairOffer): void; + removeOffers(offers: Array): void; + removeOfferByTrader(traderId: string): void; + /** + * Get an array of stale offers that are still shown to player + * @returns IRagfairOffer array + */ + getStaleOffers(time: number): Array; + private addOfferByTemplates; + private addOfferByTrader; + protected isStale(offer: IRagfairOffer, time: number): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/utils/RandomUtil.d.ts b/TypeScript/16ImporterUtil/types/utils/RandomUtil.d.ts new file mode 100644 index 0000000..fc0b05d --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/RandomUtil.d.ts @@ -0,0 +1,166 @@ +import { ILogger } from "../models/spt/utils/ILogger"; +import { JsonUtil } from "./JsonUtil"; +import { MathUtil } from "./MathUtil"; +/** + * Array of ProbabilityObjectArray which allow to randomly draw of the contained objects + * based on the relative probability of each of its elements. + * The probabilities of the contained element is not required to be normalized. + * + * Example: + * po = new ProbabilityObjectArray( + * new ProbabilityObject("a", 5), + * new ProbabilityObject("b", 1), + * new ProbabilityObject("c", 1) + * ); + * res = po.draw(10000); + * // count the elements which should be distributed according to the relative probabilities + * res.filter(x => x==="b").reduce((sum, x) => sum + 1 , 0) + */ +export declare class ProbabilityObjectArray extends Array> { + private mathUtil; + constructor(mathUtil: MathUtil, ...items: ProbabilityObject[]); + filter(callbackfn: (value: ProbabilityObject, index: number, array: ProbabilityObject[]) => any): ProbabilityObjectArray; + /** + * Calculates the normalized cumulative probability of the ProbabilityObjectArray's elements normalized to 1 + * @param {array} probValues The relative probability values of which to calculate the normalized cumulative sum + * @returns {array} Cumulative Sum normalized to 1 + */ + cumulativeProbability(probValues: number[]): number[]; + /** + * Clone this ProbabilitObjectArray + * @returns {ProbabilityObjectArray} Deep Copy of this ProbabilityObjectArray + */ + clone(): ProbabilityObjectArray; + /** + * Drop an element from the ProbabilityObjectArray + * + * @param {string} key The key of the element to drop + * @returns {ProbabilityObjectArray} ProbabilityObjectArray without the dropped element + */ + drop(key: K): ProbabilityObjectArray; + /** + * Return the data field of a element of the ProbabilityObjectArray + * @param {string} key The key of the element whose data shall be retrieved + * @returns {object} The data object + */ + data(key: K): V; + /** + * Get the relative probability of an element by its key + * + * Example: + * po = new ProbabilityObjectArray(new ProbabilityObject("a", 5), new ProbabilityObject("b", 1)) + * po.maxProbability() // returns 5 + * + * @param {string} key The key of the element whose relative probability shall be retrieved + * @return {number} The relative probability + */ + probability(key: K): number; + /** + * Get the maximum relative probability out of a ProbabilityObjectArray + * + * Example: + * po = new ProbabilityObjectArray(new ProbabilityObject("a", 5), new ProbabilityObject("b", 1)) + * po.maxProbability() // returns 5 + * + * @return {number} the maximum value of all relative probabilities in this ProbabilityObjectArray + */ + maxProbability(): number; + /** + * Get the minimum relative probability out of a ProbabilityObjectArray + * + * Example: + * po = new ProbabilityObjectArray(new ProbabilityObject("a", 5), new ProbabilityObject("b", 1)) + * po.minProbability() // returns 1 + * + * @return {number} the minimum value of all relative probabilities in this ProbabilityObjectArray + */ + minProbability(): number; + /** + * Draw random element of the ProbabilityObject N times to return an array of N keys. + * Drawing can be with or without replacement + * + * @param {integer} count The number of times we want to draw + * @param {boolean} replacement Draw with or without replacement from the input dict + * @param {array} locklist list keys which shall be replaced even if drawing without replacement + * @return {array} Array consisting of N random keys for this ProbabilityObjectArray + */ + draw(count?: number, replacement?: boolean, locklist?: Array): K[]; +} +/** + * A ProbabilityObject which is use as an element to the ProbabilityObjectArray array + * It contains a key, the relative probability as well as optional data. + */ +export declare class ProbabilityObject { + key: K; + relativeProbability: number; + data: V; + /** + * Constructor for the ProbabilityObject + * @param {string} key The key of the element + * @param {number} relativeProbability The relative probability of this element + * @param {any} data Optional data attached to the element + */ + constructor(key: K, relativeProbability: number, data?: V); +} +export declare class RandomUtil { + protected jsonUtil: JsonUtil; + protected logger: ILogger; + constructor(jsonUtil: JsonUtil, logger: ILogger); + getInt(min: number, max: number): number; + getIntEx(max: number): number; + getFloat(min: number, max: number): number; + getBool(): boolean; + getPercentOfValue(percent: number, number: number, toFixed?: number): number; + /** + * Check if number passes a check out of 100 + * @param chancePercent value check needs to be above + * @returns true if value passes check + */ + getChance100(chancePercent: number): boolean; + getStringArrayValue(arr: string[]): string; + getArrayValue(arr: T[]): T; + getKey(node: any): string; + getKeyValue(node: { + [x: string]: any; + }): any; + /** + * Draw from normal distribution + * @param {number} mu Mean of the normal distribution + * @param {number} sigma Standard deviation of the normal distribution + * @returns {number} The value drawn + */ + randn(mu: number, sigma: number): number; + /** + * Draw Random integer low inclusive, high exclusive + * if high is not set we draw from 0 to low (exclusive) + * @param {integer} low Lower bound inclusive, when high is not set, this is high + * @param {integer} high Higher bound exclusive + * @returns {integer} The random integer in [low, high) + */ + randInt(low: number, high?: number): number; + /** + * Draw a random element of the provided list N times to return an array of N random elements + * Drawing can be with or without replacement + * @param {array} list The array we want to draw randomly from + * @param {integer} count The number of times we want to draw + * @param {boolean} replacement Draw with or without replacement from the input array + * @return {array} Array consisting of N random elements + */ + drawRandomFromList(list: Array, count?: number, replacement?: boolean): Array; + /** + * Draw a random (top level) element of the provided dictionary N times to return an array of N random dictionary keys + * Drawing can be with or without replacement + * @param {any} dict The dictionary we want to draw randomly from + * @param {integer} count The number of times we want to draw + * @param {boolean} replacement Draw with ot without replacement from the input dict + * @return {array} Array consisting of N random keys of the dictionary + */ + drawRandomFromDict(dict: any, count?: number, replacement?: boolean): any[]; + getBiasedRandomNumber(min: number, max: number, shift: number, n: number): number; + /** + * Fisher-Yates shuffle an array + * @param array Array to shuffle + * @returns Shuffled array + */ + shuffle(array: Array): Array; +} diff --git a/TypeScript/16ImporterUtil/types/utils/TimeUtil.d.ts b/TypeScript/16ImporterUtil/types/utils/TimeUtil.d.ts new file mode 100644 index 0000000..1367e26 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/TimeUtil.d.ts @@ -0,0 +1,31 @@ +/** + * Utility class to handle time related problems + */ +export declare class TimeUtil { + static readonly oneHourAsSeconds = 3600; + formatTime(date: Date): string; + formatDate(date: Date): string; + getDate(): string; + getTime(): string; + /** + * Get timestamp in seconds + * @returns + */ + getTimestamp(): number; + /** + * mail in eft requires time be in a specific format + * @returns current time in format: 00:00 (hh:mm) + */ + getTimeMailFormat(): string; + /** + * Mail in eft requires date be in a specific format + * @returns current date in format: 00.00.0000 (dd.mm.yyyy) + */ + getDateMailFormat(): string; + /** + * Convert hours into seconds + * @param hours hours to convert to seconds + * @returns number + */ + getHoursAsSeconds(hours: number): number; +} diff --git a/TypeScript/16ImporterUtil/types/utils/UUidGenerator.d.ts b/TypeScript/16ImporterUtil/types/utils/UUidGenerator.d.ts new file mode 100644 index 0000000..000b719 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/UUidGenerator.d.ts @@ -0,0 +1,4 @@ +import { IUUidGenerator } from "../models/spt/utils/IUuidGenerator"; +export declare class UUidGenerator implements IUUidGenerator { + generate: () => string; +} diff --git a/TypeScript/16ImporterUtil/types/utils/VFS.d.ts b/TypeScript/16ImporterUtil/types/utils/VFS.d.ts new file mode 100644 index 0000000..267b10f --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/VFS.d.ts @@ -0,0 +1,56 @@ +/// +/// +import fs from "fs"; +import "reflect-metadata"; +import { IAsyncQueue } from "../models/spt/utils/IAsyncQueue"; +import { IUUidGenerator } from "../models/spt/utils/IUuidGenerator"; +export declare class VFS { + protected asyncQueue: IAsyncQueue; + protected uuidGenerator: IUUidGenerator; + accessFilePromisify: (path: fs.PathLike, mode?: number) => Promise; + copyFilePromisify: (src: fs.PathLike, dst: fs.PathLike, flags?: number) => Promise; + mkdirPromisify: (path: fs.PathLike, options: fs.MakeDirectoryOptions & { + recursive: true; + }) => Promise; + readFilePromisify: (path: fs.PathLike) => Promise; + writeFilePromisify: (path: fs.PathLike, data: string, options?: any) => Promise; + readdirPromisify: (path: fs.PathLike, options?: BufferEncoding | { + encoding: BufferEncoding; + withFileTypes?: false; + }) => Promise; + statPromisify: (path: fs.PathLike, options?: fs.StatOptions & { + bigint?: false; + }) => Promise; + unlinkPromisify: (path: fs.PathLike) => Promise; + rmdirPromisify: (path: fs.PathLike) => Promise; + constructor(asyncQueue: IAsyncQueue, uuidGenerator: IUUidGenerator); + exists(filepath: fs.PathLike): boolean; + existsAsync(filepath: fs.PathLike): Promise; + copyFile(filepath: fs.PathLike, target: fs.PathLike): void; + copyAsync(filepath: fs.PathLike, target: fs.PathLike): Promise; + createDir(filepath: string): void; + createDirAsync(filepath: string): Promise; + copyDir(filepath: string, target: string, fileExtensions?: string | string[]): void; + copyDirAsync(filepath: string, target: string, fileExtensions: string | string[]): Promise; + readFile(...args: Parameters): string; + readFileAsync(path: fs.PathLike): Promise; + private isBuffer; + writeFile(filepath: any, data?: string, append?: boolean, atomic?: boolean): void; + writeFileAsync(filepath: any, data?: string, append?: boolean, atomic?: boolean): Promise; + getFiles(filepath: string): string[]; + getFilesAsync(filepath: string): Promise; + getDirs(filepath: string): string[]; + getDirsAsync(filepath: string): Promise; + removeFile(filepath: string): void; + removeFileAsync(filepath: string): Promise; + removeDir(filepath: string): void; + removeDirAsync(filepath: string): Promise; + private lockFileSync; + private checkFileSync; + private unlockFileSync; + getFileExtension(filepath: string): string; + stripExtension(filepath: string): string; + minifyAllJsonInDirRecursive(filepath: string): Promise; + minifyAllJsonInDirRecursiveAsync(filepath: string): Promise; + getFilesOfType(directory: string, fileType: string, files?: string[]): string[]; +} diff --git a/TypeScript/16ImporterUtil/types/utils/Watermark.d.ts b/TypeScript/16ImporterUtil/types/utils/Watermark.d.ts new file mode 100644 index 0000000..f870cf1 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/Watermark.d.ts @@ -0,0 +1,46 @@ +import { ICoreConfig } from "../models/spt/config/ICoreConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { LocalisationService } from "../services/LocalisationService"; +export declare class WatermarkLocale { + protected localisationService: LocalisationService; + constructor(localisationService: LocalisationService); + protected watermark: { + description: string[]; + warning: string[]; + modding: string[]; + }; + getDescription(): string[]; + getWarning(): string[]; + getModding(): string[]; +} +export declare class Watermark { + protected logger: ILogger; + protected configServer: ConfigServer; + protected localisationService: LocalisationService; + protected watermarkLocale?: WatermarkLocale; + protected akiConfig: ICoreConfig; + constructor(logger: ILogger, configServer: ConfigServer, localisationService: LocalisationService, watermarkLocale?: WatermarkLocale); + protected text: string[]; + protected versionLabel: string; + initialize(): void; + /** + * Get a version string (x.x.x) or (x.x.x-BLEEDINGEDGE) OR (X.X.X (18xxx)) + * @param withEftVersion Include the eft version this spt version was made for + * @returns string + */ + getVersionTag(withEftVersion?: boolean): string; + /** + * Get text shown in game on screen, can't be translated as it breaks bsgs client when certian characters are used + * @returns string + */ + getInGameVersionLabel(): string; + /** Set window title */ + setTitle(): void; + /** Reset console cursor to top */ + resetCursor(): void; + /** Draw the watermark */ + draw(): void; + /** Caculate text length */ + protected textLength(s: string): number; +} diff --git a/TypeScript/16ImporterUtil/types/utils/collections/lists/LinkedList.d.ts b/TypeScript/16ImporterUtil/types/utils/collections/lists/LinkedList.d.ts new file mode 100644 index 0000000..aca0659 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/collections/lists/LinkedList.d.ts @@ -0,0 +1,30 @@ +export declare class LinkedList { + private head; + private tail; + add(t: T): void; + addRange(list: T[]): void; + getHead(): LinkedListNode; + getTail(): LinkedListNode; + isEmpty(): boolean; + getSize(): number; + removeFirst(): LinkedListNode; + removeLast(): LinkedListNode; + indexOf(func: (t: T) => boolean): number; + contains(func: (t: T) => boolean): boolean; + forEachNode(func: (t: LinkedListNode) => void): void; + forEachValue(func: (t: T) => void): void; + findFirstNode(func: (t: LinkedListNode) => boolean): LinkedListNode; + findFirstValue(func: (t: T) => boolean): T; + toList(): T[]; +} +export declare class LinkedListNode { + private previous; + private value; + private next; + constructor(value: T, previous?: LinkedListNode, next?: LinkedListNode); + getValue(): T; + getNextNode(): LinkedListNode; + setNextNode(node: LinkedListNode): void; + getPreviousNode(): LinkedListNode; + setPreviousNode(node: LinkedListNode): void; +} diff --git a/TypeScript/16ImporterUtil/types/utils/collections/queue/Queue.d.ts b/TypeScript/16ImporterUtil/types/utils/collections/queue/Queue.d.ts new file mode 100644 index 0000000..645d462 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/collections/queue/Queue.d.ts @@ -0,0 +1,12 @@ +export declare class Queue { + private elements; + private head; + private tail; + constructor(); + enqueue(element: T): void; + enqueueAll(elements: T[]): void; + dequeue(): T; + peek(): T; + getLength(): number; + isEmpty(): boolean; +} diff --git a/TypeScript/16ImporterUtil/types/utils/logging/AbstractWinstonLogger.d.ts b/TypeScript/16ImporterUtil/types/utils/logging/AbstractWinstonLogger.d.ts new file mode 100644 index 0000000..1ae1100 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/logging/AbstractWinstonLogger.d.ts @@ -0,0 +1,69 @@ +/// +import fs from "fs"; +import winston from "winston"; +import { Daum } from "../../models/eft/itemEvent/IItemEventRouterRequest"; +import { LogBackgroundColor } from "../../models/spt/logging/LogBackgroundColor"; +import { LogTextColor } from "../../models/spt/logging/LogTextColor"; +import { SptLogger } from "../../models/spt/logging/SptLogger"; +import { IAsyncQueue } from "../../models/spt/utils/IAsyncQueue"; +import { ILogger } from "../../models/spt/utils/ILogger"; +import { IUUidGenerator } from "../../models/spt/utils/IUuidGenerator"; +export declare abstract class AbstractWinstonLogger implements ILogger { + protected asyncQueue: IAsyncQueue; + protected uuidGenerator: IUUidGenerator; + protected showDebugInConsole: boolean; + protected filePath: string; + protected logLevels: { + levels: { + error: number; + warn: number; + succ: number; + info: number; + custom: number; + debug: number; + }; + colors: { + error: string; + warn: string; + succ: string; + info: string; + custom: string; + debug: string; + }; + bgColors: { + default: string; + blackBG: string; + redBG: string; + greenBG: string; + yellowBG: string; + blueBG: string; + magentaBG: string; + cyanBG: string; + whiteBG: string; + }; + }; + protected logger: winston.Logger & SptLogger; + protected writeFilePromisify: (path: fs.PathLike, data: string, options?: any) => Promise; + constructor(asyncQueue: IAsyncQueue, uuidGenerator: IUUidGenerator); + protected abstract isLogToFile(): boolean; + protected abstract isLogToConsole(): boolean; + protected abstract isLogExceptions(): boolean; + protected abstract getFilePath(): string; + protected abstract getFileName(): string; + protected getLogMaxSize(): string; + protected getLogMaxFiles(): string; + writeToLogFile(data: string | Daum): Promise; + log(data: string | Error | Record, color: string, backgroundColor?: string): Promise; + error(data: string | Record): Promise; + warning(data: string | Record): Promise; + success(data: string | Record): Promise; + info(data: string | Record): Promise; + /** + * Log to console text with a customisable text and background color. Background defaults to black + * @param data text to log + * @param textColor color of text + * @param backgroundColor color of background + */ + logWithColor(data: string | Record, textColor: LogTextColor, backgroundColor?: LogBackgroundColor): Promise; + debug(data: string | Record, onlyShowInConsole?: boolean): Promise; +} diff --git a/TypeScript/16ImporterUtil/types/utils/logging/WinstonMainLogger.d.ts b/TypeScript/16ImporterUtil/types/utils/logging/WinstonMainLogger.d.ts new file mode 100644 index 0000000..3c67902 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/logging/WinstonMainLogger.d.ts @@ -0,0 +1,13 @@ +import { IAsyncQueue } from "../../models/spt/utils/IAsyncQueue"; +import { IUUidGenerator } from "../../models/spt/utils/IUuidGenerator"; +import { AbstractWinstonLogger } from "./AbstractWinstonLogger"; +export declare class WinstonMainLogger extends AbstractWinstonLogger { + protected asyncQueue: IAsyncQueue; + protected uuidGenerator: IUUidGenerator; + constructor(asyncQueue: IAsyncQueue, uuidGenerator: IUUidGenerator); + protected isLogExceptions(): boolean; + protected isLogToFile(): boolean; + protected isLogToConsole(): boolean; + protected getFilePath(): string; + protected getFileName(): string; +} diff --git a/TypeScript/16ImporterUtil/types/utils/logging/WinstonRequestLogger.d.ts b/TypeScript/16ImporterUtil/types/utils/logging/WinstonRequestLogger.d.ts new file mode 100644 index 0000000..1475e43 --- /dev/null +++ b/TypeScript/16ImporterUtil/types/utils/logging/WinstonRequestLogger.d.ts @@ -0,0 +1,14 @@ +import { IAsyncQueue } from "../../models/spt/utils/IAsyncQueue"; +import { IUUidGenerator } from "../../models/spt/utils/IUuidGenerator"; +import { AbstractWinstonLogger } from "./AbstractWinstonLogger"; +export declare class WinstonRequestLogger extends AbstractWinstonLogger { + protected asyncQueue: IAsyncQueue; + protected uuidGenerator: IUUidGenerator; + constructor(asyncQueue: IAsyncQueue, uuidGenerator: IUUidGenerator); + protected isLogExceptions(): boolean; + protected isLogToFile(): boolean; + protected isLogToConsole(): boolean; + protected getFilePath(): string; + protected getFileName(): string; + protected getLogMaxSize(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/.eslintignore b/TypeScript/17AsyncImporterWithDependency1/.eslintignore new file mode 100644 index 0000000..9922d9a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/.eslintignore @@ -0,0 +1,9 @@ +# Exclude these folders from linting +node_modules +dist/ +types/ + +# Exclude these filetypes from linting +*.json +*.txt +*.exe \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency1/.eslintrc.json b/TypeScript/17AsyncImporterWithDependency1/.eslintrc.json new file mode 100644 index 0000000..98e7a0c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/.eslintrc.json @@ -0,0 +1,81 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": [ + "@typescript-eslint" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "max-len": [ + "warn", + { + "code":100 + } + ], + "@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 + } + ] + } +} \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency1/README.md b/TypeScript/17AsyncImporterWithDependency1/README.md new file mode 100644 index 0000000..9e3b8bc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/README.md @@ -0,0 +1,64 @@ + +This project was created to automate most parts of building and setting up an environment. + +## **NodeJS:** + +The first step would be to install nodejs on your pc, the version you NEED is **16.17.1** + +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/dist/v16.17.1/node-v16.17.1-x64.msi + +A system reboot may be needed after install. + +## **IDE:** + +The second step is having an IDE ready. We've setup a VSCodium workspace file to help with this. + +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 Workspace 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. \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency1/config/config.json b/TypeScript/17AsyncImporterWithDependency1/config/config.json new file mode 100644 index 0000000..2cc3a9f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/config/config.json @@ -0,0 +1,3 @@ +{ + "myProperty": "wow" +} \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency1/config/db/config.json b/TypeScript/17AsyncImporterWithDependency1/config/db/config.json new file mode 100644 index 0000000..9fc7661 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/config/db/config.json @@ -0,0 +1,3 @@ +{ + "myProperty": "wow inside db" +} \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency1/config/db/moredb/config.json b/TypeScript/17AsyncImporterWithDependency1/config/db/moredb/config.json new file mode 100644 index 0000000..9a6d9e3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/config/db/moredb/config.json @@ -0,0 +1,3 @@ +{ + "myProperty": "wow inside db inside moredb" +} \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency1/mod.code-workspace b/TypeScript/17AsyncImporterWithDependency1/mod.code-workspace new file mode 100644 index 0000000..6732c67 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/mod.code-workspace @@ -0,0 +1,12 @@ +{ + "folders": [ + { + "path": "." + } + ], + "extensions": { + "recommendations": [ + "dbaeumer.vscode-eslint" + ] + } +} \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency1/package.json b/TypeScript/17AsyncImporterWithDependency1/package.json new file mode 100644 index 0000000..a034128 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/package.json @@ -0,0 +1,26 @@ +{ + "name": "AsyncWithDependency1", + "version": "1.0.0", + "main": "src/mod.js", + "license": "MIT", + "author": "Chomp", + "akiVersion": "~3.5", + "modDependencies": { + "17AsyncImporterWithDependency2": "~1" + }, + "scripts": { + "setup": "npm i", + "build": "node ./packageBuild.ts" + }, + "devDependencies": { + "@types/node": "16.18.10", + "@typescript-eslint/eslint-plugin": "5.46.1", + "@typescript-eslint/parser": "5.46.1", + "bestzip": "2.2.1", + "eslint": "8.30.0", + "fs-extra": "11.1.0", + "glob": "8.0.3", + "tsyringe": "4.7.0", + "typescript": "4.9.4" + } +} \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency1/packageBuild.ts b/TypeScript/17AsyncImporterWithDependency1/packageBuild.ts new file mode 100644 index 0000000..c829979 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/packageBuild.ts @@ -0,0 +1,72 @@ +#!/usr/bin/env node + +// This is a simple script used to build a mod package. The script will copy necessary files to the build directory +// and compress the build directory into a zip file that can be easily shared. + +const fs = require("fs-extra"); +const glob = require("glob"); +const zip = require('bestzip'); +const path = require("path"); + +// Load the package.json file to get some information about the package so we can name things appropriately. This is +// atypical, and you would never do this in a production environment, but this script is only used for development so +// it's fine in this case. Some of these values are stored in environment variables, but those differ between node +// versions; the 'author' value is not available after node v14. +const { author, name:packageName, version } = require("./package.json"); + +// Generate the name of the package, stripping out all non-alphanumeric characters in the 'author' and 'name'. +const modName = `${author.replace(/[^a-z0-9]/gi, "")}-${packageName.replace(/[^a-z0-9]/gi, "")}-${version}`; +console.log(`Generated package name: ${modName}`); + +// Delete the old build directory and compressed package file. +fs.rmSync(`${__dirname}/dist`, { force: true, recursive: true }); +console.log("Previous build files deleted."); + +// Generate a list of files that should not be copied over into the distribution directory. This is a blacklist to ensure +// we always copy over additional files and directories that authors may have added to their project. This may need to be +// expanded upon by the mod author to allow for node modules that are used within the mod; example commented out below. +const ignoreList = [ + "node_modules/", + // "node_modules/!(weighted|glob)", // Instead of excluding the entire node_modules directory, allow two node modules. + "src/**/*.js", + "types/", + ".git/", + ".gitea/", + ".eslintignore", + ".eslintrc.json", + ".gitignore", + ".DS_Store", + "packageBuild.ts", + "mod.code-workspace", + "package-lock.json", + "tsconfig.json" +]; +const exclude = glob.sync(`{${ignoreList.join(",")}}`, { realpath: true, dot: true }); + +// For some reason these basic-bitch functions won't allow us to copy a directory into itself, so we have to resort to +// using a temporary directory, like an idiot. Excuse the normalize spam; some modules cross-platform, some don't... +fs.copySync(__dirname, path.normalize(`${__dirname}/../~${modName}`), {filter:(filePath) => +{ + return !exclude.includes(filePath); +}}); +fs.moveSync(path.normalize(`${__dirname}/../~${modName}`), path.normalize(`${__dirname}/${modName}`), { overwrite: true }); +fs.copySync(path.normalize(`${__dirname}/${modName}`), path.normalize(`${__dirname}/dist`)); +console.log("Build files copied."); + +// Compress the files for easy distribution. The compressed file is saved into the dist directory. When uncompressed we +// need to be sure that it includes a directory that the user can easily copy into their game mods directory. +zip({ + source: modName, + destination: `dist/${modName}.zip`, + cwd: __dirname +}).catch(function(err) +{ + console.error("A bestzip error has occurred: ", err.stack); +}).then(function() +{ + console.log(`Compressed mod package to: /dist/${modName}.zip`); + + // Now that we're done with the compression we can delete the temporary build directory. + fs.rmSync(`${__dirname}/${modName}`, { force: true, recursive: true }); + console.log("Build successful! your zip file has been created and is ready to be uploaded to hub.sp-tarkov.com/files/"); +}); \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency1/src/mod.ts b/TypeScript/17AsyncImporterWithDependency1/src/mod.ts new file mode 100644 index 0000000..13b2fc7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/src/mod.ts @@ -0,0 +1,30 @@ +import { PreAkiModLoader } from "@spt-aki/loaders/PreAkiModLoader"; +import { IPreAkiLoadModAsync } from "@spt-aki/models/external/IPreAkiLoadModAsync"; +import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; +import { ImporterUtil } from "@spt-aki/utils/ImporterUtil"; +import { DependencyContainer } from "tsyringe"; +import { ConfigsModelBase } from "./model/ConfigsModel"; + +class Mod implements IPreAkiLoadModAsync { + public async preAkiLoadAsync(container: DependencyContainer): Promise { + // get logger + const logger = container.resolve("WinstonLogger"); + + const importerUtil = container.resolve("ImporterUtil"); + const modImporter = container.resolve("PreAkiModLoader"); + const path = modImporter.getModPath("16ImporterUtil"); + + const configPath = `${path}config/`; + return importerUtil + .loadAsync(configPath) + .then((configs) => { + logger.info( + `17ImporterWithDependency1 Configurations found: ${JSON.stringify( + configs, + )}`, + ); + }); + } +} + +module.exports = { mod: new Mod() }; diff --git a/TypeScript/17AsyncImporterWithDependency1/src/model/ConfigsModel.ts b/TypeScript/17AsyncImporterWithDependency1/src/model/ConfigsModel.ts new file mode 100644 index 0000000..07c5138 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/src/model/ConfigsModel.ts @@ -0,0 +1,17 @@ +export class ConfigsModelBase { + db: ConfigsModelDb; + config: ConfigModel; +} + +export class ConfigsModelDb { + moredb: ConfigsModelMoreDb; + config: ConfigModel; +} + +export class ConfigsModelMoreDb { + config: ConfigModel; +} + +export class ConfigModel { + myProperty: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/tsconfig.json b/TypeScript/17AsyncImporterWithDependency1/tsconfig.json new file mode 100644 index 0000000..8151310 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "allowJs": true, + "module": "CommonJS", + "target": "es2020", + "moduleResolution": "node", + "esModuleInterop": true, + "downlevelIteration": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "resolveJsonModule": true, + "outDir": "tmp", + "baseUrl": ".", + "paths": { + "@spt-aki/*": ["./types/*"] + } + }, + "lib": [ + "es2020" + ], + "include": [ + "src/*", + "src/**/*" + ] +} \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency1/types/ErrorHandler.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/ErrorHandler.d.ts new file mode 100644 index 0000000..69b0bcd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/ErrorHandler.d.ts @@ -0,0 +1,6 @@ +export declare class ErrorHandler { + private logger; + private readLine; + constructor(); + handleCriticalError(err: any): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/Program.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/Program.d.ts new file mode 100644 index 0000000..afe5216 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/Program.d.ts @@ -0,0 +1,5 @@ +export declare class Program { + private errorHandler; + constructor(); + start(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/TYPES.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/TYPES.d.ts new file mode 100644 index 0000000..6407c3a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/TYPES.d.ts @@ -0,0 +1,3 @@ +export declare const TYPES: { + [name: string]: symbol; +}; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/BotCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/BotCallbacks.d.ts new file mode 100644 index 0000000..827015e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/BotCallbacks.d.ts @@ -0,0 +1,36 @@ +import { BotController } from "../controllers/BotController"; +import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class BotCallbacks { + protected botController: BotController; + protected httpResponse: HttpResponseUtil; + constructor(botController: BotController, httpResponse: HttpResponseUtil); + /** + * Handle singleplayer/settings/bot/limit + * @returns string + */ + getBotLimit(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handle singleplayer/settings/bot/difficulty + * @returns string + */ + getBotDifficulty(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handle client/game/bot/generate + * @returns IGetBodyResponseData + */ + generateBots(url: string, info: IGenerateBotsRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle singleplayer/settings/bot/maxCap + * @returns string + */ + getBotCap(): string; + /** + * Handle singleplayer/settings/bot/getBotBehaviours + * @returns string + */ + getBotBehaviours(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/BundleCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/BundleCallbacks.d.ts new file mode 100644 index 0000000..b7e1703 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/BundleCallbacks.d.ts @@ -0,0 +1,18 @@ +import { BundleLoader } from "../loaders/BundleLoader"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { HttpFileUtil } from "../utils/HttpFileUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class BundleCallbacks { + protected logger: ILogger; + protected httpResponse: HttpResponseUtil; + protected httpFileUtil: HttpFileUtil; + protected bundleLoader: BundleLoader; + protected configServer: ConfigServer; + protected httpConfig: IHttpConfig; + constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpFileUtil: HttpFileUtil, 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; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/CustomizationCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/CustomizationCallbacks.d.ts new file mode 100644 index 0000000..75d5701 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/CustomizationCallbacks.d.ts @@ -0,0 +1,29 @@ +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 { IGetSuitsResponse } from "../models/eft/customization/IGetSuitsResponse"; +import { IWearClothingRequestData } from "../models/eft/customization/IWearClothingRequestData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { SaveServer } from "../servers/SaveServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class CustomizationCallbacks { + protected customizationController: CustomizationController; + protected saveServer: SaveServer; + protected httpResponse: HttpResponseUtil; + constructor(customizationController: CustomizationController, saveServer: SaveServer, httpResponse: HttpResponseUtil); + /** + * Handles client/trading/customization/storage + * @returns + */ + getSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/trading/customization + * @returns ISuit[] + */ + getTraderSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse; + buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/DataCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/DataCallbacks.d.ts new file mode 100644 index 0000000..26f5899 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/DataCallbacks.d.ts @@ -0,0 +1,74 @@ +import { HideoutController } from "../controllers/HideoutController"; +import { RagfairController } from "../controllers/RagfairController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IGlobals } from "../models/eft/common/IGlobals"; +import { ICustomizationItem } from "../models/eft/common/tables/ICustomizationItem"; +import { IHandbookBase } from "../models/eft/common/tables/IHandbookBase"; +import { IQuest } from "../models/eft/common/tables/IQuest"; +import { IGetItemPricesResponse } from "../models/eft/game/IGetItemPricesResponse"; +import { IHideoutArea } from "../models/eft/hideout/IHideoutArea"; +import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction"; +import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase"; +import { IHideoutSettingsBase } from "../models/eft/hideout/IHideoutSettingsBase"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { ISettingsBase } from "../models/spt/server/ISettingsBase"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +/** + * Handle client requests + */ +export declare class DataCallbacks { + protected httpResponse: HttpResponseUtil; + protected databaseServer: DatabaseServer; + protected ragfairController: RagfairController; + protected hideoutController: HideoutController; + constructor(httpResponse: HttpResponseUtil, databaseServer: DatabaseServer, ragfairController: RagfairController, hideoutController: HideoutController); + /** + * Handles client/settings + * @returns ISettingsBase + */ + getSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/globals + * @returns IGlobals + */ + getGlobals(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/items + * @returns string + */ + getTemplateItems(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handles client/handbook/templates + * @returns IHandbookBase + */ + getTemplateHandbook(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/customization + * @returns Record>; + /** + * Handles client/account/customization + * @returns string[] + */ + getTemplateCharacter(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateQuests(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutAreas(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + gethideoutProduction(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutScavcase(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocalesLanguages(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + getLocalesMenu(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocalesGlobal(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handle client/hideout/qte/list + */ + getQteList(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handle client/items/prices/ + * Called when viewing a traders assorts + * TODO - fully implement this + */ + getItemPrices(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/DialogueCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/DialogueCallbacks.d.ts new file mode 100644 index 0000000..63d7163 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/DialogueCallbacks.d.ts @@ -0,0 +1,58 @@ +import { DialogueController } from "../controllers/DialogueController"; +import { OnUpdate } from "../di/OnUpdate"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IChatServer } from "../models/eft/dialog/IChatServer"; +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 implements OnUpdate { + protected hashUtil: HashUtil; + protected timeUtil: TimeUtil; + protected httpResponse: HttpResponseUtil; + protected dialogueController: DialogueController; + constructor(hashUtil: HashUtil, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, dialogueController: DialogueController); + /** + * Handles client/friend/list + * @returns IGetFriendListDataResponse + */ + getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/chatServer/list + * @returns + */ + getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData; + removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData; + pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData; + unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData; + setRead(url: string, info: ISetDialogReadRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/mail/dialog/getAllAttachments + * @returns IGetAllAttachmentsResponse + */ + getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData; + listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; + sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData; + onUpdate(timeSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/GameCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/GameCallbacks.d.ts new file mode 100644 index 0000000..3a6b7e6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/GameCallbacks.d.ts @@ -0,0 +1,55 @@ +import { GameController } from "../controllers/GameController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { ICheckVersionResponse } from "../models/eft/game/ICheckVersionResponse"; +import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse"; +import { IGameEmptyCrcRequestData } from "../models/eft/game/IGameEmptyCrcRequestData"; +import { IGameKeepAliveResponse } from "../models/eft/game/IGameKeepAliveResponse"; +import { IGameLogoutResponseData } from "../models/eft/game/IGameLogoutResponseData"; +import { IGameStartResponse } from "../models/eft/game/IGameStartResponse"; +import { IReportNicknameRequestData } from "../models/eft/game/IReportNicknameRequestData"; +import { IServerDetails } from "../models/eft/game/IServerDetails"; +import { IVersionValidateRequestData } from "../models/eft/game/IVersionValidateRequestData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { Watermark } from "../utils/Watermark"; +declare class GameCallbacks { + protected httpResponse: HttpResponseUtil; + protected watermark: Watermark; + protected gameController: GameController; + constructor(httpResponse: HttpResponseUtil, watermark: Watermark, gameController: GameController); + /** + * Handle client/game/version/validate + * @returns INullResponseData + */ + versionValidate(url: string, info: IVersionValidateRequestData, sessionID: string): INullResponseData; + /** + * Handle client/game/start + * @returns IGameStartResponse + */ + gameStart(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/logout + * @returns IGameLogoutResponseData + */ + gameLogout(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/config + * @returns IGameConfigResponse + */ + getGameConfig(url: string, info: IGameEmptyCrcRequestData, sessionID: string): IGetBodyResponseData; + getServer(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + validateGameVersion(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/keepalive + * @returns IGameKeepAliveResponse + */ + gameKeepalive(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle singleplayer/settings/version + * @returns string + */ + getVersion(url: string, info: IEmptyRequestData, sessionID: string): string; + reportNickname(url: string, info: IReportNicknameRequestData, sessionID: string): INullResponseData; +} +export { GameCallbacks }; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/HandbookCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/HandbookCallbacks.d.ts new file mode 100644 index 0000000..6bd3909 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/HandbookCallbacks.d.ts @@ -0,0 +1,8 @@ +import { HandbookController } from "../controllers/HandbookController"; +import { OnLoad } from "../di/OnLoad"; +export declare class HandbookCallbacks implements OnLoad { + protected handbookController: HandbookController; + constructor(handbookController: HandbookController); + onLoad(): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/HealthCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/HealthCallbacks.d.ts new file mode 100644 index 0000000..bd3e507 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/HealthCallbacks.d.ts @@ -0,0 +1,48 @@ +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 { IWorkoutData } from "../models/eft/health/IWorkoutData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class HealthCallbacks { + protected httpResponse: HttpResponseUtil; + protected profileHelper: ProfileHelper; + protected healthController: HealthController; + constructor(httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, healthController: HealthController); + /** + * Custom aki server request found in modules/HealthSynchronizer.cs + * @param url + * @param info HealthListener.Instance.CurrentHealth class + * @param sessionID session id + * @returns empty response, no data sent back to client + */ + syncHealth(url: string, info: ISyncHealthRequestData, sessionID: string): IGetBodyResponseData; + /** + * Custom aki server request found in modules/QTEPatch.cs + * @param url + * @param info HealthListener.Instance.CurrentHealth class + * @param sessionID session id + * @returns empty response, no data sent back to client + */ + handleWorkoutEffects(url: string, info: IWorkoutData, sessionID: string): IGetBodyResponseData; + /** + * Handle Eat + * @returns IItemEventRouterResponse + */ + offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle Heal + * @returns IItemEventRouterResponse + */ + offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle RestoreHealth + * @returns IItemEventRouterResponse + */ + healthTreatment(pmcData: IPmcData, info: IHealthTreatmentRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/HideoutCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/HideoutCallbacks.d.ts new file mode 100644 index 0000000..d0247f9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/HideoutCallbacks.d.ts @@ -0,0 +1,75 @@ +import { HideoutController } from "../controllers/HideoutController"; +import { OnUpdate } from "../di/OnUpdate"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IHandleQTEEventRequestData } from "../models/eft/hideout/IHandleQTEEventRequestData"; +import { IHideoutContinuousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinuousProductionStartRequestData"; +import { IHideoutImproveAreaRequestData } from "../models/eft/hideout/IHideoutImproveAreaRequestData"; +import { 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 { IRecordShootingRangePoints } from "../models/eft/hideout/IRecordShootingRangePoints"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IHideoutConfig } from "../models/spt/config/IHideoutConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class HideoutCallbacks implements OnUpdate { + protected hideoutController: HideoutController; + protected configServer: ConfigServer; + protected hideoutConfig: IHideoutConfig; + constructor(hideoutController: HideoutController, // TODO: delay needed + configServer: ConfigServer); + /** + * Handle HideoutUpgrade + */ + upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutUpgradeComplete + */ + upgradeComplete(pmcData: IPmcData, body: IHideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutPutItemsInAreaSlots + */ + putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutTakeItemsFromAreaSlots + */ + takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutToggleArea + */ + toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutSingleProductionStart + */ + singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutScavCaseProductionStart + */ + scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutContinuousProductionStart + */ + continuousProductionStart(pmcData: IPmcData, body: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutTakeProduction + */ + takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutQuickTimeEvent + */ + handleQTEEvent(pmcData: IPmcData, request: IHandleQTEEventRequestData, sessionId: string): IItemEventRouterResponse; + /** + * Handle client/game/profile/items/moving - RecordShootingRangePoints + */ + recordShootingRangePoints(pmcData: IPmcData, request: IRecordShootingRangePoints, sessionId: string): IItemEventRouterResponse; + /** + * Handle client/game/profile/items/moving - RecordShootingRangePoints + */ + improveArea(pmcData: IPmcData, request: IHideoutImproveAreaRequestData, sessionId: string): IItemEventRouterResponse; + onUpdate(timeSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/HttpCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/HttpCallbacks.d.ts new file mode 100644 index 0000000..10794fa --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/HttpCallbacks.d.ts @@ -0,0 +1,9 @@ +import { OnLoad } from "../di/OnLoad"; +import { HttpServer } from "../servers/HttpServer"; +export declare class HttpCallbacks implements OnLoad { + protected httpServer: HttpServer; + constructor(httpServer: HttpServer); + onLoad(): Promise; + getRoute(): string; + getImage(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/InraidCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/InraidCallbacks.d.ts new file mode 100644 index 0000000..918bfaf --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/InraidCallbacks.d.ts @@ -0,0 +1,49 @@ +import { InraidController } from "../controllers/InraidController"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData"; +import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +/** + * Handle client requests + */ +export declare class InraidCallbacks { + protected inraidController: InraidController; + protected httpResponse: HttpResponseUtil; + constructor(inraidController: InraidController, httpResponse: HttpResponseUtil); + /** + * Handle client/location/getLocalloot + * @param url + * @param info register player request + * @param sessionID Session id + * @returns Null http response + */ + registerPlayer(url: string, info: IRegisterPlayerRequestData, sessionID: string): INullResponseData; + /** + * Handle raid/profile/save + * @param url + * @param info Save progress request + * @param sessionID Session id + * @returns Null http response + */ + saveProgress(url: string, info: ISaveProgressRequestData, sessionID: string): INullResponseData; + /** + * Handle singleplayer/settings/raid/endstate + * @returns + */ + getRaidEndState(): string; + /** + * Handle singleplayer/settings/raid/menu + * @returns JSON as string + */ + getRaidMenuSettings(): string; + /** + * Handle singleplayer/settings/weapon/durability + * @returns + */ + getWeaponDurability(): string; + /** + * Handle singleplayer/airdrop/config + * @returns JSON as string + */ + getAirdropConfig(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/InsuranceCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/InsuranceCallbacks.d.ts new file mode 100644 index 0000000..aea0756 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/InsuranceCallbacks.d.ts @@ -0,0 +1,32 @@ +import { InsuranceController } from "../controllers/InsuranceController"; +import { OnUpdate } from "../di/OnUpdate"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IGetInsuranceCostRequestData } from "../models/eft/insurance/IGetInsuranceCostRequestData"; +import { IGetInsuranceCostResponseData } from "../models/eft/insurance/IGetInsuranceCostResponseData"; +import { IInsureRequestData } from "../models/eft/insurance/IInsureRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { InsuranceService } from "../services/InsuranceService"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class InsuranceCallbacks implements OnUpdate { + protected insuranceController: InsuranceController; + protected insuranceService: InsuranceService; + protected httpResponse: HttpResponseUtil; + protected configServer: ConfigServer; + protected insuranceConfig: IInsuranceConfig; + constructor(insuranceController: InsuranceController, insuranceService: InsuranceService, httpResponse: HttpResponseUtil, configServer: ConfigServer); + /** + * Handle client/insurance/items/list/cost + * @returns IGetInsuranceCostResponseData + */ + getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle Insure + * @returns IItemEventRouterResponse + */ + insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse; + onUpdate(secondsSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/InventoryCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/InventoryCallbacks.d.ts new file mode 100644 index 0000000..46bf6fd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/InventoryCallbacks.d.ts @@ -0,0 +1,41 @@ +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 { IOpenRandomLootContainerRequestData } from "../models/eft/inventory/IOpenRandomLootContainerRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class InventoryCallbacks { + protected inventoryController: InventoryController; + constructor(inventoryController: InventoryController); + moveItem(pmcData: IPmcData, body: IInventoryMoveRequestData, sessionID: string): IItemEventRouterResponse; + removeItem(pmcData: IPmcData, body: IInventoryRemoveRequestData, sessionID: string): IItemEventRouterResponse; + splitItem(pmcData: IPmcData, body: IInventorySplitRequestData, sessionID: string): IItemEventRouterResponse; + mergeItem(pmcData: IPmcData, body: IInventoryMergeRequestData, sessionID: string): IItemEventRouterResponse; + transferItem(pmcData: IPmcData, body: IInventoryTransferRequestData, sessionID: string): IItemEventRouterResponse; + swapItem(pmcData: IPmcData, body: IInventorySwapRequestData, sessionID: string): IItemEventRouterResponse; + foldItem(pmcData: IPmcData, body: IInventoryFoldRequestData, sessionID: string): IItemEventRouterResponse; + toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse; + tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse; + bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse; + examineItem(pmcData: IPmcData, body: IInventoryExamineRequestData, sessionID: string): IItemEventRouterResponse; + readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse; + sortInventory(pmcData: IPmcData, body: IInventorySortRequestData, sessionID: string): IItemEventRouterResponse; + createMapMarker(pmcData: IPmcData, body: IInventoryCreateMarkerRequestData, sessionID: string): IItemEventRouterResponse; + deleteMapMarker(pmcData: IPmcData, body: IInventoryDeleteMarkerRequestData, sessionID: string): IItemEventRouterResponse; + editMapMarker(pmcData: IPmcData, body: IInventoryEditMarkerRequestData, sessionID: string): IItemEventRouterResponse; + openRandomLootContainer(pmcData: IPmcData, body: IOpenRandomLootContainerRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/ItemEventCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/ItemEventCallbacks.d.ts new file mode 100644 index 0000000..fbb0b5f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/ItemEventCallbacks.d.ts @@ -0,0 +1,13 @@ +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { Warning } from "../models/eft/itemEvent/IItemEventRouterBase"; +import { IItemEventRouterRequest } from "../models/eft/itemEvent/IItemEventRouterRequest"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ItemEventRouter } from "../routers/ItemEventRouter"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class ItemEventCallbacks { + protected httpResponse: HttpResponseUtil; + protected itemEventRouter: ItemEventRouter; + constructor(httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter); + handleEvents(url: string, info: IItemEventRouterRequest, sessionID: string): IGetBodyResponseData; + protected getErrorCode(warnings: Warning[]): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/LauncherCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/LauncherCallbacks.d.ts new file mode 100644 index 0000000..c022325 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/LauncherCallbacks.d.ts @@ -0,0 +1,28 @@ +import { LauncherController } from "../controllers/LauncherController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IChangeRequestData } from "../models/eft/launcher/IChangeRequestData"; +import { ILoginRequestData } from "../models/eft/launcher/ILoginRequestData"; +import { IRegisterData } from "../models/eft/launcher/IRegisterData"; +import { IRemoveProfileData } from "../models/eft/launcher/IRemoveProfileData"; +import { SaveServer } from "../servers/SaveServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { Watermark } from "../utils/Watermark"; +declare class LauncherCallbacks { + protected httpResponse: HttpResponseUtil; + protected launcherController: LauncherController; + protected saveServer: SaveServer; + protected watermark: Watermark; + constructor(httpResponse: HttpResponseUtil, launcherController: LauncherController, saveServer: SaveServer, watermark: Watermark); + connect(): string; + login(url: string, info: ILoginRequestData, sessionID: string): string; + register(url: string, info: IRegisterData, sessionID: string): "FAILED" | "OK"; + get(url: string, info: ILoginRequestData, sessionID: string): string; + changeUsername(url: string, info: IChangeRequestData, sessionID: string): "FAILED" | "OK"; + changePassword(url: string, info: IChangeRequestData, sessionID: string): "FAILED" | "OK"; + wipe(url: string, info: IRegisterData, sessionID: string): "FAILED" | "OK"; + getServerVersion(): string; + ping(url: string, info: IEmptyRequestData, sessionID: string): string; + removeProfile(url: string, info: IRemoveProfileData, sessionID: string): string; + getCompatibleTarkovVersion(): string; +} +export { LauncherCallbacks }; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/LocationCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/LocationCallbacks.d.ts new file mode 100644 index 0000000..6e0b538 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/LocationCallbacks.d.ts @@ -0,0 +1,15 @@ +import { LocationController } from "../controllers/LocationController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { ILocationBase } from "../models/eft/common/ILocationBase"; +import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IGetLocationRequestData } from "../models/eft/location/IGetLocationRequestData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class LocationCallbacks { + protected httpResponse: HttpResponseUtil; + protected locationController: LocationController; + constructor(httpResponse: HttpResponseUtil, locationController: LocationController); + getLocationData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData; + getAirdropLoot(url: string, info: IEmptyRequestData, sessionID: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/MatchCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/MatchCallbacks.d.ts new file mode 100644 index 0000000..52e3290 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/MatchCallbacks.d.ts @@ -0,0 +1,46 @@ +import { MatchController } from "../controllers/MatchController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData"; +import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData"; +import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData"; +import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestData"; +import { IGetRaidConfigurationRequestData } from "../models/eft/match/IGetRaidConfigurationRequestData"; +import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; +import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; +import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData"; +import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class MatchCallbacks { + protected httpResponse: HttpResponseUtil; + protected jsonUtil: JsonUtil; + protected matchController: MatchController; + protected databaseServer: DatabaseServer; + constructor(httpResponse: HttpResponseUtil, jsonUtil: JsonUtil, matchController: MatchController, databaseServer: DatabaseServer); + updatePing(url: string, info: IUpdatePingRequestData, sessionID: string): INullResponseData; + exitMatch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; + exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; + startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; + stopGroupSearch(url: string, info: IEmptyRequestData, 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: IPutMetricsRequestData, sessionID: string): INullResponseData; + getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData; + serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData | IGetBodyResponseData; + joinMatch(url: string, info: IJoinMatchRequestData, sessionID: string): IGetBodyResponseData; + getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData; + /** + * Handle client/match/group/status + * @returns + */ + getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData; + createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData; + deleteGroup(url: string, info: any, sessionID: string): INullResponseData; + endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData; + getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/ModCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/ModCallbacks.d.ts new file mode 100644 index 0000000..d1ec7f7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/ModCallbacks.d.ts @@ -0,0 +1,21 @@ +import { OnLoad } from "../di/OnLoad"; +import { PostAkiModLoader } from "../loaders/PostAkiModLoader"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HttpFileUtil } from "../utils/HttpFileUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +declare class ModCallbacks implements OnLoad { + protected logger: ILogger; + protected httpResponse: HttpResponseUtil; + protected httpFileUtil: HttpFileUtil; + protected postAkiModLoader: PostAkiModLoader; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected httpConfig: IHttpConfig; + constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpFileUtil: HttpFileUtil, postAkiModLoader: PostAkiModLoader, localisationService: LocalisationService, configServer: ConfigServer); + onLoad(): Promise; + getRoute(): string; +} +export { ModCallbacks }; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/NoteCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/NoteCallbacks.d.ts new file mode 100644 index 0000000..d39d400 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/NoteCallbacks.d.ts @@ -0,0 +1,11 @@ +import { NoteController } from "../controllers/NoteController"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { INoteActionData } from "../models/eft/notes/INoteActionData"; +export declare class NoteCallbacks { + protected noteController: NoteController; + constructor(noteController: NoteController); + addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/NotifierCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/NotifierCallbacks.d.ts new file mode 100644 index 0000000..fab325b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/NotifierCallbacks.d.ts @@ -0,0 +1,29 @@ +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 { ISelectProfileResponse } from "../models/eft/notifier/ISelectProfileResponse"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class NotifierCallbacks { + protected httpServerHelper: HttpServerHelper; + protected httpResponse: HttpResponseUtil; + protected notifierController: NotifierController; + constructor(httpServerHelper: HttpServerHelper, httpResponse: HttpResponseUtil, notifierController: NotifierController); + /** + * If we don't have anything to send, it's ok to not send anything back + * because notification requests can be long-polling. In fact, we SHOULD wait + * until we actually have something to send because otherwise we'd spam the client + * and the client would abort the connection due to spam. + */ + sendNotification(sessionID: string, req: any, resp: any, data: any): void; + getNotifier(url: string, info: any, sessionID: string): IGetBodyResponseData; + createNotifierChannel(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/profile/select + * @returns ISelectProfileResponse + */ + selectProfile(url: string, info: ISelectProfileRequestData, sessionID: string): IGetBodyResponseData; + notify(url: string, info: any, sessionID: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/PresetBuildCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/PresetBuildCallbacks.d.ts new file mode 100644 index 0000000..541715a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/PresetBuildCallbacks.d.ts @@ -0,0 +1,16 @@ +import { PresetBuildController } from "../controllers/PresetBuildController"; +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 { IPresetBuildActionRequestData } from "../models/eft/presetBuild/IPresetBuildActionRequestData"; +import { WeaponBuild } from "../models/eft/profile/IAkiProfile"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class PresetBuildCallbacks { + protected httpResponse: HttpResponseUtil; + protected presetBuildController: PresetBuildController; + constructor(httpResponse: HttpResponseUtil, presetBuildController: PresetBuildController); + getHandbookUserlist(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; + removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/PresetCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/PresetCallbacks.d.ts new file mode 100644 index 0000000..37bf4e8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/PresetCallbacks.d.ts @@ -0,0 +1,8 @@ +import { PresetController } from "../controllers/PresetController"; +import { OnLoad } from "../di/OnLoad"; +export declare class PresetCallbacks implements OnLoad { + protected presetController: PresetController; + constructor(presetController: PresetController); + onLoad(): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/ProfileCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/ProfileCallbacks.d.ts new file mode 100644 index 0000000..183bb0a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/ProfileCallbacks.d.ts @@ -0,0 +1,70 @@ +import { ProfileController } from "../controllers/ProfileController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { IGetMiniProfileRequestData } from "../models/eft/launcher/IGetMiniProfileRequestData"; +import { GetProfileStatusResponseData } from "../models/eft/profile/GetProfileStatusResponseData"; +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"; +/** Handle profile related client events */ +export declare class ProfileCallbacks { + protected httpResponse: HttpResponseUtil; + protected timeUtil: TimeUtil; + protected profileController: ProfileController; + constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, profileController: ProfileController); + createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData; + /** + * Get the complete player profile (scav + pmc character) + * @param url + * @param info Empty + * @param sessionID Session id + * @returns Profile object + */ + getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle the creation of a scav profile for player + * Occurs post-raid and when profile first created immediately after character details are confirmed by player + * @param url + * @param info empty + * @param sessionID Session id + * @returns Profile object + */ + regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/profile/voice/change event + * @param url + * @param info Change voice request object + * @param sessionID Session id + * @returns Client response + */ + changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData; + /** + * Handle client/game/profile/nickname/change event + * Client allows player to adjust their profile name + * @param url + * @param info Change nickname request object + * @param sessionID Session id + * @returns client response + */ + changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData; + validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData; + getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Called when creating a character when choosing a character face/voice + * @param url + * @param info response (empty) + * @param sessionID + * @returns + */ + getProfileStatus(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + searchFriend(url: string, info: ISearchFriendRequestData, sessionID: string): IGetBodyResponseData; + getMiniProfile(url: string, info: IGetMiniProfileRequestData, sessionID: string): string; + getAllMiniProfiles(url: string, info: any, sessionID: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/QuestCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/QuestCallbacks.d.ts new file mode 100644 index 0000000..2a3eb20 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/QuestCallbacks.d.ts @@ -0,0 +1,33 @@ +import { QuestController } from "../controllers/QuestController"; +import { RepeatableQuestController } from "../controllers/RepeatableQuestController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IQuest } from "../models/eft/common/tables/IQuest"; +import { IPmcDataRepeatableQuest } from "../models/eft/common/tables/IRepeatableQuests"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData"; +import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData"; +import { IHandoverQuestRequestData } from "../models/eft/quests/IHandoverQuestRequestData"; +import { IListQuestsRequestData } from "../models/eft/quests/IListQuestsRequestData"; +import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class QuestCallbacks { + protected httpResponse: HttpResponseUtil; + protected questController: QuestController; + protected repeatableQuestController: RepeatableQuestController; + constructor(httpResponse: HttpResponseUtil, questController: QuestController, repeatableQuestController: RepeatableQuestController); + changeRepeatableQuest(pmcData: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse; + acceptQuest(pmcData: IPmcData, body: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; + completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse; + handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle client/quest/list + * @param url + * @param info + * @param sessionID + * @returns + */ + listQuests(url: string, info: IListQuestsRequestData, sessionID: string): IGetBodyResponseData; + activityPeriods(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/RagfairCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/RagfairCallbacks.d.ts new file mode 100644 index 0000000..97713e7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/RagfairCallbacks.d.ts @@ -0,0 +1,47 @@ +import { OnLoad } from "../di/OnLoad"; +import { OnUpdate } from "../di/OnUpdate"; +import { RagfairController } from "../controllers/RagfairController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAddOfferRequestData } from "../models/eft/ragfair/IAddOfferRequestData"; +import { IExtendOfferRequestData } from "../models/eft/ragfair/IExtendOfferRequestData"; +import { IGetItemPriceResult } from "../models/eft/ragfair/IGetItemPriceResult"; +import { IGetMarketPriceRequestData } from "../models/eft/ragfair/IGetMarketPriceRequestData"; +import { IGetOffersResult } from "../models/eft/ragfair/IGetOffersResult"; +import { IRemoveOfferRequestData } from "../models/eft/ragfair/IRemoveOfferRequestData"; +import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData"; +import { ISendRagfairReportRequestData } from "../models/eft/ragfair/ISendRagfairReportRequestData"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RagfairServer } from "../servers/RagfairServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +/** + * Handle ragfair related callback events + */ +export declare class RagfairCallbacks implements OnLoad, OnUpdate { + protected httpResponse: HttpResponseUtil; + protected jsonUtil: JsonUtil; + protected ragfairServer: RagfairServer; + protected ragfairController: RagfairController; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(httpResponse: HttpResponseUtil, jsonUtil: JsonUtil, ragfairServer: RagfairServer, ragfairController: RagfairController, configServer: ConfigServer); + onLoad(): Promise; + getRoute(): string; + search(url: string, info: ISearchRequestData, sessionID: string): IGetBodyResponseData; + getMarketPrice(url: string, info: IGetMarketPriceRequestData, sessionID: string): IGetBodyResponseData; + addOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse; + removeOffer(pmcData: IPmcData, info: IRemoveOfferRequestData, sessionID: string): IItemEventRouterResponse; + extendOffer(pmcData: IPmcData, info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle /client/items/prices + * Called when clicking an item to list on flea + */ + getFleaPrices(url: string, request: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + onUpdate(timeSinceLastRun: number): Promise; + sendReport(url: string, info: ISendRagfairReportRequestData, sessionID: string): INullResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/RepairCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/RepairCallbacks.d.ts new file mode 100644 index 0000000..14edeeb --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/RepairCallbacks.d.ts @@ -0,0 +1,25 @@ +import { RepairController } from "../controllers/RepairController"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRepairActionDataRequest } from "../models/eft/repair/IRepairActionDataRequest"; +import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepairActionDataRequest"; +export declare class RepairCallbacks { + protected repairController: RepairController; + constructor(repairController: RepairController); + /** + * use trader to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ + traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + /** + * Use repair kit to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ + repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/SaveCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/SaveCallbacks.d.ts new file mode 100644 index 0000000..93ffd96 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/SaveCallbacks.d.ts @@ -0,0 +1,10 @@ +import { OnLoad } from "../di/OnLoad"; +import { OnUpdate } from "../di/OnUpdate"; +import { SaveServer } from "../servers/SaveServer"; +export declare class SaveCallbacks implements OnLoad, OnUpdate { + protected saveServer: SaveServer; + constructor(saveServer: SaveServer); + onLoad(): Promise; + getRoute(): string; + onUpdate(secondsSinceLastRun: number): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/TradeCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/TradeCallbacks.d.ts new file mode 100644 index 0000000..4291da8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/TradeCallbacks.d.ts @@ -0,0 +1,14 @@ +import { TradeController } from "../controllers/TradeController"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTradeRequestData"; +import { IProcessRagfairTradeRequestData } from "../models/eft/trade/IProcessRagfairTradeRequestData"; +export declare class TradeCallbacks { + protected tradeController: TradeController; + constructor(tradeController: TradeController); + /** + * Handle client/game/profile/items/moving TradingConfirm + */ + processTrade(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse; + processRagfairTrade(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/TraderCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/TraderCallbacks.d.ts new file mode 100644 index 0000000..8df1049 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/TraderCallbacks.d.ts @@ -0,0 +1,23 @@ +import { OnLoad } from "../di/OnLoad"; +import { OnUpdate } from "../di/OnUpdate"; +import { TraderController } from "../controllers/TraderController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class TraderCallbacks implements OnLoad, OnUpdate { + protected httpResponse: HttpResponseUtil; + protected traderController: TraderController; + constructor(httpResponse: HttpResponseUtil, traderController: TraderController); + onLoad(): Promise; + onUpdate(): Promise; + getRoute(): string; + getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/trading/api/getUserAssortPrice/trader + * @returns + */ + getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/WeatherCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/WeatherCallbacks.d.ts new file mode 100644 index 0000000..f9d2002 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/WeatherCallbacks.d.ts @@ -0,0 +1,15 @@ +import { WeatherController } from "../controllers/WeatherController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IWeatherData } from "../models/eft/weather/IWeatherData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class WeatherCallbacks { + protected httpResponse: HttpResponseUtil; + protected weatherController: WeatherController; + constructor(httpResponse: HttpResponseUtil, weatherController: WeatherController); + /** + * Handle client/weather + * @returns IWeatherData + */ + getWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/callbacks/WishlistCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/WishlistCallbacks.d.ts new file mode 100644 index 0000000..c2cc2a8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/callbacks/WishlistCallbacks.d.ts @@ -0,0 +1,10 @@ +import { WishlistController } from "../controllers/WishlistController"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData"; +export declare class WishlistCallbacks { + protected wishlistController: WishlistController; + constructor(wishlistController: WishlistController); + addToWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; + removeFromWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/context/ApplicationContext.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/context/ApplicationContext.d.ts new file mode 100644 index 0000000..28bbdf7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/context/ApplicationContext.d.ts @@ -0,0 +1,18 @@ +import { ContextVariable } from "./ContextVariable"; +import { ContextVariableType } from "./ContextVariableType"; +export declare class ApplicationContext { + private variables; + private static holderMaxSize; + /** + * Called like: + * + * const registerPlayerInfo = this.applicationContext.getLatestValue(ContextVariableType.REGISTER_PLAYER_REQUEST).getValue(); + * + * const matchInfo = this.applicationContext.getLatestValue(ContextVariableType.MATCH_INFO).getValue(); + * @param type + * @returns + */ + getLatestValue(type: ContextVariableType): ContextVariable; + getValues(type: ContextVariableType): ContextVariable[]; + addValue(type: ContextVariableType, value: any): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/context/ContextVariable.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/context/ContextVariable.d.ts new file mode 100644 index 0000000..0fe0a63 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/context/ContextVariable.d.ts @@ -0,0 +1,10 @@ +import { ContextVariableType } from "./ContextVariableType"; +export declare class ContextVariable { + private value; + private timestamp; + private type; + constructor(value: any, type: ContextVariableType); + getValue(): T; + getTimestamp(): Date; + getType(): ContextVariableType; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/context/ContextVariableType.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/context/ContextVariableType.d.ts new file mode 100644 index 0000000..49f3267 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/context/ContextVariableType.d.ts @@ -0,0 +1,10 @@ +export declare enum ContextVariableType { + /** Logged in users session id */ + SESSION_ID = 0, + /** Currently acive raid information */ + RAID_CONFIGURATION = 1, + /** Timestamp when client first connected */ + CLIENT_START_TIMESTAMP = 2, + /** When player is loading into map and loot is requested */ + REGISTER_PLAYER_REQUEST = 3 +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/BotController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/BotController.d.ts new file mode 100644 index 0000000..1d7eb9d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/BotController.d.ts @@ -0,0 +1,71 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { BotGenerator } from "../generators/BotGenerator"; +import { BotDifficultyHelper } from "../helpers/BotDifficultyHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { IBotCore } from "../models/eft/common/tables/IBotCore"; +import { Difficulty } from "../models/eft/common/tables/IBotType"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class BotController { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected botGenerator: BotGenerator; + protected botHelper: BotHelper; + protected botDifficultyHelper: BotDifficultyHelper; + protected botGenerationCacheService: BotGenerationCacheService; + protected localisationService: LocalisationService; + protected profileHelper: ProfileHelper; + protected configServer: ConfigServer; + protected applicationContext: ApplicationContext; + protected jsonUtil: JsonUtil; + protected botConfig: IBotConfig; + static readonly pmcTypeLabel = "PMC"; + constructor(logger: ILogger, databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, botGenerationCacheService: BotGenerationCacheService, localisationService: LocalisationService, profileHelper: ProfileHelper, configServer: ConfigServer, applicationContext: ApplicationContext, jsonUtil: JsonUtil); + /** + * Return the number of bot loadout varieties to be generated + * @param type bot Type we want the loadout gen count for + * @returns number of bots to generate + */ + getBotPresetGenerationLimit(type: string): number; + /** + * Get the core.json difficulty settings from database\bots + * @returns IBotCore + */ + getBotCoreDifficulty(): IBotCore; + /** + * Get bot difficulty settings + * adjust PMC settings to ensure they engage the correct bot types + * @param type what bot the server is requesting settings for + * @param difficulty difficulty level server requested settings for + * @returns Difficulty object + */ + getBotDifficulty(type: string, difficulty: string): Difficulty; + /** + * Generate bot profiles and store in cache + * @param sessionId Session id + * @param info bot generation request info + * @returns IBotBase array + */ + generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; + /** + * Get the difficulty passed in, if its not "asoline", get selected difficulty from config + * @param requestedDifficulty + * @returns + */ + getPMCDifficulty(requestedDifficulty: string): string; + /** + * Get the max number of bots allowed on a map + * Looks up location player is entering when getting cap value + * @returns cap number + */ + getBotCap(): number; + getPmcBotTypes(): Record>>; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/CustomizationController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/CustomizationController.d.ts new file mode 100644 index 0000000..a4ef8cf --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/CustomizationController.d.ts @@ -0,0 +1,24 @@ +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ISuit } from "../models/eft/common/tables/ITrader"; +import { IBuyClothingRequestData } from "../models/eft/customization/IBuyClothingRequestData"; +import { IWearClothingRequestData } from "../models/eft/customization/IWearClothingRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocalisationService } from "../services/LocalisationService"; +export declare class CustomizationController { + protected logger: ILogger; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected saveServer: SaveServer; + protected localisationService: LocalisationService; + protected profileHelper: ProfileHelper; + constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, saveServer: SaveServer, localisationService: LocalisationService, profileHelper: ProfileHelper); + getTraderSuits(traderID: string, sessionID: string): ISuit[]; + wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse; + buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse; + protected getAllTraderSuits(sessionID: string): ISuit[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/DialogueController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/DialogueController.d.ts new file mode 100644 index 0000000..98d3d52 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/DialogueController.d.ts @@ -0,0 +1,79 @@ +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 { DialogueInfo, Message } from "../models/eft/profile/IAkiProfile"; +import { SaveServer } from "../servers/SaveServer"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class DialogueController { + protected saveServer: SaveServer; + protected timeUtil: TimeUtil; + protected dialogueHelper: DialogueHelper; + constructor(saveServer: SaveServer, timeUtil: TimeUtil, dialogueHelper: DialogueHelper); + update(): void; + getFriendList(sessionID: string): IGetFriendListDataResponse; + /** + * Create array holding trader dialogs and mail interactions with player + * Set the content of the dialogue on the list tab. + * @param sessionID Session Id + * @returns array of dialogs + */ + generateDialogueList(sessionID: string): DialogueInfo[]; + /** + * Get the content of a dialogue + * @param dialogueID Dialog id + * @param sessionID Session Id + * @returns DialogueInfo + */ + getDialogueInfo(dialogueID: string, sessionID: string): DialogueInfo; + /** + * Handle player clicking 'messenger' and seeing all the messages they've recieved + * Set the content of the dialogue on the details panel, showing all the messages + * for the specified dialogue. + * @param dialogueID Dialog id + * @param sessionID Session id + * @returns IGetMailDialogViewResponseData object + */ + generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData; + /** + * Get a count of messages with attachments from a particular dialog + * @param sessionID Session id + * @param dialogueID Dialog id + * @returns Count of messages with attachments + */ + protected getUnreadMessagesWithAttachmentsCount(sessionID: string, dialogueID: string): number; + /** + * Does array have messages with uncollected rewards (includes expired rewards) + * @param messages Messages to check + * @returns true if uncollected rewards found + */ + protected messagesHaveUncollectedRewards(messages: Message[]): boolean; + removeDialogue(dialogueID: string, sessionID: string): void; + setDialoguePin(dialogueID: string, shouldPin: boolean, sessionID: string): void; + setRead(dialogueIDs: string[], sessionID: string): void; + /** + * Get all uncollected items attached to mail in a particular dialog + * @param dialogueID Dialog to get mail attachments from + * @param sessionID Session id + * @returns + */ + getAllAttachments(dialogueID: string, sessionID: string): IGetAllAttachmentsResponse; + /** + * Get messages from a specific dialog that have items not expired + * @param sessionId Session id + * @param dialogueId Dialog to get mail attachments from + * @returns Message array + */ + protected getActiveMessagesFromDialog(sessionId: string, dialogueId: string): Message[]; + /** + * Return array of messages with uncollected items (includes expired) + * @param messages Messages to parse + * @returns messages with items to collect + */ + protected getMessagesWithAttachments(messages: Message[]): Message[]; + /** + * Delete expired items. triggers when updating traders. + * @param sessionID Session id + */ + protected removeExpiredItems(sessionID: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/GameController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/GameController.d.ts new file mode 100644 index 0000000..44264dc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/GameController.d.ts @@ -0,0 +1,80 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { HideoutHelper } from "../helpers/HideoutHelper"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { PreAkiModLoader } from "../loaders/PreAkiModLoader"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ICheckVersionResponse } from "../models/eft/game/ICheckVersionResponse"; +import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse"; +import { IServerDetails } from "../models/eft/game/IServerDetails"; +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { ICoreConfig } from "../models/spt/config/ICoreConfig"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILocationConfig } from "../models/spt/config/ILocationConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { CustomLocationWaveService } from "../services/CustomLocationWaveService"; +import { LocalisationService } from "../services/LocalisationService"; +import { OpenZoneService } from "../services/OpenZoneService"; +import { ProfileFixerService } from "../services/ProfileFixerService"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class GameController { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected timeUtil: TimeUtil; + protected preAkiModLoader: PreAkiModLoader; + protected httpServerHelper: HttpServerHelper; + protected hideoutHelper: HideoutHelper; + protected profileHelper: ProfileHelper; + protected profileFixerService: ProfileFixerService; + protected localisationService: LocalisationService; + protected customLocationWaveService: CustomLocationWaveService; + protected openZoneService: OpenZoneService; + protected seasonalEventService: SeasonalEventService; + protected applicationContext: ApplicationContext; + protected configServer: ConfigServer; + protected httpConfig: IHttpConfig; + protected coreConfig: ICoreConfig; + protected locationConfig: ILocationConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, applicationContext: ApplicationContext, configServer: ConfigServer); + gameStart(_url: string, _info: IEmptyRequestData, sessionID: string, startTimeStampMS: number): void; + /** + * When player logs in, iterate over all active effects and reduce timer + * TODO - add body part HP regen + * @param pmcProfile + */ + protected updateProfileHealthValues(pmcProfile: IPmcData): void; + /** + * Waves with an identical min/max values spawn nothing, the number of bots that spawn is the difference between min and max + */ + protected fixBrokenOfflineMapWaves(): void; + /** + * Make Rogues spawn later to allow for scavs to spawn first instead of rogues filling up all spawn positions + */ + protected fixRoguesSpawningInstantlyOnLighthouse(): void; + /** + * Get a list of installed mods and save their details to the profile being used + * @param fullProfile Profile to add mod details to + */ + protected saveActiveModsToProfile(fullProfile: IAkiProfile): void; + /** + * Add the logged in players name to PMC name pool + * @param pmcProfile + */ + protected addPlayerToPMCNames(pmcProfile: IPmcData): void; + /** + * Blank out the "test" mail message from prapor + */ + protected removePraporTestMessage(): void; + /** + * Make non-trigger-spawned raiders spawn earlier + always + */ + protected adjustLabsRaiderSpawnRate(): void; + protected logProfileDetails(fullProfile: IAkiProfile): void; + getGameConfig(sessionID: string): IGameConfigResponse; + getServer(): IServerDetails[]; + getValidGameVersion(): ICheckVersionResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/HandbookController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/HandbookController.d.ts new file mode 100644 index 0000000..52d2dd8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/HandbookController.d.ts @@ -0,0 +1,8 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { DatabaseServer } from "../servers/DatabaseServer"; +export declare class HandbookController { + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + constructor(databaseServer: DatabaseServer, handbookHelper: HandbookHelper); + load(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/HealthController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/HealthController.d.ts new file mode 100644 index 0000000..7c149cc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/HealthController.d.ts @@ -0,0 +1,73 @@ +import { HealthHelper } from "../helpers/HealthHelper"; +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +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 { IWorkoutData } from "../models/eft/health/IWorkoutData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { LocalisationService } from "../services/LocalisationService"; +import { PaymentService } from "../services/PaymentService"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class HealthController { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected eventOutputHolder: EventOutputHolder; + protected itemHelper: ItemHelper; + protected paymentService: PaymentService; + protected inventoryHelper: InventoryHelper; + protected localisationService: LocalisationService; + protected healthHelper: HealthHelper; + constructor(logger: ILogger, jsonUtil: JsonUtil, eventOutputHolder: EventOutputHolder, itemHelper: ItemHelper, paymentService: PaymentService, inventoryHelper: InventoryHelper, localisationService: LocalisationService, healthHelper: HealthHelper); + /** + * stores in-raid player health + * @param pmcData Player profile + * @param info Request data + * @param sessionID + * @param addEffects Should effects found be added or removed from profile + */ + saveVitality(pmcData: IPmcData, info: ISyncHealthRequestData, sessionID: string, addEffects?: boolean, deleteExistingEffects?: boolean): void; + /** + * When healing in menu + * @param pmcData + * @param body + * @param sessionID + * @returns + */ + offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Consume food/water outside of a raid + * @param pmcData Player profile + * @param body request Object + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Occurs on post-raid healing page + * @param pmcData player profile + * @param healthTreatmentRequest Request data from client + * @param sessionID Session id + * @returns + */ + healthTreatment(pmcData: IPmcData, healthTreatmentRequest: IHealthTreatmentRequestData, sessionID: string): IItemEventRouterResponse; + /** + * applies skills from hideout workout. + * @param pmcData Player profile + * @param info Request data + * @param sessionID + */ + applyWorkoutChanges(pmcData: IPmcData, info: IWorkoutData, sessionId: string): void; + /** + * Iterate over treatment request diff and find effects to remove from player limbs + * @param sessionId + * @param profile Profile to update + * @param treatmentRequest client request + * @param output response to send to client + */ + protected removeEffectsAfterPostRaidHeal(sessionId: string, profile: IPmcData, treatmentRequest: IHealthTreatmentRequestData, output: IItemEventRouterResponse): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/HideoutController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/HideoutController.d.ts new file mode 100644 index 0000000..e6e0243 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/HideoutController.d.ts @@ -0,0 +1,220 @@ +import { ScavCaseRewardGenerator } from "../generators/ScavCaseRewardGenerator"; +import { HideoutHelper } from "../helpers/HideoutHelper"; +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { HideoutArea, Product } from "../models/eft/common/tables/IBotBase"; +import { HideoutUpgradeCompleteRequestData } from "../models/eft/hideout/HideoutUpgradeCompleteRequestData"; +import { IHandleQTEEventRequestData } from "../models/eft/hideout/IHandleQTEEventRequestData"; +import { IHideoutContinuousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinuousProductionStartRequestData"; +import { IHideoutImproveAreaRequestData } from "../models/eft/hideout/IHideoutImproveAreaRequestData"; +import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction"; +import { IHideoutPutItemInRequestData } from "../models/eft/hideout/IHideoutPutItemInRequestData"; +import { IHideoutScavCaseStartRequestData } from "../models/eft/hideout/IHideoutScavCaseStartRequestData"; +import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData"; +import { IHideoutTakeItemOutRequestData } from "../models/eft/hideout/IHideoutTakeItemOutRequestData"; +import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideoutTakeProductionRequestData"; +import { IHideoutToggleAreaRequestData } from "../models/eft/hideout/IHideoutToggleAreaRequestData"; +import { IHideoutUpgradeRequestData } from "../models/eft/hideout/IHideoutUpgradeRequestData"; +import { IQteData } from "../models/eft/hideout/IQteData"; +import { IRecordShootingRangePoints } from "../models/eft/hideout/IRecordShootingRangePoints"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IHideoutConfig } from "../models/spt/config/IHideoutConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { PlayerService } from "../services/PlayerService"; +import { HashUtil } from "../utils/HashUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class HideoutController { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected inventoryHelper: InventoryHelper; + protected saveServer: SaveServer; + protected playerService: PlayerService; + protected presetHelper: PresetHelper; + protected paymentHelper: PaymentHelper; + protected eventOutputHolder: EventOutputHolder; + protected httpResponse: HttpResponseUtil; + protected profileHelper: ProfileHelper; + protected hideoutHelper: HideoutHelper; + protected scavCaseRewardGenerator: ScavCaseRewardGenerator; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected jsonUtil: JsonUtil; + protected fenceService: FenceService; + protected static nameBackendCountersCrafting: string; + protected hideoutConfig: IHideoutConfig; + constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, localisationService: LocalisationService, configServer: ConfigServer, jsonUtil: JsonUtil, fenceService: FenceService); + /** + * Start a hideout area upgrade + * @param pmcData Player profile + * @param request upgrade start request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + startUpgrade(pmcData: IPmcData, request: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Complete a hideout area upgrade + * @param pmcData Player profile + * @param request Completed upgrade request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + upgradeComplete(pmcData: IPmcData, request: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutPutItemsInAreaSlots + * Create item in hideout slot item array, remove item from player inventory + * @param pmcData Profile data + * @param addItemToHideoutRequest reqeust from client to place item in area slot + * @param sessionID Session id + * @returns IItemEventRouterResponse object + */ + putItemsInAreaSlots(pmcData: IPmcData, addItemToHideoutRequest: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Remove item from hideout area and place into player inventory + * @param pmcData Player profile + * @param request Take item out of area request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + takeItemsFromAreaSlots(pmcData: IPmcData, request: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Find resource item in hideout area, add copy to player inventory, remove Item from hideout slot + * @param sessionID Session id + * @param pmcData Profile to update + * @param removeResourceRequest client request + * @param output response to send to client + * @param hideoutArea Area fuel is being removed from + * @returns IItemEventRouterResponse response + */ + protected removeResourceFromArea(sessionID: string, pmcData: IPmcData, removeResourceRequest: IHideoutTakeItemOutRequestData, output: IItemEventRouterResponse, hideoutArea: HideoutArea): IItemEventRouterResponse; + /** + * Toggle area on/off + * @param pmcData Player profile + * @param request Toggle area request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + toggleArea(pmcData: IPmcData, request: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Start production for an item from hideout area + * @param pmcData Player profile + * @param body Start prodution of single item request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handles event after clicking 'start' on the scav case hideout page + * @param pmcData player profile + * @param body client request object + * @param sessionID session id + * @returns item event router response + */ + scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Adjust scav case time based on fence standing + * + * @param pmcData Player profile + * @param productionTime Time to complete scav case in seconds + * @returns Adjusted scav case time in seconds + */ + protected getScavCaseTime(pmcData: IPmcData, productionTime: number): number; + /** + * Add generated scav case rewards to player profile + * @param pmcData player profile to add rewards to + * @param rewards reward items to add to profile + * @param recipieId recipie id to save into Production dict + */ + protected addScavCaseRewardsToProfile(pmcData: IPmcData, rewards: Product[], recipieId: string): void; + /** + * Start production of continuously created item + * @param pmcData Player profile + * @param request Continious production request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + continuousProductionStart(pmcData: IPmcData, request: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Take completed item out of hideout area and place into player inventory + * @param pmcData Player profile + * @param request Remove production from area request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + takeProduction(pmcData: IPmcData, request: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Take recipie-type production out of hideout area and place into player inventory + * @param sessionID Session id + * @param recipe Completed recipie of item + * @param pmcData Player profile + * @param request Remove production from area request + * @param output Output object to update + * @returns IItemEventRouterResponse + */ + protected handleRecipie(sessionID: string, recipe: IHideoutProduction, pmcData: IPmcData, request: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse; + /** + * Handles giving rewards stored in player profile to player after clicking 'get rewards' + * @param sessionID Session id + * @param pmcData Player profile + * @param request Get rewards from scavcase craft request + * @param output Output object to update + * @returns IItemEventRouterResponse + */ + protected handleScavCase(sessionID: string, pmcData: IPmcData, request: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse; + /** + * Start area production for item + * @param pmcData Player profile + * @param request Start production request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + registerProduction(pmcData: IPmcData, request: IHideoutSingleProductionStartRequestData | IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Get quick time event list for hideout + * // TODO - implement this + * @param sessionId Session id + * @returns IQteData array + */ + getQteList(sessionId: string): IQteData[]; + /** + * Handle HideoutQuickTimeEvent on client/game/profile/items/moving + * Called after completing workout at gym + * @param sessionId Session id + * @param pmcData Profile to adjust + * @param request QTE result object + */ + handleQTEEventOutcome(sessionId: string, pmcData: IPmcData, request: IHandleQTEEventRequestData): IItemEventRouterResponse; + /** + * Record a high score from the shooting range into a player profiles overallcounters + * @param sessionId Session id + * @param pmcData Profile to update + * @param request shooting range score request + * @returns IItemEventRouterResponse + */ + recordShootingRangePoints(sessionId: string, pmcData: IPmcData, request: IRecordShootingRangePoints): IItemEventRouterResponse; + /** + * Handle client/game/profile/items/moving - HideoutImproveArea + * @param sessionId Session id + * @param pmcData profile to improve area in + * @param request improve area request data + */ + improveArea(sessionId: string, pmcData: IPmcData, request: IHideoutImproveAreaRequestData): IItemEventRouterResponse; + /** + * Function called every x seconds as part of onUpdate event + */ + update(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/InraidController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/InraidController.d.ts new file mode 100644 index 0000000..f954eff --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/InraidController.d.ts @@ -0,0 +1,132 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { PlayerScavGenerator } from "../generators/PlayerScavGenerator"; +import { HealthHelper } from "../helpers/HealthHelper"; +import { InRaidHelper } from "../helpers/InRaidHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { QuestHelper } from "../helpers/QuestHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData"; +import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; +import { IAirdropConfig } from "../models/spt/config/IAirdropConfig"; +import { IInRaidConfig } from "../models/spt/config/IInRaidConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { InsuranceService } from "../services/InsuranceService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +/** + * Logic for handling In Raid callbacks + */ +export declare class InraidController { + protected logger: ILogger; + protected saveServer: SaveServer; + protected jsonUtil: JsonUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected itemHelper: ItemHelper; + protected profileHelper: ProfileHelper; + protected playerScavGenerator: PlayerScavGenerator; + protected healthHelper: HealthHelper; + protected traderHelper: TraderHelper; + protected insuranceService: InsuranceService; + protected inRaidHelper: InRaidHelper; + protected applicationContext: ApplicationContext; + protected configServer: ConfigServer; + protected airdropConfig: IAirdropConfig; + protected inraidConfig: IInRaidConfig; + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, applicationContext: ApplicationContext, configServer: ConfigServer); + /** + * Save locationId to active profiles inraid object AND app context + * @param sessionID Session id + * @param info Register player request + */ + addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void; + /** + * Save profile state to disk + * Handles pmc/pscav + * @param offraidData post-raid request data + * @param sessionID Session id + */ + savePostRaidProgress(offraidData: ISaveProgressRequestData, sessionID: string): void; + /** + * Handle updating player profile post-pmc raid + * @param sessionID session id + * @param offraidData post-raid data + */ + protected savePmcProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; + /** + * Make changes to pmc profile after they left raid dead, + * alter bodypart hp, handle insurance, delete inventory items, remove carried quest items + * @param postRaidSaveRequest post-raid save request + * @param pmcData pmc profile + * @param insuranceEnabled is insurance enabled + * @param preRaidGear gear player had before raid + * @param sessionID Session id + * @returns Updated profile object + */ + protected performPostRaidActionsWhenDead(postRaidSaveRequest: ISaveProgressRequestData, pmcData: IPmcData, insuranceEnabled: boolean, preRaidGear: Item[], sessionID: string): IPmcData; + /** + * Adjust player characters bodypart hp if they left raid early + * @param postRaidSaveRequest post raid data + * @param pmcData player profile + */ + protected updatePmcHealthPostRaid(postRaidSaveRequest: ISaveProgressRequestData, pmcData: IPmcData): void; + /** + * Reduce body part hp to % of max + * @param pmcData profile to edit + * @param multipler multipler to apply to max health + */ + protected reducePmcHealthToPercent(pmcData: IPmcData, multipler: number): void; + /** + * Handle updating the profile post-pscav raid + * @param sessionID session id + * @param offraidData post-raid data of raid + */ + protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; + /** + * Is the player dead after a raid - dead is anything other than "survived" / "runner" + * @param statusOnExit exit value from offraidData object + * @returns true if dead + */ + protected isPlayerDead(statusOnExit: string): boolean; + /** + * Mark inventory items as FiR if player survived raid, otherwise remove FiR from them + * @param offraidData Save Progress Request + * @param pmcData player profile + * @param isPlayerScav Was the player a pScav + */ + protected markOrRemoveFoundInRaidItems(offraidData: ISaveProgressRequestData, pmcData: IPmcData, isPlayerScav: boolean): void; + /** + * Update profile after player completes scav raid + * @param scavData Scav profile + * @param sessionID Session id + * @param offraidData Post-raid save request + * @param pmcData Pmc profile + * @param isDead Is player dead + */ + protected handlePostRaidPlayerScavProcess(scavData: IPmcData, sessionID: string, offraidData: ISaveProgressRequestData, pmcData: IPmcData, isDead: boolean): void; + /** + * Update profile with scav karma values based on in-raid actions + * @param pmcData Pmc profile + * @param offraidData Post-raid save request + * @param scavData Scav profile + * @param sessionID Session id + */ + protected handlePostRaidPlayerScavKarmaChanges(pmcData: IPmcData, offraidData: ISaveProgressRequestData, scavData: IPmcData, sessionID: string): void; + /** + * Get the inraid config from configs/inraid.json + * @returns InRaid Config + */ + getInraidConfig(): IInRaidConfig; + /** + * Get airdrop config from configs/airdrop.json + * @returns Airdrop config + */ + getAirdropConfig(): IAirdropConfig; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/InsuranceController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/InsuranceController.d.ts new file mode 100644 index 0000000..af6e68d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/InsuranceController.d.ts @@ -0,0 +1,53 @@ +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 { IGetInsuranceCostResponseData } from "../models/eft/insurance/IGetInsuranceCostResponseData"; +import { IInsureRequestData } from "../models/eft/insurance/IInsureRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { InsuranceService } from "../services/InsuranceService"; +import { PaymentService } from "../services/PaymentService"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class InsuranceController { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected eventOutputHolder: EventOutputHolder; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected profileHelper: ProfileHelper; + protected dialogueHelper: DialogueHelper; + protected paymentService: PaymentService; + protected insuranceService: InsuranceService; + protected configServer: ConfigServer; + protected insuranceConfig: IInsuranceConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, paymentService: PaymentService, insuranceService: InsuranceService, configServer: ConfigServer); + /** + * Process insurance items prior to being given to player in mail + */ + processReturn(): void; + /** + * Add insurance to an item + * @param pmcData Player profile + * @param body Insurance request + * @param sessionID Session id + * @returns IItemEventRouterResponse object to send to client + */ + insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Calculate insurance cost + * @param info request object + * @param sessionID session id + * @returns IGetInsuranceCostResponseData object to send to client + */ + cost(info: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/InventoryController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/InventoryController.d.ts new file mode 100644 index 0000000..129ede3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/InventoryController.d.ts @@ -0,0 +1,151 @@ +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +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 { IOpenRandomLootContainerRequestData } from "../models/eft/inventory/IOpenRandomLootContainerRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { HashUtil } from "../utils/HashUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class InventoryController { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected fenceService: FenceService; + protected presetHelper: PresetHelper; + protected inventoryHelper: InventoryHelper; + protected ragfairOfferService: RagfairOfferService; + protected profileHelper: ProfileHelper; + protected weightedRandomHelper: WeightedRandomHelper; + protected paymentHelper: PaymentHelper; + protected localisationService: LocalisationService; + protected eventOutputHolder: EventOutputHolder; + protected httpResponseUtil: HttpResponseUtil; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, fenceService: FenceService, presetHelper: PresetHelper, inventoryHelper: InventoryHelper, ragfairOfferService: RagfairOfferService, profileHelper: ProfileHelper, weightedRandomHelper: WeightedRandomHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, eventOutputHolder: EventOutputHolder, httpResponseUtil: HttpResponseUtil); + /** + * 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. + * @param pmcData Profile + * @param moveRequest Move request data + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + moveItem(pmcData: IPmcData, moveRequest: 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; + /** + * Add a tag to an inventory item + * @param pmcData profile with item to add tag to + * @param body tag request data + * @param sessionID session id + * @returns client response object + */ + tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse; + bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handles examining an item + * @param pmcData player profile + * @param body request object + * @param sessionID session id + * @returns response + */ + examineItem(pmcData: IPmcData, body: IInventoryExamineRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Get the tplid of an item from the examine request object + * @param body response request + * @returns tplid + */ + protected getExaminedItemTpl(body: IInventoryExamineRequestData): string; + readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle ApplyInventoryChanges + * Sorts supplied items. + * @param pmcData Player profile + * @param request sort request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + sortInventory(pmcData: IPmcData, request: 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; + /** + * Handle event fired when a container is unpacked (currently only the halloween pumpkin) + * @param pmcData Profile data + * @param body open loot container request data + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + openRandomLootContainer(pmcData: IPmcData, body: IOpenRandomLootContainerRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/LauncherController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/LauncherController.d.ts new file mode 100644 index 0000000..1af1f56 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/LauncherController.d.ts @@ -0,0 +1,28 @@ +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { IChangeRequestData } from "../models/eft/launcher/IChangeRequestData"; +import { ILoginRequestData } from "../models/eft/launcher/ILoginRequestData"; +import { IRegisterData } from "../models/eft/launcher/IRegisterData"; +import { Info } from "../models/eft/profile/IAkiProfile"; +import { ICoreConfig } from "../models/spt/config/ICoreConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { HashUtil } from "../utils/HashUtil"; +export declare class LauncherController { + protected hashUtil: HashUtil; + protected saveServer: SaveServer; + protected httpServerHelper: HttpServerHelper; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected coreConfig: ICoreConfig; + constructor(hashUtil: HashUtil, saveServer: SaveServer, httpServerHelper: HttpServerHelper, databaseServer: DatabaseServer, configServer: ConfigServer); + connect(): any; + find(sessionIdKey: string): Info; + login(info: ILoginRequestData): string; + register(info: IRegisterData): string; + protected createAccount(info: IRegisterData): string; + changeUsername(info: IChangeRequestData): string; + changePassword(info: IChangeRequestData): string; + wipe(info: IRegisterData): string; + getCompatibleTarkovVersion(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/LocationController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/LocationController.d.ts new file mode 100644 index 0000000..b6feba8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/LocationController.d.ts @@ -0,0 +1,35 @@ +import { LocationGenerator } from "../generators/LocationGenerator"; +import { LootGenerator } from "../generators/LootGenerator"; +import { ILocationBase } from "../models/eft/common/ILocationBase"; +import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase"; +import { IAirdropConfig } from "../models/spt/config/IAirdropConfig"; +import { LootItem } from "../models/spt/services/LootItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class LocationController { + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected logger: ILogger; + protected locationGenerator: LocationGenerator; + protected localisationService: LocalisationService; + protected lootGenerator: LootGenerator; + protected databaseServer: DatabaseServer; + protected timeUtil: TimeUtil; + protected configServer: ConfigServer; + protected airdropConfig: IAirdropConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer); + get(location: string): ILocationBase; + generate(name: string): ILocationBase; + generateAll(): ILocationsGenerateAllResponse; + /** + * Get loot for an airdop container + * Generates it randomly based on config/airdrop.json values + * @returns Array of LootItem + */ + getAirdropLoot(): LootItem[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/MatchController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/MatchController.d.ts new file mode 100644 index 0000000..cb0c755 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/MatchController.d.ts @@ -0,0 +1,57 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData"; +import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData"; +import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData"; +import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestData"; +import { IGetRaidConfigurationRequestData } from "../models/eft/match/IGetRaidConfigurationRequestData"; +import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; +import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { IInRaidConfig } from "../models/spt/config/IInRaidConfig"; +import { IMatchConfig } from "../models/spt/config/IMatchConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { SaveServer } from "../servers/SaveServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; +import { BotLootCacheService } from "../services/BotLootCacheService"; +import { MatchLocationService } from "../services/MatchLocationService"; +import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; +export declare class MatchController { + protected logger: ILogger; + protected saveServer: SaveServer; + protected profileHelper: ProfileHelper; + protected matchLocationService: MatchLocationService; + protected traderHelper: TraderHelper; + protected botLootCacheService: BotLootCacheService; + protected configServer: ConfigServer; + protected profileSnapshotService: ProfileSnapshotService; + protected botGenerationCacheService: BotGenerationCacheService; + protected applicationContext: ApplicationContext; + protected matchConfig: IMatchConfig; + protected inraidConfig: IInRaidConfig; + protected botConfig: IBotConfig; + constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, botGenerationCacheService: BotGenerationCacheService, applicationContext: ApplicationContext); + getEnabled(): boolean; + getProfile(info: IGetProfileRequestData): IPmcData[]; + createGroup(sessionID: string, info: ICreateGroupRequestData): any; + deleteGroup(info: any): void; + joinMatch(info: IJoinMatchRequestData, sessionID: string): IJoinMatchResult[]; + protected getMatch(location: string): any; + getGroupStatus(info: IGetGroupStatusRequestData): any; + /** + * Handle /client/raid/configuration + * @param request + * @param sessionID + */ + startOfflineRaid(request: IGetRaidConfigurationRequestData, sessionID: string): void; + /** + * Convert a difficulty value from pre-raid screen to a bot difficulty + * @param botDifficulty dropdown difficulty value + * @returns bot difficulty + */ + protected convertDifficultyDropdownIntoBotDifficulty(botDifficulty: string): string; + endOfflineRaid(info: IEndOfflineRaidRequestData, sessionID: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/NoteController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/NoteController.d.ts new file mode 100644 index 0000000..9e2e250 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/NoteController.d.ts @@ -0,0 +1,11 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { INoteActionData } from "../models/eft/notes/INoteActionData"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +export declare class NoteController { + protected eventOutputHolder: EventOutputHolder; + constructor(eventOutputHolder: EventOutputHolder); + addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/NotifierController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/NotifierController.d.ts new file mode 100644 index 0000000..31d7bfe --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/NotifierController.d.ts @@ -0,0 +1,22 @@ +import { NotifierHelper } from "../helpers/NotifierHelper"; +import { NotificationService } from "../services/NotificationService"; +import { INotifierChannel } from "../models/eft/notifier/INotifier"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +export declare class NotifierController { + protected notifierHelper: NotifierHelper; + protected httpServerHelper: HttpServerHelper; + protected notificationService: NotificationService; + protected pollInterval: number; + protected timeout: number; + constructor(notifierHelper: NotifierHelper, httpServerHelper: HttpServerHelper, notificationService: NotificationService); + /** + * Resolve an array of session notifications. + * + * If no notifications are currently queued then intermittently check for new notifications until either + * one or more appear or when a timeout expires. + * If no notifications are available after the timeout, use a default message. + */ + notifyAsync(sessionID: string): Promise; + getServer(sessionID: string): string; + getChannel(sessionID: string): INotifierChannel; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/PresetBuildController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/PresetBuildController.d.ts new file mode 100644 index 0000000..65ae0c4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/PresetBuildController.d.ts @@ -0,0 +1,18 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IPresetBuildActionRequestData } from "../models/eft/presetBuild/IPresetBuildActionRequestData"; +import { WeaponBuild } from "../models/eft/profile/IAkiProfile"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { SaveServer } from "../servers/SaveServer"; +import { HashUtil } from "../utils/HashUtil"; +export declare class PresetBuildController { + protected hashUtil: HashUtil; + protected eventOutputHolder: EventOutputHolder; + protected itemHelper: ItemHelper; + protected saveServer: SaveServer; + constructor(hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, itemHelper: ItemHelper, saveServer: SaveServer); + getUserBuilds(sessionID: string): WeaponBuild[]; + saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; + removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/PresetController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/PresetController.d.ts new file mode 100644 index 0000000..ca1af1a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/PresetController.d.ts @@ -0,0 +1,8 @@ +import { PresetHelper } from "../helpers/PresetHelper"; +import { DatabaseServer } from "../servers/DatabaseServer"; +export declare class PresetController { + protected presetHelper: PresetHelper; + protected databaseServer: DatabaseServer; + constructor(presetHelper: PresetHelper, databaseServer: DatabaseServer); + initialize(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/ProfileController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/ProfileController.d.ts new file mode 100644 index 0000000..e76785a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/ProfileController.d.ts @@ -0,0 +1,46 @@ +import { PlayerScavGenerator } from "../generators/PlayerScavGenerator"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { QuestHelper } from "../helpers/QuestHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IMiniProfile } from "../models/eft/launcher/IMiniProfile"; +import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData"; +import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData"; +import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData"; +import { ISearchFriendRequestData } from "../models/eft/profile/ISearchFriendRequestData"; +import { ISearchFriendResponse } from "../models/eft/profile/ISearchFriendResponse"; +import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { ProfileFixerService } from "../services/ProfileFixerService"; +import { HashUtil } from "../utils/HashUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class ProfileController { + protected hashUtil: HashUtil; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected profileFixerService: ProfileFixerService; + protected playerScavGenerator: PlayerScavGenerator; + protected traderHelper: TraderHelper; + protected questHelper: QuestHelper; + protected profileHelper: ProfileHelper; + constructor(hashUtil: HashUtil, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileFixerService: ProfileFixerService, playerScavGenerator: PlayerScavGenerator, traderHelper: TraderHelper, questHelper: QuestHelper, profileHelper: ProfileHelper); + getMiniProfiles(): IMiniProfile[]; + getMiniProfile(sessionID: string): any; + getCompleteProfile(sessionID: string): IPmcData[]; + createProfile(info: IProfileCreateRequestData, sessionID: string): void; + /** + * Generate a player scav object + * pmc profile MUST exist first before pscav can be generated + * @param sessionID + * @returns IPmcData object + */ + 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[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/QuestController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/QuestController.d.ts new file mode 100644 index 0000000..fe1754d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/QuestController.d.ts @@ -0,0 +1,136 @@ +import { DialogueHelper } from "../helpers/DialogueHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { QuestConditionHelper } from "../helpers/QuestConditionHelper"; +import { QuestHelper } from "../helpers/QuestHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IQuest, Reward } from "../models/eft/common/tables/IQuest"; +import { IRepeatableQuest } from "../models/eft/common/tables/IRepeatableQuests"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData"; +import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData"; +import { IHandoverQuestRequestData } from "../models/eft/quests/IHandoverQuestRequestData"; +import { IQuestConfig } from "../models/spt/config/IQuestConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocaleService } from "../services/LocaleService"; +import { LocalisationService } from "../services/LocalisationService"; +import { PlayerService } from "../services/PlayerService"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class QuestController { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected httpResponseUtil: HttpResponseUtil; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected dialogueHelper: DialogueHelper; + protected profileHelper: ProfileHelper; + protected questHelper: QuestHelper; + protected questConditionHelper: QuestConditionHelper; + protected playerService: PlayerService; + protected localeService: LocaleService; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected questConfig: IQuestConfig; + constructor(logger: ILogger, timeUtil: TimeUtil, httpResponseUtil: HttpResponseUtil, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, itemHelper: ItemHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, questHelper: QuestHelper, questConditionHelper: QuestConditionHelper, playerService: PlayerService, localeService: LocaleService, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Get all quests visible to player + * Exclude quests with incomplete preconditions (level/loyalty) + * @param sessionID session id + * @returns array of IQuest + */ + getClientQuests(sessionID: string): IQuest[]; + /** + * Is the quest for the opposite side the player is on + * @param side player side (usec/bear) + * @param questId questId to check + */ + protected questIsForOtherSide(side: string, questId: string): boolean; + /** + * Handle the client accepting a quest and starting it + * Send starting rewards if any to player and + * Send start notification if any to player + * @param pmcData Profile to update + * @param acceptedQuest Quest accepted + * @param sessionID Session id + * @returns client response + */ + acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Get a quests startedMessageText key from db, if no startedMessageText key found, use description key instead + * @param startedMessageTextId startedMessageText property from IQuest + * @param questDescriptionId description property from IQuest + * @returns message id + */ + protected getMessageIdForQuestStart(startedMessageTextId: string, questDescriptionId: string): string; + /** + * Handle the client accepting a repeatable quest and starting it + * Send starting rewards if any to player and + * Send start notification if any to player + * @param pmcData Profile to update with new quest + * @param acceptedQuest Quest being accepted + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + acceptRepeatableQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Look for an accepted quest inside player profile, return matching + * @param pmcData Profile to search through + * @param acceptedQuest Quest to search for + * @returns IRepeatableQuest + */ + protected getRepeatableQuestFromProfile(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData): IRepeatableQuest; + /** + * Update completed quest in profile + * Add newly unlocked quests to profile + * Also recalculate thier level due to exp rewards + * @param pmcData Player profile + * @param body Completed quest request + * @param sessionID Session id + * @returns ItemEvent client response + */ + completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Send a popup to player on successful completion of a quest + * @param sessionID session id + * @param pmcData Player profile + * @param completedQuestId Completed quest id + * @param questRewards Rewards given to player + */ + protected sendSuccessDialogMessageOnQuestComplete(sessionID: string, pmcData: IPmcData, completedQuestId: string, questRewards: Reward[]): void; + /** + * Look for newly available quests after completing a quest with a requirement to wait x minutes (time-locked) before being available and add data to profile + * @param pmcData Player profile to update + * @param quests Quests to look for wait conditions in + * @param completedQuestId Quest just completed + */ + protected addTimeLockedQuestsToProfile(pmcData: IPmcData, quests: IQuest[], completedQuestId: string): void; + /** + * Returns a list of quests that should be failed when a quest is completed + * @param completedQuestId quest completed id + * @returns array of quests + */ + protected getQuestsFailedByCompletingQuest(completedQuestId: string): IQuest[]; + /** + * Fail the quests provided + * Update quest in profile, otherwise add fresh quest object with failed status + * @param sessionID session id + * @param pmcData player profile + * @param questsToFail quests to fail + */ + protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[]): void; + handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Increment a backend counter stored value by an amount, + * Create counter if it does not exist + * @param pmcData Profile to find backend counter in + * @param conditionId backend counter id to update + * @param questId quest id counter is associated with + * @param counterValue value to increment the backend counter with + */ + protected updateProfileBackendCounterValue(pmcData: IPmcData, conditionId: string, questId: string, counterValue: number): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/RagfairController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/RagfairController.d.ts new file mode 100644 index 0000000..fffcaa3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/RagfairController.d.ts @@ -0,0 +1,126 @@ +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 { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { IAddOfferRequestData, Requirement } from "../models/eft/ragfair/IAddOfferRequestData"; +import { IExtendOfferRequestData } from "../models/eft/ragfair/IExtendOfferRequestData"; +import { IGetItemPriceResult } from "../models/eft/ragfair/IGetItemPriceResult"; +import { IGetMarketPriceRequestData } from "../models/eft/ragfair/IGetMarketPriceRequestData"; +import { IGetOffersResult } from "../models/eft/ragfair/IGetOffersResult"; +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RagfairServer } from "../servers/RagfairServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocalisationService } from "../services/LocalisationService"; +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"; +/** + * Handle RagfairCallback events + */ +export declare class RagfairController { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected httpResponse: HttpResponseUtil; + protected eventOutputHolder: EventOutputHolder; + protected ragfairServer: RagfairServer; + protected ragfairPriceService: RagfairPriceService; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected saveServer: SaveServer; + protected ragfairSellHelper: RagfairSellHelper; + protected ragfairTaxHelper: RagfairTaxHelper; + protected ragfairSortHelper: RagfairSortHelper; + protected ragfairOfferHelper: RagfairOfferHelper; + protected profileHelper: ProfileHelper; + protected paymentService: PaymentService; + protected handbookHelper: HandbookHelper; + protected paymentHelper: PaymentHelper; + protected inventoryHelper: InventoryHelper; + protected traderHelper: TraderHelper; + protected ragfairHelper: RagfairHelper; + protected ragfairOfferService: RagfairOfferService; + protected ragfairRequiredItemsService: RagfairRequiredItemsService; + protected ragfairOfferGenerator: RagfairOfferGenerator; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, eventOutputHolder: EventOutputHolder, 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, traderHelper: TraderHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, localisationService: LocalisationService, configServer: ConfigServer); + getOffers(sessionID: string, searchRequest: ISearchRequestData): IGetOffersResult; + /** + * Get offers for the client based on type of search being performed + * @param searchRequest Client search request data + * @param itemsToAdd + * @param traderAssorts Trader assorts + * @param pmcProfile Player profile + * @returns array of offers + */ + protected getOffersForSearchType(searchRequest: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; + /** + * Get categories for the type of search being performed, linked/required/all + * @param searchRequest Client search request data + * @param offers ragfair offers to get categories for + * @returns record with tpls + counts + */ + protected getSpecificCategories(searchRequest: ISearchRequestData, offers: IRagfairOffer[]): Record; + /** + * Add Required offers to offers result + * @param searchRequest Client search request data + * @param assorts + * @param pmcProfile Player profile + * @param result Result object being sent back to client + */ + protected addRequiredOffersToResult(searchRequest: ISearchRequestData, assorts: Record, pmcProfile: IPmcData, result: IGetOffersResult): void; + /** + * Add index to all offers passed in (0-indexed) + * @param offers Offers to add index value to + */ + protected addIndexValueToOffers(offers: IRagfairOffer[]): void; + /** + * Update a trader flea offer with buy restrictions stored in the traders assort + * @param offer flea offer to update + * @param profile full profile of player + */ + protected setTraderOfferPurchaseLimits(offer: IRagfairOffer, profile: IAkiProfile): void; + /** + * Adjust ragfair offer stack count to match same value as traders assort stack count + * @param offer Flea offer to adjust + */ + protected setTraderOfferStackSize(offer: IRagfairOffer): void; + protected isLinkedSearch(info: ISearchRequestData): boolean; + protected isRequiredSearch(info: ISearchRequestData): boolean; + update(): void; + /** + * Called when creating an offer on flea, fills values in top right corner + * @param getPriceRequest + * @returns min/avg/max values for an item based on flea offers available + */ + getItemMinAvgMaxFleaPriceValues(getPriceRequest: IGetMarketPriceRequestData): IGetItemPriceResult; + addPlayerOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse; + createPlayerOffer(profile: IAkiProfile, requirements: Requirement[], items: Item[], sellInOnePiece: boolean, amountToSend: number): IRagfairOffer; + getAllFleaPrices(): Record; + getStaticPrices(): Record; + removeOffer(offerId: string, sessionID: string): IItemEventRouterResponse; + extendOffer(info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/RepairController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/RepairController.d.ts new file mode 100644 index 0000000..fd8ff72 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/RepairController.d.ts @@ -0,0 +1,41 @@ +import { QuestHelper } from "../helpers/QuestHelper"; +import { RepairHelper } from "../helpers/RepairHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRepairActionDataRequest } from "../models/eft/repair/IRepairActionDataRequest"; +import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepairActionDataRequest"; +import { IRepairConfig } from "../models/spt/config/IRepairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { PaymentService } from "../services/PaymentService"; +import { RepairService } from "../services/RepairService"; +export declare class RepairController { + protected logger: ILogger; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected traderHelper: TraderHelper; + protected paymentService: PaymentService; + protected repairHelper: RepairHelper; + protected repairService: RepairService; + protected repairConfig: IRepairConfig; + constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, repairService: RepairService); + /** + * Repair with trader + * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile + * @returns item event router action + */ + traderRepair(sessionID: string, body: ITraderRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; + /** + * Repair with repair kit + * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile + * @returns item event router action + */ + repairWithKit(sessionID: string, body: IRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/RepeatableQuestController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/RepeatableQuestController.d.ts new file mode 100644 index 0000000..dd8dc40 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/RepeatableQuestController.d.ts @@ -0,0 +1,256 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +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 } from "../models/eft/common/IPmcData"; +import { TraderInfo } from "../models/eft/common/tables/IBotBase"; +import { ICompletion, ICompletionAvailableFor, IElimination, IEliminationCondition, IExploration, IExplorationCondition, IPmcDataRepeatableQuest, IRepeatableQuest, IReward, IRewards } from "../models/eft/common/tables/IRepeatableQuests"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest"; +import { ELocationName } from "../models/enums/ELocationName"; +import { IQuestConfig, IRepeatableQuestConfig } from "../models/spt/config/IQuestConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { LocalisationService } from "../services/LocalisationService"; +import { PaymentService } from "../services/PaymentService"; +import { ProfileFixerService } from "../services/ProfileFixerService"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +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>; +} +export interface IEliminationPool { + targets: IEliminationTargetPool; +} +export interface IEliminationTargetPool { + Savage?: ITargetLocation; + AnyPmc?: ITargetLocation; + bossBully?: ITargetLocation; + bossGluhar?: ITargetLocation; + bossKilla?: ITargetLocation; + bossSanitar?: ITargetLocation; + bossTagilla?: ITargetLocation; + bossKojaniy?: ITargetLocation; +} +export interface ITargetLocation { + locations: string[]; +} +export declare class RepeatableQuestController { + protected timeUtil: TimeUtil; + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected httpResponse: HttpResponseUtil; + protected mathUtil: MathUtil; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected presetHelper: PresetHelper; + protected profileHelper: ProfileHelper; + protected profileFixerService: ProfileFixerService; + protected handbookHelper: HandbookHelper; + protected ragfairServerHelper: RagfairServerHelper; + protected eventOutputHolder: EventOutputHolder; + protected localisationService: LocalisationService; + protected paymentService: PaymentService; + protected objectId: ObjectId; + protected itemFilterService: ItemFilterService; + protected configServer: ConfigServer; + protected questConfig: IQuestConfig; + constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, httpResponse: HttpResponseUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, handbookHelper: HandbookHelper, ragfairServerHelper: RagfairServerHelper, eventOutputHolder: EventOutputHolder, localisationService: LocalisationService, paymentService: PaymentService, objectId: ObjectId, itemFilterService: ItemFilterService, configServer: ConfigServer); + /** + * 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[]; + /** + * Get repeatable quest data from profile from name (daily/weekly), creates base repeatable quest object if none exists + * @param repeatableConfig daily/weekly config + * @param pmcData Profile to search + * @returns IPmcDataRepeatableQuest + */ + protected getRepeatableQuestSubTypeFromProfile(repeatableConfig: IRepeatableQuestConfig, pmcData: IPmcData): 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, 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: number): any; + /** + * Generates the base object of quest type format given as templates in assets/database/templates/repeatableQuests.json + * The templates include Elimination, Completion and Extraction quest types + * + * @param {string} type quest type: "Elimination", "Completion" or "Extraction" + * @param {string} traderId trader from which the quest will be provided + * @param {string} side scav daily or pmc daily/weekly quest + * @returns {object} a object which contains the base elements for repeatable quests of the requests type + * (needs to be filled with reward and conditions by called to make a valid quest) + */ + generateRepeatableTemplate(type: string, traderId: string, side: string): IRepeatableQuest; + /** + * 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; + /** + * Cpnvert a location into an quest code can read (e.g. factory4_day into 55f2d3fd4bdc2d5f408b4567) + * @param locationKey e.g factory4_day + * @returns guid + */ + protected getQuestLocationByMapId(locationKey: string): string; + /** + * 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(configArrayInput: ProbabilityObject[]): ProbabilityObjectArray; + changeRepeatableQuest(pmcData: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse; + /** + * Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable) + * @param repeatableQuestConfig config file + * @returns a list of rewardable items [[_tpl, itemTemplate],...] + */ + protected getRewardableItems(repeatableQuestConfig: IRepeatableQuestConfig): [string, ITemplateItem][]; + /** + * Checks if an id is a valid item. Valid meaning that it's an item that may be a reward + * or content of bot loot. Items that are tested as valid may be in a player backpack or stash. + * @param {string} tpl template id of item to check + * @returns boolean: true if item is valid reward + */ + isValidRewardItem(tpl: string, repeatableQuestConfig: IRepeatableQuestConfig): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/TradeController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/TradeController.d.ts new file mode 100644 index 0000000..dc7de19 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/TradeController.d.ts @@ -0,0 +1,31 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { TradeHelper } from "../helpers/TradeHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Upd } from "../models/eft/common/tables/IItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTradeRequestData"; +import { IProcessRagfairTradeRequestData } from "../models/eft/trade/IProcessRagfairTradeRequestData"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RagfairServer } from "../servers/RagfairServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +declare class TradeController { + protected logger: ILogger; + protected eventOutputHolder: EventOutputHolder; + protected tradeHelper: TradeHelper; + protected itemHelper: ItemHelper; + protected profileHelper: ProfileHelper; + protected ragfairServer: RagfairServer; + protected httpResponse: HttpResponseUtil; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, tradeHelper: TradeHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, ragfairServer: RagfairServer, httpResponse: HttpResponseUtil, localisationService: LocalisationService, configServer: ConfigServer); + confirmTrading(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string, foundInRaid?: boolean, upd?: Upd): IItemEventRouterResponse; + confirmRagfairTrading(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse; +} +export { TradeController }; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/TraderController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/TraderController.d.ts new file mode 100644 index 0000000..b67aec9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/TraderController.d.ts @@ -0,0 +1,48 @@ +import { FenceBaseAssortGenerator } from "../generators/FenceBaseAssortGenerator"; +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 { FenceService } from "../services/FenceService"; +import { TraderAssortService } from "../services/TraderAssortService"; +import { TraderPurchasePersisterService } from "../services/TraderPurchasePersisterService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class TraderController { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected traderAssortHelper: TraderAssortHelper; + protected profileHelper: ProfileHelper; + protected traderHelper: TraderHelper; + protected timeUtil: TimeUtil; + protected traderAssortService: TraderAssortService; + protected traderPurchasePersisterService: TraderPurchasePersisterService; + protected fenceService: FenceService; + protected fenceBaseAssortGenerator: FenceBaseAssortGenerator; + protected jsonUtil: JsonUtil; + constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, traderPurchasePersisterService: TraderPurchasePersisterService, fenceService: FenceService, fenceBaseAssortGenerator: FenceBaseAssortGenerator, jsonUtil: JsonUtil); + /** + * Runs when onLoad event is fired + * Iterate over traders, ensure an unmolested copy of their assorts is stored in traderAssortService + * Store timestamp of next assort refresh in nextResupply property of traders .base object + */ + load(): void; + /** + * Runs when onUpdate is fired + * If current time is > nextResupply(expire) time of trader, refresh traders assorts and + * Fence is handled slightly differently + * @returns has run + */ + update(): boolean; + /** + * Return an array of all traders + * @param sessionID Session id + * @returns array if ITraderBase objects + */ + getAllTraders(sessionID: string): ITraderBase[]; + getTrader(sessionID: string, traderID: string): ITraderBase; + getAssort(sessionId: string, traderId: string): ITraderAssort; + getPurchasesData(sessionID: string, traderID: string): Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/WeatherController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/WeatherController.d.ts new file mode 100644 index 0000000..631a90c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/WeatherController.d.ts @@ -0,0 +1,18 @@ +import { WeatherGenerator } from "../generators/WeatherGenerator"; +import { IWeatherData } from "../models/eft/weather/IWeatherData"; +import { IWeatherConfig } from "../models/spt/config/IWeatherConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class WeatherController { + protected weatherGenerator: WeatherGenerator; + protected logger: ILogger; + protected configServer: ConfigServer; + protected weatherConfig: IWeatherConfig; + constructor(weatherGenerator: WeatherGenerator, logger: ILogger, configServer: ConfigServer); + generate(): IWeatherData; + /** + * Get the current in-raid time (MUST HAVE PLAYER LOGGED INTO CLIENT TO WORK) + * @returns Date object + */ + getCurrentInRaidTime(): Date; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/controllers/WishlistController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/controllers/WishlistController.d.ts new file mode 100644 index 0000000..60c4a15 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/controllers/WishlistController.d.ts @@ -0,0 +1,10 @@ +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData"; +export declare class WishlistController { + protected eventOutputHolder: EventOutputHolder; + constructor(eventOutputHolder: EventOutputHolder); + addToWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; + removeFromWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/di/Container.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/di/Container.d.ts new file mode 100644 index 0000000..e339a3b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/di/Container.d.ts @@ -0,0 +1,18 @@ +import { DependencyContainer } from "tsyringe"; +/** + * Handle the registration of classes to be used by the Dependency Injection code + */ +export declare class Container { + static registerPostLoadTypes(container: DependencyContainer, childContainer: DependencyContainer): void; + 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; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/di/OnLoad.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/di/OnLoad.d.ts new file mode 100644 index 0000000..a5cdea3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/di/OnLoad.d.ts @@ -0,0 +1,4 @@ +export interface OnLoad { + onLoad(): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/di/OnUpdate.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/di/OnUpdate.d.ts new file mode 100644 index 0000000..e1ce375 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/di/OnUpdate.d.ts @@ -0,0 +1,4 @@ +export interface OnUpdate { + onUpdate(timeSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/di/Router.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/di/Router.d.ts new file mode 100644 index 0000000..2fb98e0 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/di/Router.d.ts @@ -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); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/di/Serializer.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/di/Serializer.d.ts new file mode 100644 index 0000000..2617007 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/di/Serializer.d.ts @@ -0,0 +1,6 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +export declare class Serializer { + serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void; + canHandle(something: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/BotEquipmentModGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/BotEquipmentModGenerator.d.ts new file mode 100644 index 0000000..6703a36 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/BotEquipmentModGenerator.d.ts @@ -0,0 +1,200 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProbabilityHelper } from "../helpers/ProbabilityHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { Mods, ModsChances } from "../models/eft/common/tables/IBotType"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; +import { EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { BotEquipmentModPoolService } from "../services/BotEquipmentModPoolService"; +import { BotModLimits, BotWeaponModLimitService } from "../services/BotWeaponModLimitService"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotEquipmentModGenerator { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected probabilityHelper: ProbabilityHelper; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected botEquipmentFilterService: BotEquipmentFilterService; + protected itemFilterService: ItemFilterService; + protected profileHelper: ProfileHelper; + protected botWeaponModLimitService: BotWeaponModLimitService; + protected botHelper: BotHelper; + protected botGeneratorHelper: BotGeneratorHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected localisationService: LocalisationService; + protected botEquipmentModPoolService: BotEquipmentModPoolService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, itemHelper: ItemHelper, botEquipmentFilterService: BotEquipmentFilterService, itemFilterService: ItemFilterService, profileHelper: ProfileHelper, botWeaponModLimitService: BotWeaponModLimitService, botHelper: BotHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, localisationService: LocalisationService, botEquipmentModPoolService: BotEquipmentModPoolService, configServer: ConfigServer); + /** + * Check mods are compatible and add to array + * @param equipment Equipment item to add mods to + * @param modPool Mod list to choose frm + * @param parentId parentid of item to add mod to + * @param parentTemplate template objet of item to add mods to + * @param modSpawnChances dictionary of mod items and their chance to spawn for this bot type + * @param botRole the bot role being generated for + * @param forceSpawn should this mod be forced to spawn + * @returns Item + compatible mods as an array + */ + generateModsForEquipment(equipment: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances, botRole: string, forceSpawn?: boolean): Item[]; + /** + * Add mods to a weapon using the provided mod pool + * @param sessionId session id + * @param weapon Weapon to add mods to + * @param modPool Pool of compatible mods to attach to weapon + * @param weaponParentId parentId of weapon + * @param parentTemplate Weapon which mods will be generated on + * @param modSpawnChances Mod spawn chances + * @param ammoTpl Ammo tpl to use when generating magazines/cartridges + * @param botRole Role of bot weapon is generated for + * @param botLevel lvel of the bot weapon is being generated for + * @param modLimits limits placed on certian mod types per gun + * @param botEquipmentRole role of bot when accessing bot.json equipment config settings + * @returns Weapon + mods array + */ + generateModsForWeapon(sessionId: string, weapon: Item[], modPool: Mods, weaponParentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances, ammoTpl: string, botRole: string, botLevel: number, modLimits: BotModLimits, botEquipmentRole: string): Item[]; + /** + * Is this modslot a front or rear sight + * @param modSlot Slot to check + * @returns true if it's a front/rear sight + */ + protected modIsFrontOrRearSight(modSlot: string): boolean; + /** + * Does the provided mod details show the mod can hold a scope + * @param modSlot e.g. mod_scope, mod_mount + * @param modsParentId Parent id of mod item + * @returns true if it can hold a scope + */ + protected modSlotCanHoldScope(modSlot: string, modsParentId: string): boolean; + /** + * Set all scope mod chances to 100% + * @param modSpawnChances Chances objet to update + */ + protected setScopeSpawnChancesToFull(modSpawnChances: ModsChances): void; + protected sortModKeys(unsortedKeys: string[]): string[]; + /** + * Get a Slot property for an item (chamber/cartridge/slot) + * @param modSlot e.g patron_in_weapon + * @param parentTemplate item template + * @returns Slot item + */ + protected getModItemSlot(modSlot: string, parentTemplate: ITemplateItem): Slot; + /** + * randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot + * never return true for an item that has 0% spawn chance + * @param itemSlot slot the item sits in + * @param modSlot slot the mod sits in + * @param modSpawnChances Chances for various mod spawns + * @returns boolean true if it should spawn + */ + protected shouldModBeSpawned(itemSlot: Slot, modSlot: string, modSpawnChances: ModsChances): boolean; + /** + * + * @param modSlot Slot mod will fit into + * @param isRandomisableSlot Will generate a randomised mod pool if true + * @param modsParent Parent slot the item will be a part of + * @param botEquipBlacklist Blacklist to prevent mods from being picked + * @param itemModPool Pool of items to pick from + * @param weapon array with only weapon tpl in it, ready for mods to be added + * @param ammoTpl ammo tpl to use if slot requires a cartridge to be added (e.g. mod_magazine) + * @param parentTemplate Parent item the mod will go into + * @returns ITemplateItem + */ + protected chooseModToPutIntoSlot(modSlot: string, isRandomisableSlot: boolean, botWeaponSightWhitelist: Record, botEquipBlacklist: EquipmentFilterDetails, itemModPool: Record, weapon: Item[], ammoTpl: string, parentTemplate: ITemplateItem): [boolean, ITemplateItem]; + /** + * Create a mod item with parameters as properties + * @param modId _id + * @param modTpl _tpl + * @param parentId parentId + * @param modSlot slotId + * @param modTemplate Used to add additional properites in the upd object + * @returns Item object + */ + protected createModItem(modId: string, modTpl: string, parentId: string, modSlot: string, modTemplate: ITemplateItem, botRole: string): Item; + /** + * Get a list of containers that hold ammo + * e.g. mod_magazine / patron_in_weapon_000 + * @returns string array + */ + protected getAmmoContainers(): string[]; + /** + * Get a random mod from an items compatible mods Filter array + * @param modTpl ???? default value to return if nothing found + * @param parentSlot item mod will go into, used to get combatible items + * @param modSlot Slot to get mod to fill + * @param items items to ensure picked mod is compatible with + * @returns item tpl + */ + protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string; + /** + * Log errors if mod is not compatible with slot + * @param modToAdd template of mod to check + * @param itemSlot slot the item will be placed in + * @param modSlot slot the mod will fill + * @param parentTemplate template of the mods parent item + * @returns true if valid + */ + protected isModValidForSlot(modToAdd: [boolean, ITemplateItem], itemSlot: Slot, modSlot: string, parentTemplate: ITemplateItem): boolean; + /** + * Find mod tpls of a provided type and add to modPool + * @param desiredSlotName slot to look up and add we are adding tpls for (e.g mod_scope) + * @param modTemplate db object for modItem we get compatible mods from + * @param modPool Pool of mods we are adding to + */ + protected addCompatibleModsForProvidedMod(desiredSlotName: string, modTemplate: ITemplateItem, modPool: Mods, botEquipBlacklist: EquipmentFilterDetails): void; + /** + * Get the possible items that fit a slot + * @param parentItemId item tpl to get compatible items for + * @param modSlot Slot item should fit in + * @param botEquipBlacklist equipment that should not be picked + * @returns array of compatible items for that slot + */ + protected getDynamicModPool(parentItemId: string, modSlot: string, botEquipBlacklist: EquipmentFilterDetails): string[]; + /** + * Take a list of tpls and filter out blacklisted values using itemFilterService + botEquipmentBlacklist + * @param allowedMods base mods to filter + * @param botEquipBlacklist equipment blacklist + * @param modSlot slot mods belong to + * @returns Filtered array of mod tpls + */ + protected filterWeaponModsByBlacklist(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string): string[]; + /** + * 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 items The items where the CylinderMagazine's camora are appended to + * @param modPool modPool which should include available cartrigdes + * @param parentId The CylinderMagazine's UID + * @param parentTemplate The CylinderMagazine's template + */ + protected fillCamora(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem): void; + /** + * Take a record of camoras and merge the compatable shells into one array + * @param camorasWithShells camoras we want to merge into one array + * @returns string array of shells fro luitple camora sources + */ + protected mergeCamoraPoolsTogether(camorasWithShells: Record): string[]; + /** + * Filter out non-whitelisted weapon scopes + * @param weapon Weapon scopes will be added to + * @param scopes Full scope pool + * @param botWeaponSightWhitelist whitelist of scope types by weapon base type + * @returns array of scope tpls that have been filtered + */ + protected filterSightsByWeaponType(weapon: Item, scopes: string[], botWeaponSightWhitelist: Record): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/BotGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/BotGenerator.d.ts new file mode 100644 index 0000000..9581259 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/BotGenerator.d.ts @@ -0,0 +1,106 @@ +import { BotDifficultyHelper } from "../helpers/BotDifficultyHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { Health as PmcHealth, IBotBase, Info, Skills } from "../models/eft/common/tables/IBotBase"; +import { Health, IBotType } from "../models/eft/common/tables/IBotType"; +import { BotGenerationDetails } from "../models/spt/bots/BotGenerationDetails"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotInventoryGenerator } from "./BotInventoryGenerator"; +import { BotLevelGenerator } from "./BotLevelGenerator"; +export declare class BotGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected profileHelper: ProfileHelper; + protected databaseServer: DatabaseServer; + protected botInventoryGenerator: BotInventoryGenerator; + protected botLevelGenerator: BotLevelGenerator; + protected botEquipmentFilterService: BotEquipmentFilterService; + protected weightedRandomHelper: WeightedRandomHelper; + protected botHelper: BotHelper; + protected botDifficultyHelper: BotDifficultyHelper; + protected seasonalEventService: SeasonalEventService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, configServer: ConfigServer); + /** + * Generate a player scav bot object + * @param role e.g. assault / pmcbot + * @param difficulty easy/normal/hard/impossible + * @param botTemplate base bot template to use (e.g. assault/pmcbot) + * @returns + */ + generatePlayerScav(sessionId: string, role: string, difficulty: string, botTemplate: IBotType): IBotBase; + /** + * Create x number of bots of the type/side/difficulty defined in botGenerationDetails + * @param sessionId Session id + * @param botGenerationDetails details on how to generate bots + * @returns array of bots + */ + prepareAndGenerateBots(sessionId: string, botGenerationDetails: BotGenerationDetails): IBotBase[]; + /** + * Get a clone of the database\bots\base.json file + * @returns IBotBase object + */ + protected getCloneOfBotBase(): IBotBase; + /** + * Create a IBotBase object with equipment/loot/exp etc + * @param sessionId Session id + * @param bot bots base file + * @param botJsonTemplate Bot template from db/bots/x.json + * @param botGenerationDetails details on how to generate the bot + * @returns IBotBase object + */ + protected generateBot(sessionId: string, bot: IBotBase, botJsonTemplate: IBotType, botGenerationDetails: BotGenerationDetails): IBotBase; + /** + * Create a bot nickname + * @param botJsonTemplate x.json from database + * @param isPlayerScav Will bot be player scav + * @param botRole role of bot e.g. assault + * @returns Nickname for bot + */ + protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string): string; + /** + * Log the number of PMCs generated to the debug console + * @param output Generated bot array, ready to send to client + */ + protected logPmcGeneratedCount(output: IBotBase[]): void; + /** + * Converts health object to the required format + * @param healthObj health object from bot json + * @param playerScav Is a pscav bot being generated + * @returns PmcHealth object + */ + protected generateHealth(healthObj: Health, playerScav?: boolean): PmcHealth; + protected generateSkills(skillsObj: Skills): Skills; + /** + * Generate a random Id for a bot and apply to bots _id and aid value + * @param bot bot to update + * @returns updated IBotBase object + */ + protected generateId(bot: IBotBase): IBotBase; + protected generateInventoryID(profile: IBotBase): IBotBase; + /** + * Randomise a bots game version and account category + * Chooses from all the game versions (standard, eod etc) + * Chooses account type (default, Sherpa, etc) + * @param botInfo bot info object to update + */ + protected getRandomisedGameVersionAndCategory(botInfo: Info): void; + /** + * Add a side-specific (usec/bear) dogtag item to a bots inventory + * @param bot bot to add dogtag to + * @returns Bot with dogtag added + */ + protected generateDogtag(bot: IBotBase): IBotBase; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/BotInventoryGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/BotInventoryGenerator.d.ts new file mode 100644 index 0000000..83a548b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/BotInventoryGenerator.d.ts @@ -0,0 +1,112 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; +import { Chances, Generation, IBotType, Inventory, Mods } from "../models/eft/common/tables/IBotType"; +import { EquipmentSlots } from "../models/enums/EquipmentSlots"; +import { EquipmentFilterDetails, IBotConfig, RandomisationDetails } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotEquipmentModPoolService } from "../services/BotEquipmentModPoolService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotEquipmentModGenerator } from "./BotEquipmentModGenerator"; +import { BotLootGenerator } from "./BotLootGenerator"; +import { BotWeaponGenerator } from "./BotWeaponGenerator"; +export declare class BotInventoryGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected botWeaponGenerator: BotWeaponGenerator; + protected botLootGenerator: BotLootGenerator; + protected botGeneratorHelper: BotGeneratorHelper; + protected botHelper: BotHelper; + protected weightedRandomHelper: WeightedRandomHelper; + protected localisationService: LocalisationService; + protected botEquipmentModPoolService: BotEquipmentModPoolService; + protected botEquipmentModGenerator: BotEquipmentModGenerator; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, botHelper: BotHelper, weightedRandomHelper: WeightedRandomHelper, localisationService: LocalisationService, botEquipmentModPoolService: BotEquipmentModPoolService, botEquipmentModGenerator: BotEquipmentModGenerator, configServer: ConfigServer); + /** + * Add equipment/weapons/loot to bot + * @param sessionId Session id + * @param botJsonTemplate bot/x.json data from db + * @param botRole Role bot has (assault/pmcBot) + * @param isPmc Is bot being converted into a pmc + * @param botLevel Level of bot being generated + * @returns PmcInventory object with equipment/weapons/loot + */ + generateInventory(sessionId: string, botJsonTemplate: IBotType, botRole: string, isPmc: boolean, botLevel: number): PmcInventory; + /** + * Create a pmcInventory object with all the base/generic items needed + * @returns PmcInventory object + */ + protected generateInventoryBase(): PmcInventory; + /** + * Add equipment to a bot + * @param templateInventory bot/x.json data from db + * @param equipmentChances Chances items will be added to bot + * @param botRole Role bot has (assault/pmcBot) + * @param botInventory Inventory to add equipment to + * @param botLevel Level of bot + */ + protected generateAndAddEquipmentToBot(templateInventory: Inventory, equipmentChances: Chances, botRole: string, botInventory: PmcInventory, botLevel: number): void; + /** + * Add a piece of equipment with mods to inventory from the provided pools + * @param equipmentSlot Slot to select an item for + * @param equipmentPool Possible items to choose from + * @param modPool Possible mods to apply to item chosen + * @param spawnChances Chances items will be chosen to be added + * @param botRole Role of bot e.g. assault + * @param inventory Inventory to add item into + * @param randomisationDetails settings from bot.json to adjust how item is generated + */ + protected generateEquipment(equipmentSlot: string, equipmentPool: Record, modPool: Mods, spawnChances: Chances, botRole: string, inventory: PmcInventory, randomisationDetails: RandomisationDetails): void; + /** + * Get all possible mods for item and filter down based on equipment blacklist from bot.json config + * @param itemTpl Item mod pool is being retreived and filtered + * @param equipmentBlacklist blacklist to filter mod pool with + * @returns Filtered pool of mods + */ + protected getFilteredDynamicModsForItem(itemTpl: string, equipmentBlacklist: EquipmentFilterDetails[]): Record; + /** + * Work out what weapons bot should have equipped and add them to bot inventory + * @param templateInventory bot/x.json data from db + * @param equipmentChances Chances bot can have equipment equipped + * @param sessionId Session id + * @param botInventory Inventory to add weapons to + * @param botRole assault/pmcBot/bossTagilla etc + * @param isPmc Is the bot being generated as a pmc + * @param botLevel level of bot having weapon generated + * @param itemGenerationLimitsMinMax Limits for items the bot can have + */ + protected generateAndAddWeaponsToBot(templateInventory: Inventory, equipmentChances: Chances, sessionId: string, botInventory: PmcInventory, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: Generation, botLevel: number): void; + /** + * Calculate if the bot should have weapons in Primary/Secondary/Holster slots + * @param equipmentChances Chances bot has certain equipment + * @returns What slots bot should have weapons generated for + */ + protected getDesiredWeaponsForBot(equipmentChances: Chances): { + slot: EquipmentSlots; + shouldSpawn: boolean; + }[]; + /** + * Add weapon + spare mags/ammo to bots inventory + * @param sessionId Session id + * @param weaponSlot Weapon slot being generated + * @param templateInventory bot/x.json data from db + * @param botInventory Inventory to add weapon+mags/ammo to + * @param equipmentChances Chances bot can have equipment equipped + * @param botRole assault/pmcBot/bossTagilla etc + * @param isPmc Is the bot being generated as a pmc + * @param itemGenerationLimitsMinMax + */ + protected addWeaponAndMagazinesToInventory(sessionId: string, weaponSlot: { + slot: EquipmentSlots; + shouldSpawn: boolean; + }, templateInventory: Inventory, botInventory: PmcInventory, equipmentChances: Chances, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: Generation, botLevel: number): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/BotLevelGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/BotLevelGenerator.d.ts new file mode 100644 index 0000000..751e6e6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/BotLevelGenerator.d.ts @@ -0,0 +1,29 @@ +import { MinMax } from "../models/common/MinMax"; +import { IRandomisedBotLevelResult } from "../models/eft/bot/IRandomisedBotLevelResult"; +import { ExpTable } from "../models/eft/common/IGlobals"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { BotGenerationDetails } from "../models/spt/bots/BotGenerationDetails"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotLevelGenerator { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer); + /** + * Return a randomised bot level and exp value + * @param levelDetails min and max of level for bot + * @param botGenerationDetails Deatils to help generate a bot + * @param bot being level is being generated for + * @returns IRandomisedBotLevelResult object + */ + generateBotLevel(levelDetails: MinMax, botGenerationDetails: BotGenerationDetails, bot: IBotBase): IRandomisedBotLevelResult; + /** + * Get the highest level a bot can be relative to the players level, but no futher than the max size from globals.exp_table + * @param playerLevel Players current level + * @param relativeDeltaMax max delta above player level to go + * @returns highest level possible for bot + */ + protected getHighestRelativeBotLevel(playerLevel: number, relativeDeltaMax: number, levelDetails: MinMax, expTable: ExpTable[]): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/BotLootGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/BotLootGenerator.d.ts new file mode 100644 index 0000000..6273a11 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/BotLootGenerator.d.ts @@ -0,0 +1,139 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; +import { Chances, Inventory, ItemMinMax, ModsChances } from "../models/eft/common/tables/IBotType"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem, Props } from "../models/eft/common/tables/ITemplateItem"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotLootCacheService } from "../services/BotLootCacheService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotWeaponGenerator } from "./BotWeaponGenerator"; +export declare class BotLootGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected botGeneratorHelper: BotGeneratorHelper; + protected botWeaponGenerator: BotWeaponGenerator; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected botLootCacheService: BotLootCacheService; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botLootCacheService: BotLootCacheService, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Add loot to bots containers + * @param sessionId Session id + * @param templateInventory x.json from database/bots + * @param itemCounts Liits on item types to be added as loot + * @param isPmc Will bot be a pmc + * @param botRole Role of bot, e.g. asssult + * @param botInventory Inventory to add loot to + * @param equipmentChances + * @param botLevel Level of bot + */ + generateLoot(sessionId: string, templateInventory: Inventory, itemCounts: ItemMinMax, isPmc: boolean, botRole: string, botInventory: PmcInventory, equipmentChances: Chances, botLevel: number): void; + protected getRandomisedCount(min: number, max: number, nValue: number): number; + /** + * Take random items from a pool and add to an inventory until totalItemCount or totalValueLimit is reached + * @param pool pool of items to pick from + * @param equipmentSlots What equality slot will the loot items be added to + * @param totalItemCount Max count of items to add + * @param inventoryToAddItemsTo bot inventory loot will be added to + * @param botRole role of the bot loot is being generated for (assault/pmcbot) + * @param useLimits should item limit counts be used as defined in config/bot.json + * @param totalValueLimitRub total value of loot allowed in roubles + * @param isPmc is the bot being generated for a pmc + */ + protected addLootFromPool(pool: ITemplateItem[], equipmentSlots: string[], totalItemCount: number, inventoryToAddItemsTo: PmcInventory, botRole: string, useLimits?: boolean, totalValueLimitRub?: number, isPmc?: boolean): void; + /** + * Add generated weapons to inventory as loot + * @param botInventory inventory to add preset to + * @param equipmentSlot slot to place the preset in (backpack) + * @param templateInventory bots template, assault.json + * @param modChances chances for mods to spawn on weapon + * @param botRole bots role, .e.g. pmcBot + * @param isPmc are we generating for a pmc + */ + protected addLooseWeaponsToInventorySlot(sessionId: string, botInventory: PmcInventory, equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, botRole: string, isPmc: boolean, botLevel: number): void; + /** + * Get a random item from the pool parameter using the biasedRandomNumber system + * @param pool pool of items to pick an item from + * @param isPmc is the bot being created a pmc + * @returns ITemplateItem object + */ + protected getRandomItemFromPool(pool: ITemplateItem[], isPmc: boolean): ITemplateItem; + /** + * Get the loot nvalue from botconfig + * @param isPmc if true the pmc nvalue is returned + * @returns nvalue as number + */ + protected getBotLootNValue(isPmc: boolean): number; + /** + * Update item limit array to contain items that have a limit + * All values are set to 0 + * @param isPmc is the bot a pmc + * @param botRole role the bot has + * @param limitCount + */ + protected initItemLimitArray(isPmc: boolean, botRole: string, limitCount: Record): void; + /** + * Check if an item has reached its bot-specific spawn limit + * @param itemTemplate Item we check to see if its reached spawn limit + * @param botRole Bot type + * @param isPmc Is bot we're working with a pmc + * @param limitCount spawn limits for items on bot + * @param itemSpawnLimits the limits this bot is allowed to have + * @returns true if item has reached spawn limit + */ + protected itemHasReachedSpawnLimit(itemTemplate: ITemplateItem, botRole: string, isPmc: boolean, limitCount: Record, itemSpawnLimits: Record): boolean; + /** + * Is the item an ammo box + * @param props props of the item to check + * @returns true if item is an ammo box + */ + protected isAmmoBox(props: Props): boolean; + /** + * Create an object that contains the ammo stack for an ammo box + * @param parentId ammo box id + * @param props ammo box props + * @returns Item object + */ + protected createAmmoForAmmoBox(parentId: string, props: Props): Item; + /** + * Randomise the stack size of a money object, uses different values for pmc or scavs + * @param isPmc is this a PMC + * @param itemTemplate item details + * @param moneyItem Money stack to randomise + */ + protected randomiseMoneyStackSize(isPmc: boolean, itemTemplate: ITemplateItem, moneyItem: Item): void; + /** + * Randomise the size of an ammo stack + * @param isPmc is this a PMC + * @param itemTemplate item details + * @param ammoItem Ammo stack to randomise + */ + protected randomiseAmmoStackSize(isPmc: boolean, itemTemplate: ITemplateItem, ammoItem: Item): void; + /** + * Get spawn limits for a specific bot type from bot.json config + * If no limit found for a non pmc bot, fall back to defaults + * @param isPmc is the bot we want limits for a pmc + * @param botRole what role does the bot have + * @returns Dictionary of tplIds and limit + */ + protected getItemSpawnLimitsForBotType(isPmc: boolean, botRole: string): Record; + /** + * Get the parentId or tplId of item inside spawnLimits object if it exists + * @param itemTemplate item we want to look for in spawn limits + * @param spawnLimits Limits to check for item + * @returns id as string, otherwise undefined + */ + protected getMatchingIdFromSpawnLimits(itemTemplate: ITemplateItem, spawnLimits: Record): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/BotWeaponGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/BotWeaponGenerator.d.ts new file mode 100644 index 0000000..a68b82f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/BotWeaponGenerator.d.ts @@ -0,0 +1,170 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { MinMax } from "../models/common/MinMax"; +import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; +import { Inventory, ModsChances } from "../models/eft/common/tables/IBotType"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { GenerateWeaponResult } from "../models/spt/bots/GenerateWeaponResult"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotWeaponModLimitService } from "../services/BotWeaponModLimitService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotEquipmentModGenerator } from "./BotEquipmentModGenerator"; +import { IInventoryMagGen } from "./weapongen/IInventoryMagGen"; +export declare class BotWeaponGenerator { + protected jsonUtil: JsonUtil; + protected logger: ILogger; + protected hashUtil: HashUtil; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected weightedRandomHelper: WeightedRandomHelper; + protected botGeneratorHelper: BotGeneratorHelper; + protected randomUtil: RandomUtil; + protected configServer: ConfigServer; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected botWeaponModLimitService: BotWeaponModLimitService; + protected botEquipmentModGenerator: BotEquipmentModGenerator; + protected localisationService: LocalisationService; + protected inventoryMagGenComponents: IInventoryMagGen[]; + protected readonly modMagazineSlotId = "mod_magazine"; + protected botConfig: IBotConfig; + constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botWeaponModLimitService: BotWeaponModLimitService, botEquipmentModGenerator: BotEquipmentModGenerator, localisationService: LocalisationService, inventoryMagGenComponents: IInventoryMagGen[]); + /** + * Pick a random weapon based on weightings and generate a functional weapon + * @param equipmentSlot Primary/secondary/holster + * @param botTemplateInventory e.g. assault.json + * @param weaponParentId + * @param modChances + * @param botRole role of bot, e.g. assault/followerBully + * @param isPmc Is weapon generated for a pmc + * @returns GenerateWeaponResult object + */ + generateRandomWeapon(sessionId: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean, botLevel: number): GenerateWeaponResult; + /** + * Get a random weighted weapon from a bots pool of weapons + * @param equipmentSlot Primary/secondary/holster + * @param botTemplateInventory e.g. assault.json + * @returns weapon tpl + */ + pickWeightedWeaponTplFromPool(equipmentSlot: string, botTemplateInventory: Inventory): string; + /** + * Generated a weapon based on the supplied weapon tpl + * @param weaponTpl weapon tpl to generate (use pickWeightedWeaponTplFromPool()) + * @param equipmentSlot slot to fit into, primary/secondary/holster + * @param botTemplateInventory e.g. assault.json + * @param weaponParentId ParentId of the weapon being generated + * @param modChances Dictionary of item types and % chance weapon will have that mod + * @param botRole e.g. assault/exusec + * @param isPmc + * @returns GenerateWeaponResult object + */ + generateWeaponByTpl(sessionId: string, weaponTpl: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean, botLevel: number): GenerateWeaponResult; + /** + * Create array with weapon base as only element and + * add additional properties based on weapon type + * @param weaponTpl Weapon tpl to create item with + * @param weaponParentId Weapons parent id + * @param equipmentSlot e.g. primary/secondary/holster + * @param weaponItemTemplate db template for weapon + * @param botRole for durability values + * @returns Base weapon item in array + */ + protected constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; + /** + * Get the mods necessary to kit out a weapon to its preset level + * @param weaponTpl weapon to find preset for + * @param equipmentSlot the slot the weapon will be placed in + * @param weaponParentId Value used for the parentid + * @returns array of weapon mods + */ + protected getPresetWeaponMods(weaponTpl: string, equipmentSlot: string, weaponParentId: string, itemTemplate: ITemplateItem, botRole: string): Item[]; + /** + * Checks if all required slots are occupied on a weapon and all it's mods + * @param weaponItemArray Weapon + mods + * @param botRole role of bot weapon is for + * @returns true if valid + */ + protected isWeaponValid(weaponItemArray: Item[], botRole: string): boolean; + /** + * Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets. + * Additionally, adds extra bullets to SecuredContainer + * @param generatedWeaponResult object with properties for generated weapon (weapon mods pool / weapon template / ammo tpl) + * @param magCounts Magazine count to add to inventory + * @param inventory Inventory to add magazines to + * @param botRole The bot type we're getting generating extra mags for + */ + addExtraMagazinesToInventory(generatedWeaponResult: GenerateWeaponResult, magCounts: MinMax, inventory: PmcInventory, botRole: string): void; + /** + * Add Grendaes for UBGL to bots vest and secure container + * @param weaponMods Weapon array with mods + * @param generatedWeaponResult result of weapon generation + * @param inventory bot inventory to add grenades to + */ + protected addUbglGrenadesToBotInventory(weaponMods: Item[], generatedWeaponResult: GenerateWeaponResult, inventory: PmcInventory): void; + /** + * Add ammo to the secure container + * @param stackCount How many stacks of ammo to add + * @param ammoTpl Ammo type to add + * @param stackSize Size of the ammo stack to add + * @param inventory Player inventory + */ + protected addAmmoToSecureContainer(stackCount: number, ammoTpl: string, stackSize: number, inventory: PmcInventory): void; + /** + * Get a weapons magazine tpl from a weapon template + * @param weaponMods mods from a weapon template + * @param weaponTemplate Weapon to get magazine tpl for + * @param botRole the bot type we are getting the magazine for + * @returns magazine tpl string + */ + protected getMagazineTplFromWeaponTemplate(weaponMods: Item[], weaponTemplate: ITemplateItem, botRole: string): string; + /** + * Finds and return a compatible ammo tpl based on the bots ammo weightings (x.json/inventory/equipment/ammo) + * @param ammo a list of ammo tpls the weapon can use + * @param weaponTemplate the weapon we want to pick ammo for + * @returns an ammo tpl that works with the desired gun + */ + protected getWeightedCompatibleAmmo(ammo: Record>, weaponTemplate: ITemplateItem): string; + /** + * Get a weapons compatible cartridge caliber + * @param weaponTemplate Weapon to look up caliber of + * @returns caliber as string + */ + protected getWeaponCaliber(weaponTemplate: ITemplateItem): string; + /** + * Fill existing magazines to full, while replacing their contents with specified ammo + * @param weaponMods + * @param magazine + * @param ammoTpl + */ + protected fillExistingMagazines(weaponMods: Item[], magazine: Item, ammoTpl: string): void; + /** + * Add desired ammo tpl as item to weaponmods array, placed as child to UBGL + * @param weaponMods + * @param ubglMod + * @param ubglAmmoTpl + */ + protected fillUbgl(weaponMods: Item[], ubglMod: Item, ubglAmmoTpl: string): void; + /** + * Add cartridge item to weapon Item array, if it already exists, update + * @param weaponMods Weapon items array to amend + * @param magazine magazine item details we're adding cartridges to + * @param chosenAmmo cartridge to put into the magazine + * @param newStackSize how many cartridges should go into the magazine + */ + protected addOrUpdateMagazinesChildWithAmmo(weaponMods: Item[], magazine: Item, chosenAmmo: string, newStackSize: number): void; + /** + * Fill each Camora with a bullet + * @param weaponMods Weapon mods to find and update camora mod(s) from + * @param magazineId magazine id to find and add to + * @param ammoTpl ammo template id to hydate with + */ + protected fillCamorasWithAmmo(weaponMods: Item[], magazineId: string, ammoTpl: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/FenceBaseAssortGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/FenceBaseAssortGenerator.d.ts new file mode 100644 index 0000000..387df3a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/FenceBaseAssortGenerator.d.ts @@ -0,0 +1,28 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +export declare class FenceBaseAssortGenerator { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected itemHelper: ItemHelper; + protected itemFilterService: ItemFilterService; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, itemFilterService: ItemFilterService, configServer: ConfigServer); + /** + * Create base fence assorts dynamically and store in db + */ + generateFenceBaseAssorts(): void; + /** + * Check if item is valid for being added to fence assorts + * @param item Item to check + * @returns true if valid fence item + */ + protected isValidFenceItem(item: ITemplateItem): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/LocationGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/LocationGenerator.d.ts new file mode 100644 index 0000000..a617048 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/LocationGenerator.d.ts @@ -0,0 +1,56 @@ +import { ContainerHelper } from "../helpers/ContainerHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { RagfairServerHelper } from "../helpers/RagfairServerHelper"; +import { ILooseLoot, SpawnpointsForced, 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 { ILocationConfig } from "../models/spt/config/ILocationConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { MathUtil } from "../utils/MathUtil"; +import { ObjectId } from "../utils/ObjectId"; +import { RandomUtil } from "../utils/RandomUtil"; +export interface IContainerItem { + items: Item[]; + width: number; + height: number; +} +export declare class LocationGenerator { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected objectId: ObjectId; + protected randomUtil: RandomUtil; + protected ragfairServerHelper: RagfairServerHelper; + protected itemHelper: ItemHelper; + protected mathUtil: MathUtil; + protected seasonalEventService: SeasonalEventService; + protected containerHelper: ContainerHelper; + protected presetHelper: PresetHelper; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected locationConfig: ILocationConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, objectId: ObjectId, randomUtil: RandomUtil, ragfairServerHelper: RagfairServerHelper, itemHelper: ItemHelper, mathUtil: MathUtil, seasonalEventService: SeasonalEventService, containerHelper: ContainerHelper, presetHelper: PresetHelper, localisationService: LocalisationService, configServer: ConfigServer); + generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record, staticAmmoDist: Record, locationName: string): IStaticContainerProps; + protected getLooseLootMultiplerForLocation(location: string): number; + protected getStaticLootMultiplerForLocation(location: string): number; + /** + * Create array of loose + forced loot using probability system + * @param dynamicLootDist + * @param staticAmmoDist + * @param locationName Location to generate loot for + * @returns Array of spawn points with loot in them + */ + generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record, locationName: string): SpawnpointTemplate[]; + /** + * Add forced spawn point loot into loot parameter array + * @param loot array to add forced loot to + * @param forcedSpawnPoints forced loot to add + * @param name of map currently generating forced loot for + */ + protected addForcedLoot(loot: SpawnpointTemplate[], forcedSpawnPoints: SpawnpointsForced[], locationName: string): void; + protected createItem(tpl: string, staticAmmoDist: Record, parentId?: string): IContainerItem; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/LootGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/LootGenerator.d.ts new file mode 100644 index 0000000..0d2ef24 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/LootGenerator.d.ts @@ -0,0 +1,67 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { LootItem } from "../models/spt/services/LootItem"; +import { LootRequest } from "../models/spt/services/LootRequest"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class LootGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected itemHelper: ItemHelper; + protected localisationService: LocalisationService; + protected itemFilterService: ItemFilterService; + constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, itemHelper: ItemHelper, localisationService: LocalisationService, itemFilterService: ItemFilterService); + /** + * Generate a list of items based on configuration options parameter + * @param options parameters to adjust how loot is generated + * @returns An array of loot items + */ + createRandomloot(options: LootRequest): LootItem[]; + /** + * Construct item limit record to hold max and current item count + * @param limits limits as defined in config + * @returns record, key: item tplId, value: current/max item count allowed + */ + protected initItemLimitCounter(limits: Record): Record; + /** + * Find a random item in items.json and add to result array + * @param items items to choose from + * @param itemTypeCounts item limit counts + * @param options item filters + * @param result array to add found item to + * @returns true if item was valid and added to pool + */ + protected findAndAddRandomItemToLoot(items: [string, ITemplateItem][], itemTypeCounts: Record, options: LootRequest, result: LootItem[]): boolean; + /** + * Get a randomised stack count for an item between its StackMinRandom and StackMaxSize values + * @param item item to get stack count of + * @param options loot options + * @returns stack count + */ + protected getRandomisedStackCount(item: ITemplateItem, options: LootRequest): number; + /** + * Find a random item in items.json and add to result array + * @param globalDefaultPresets presets to choose from + * @param itemTypeCounts item limit counts + * @param itemBlacklist items to skip + * @param result array to add found preset to + * @returns true if preset was valid and added to pool + */ + protected findAndAddRandomPresetToLoot(globalDefaultPresets: [string, Preset][], itemTypeCounts: Record, itemBlacklist: string[], result: LootItem[]): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/PMCLootGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/PMCLootGenerator.d.ts new file mode 100644 index 0000000..10918e3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/PMCLootGenerator.d.ts @@ -0,0 +1,31 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +/** + * Handle the generation of dynamic PMC loot in pockets and backpacks + * and the removal of blacklisted items + */ +export declare class PMCLootGenerator { + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected itemFilterService: ItemFilterService; + protected seasonalEventService: SeasonalEventService; + protected pocketLootPool: string[]; + protected backpackLootPool: string[]; + protected botConfig: IBotConfig; + constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, seasonalEventService: SeasonalEventService); + /** + * Create an array of loot items a PMC can have in their pockets + * @returns string array of tpls + */ + generatePMCPocketLootPool(): string[]; + /** + * Create an array of loot items a PMC can have in their backpack + * @returns string array of tpls + */ + generatePMCBackpackLootPool(): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/PlayerScavGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/PlayerScavGenerator.d.ts new file mode 100644 index 0000000..3641268 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/PlayerScavGenerator.d.ts @@ -0,0 +1,79 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Skills, Stats } from "../models/eft/common/tables/IBotBase"; +import { IBotType } from "../models/eft/common/tables/IBotType"; +import { IPlayerScavConfig, KarmaLevel } from "../models/spt/config/IPlayerScavConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { BotLootCacheService } from "../services/BotLootCacheService"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotGenerator } from "./BotGenerator"; +export declare class PlayerScavGenerator { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected hashUtil: HashUtil; + protected itemHelper: ItemHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected botGeneratorHelper: BotGeneratorHelper; + protected saveServer: SaveServer; + protected profileHelper: ProfileHelper; + protected botHelper: BotHelper; + protected jsonUtil: JsonUtil; + protected fenceService: FenceService; + protected botLootCacheService: BotLootCacheService; + protected localisationService: LocalisationService; + protected botGenerator: BotGenerator; + protected configServer: ConfigServer; + protected playerScavConfig: IPlayerScavConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer, hashUtil: HashUtil, itemHelper: ItemHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botGeneratorHelper: BotGeneratorHelper, saveServer: SaveServer, profileHelper: ProfileHelper, botHelper: BotHelper, jsonUtil: JsonUtil, fenceService: FenceService, botLootCacheService: BotLootCacheService, localisationService: LocalisationService, botGenerator: BotGenerator, configServer: ConfigServer); + /** + * Update a player profile to include a new player scav profile + * @param sessionID session id to specify what profile is updated + * @returns profile object + */ + generate(sessionID: string): IPmcData; + /** + * Get the scav karama level for a profile + * Is also the fence trader rep level + * @param pmcData pmc profile + * @returns karma level + */ + protected getScavKarmaLevel(pmcData: IPmcData): number; + /** + * Get a baseBot template + * If the parameter doesnt match "assault", take parts from the loot type and apply to the return bot template + * @param botTypeForLoot bot type to use for inventory/chances + * @returns IBotType object + */ + protected constructBotBaseTemplate(botTypeForLoot: string): IBotType; + /** + * Adjust equipment/mod/item generation values based on scav karma levels + * @param karmaSettings Values to modify the bot template with + * @param baseBotNode bot template to modify according to karama level settings + */ + protected adjustBotTemplateWithKarmaSpecificSettings(karmaSettings: KarmaLevel, baseBotNode: IBotType): void; + protected getScavSkills(scavProfile: IPmcData): Skills; + protected getDefaultScavSkills(): Skills; + protected getScavStats(scavProfile: IPmcData): Stats; + protected getScavLevel(scavProfile: IPmcData): number; + protected getScavExperience(scavProfile: IPmcData): number; + /** + * Set cooldown till pscav is playable + * take into account scav cooldown bonus + * @param scavData scav profile + * @param pmcData pmc profile + * @returns + */ + protected setScavCooldownTimer(scavData: IPmcData, pmcData: IPmcData): IPmcData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/RagfairAssortGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/RagfairAssortGenerator.d.ts new file mode 100644 index 0000000..630e863 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/RagfairAssortGenerator.d.ts @@ -0,0 +1,52 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class RagfairAssortGenerator { + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected seasonalEventService: SeasonalEventService; + protected configServer: ConfigServer; + protected generatedAssortItems: Item[]; + protected ragfairConfig: IRagfairConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, seasonalEventService: SeasonalEventService, configServer: ConfigServer); + /** + * Get an array of unique items that can be sold on the flea + * @returns array of unique items + */ + getAssortItems(): Item[]; + /** + * Check internal generatedAssortItems array has objects + * @returns true if array has objects + */ + protected assortsAreGenerated(): boolean; + /** + * Generate an array of items the flea can sell + * @returns array of unique items + */ + protected generateRagfairAssortItems(): Item[]; + /** + * Get presets from globals.json + * @returns Preset object array + */ + protected getPresets(): Preset[]; + /** + * Get default presets from globals.json + * @returns Preset object array + */ + protected getDefaultPresets(): Preset[]; + /** + * Create a base assort item and return it with populated values + 999999 stack count + unlimited count = true + * @param tplId tplid to add to item + * @param id id to add to item + * @returns hydrated Item object + */ + protected createRagfairAssortItem(tplId: string, id?: string): Item; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/RagfairOfferGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/RagfairOfferGenerator.d.ts new file mode 100644 index 0000000..35fceff --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/RagfairOfferGenerator.d.ts @@ -0,0 +1,174 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { RagfairServerHelper } from "../helpers/RagfairServerHelper"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IBarterScheme } from "../models/eft/common/tables/ITrader"; +import { IRagfairOffer, OfferRequirement } from "../models/eft/ragfair/IRagfairOffer"; +import { Dynamic, IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { RagfairCategoriesService } from "../services/RagfairCategoriesService"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { RagfairPriceService } from "../services/RagfairPriceService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { RagfairAssortGenerator } from "./RagfairAssortGenerator"; +export declare class RagfairOfferGenerator { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected ragfairServerHelper: RagfairServerHelper; + protected handbookHelper: HandbookHelper; + protected saveServer: SaveServer; + protected presetHelper: PresetHelper; + protected ragfairAssortGenerator: RagfairAssortGenerator; + protected ragfairOfferService: RagfairOfferService; + protected ragfairPriceService: RagfairPriceService; + protected localisationService: LocalisationService; + protected paymentHelper: PaymentHelper; + protected ragfairCategoriesService: RagfairCategoriesService; + protected fenceService: FenceService; + protected itemHelper: ItemHelper; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + protected allowedFleaPriceItemsForBarter: { + tpl: string; + price: number; + }[]; + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, ragfairServerHelper: RagfairServerHelper, handbookHelper: HandbookHelper, saveServer: SaveServer, presetHelper: PresetHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferService: RagfairOfferService, ragfairPriceService: RagfairPriceService, localisationService: LocalisationService, paymentHelper: PaymentHelper, ragfairCategoriesService: RagfairCategoriesService, fenceService: FenceService, itemHelper: ItemHelper, configServer: ConfigServer); + createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer; + /** + * Calculate the offer price that's listed on the flea listing + * @param offerRequirements barter requirements for offer + * @returns rouble cost of offer + */ + protected calculateOfferListingPrice(offerRequirements: OfferRequirement[]): number; + /** + * Get avatar url from trader table in db + * @param isTrader Is user we're getting avatar for a trader + * @param userId persons id to get avatar of + * @returns url of avatar + */ + protected getAvatarUrl(isTrader: boolean, userId: string): string; + /** + * Convert a count of currency into roubles + * @param currencyCount amount of currency to convert into roubles + * @param currencyType Type of currency (euro/dollar/rouble) + * @returns count of roubles + */ + protected calculateRoublePrice(currencyCount: number, currencyType: string): number; + protected getTraderId(userID: string): string; + protected getRating(userID: string): number; + /** + * Is the offers user rating growing + * @param userID user to check rating of + * @returns true if its growing + */ + protected getRatingGrowing(userID: string): boolean; + /** + * Get number of section until offer should expire + * @param userID Id of the offer owner + * @param time Time the offer is posted + * @returns number of seconds until offer expires + */ + protected getOfferEndTime(userID: string, time: number): number; + /** + * Create multiple offers for items by using a unique list of items we've generated previously + * @param expiredOffers optional, expired offers to regenerate + */ + generateDynamicOffers(expiredOffers?: Item[]): Promise; + protected createOffersForItems(assortItemIndex: string, assortItemsToProcess: Item[], expiredOffers: Item[], config: Dynamic): Promise; + /** + * Create one flea offer for a specific item + * @param items Item to create offer for + * @param isPreset Is item a weapon preset + * @param itemDetails raw db item details + * @returns + */ + protected createSingleOfferForItem(items: Item[], isPreset: boolean, itemDetails: [boolean, ITemplateItem]): Promise; + /** + * Generate trader offers on flea using the traders assort data + * @param traderID Trader to generate offers for + */ + generateFleaOffersForTrader(traderID: string): void; + /** + * Get array of an item with its mods + condition properties (e.g durability) + * Apply randomisation adjustments to condition if item base is found in ragfair.json/dynamic/condition + * @param userID id of owner of item + * @param itemWithMods Item and mods, get condition of first item (only first array item is used) + * @param itemDetails db details of first item + * @returns + */ + protected getItemCondition(userID: string, itemWithMods: Item[], itemDetails: ITemplateItem): Item[]; + /** + * Get the relevant condition id if item tpl matches in ragfair.json/condition + * @param tpl Item to look for matching condition object + * @returns condition id + */ + protected getDynamicConditionIdForTpl(tpl: string): string; + /** + * Alter an items condition based on its item base type + * @param conditionSettingsId also the parentId of item being altered + * @param item Item to adjust condition details of + * @param itemDetails db item details of first item in array + */ + protected randomiseItemCondition(conditionSettingsId: string, item: Item, itemDetails: ITemplateItem): void; + /** + * Adjust an items durability/maxDurability value + * @param item item (weapon/armor) to adjust + * @param multiplier Value to multiple durability by + */ + protected randomiseDurabilityValues(item: Item, multiplier: number): void; + /** + * Add missing conditions to an item if needed + * Durabiltiy for repairable items + * HpResource for medical items + * @param item item to add conditions to + * @returns Item with conditions added + */ + protected addMissingConditions(item: Item): Item; + /** + * Create a barter-based barter scheme, if not possible, fall back to making barter scheme currency based + * @param offerItems Items for sale in offer + * @returns barter scheme + */ + protected createBarterRequirement(offerItems: Item[]): IBarterScheme[]; + /** + * Get an array of flea prices + item tpl, cached in generator class inside `allowedFleaPriceItemsForBarter` + * @returns array with tpl/price values + */ + protected getFleaPricesAsArray(): { + tpl: string; + price: number; + }[]; + /** + * Create a random currency-based barter scheme for an array of items + * @param offerItems Items on offer + * @returns Barter scheme for offer + */ + protected createCurrencyRequirement(offerItems: Item[]): IBarterScheme[]; + /** + * Create a flea offer and store it in the Ragfair server offers array + * @param userID owner of the offer + * @param time time offer is put up + * @param items items in the offer + * @param barterScheme cost of item (currency or barter) + * @param loyalLevel Loyalty level needed to buy item + * @param price price of offer + * @param sellInOnePiece + * @returns Ragfair offer + */ + createFleaOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/ScavCaseRewardGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/ScavCaseRewardGenerator.d.ts new file mode 100644 index 0000000..394eeb0 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/ScavCaseRewardGenerator.d.ts @@ -0,0 +1,103 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Product } from "../models/eft/common/tables/IBotBase"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase"; +import { IScavCaseConfig } from "../models/spt/config/IScavCaseConfig"; +import { RewardCountAndPriceDetails, ScavCaseRewardCountsAndPrices } from "../models/spt/hideout/ScavCaseRewardCountsAndPrices"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { RagfairPriceService } from "../services/RagfairPriceService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +/** + * Handle the creation of randomised scav case rewards + */ +export declare class ScavCaseRewardGenerator { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected ragfairPriceService: RagfairPriceService; + protected itemFilterService: ItemFilterService; + protected configServer: ConfigServer; + protected scavCaseConfig: IScavCaseConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, itemFilterService: ItemFilterService, configServer: ConfigServer); + /** + * Create an array of rewards that will be given to the player upon completing their scav case build + * @param recipeId recipe of the scav case craft + * @returns Product array + */ + generate(recipeId: string): Product[]; + /** + * Get all db items that are not blacklisted in scavcase config + * @returns filtered array of db items + */ + protected getDbItems(): ITemplateItem[]; + /** + * Pick a number of items to be rewards, the count is defined by the values in + * @param items item pool to pick rewards from + * @param itemFilters how the rewards should be filtered down (by item count) + * @returns + */ + protected pickRandomRewards(items: ITemplateItem[], itemFilters: RewardCountAndPriceDetails, rarity: string): ITemplateItem[]; + /** + * Choose if money should be a reward based on the moneyRewardChancePercent config chance in scavCaseConfig + * @returns true if reward should be money + */ + protected rewardShouldBeMoney(): boolean; + /** + * Choose if ammo should be a reward based on the ammoRewardChancePercent config chance in scavCaseConfig + * @returns true if reward should be ammo + */ + protected rewardShouldBeAmmo(): boolean; + /** + * Choose from rouble/dollar/euro at random + */ + protected getRandomMoney(): ITemplateItem; + /** + * Get a random ammo from items.json that is not in the ammo blacklist AND inside the price rage defined in scavcase.json config + * @param rarity The rarity this ammo reward is for + * @returns random ammo item from items.json + */ + protected getRandomAmmo(rarity: string): ITemplateItem; + /** + * Take all the rewards picked create the Product object array ready to return to calling code + * Also add a stack count to ammo and money + * @param rewardItems items to convert + * @returns Product array + */ + protected randomiseContainerItemRewards(rewardItems: ITemplateItem[], rarity: string): Product[]; + /** + * Add a randomised stack count to ammo or money items + * @param item money or ammo item + * @param resultItem money or ammo item with a randomise stack size + */ + protected addStackCountToAmmoAndMoney(item: ITemplateItem, resultItem: { + _id: string; + _tpl: string; + upd: any; + }, rarity: string): void; + /** + * + * @param dbItems all items from the items.json + * @param itemFilters controls how the dbItems will be filtered and returned (handbook price) + * @returns filtered dbItems array + */ + protected getFilteredItemsByPrice(dbItems: ITemplateItem[], itemFilters: RewardCountAndPriceDetails): ITemplateItem[]; + /** + * Gathers the reward options from config and scavcase.json into a single object + * @param scavCaseDetails scavcase.json values + * @returns ScavCaseRewardCountsAndPrices object + */ + protected getScavCaseRewardCountsAndPrices(scavCaseDetails: IHideoutScavCase): ScavCaseRewardCountsAndPrices; + /** + * Randomises the size of ammo and money stacks + * @param itemToCalculate ammo or money item + * @param rarity rarity (common/rare/superrare) + * @returns value to set stack count to + */ + protected getRandomAmountRewardForScavCase(itemToCalculate: ITemplateItem, rarity: string): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/WeatherGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/WeatherGenerator.d.ts new file mode 100644 index 0000000..65d2c76 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/WeatherGenerator.d.ts @@ -0,0 +1,54 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { IWeather, IWeatherData } from "../models/eft/weather/IWeatherData"; +import { WindDirection } from "../models/enums/WindDirection"; +import { IWeatherConfig } from "../models/spt/config/IWeatherConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class WeatherGenerator { + protected weightedRandomHelper: WeightedRandomHelper; + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected timeUtil: TimeUtil; + protected applicationContext: ApplicationContext; + protected configServer: ConfigServer; + protected weatherConfig: IWeatherConfig; + constructor(weightedRandomHelper: WeightedRandomHelper, logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, applicationContext: ApplicationContext, configServer: ConfigServer); + calculateGameTime(data: IWeatherData): IWeatherData; + /** + * Get server uptime seconds multiplied by a multiplier and add to current time as seconds + * Format to BSGs requirements + * @param currentDate current date + * @returns formatted time + */ + protected getBsgFormattedInRaidTime(currentDate: Date): string; + /** + * Get the current in-raid time + * @param currentDate (new Date()) + * @returns Date object of current in-raid time + */ + getInRaidTime(currentDate: Date): Date; + /** + * Get current time formatted to fit BSGs requirement + * @param date date to format into bsg style + * @returns + */ + protected getBSGFormattedTime(date: Date): string; + /** + * Return randomised Weather data with help of config/weather.json + * @returns Randomised weather data + */ + generateWeather(): IWeather; + /** + * Set IWeather date/time/timestamp values to now + * @param weather Object to update + */ + protected setCurrentDateTime(weather: IWeather): void; + protected getWeightedWindDirection(): WindDirection; + protected getWeightedWindSpeed(): number; + protected getWeightedFog(): number; + protected getWeightedRain(): number; + protected getRandomFloat(node: string): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/IInventoryMagGen.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/IInventoryMagGen.d.ts new file mode 100644 index 0000000..792f510 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/IInventoryMagGen.d.ts @@ -0,0 +1,6 @@ +import { InventoryMagGen } from "./InventoryMagGen"; +export interface IInventoryMagGen { + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/InventoryMagGen.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/InventoryMagGen.d.ts new file mode 100644 index 0000000..30bf79f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/InventoryMagGen.d.ts @@ -0,0 +1,16 @@ +import { MinMax } from "../../models/common/MinMax"; +import { Inventory } from "../../models/eft/common/tables/IBotBase"; +import { ITemplateItem } from "../../models/eft/common/tables/ITemplateItem"; +export declare class InventoryMagGen { + private magCounts; + private magazineTemplate; + private weaponTemplate; + private ammoTemplate; + private pmcInventory; + constructor(magCounts: MinMax, magazineTemplate: ITemplateItem, weaponTemplate: ITemplateItem, ammoTemplate: ITemplateItem, pmcInventory: Inventory); + getMagCount(): MinMax; + getMagazineTemplate(): ITemplateItem; + getWeaponTemplate(): ITemplateItem; + getAmmoTemplate(): ITemplateItem; + getPmcInventory(): Inventory; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts new file mode 100644 index 0000000..b754d5f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts @@ -0,0 +1,12 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { RandomUtil } from "../../../utils/RandomUtil"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class BarrelInventoryMagGen implements IInventoryMagGen { + protected randomUtil: RandomUtil; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(randomUtil: RandomUtil, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts new file mode 100644 index 0000000..1589707 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts @@ -0,0 +1,16 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../../../helpers/ItemHelper"; +import { ILogger } from "../../../models/spt/utils/ILogger"; +import { LocalisationService } from "../../../services/LocalisationService"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class ExternalInventoryMagGen implements IInventoryMagGen { + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected localisationService: LocalisationService; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(logger: ILogger, itemHelper: ItemHelper, localisationService: LocalisationService, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts new file mode 100644 index 0000000..4548a04 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts @@ -0,0 +1,10 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class InternalMagazineInventoryMagGen implements IInventoryMagGen { + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/implementations/UbglExternalMagGen.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/implementations/UbglExternalMagGen.d.ts new file mode 100644 index 0000000..75395be --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/generators/weapongen/implementations/UbglExternalMagGen.d.ts @@ -0,0 +1,10 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class UbglExternalMagGen implements IInventoryMagGen { + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/AssortHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/AssortHelper.d.ts new file mode 100644 index 0000000..13512b2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/AssortHelper.d.ts @@ -0,0 +1,39 @@ +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 { LocalisationService } from "../services/LocalisationService"; +import { ItemHelper } from "./ItemHelper"; +import { QuestHelper } from "./QuestHelper"; +export declare class AssortHelper { + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected localisationService: LocalisationService; + protected questHelper: QuestHelper; + constructor(logger: ILogger, itemHelper: ItemHelper, databaseServer: DatabaseServer, localisationService: LocalisationService, questHelper: QuestHelper); + /** + * Remove assorts from a trader that have not been unlocked yet + * @param pmcProfile player profile + * @param traderId traders id + * @param assort assort items from a trader + * @param mergedQuestAssorts An object of quest assort to quest id unlocks for all traders + * @returns assort items minus locked quest assorts + */ + stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort, mergedQuestAssorts: Record>, flea?: boolean): ITraderAssort; + /** + * Remove assorts from a trader that have not been unlocked yet + * @param pmcProfile player profile + * @param traderId traders id + * @param assort traders assorts + * @returns traders assorts minus locked loyalty assorts + */ + stripLockedLoyaltyAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort): ITraderAssort; + /** + * Remove an item from an assort + * @param assort assort to modify + * @param itemID item id to remove from asort + * @returns Modified assort + */ + removeItemFromAssort(assort: ITraderAssort, itemID: string, flea?: boolean): ITraderAssort; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/BotDifficultyHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/BotDifficultyHelper.d.ts new file mode 100644 index 0000000..df2c269 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/BotDifficultyHelper.d.ts @@ -0,0 +1,46 @@ +import { Difficulty } from "../models/eft/common/tables/IBotType"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotHelper } from "./BotHelper"; +export declare class BotDifficultyHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected localisationService: LocalisationService; + protected botHelper: BotHelper; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, localisationService: LocalisationService, botHelper: BotHelper, configServer: ConfigServer); + getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string, usecType: string, bearType: string): Difficulty; + /** + * Get difficulty settings for desired bot type, if not found use assault bot types + * @param type bot type to retrieve difficulty of + * @param difficulty difficulty to get settings for (easy/normal etc) + * @returns Difficulty object + */ + getBotDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Get difficulty settings for a PMC + * @param type "usec" / "bear" + * @param difficulty what difficulty to retrieve + * @returns Difficulty object + */ + protected getDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Translate chosen value from pre-raid difficulty dropdown into bot difficulty value + * @param dropDownDifficulty Dropdown difficulty value to convert + * @returns bot difficulty + */ + convertBotDifficultyDropdownToBotDifficulty(dropDownDifficulty: string): string; + /** + * Choose a random difficulty from - easy/normal/hard/impossible + * @returns random difficulty + */ + chooseRandomDifficulty(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/BotGeneratorHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/BotGeneratorHelper.d.ts new file mode 100644 index 0000000..c7dd606 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/BotGeneratorHelper.d.ts @@ -0,0 +1,82 @@ +import { DurabilityLimitsHelper } from "../helpers/DurabilityLimitsHelper"; +import { Item, Repairable, Upd } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { EquipmentFilters, IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ItemHelper } from "./ItemHelper"; +export declare class BotGeneratorHelper { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected durabilityLimitsHelper: DurabilityLimitsHelper; + protected itemHelper: ItemHelper; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Adds properties to an item + * e.g. Repairable / HasHinge / Foldable / MaxDurability + * @param itemTemplate Item extra properties are being generated for + * @param botRole Used by weapons to randomize the durability values. Null for non-equipped items + * @returns Item Upd object with extra properties + */ + generateExtraPropertiesForItem(itemTemplate: ITemplateItem, botRole?: string): { + upd?: Upd; + }; + /** + * Get the chance for the weapon attachment or helmet equipment to be set as activated + * @param botRole role of bot with weapon/helmet + * @param setting the setting of the weapon attachment/helmet equipment to be activated + * @param defaultValue default value for the chance of activation if the botrole or bot equipment role is null + * @returns Percent chance to be active + */ + protected getBotEquipmentSettingFromConfig(botRole: string, setting: keyof EquipmentFilters, defaultValue: number): number; + /** + * Create a repairable object for a weapon that containers durability + max durability properties + * @param itemTemplate weapon object being generated for + * @param botRole type of bot being generated for + * @returns Repairable object + */ + protected generateWeaponRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable; + /** + * Create a repairable object for an armor that containers durability + max durability properties + * @param itemTemplate weapon object being generated for + * @param botRole type of bot being generated for + * @returns Repairable object + */ + protected generateArmorRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable; + /** + * Can item be added to another item without conflict + * @param items Items to check compatibilities with + * @param tplToCheck Tpl of the item to check for incompatibilities + * @param equipmentSlot Slot the item will be placed into + * @returns false if no incompatibilities, also has incompatibility reason + */ + isItemIncompatibleWithCurrentItems(items: Item[], tplToCheck: string, equipmentSlot: string): { + incompatible: boolean; + reason: string; + }; + /** + * Convert a bots role to the equipment role used in config/bot.json + * @param botRole Role to convert + * @returns Equipment role (e.g. pmc / assault / bossTagilla) + */ + getBotEquipmentRole(botRole: string): string; +} +/** TODO - move into own class */ +export declare class ExhaustableArray { + private itemPool; + private randomUtil; + private jsonUtil; + private pool; + constructor(itemPool: T[], randomUtil: RandomUtil, jsonUtil: JsonUtil); + getRandomValue(): T; + getFirstValue(): T; + hasValues(): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/BotHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/BotHelper.d.ts new file mode 100644 index 0000000..3b49501 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/BotHelper.d.ts @@ -0,0 +1,88 @@ +import { MinMax } from "../models/common/MinMax"; +import { Difficulty, IBotType } from "../models/eft/common/tables/IBotType"; +import { EquipmentFilters, IBotConfig, RandomisationDetails } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Get a template object for the specified botRole from bots.types db + * @param role botRole to get template for + * @returns IBotType object + */ + getBotTemplate(role: string): IBotType; + /** + * Randomize the chance the PMC will attack their own side + * Look up value in bot.json/chanceSameSideIsHostilePercent + * @param difficultySettings pmc difficulty settings + */ + randomizePmcHostility(difficultySettings: Difficulty): void; + /** + * Is the passed in bot role a PMC (usec/bear/pmc) + * @param botRole bot role to check + * @returns true if is pmc + */ + isBotPmc(botRole: string): boolean; + isBotBoss(botRole: string): boolean; + isBotFollower(botRole: string): boolean; + /** + * Add a bot to the FRIENDLY_BOT_TYPES array + * @param difficultySettings bot settings to alter + * @param typeToAdd bot type to add to friendly list + */ + addBotToFriendlyList(difficultySettings: Difficulty, typeToAdd: string): void; + /** + * Add a bot to the ENEMY_BOT_TYPES array, do not add itself if its on the enemy list + * @param difficultySettings bot settings to alter + * @param typesToAdd bot type to add to enemy list + */ + addBotToEnemyList(difficultySettings: Difficulty, typesToAdd: string[], typeBeingEdited: string): void; + /** + * Add a bot to the REVENGE_BOT_TYPES array + * @param difficultySettings bot settings to alter + * @param typesToAdd bot type to add to revenge list + */ + addBotToRevengeList(difficultySettings: Difficulty, typesToAdd: string[]): void; + /** + * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check + * @param botRole the bot role to check if should be a pmc + * @returns true if should be a pmc + */ + shouldBotBePmc(botRole: string): boolean; + rollChanceToBePmc(role: string, botConvertMinMax: MinMax): boolean; + botRoleIsPmc(botRole: string): boolean; + /** + * Get randomization settings for bot from config/bot.json + * @param botLevel level of bot + * @param botEquipConfig bot equipment json + * @returns RandomisationDetails + */ + getBotRandomizationDetails(botLevel: number, botEquipConfig: EquipmentFilters): RandomisationDetails; + /** + * Choose between sptBear and sptUsec at random based on the % defined in botConfig.pmc.isUsec + * @returns pmc role + */ + getRandomizedPmcRole(): string; + /** + * Get the corresponding side when sptBear or sptUsec is passed in + * @param botRole role to get side for + * @returns side (usec/bear) + */ + getPmcSideByRole(botRole: string): string; + /** + * Get a randomized PMC side based on bot config value 'isUsec' + * @returns pmc side as string + */ + protected getRandomizedPmcSide(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/BotWeaponGeneratorHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/BotWeaponGeneratorHelper.d.ts new file mode 100644 index 0000000..cefc3bd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/BotWeaponGeneratorHelper.d.ts @@ -0,0 +1,83 @@ +import { MinMax } from "../models/common/MinMax"; +import { Inventory } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { Grid, ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { EquipmentSlots } from "../models/enums/EquipmentSlots"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ContainerHelper } from "./ContainerHelper"; +import { InventoryHelper } from "./InventoryHelper"; +import { ItemHelper } from "./ItemHelper"; +export declare class BotWeaponGeneratorHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected inventoryHelper: InventoryHelper; + protected localisationService: LocalisationService; + protected containerHelper: ContainerHelper; + constructor(logger: ILogger, databaseServer: DatabaseServer, itemHelper: ItemHelper, randomUtil: RandomUtil, hashUtil: HashUtil, inventoryHelper: InventoryHelper, localisationService: LocalisationService, containerHelper: ContainerHelper); + /** + * Get a randomized number of bullets for a specific magazine + * @param magCounts min and max count of magazines + * @param magTemplate magazine to generate bullet count for + * @returns bullet count number + */ + getRandomizedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; + /** + * Get a randomized count of magazines + * @param magCounts min and max value returned value can be between + * @returns numerical value of magazine count + */ + getRandomizedMagazineCount(magCounts: MinMax): number; + /** + * Is this magazine cylinder related (revolvers and grenade launchers) + * @param magazineParentName the name of the magazines parent + * @returns true if it is cylinder related + */ + magazineIsCylinderRelated(magazineParentName: string): boolean; + /** + * Create a magazine using the parameters given + * @param magazineTpl Tpl of the magazine to create + * @param ammoTpl Ammo to add to magazine + * @param magTemplate template object of magazine + * @returns Item array + */ + createMagazine(magazineTpl: string, ammoTpl: string, magTemplate: ITemplateItem): Item[]; + /** + * Add a specific number of cartridges to a bots inventory (defaults to vest and pockets) + * @param ammoTpl Ammo tpl to add to vest/pockets + * @param cartridgeCount number of cartridges to add to vest/pockets + * @param inventory bot inventory to add cartridges to + * @param equipmentSlotsToAddTo what equipment slots should bullets be added into + */ + addAmmoIntoEquipmentSlots(ammoTpl: string, cartridgeCount: number, inventory: Inventory, equipmentSlotsToAddTo?: EquipmentSlots[]): void; + /** + * Get a weapons default magazine template id + * @param weaponTemplate weapon to get default magazine for + * @returns tpl of magazine + */ + getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; + /** + * TODO - move into BotGeneratorHelper, this is not the class for it + * Adds an item with all its children into specified equipmentSlots, wherever it fits. + * @param equipmentSlots + * @param parentId + * @param parentTpl + * @param itemWithChildren + * @param inventory + * @returns a `boolean` indicating item was added + */ + addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: Inventory): boolean; + /** + * is the provided item allowed inside a container + * @param slot location item wants to be placed in + * @param itemTpl item being placed + * @returns true if allowed + */ + protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/ContainerHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/ContainerHelper.d.ts new file mode 100644 index 0000000..3c2ee93 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/ContainerHelper.d.ts @@ -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 { + protected locateSlot(container2D: number[][], containerX: number, containerY: number, x: number, y: number, itemW: number, itemH: number): boolean; + findSlotForItem(container2D: number[][], itemWidth: number, itemHeight: number): FindSlotResult; + fillContainerMapWithItem(container2D: number[][], x: number, y: number, itemW: number, itemH: number, rotate: boolean): any; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/DialogueHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/DialogueHelper.d.ts new file mode 100644 index 0000000..8f03b81 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/DialogueHelper.d.ts @@ -0,0 +1,45 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { Dialogue, MessageContent, MessagePreview } from "../models/eft/profile/IAkiProfile"; +import { MessageType } from "../models/enums/MessageType"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { ItemHelper } from "./ItemHelper"; +import { NotificationSendHelper } from "./NotificationSendHelper"; +import { NotifierHelper } from "./NotifierHelper"; +export declare class DialogueHelper { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected notifierHelper: NotifierHelper; + protected notificationSendHelper: NotificationSendHelper; + protected localisationService: LocalisationService; + protected itemHelper: ItemHelper; + constructor(logger: ILogger, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, notifierHelper: NotifierHelper, notificationSendHelper: NotificationSendHelper, localisationService: LocalisationService, itemHelper: ItemHelper); + createMessageContext(templateId: string, messageType: MessageType, maxStoreTime: number): MessageContent; + /** + * Add a templated message to the dialogue. + * @param dialogueID + * @param messageContent + * @param sessionID + * @param rewards + */ + addDialogueMessage(dialogueID: string, messageContent: MessageContent, sessionID: string, rewards?: Item[]): void; + /** + * Get the preview contents of the last message in a dialogue. + * @param dialogue + * @returns + */ + getMessagePreview(dialogue: Dialogue): MessagePreview; + /** + * Get the item contents for a particular message. + * @param messageID + * @param sessionID + * @param itemId Item being moved to inventory + * @returns + */ + getMessageItemContents(messageID: string, sessionID: string, itemId: string): Item[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/DurabilityLimitsHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/DurabilityLimitsHelper.d.ts new file mode 100644 index 0000000..7122376 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/DurabilityLimitsHelper.d.ts @@ -0,0 +1,28 @@ +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotHelper } from "./BotHelper"; +export declare class DurabilityLimitsHelper { + protected randomUtil: RandomUtil; + protected botHelper: BotHelper; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(randomUtil: RandomUtil, botHelper: BotHelper, configServer: ConfigServer); + getRandomizedMaxWeaponDurability(itemTemplate: ITemplateItem, botRole: string): number; + getRandomizedMaxArmorDurability(itemTemplate: ITemplateItem, botRole: string): number; + getRandomizedWeaponDurability(itemTemplate: ITemplateItem, botRole: string, maxDurability: number): number; + getRandomizedArmorDurability(itemTemplate: ITemplateItem, botRole: string, maxDurability: number): number; + protected generateMaxWeaponDurability(botRole: string): number; + protected generateMaxPmcArmorDurability(itemMaxDurability: number): number; + protected getLowestMaxWeaponFromConfig(botRole: string): number; + protected getHighestMaxWeaponDurabilityFromConfig(botRole: string): number; + protected generateWeaponDurability(botRole: string, maxDurability: number): number; + protected generateArmorDurability(botRole: string, maxDurability: number): number; + protected getMinWeaponDeltaFromConfig(botRole: string): number; + protected getMaxWeaponDeltaFromConfig(botRole: string): number; + protected getMinArmorDeltaFromConfig(botRole: string): number; + protected getMaxArmorDeltaFromConfig(botRole: string): number; + protected getMinArmorLimitPercentFromConfig(botRole: string): number; + protected getMinWeaponLimitPercentFromConfig(botRole: string): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/GameEventHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/GameEventHelper.d.ts new file mode 100644 index 0000000..f502c95 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/GameEventHelper.d.ts @@ -0,0 +1,9 @@ +import { ISeasonalEventConfig } from "../models/spt/config/ISeasonalEventConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +export declare class GameEventHelper { + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected seasonalEventConfig: ISeasonalEventConfig; + constructor(databaseServer: DatabaseServer, configServer: ConfigServer); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/HandbookHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/HandbookHelper.d.ts new file mode 100644 index 0000000..aa329a9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/HandbookHelper.d.ts @@ -0,0 +1,53 @@ +import { DatabaseServer } from "../servers/DatabaseServer"; +declare class LookupItem { + byId: Record; + byParent: Record; + constructor(); +} +export declare class LookupCollection { + items: LookupItem; + categories: LookupItem; + constructor(); +} +export declare class HandbookHelper { + protected databaseServer: DatabaseServer; + protected lookupCacheGenerated: boolean; + protected handbookPriceCache: LookupCollection; + constructor(databaseServer: DatabaseServer); + hydrateLookup(): void; + /** + * Get price from internal cache, if cache empty look up price directly in handbook (expensive) + * If no values found, return 1 + * @param tpl item tpl to look up price for + * @returns price in roubles + */ + getTemplatePrice(tpl: string): number; + /** + * all items in template with the given parent category + * @param x + * @returns string array + */ + templatesWithParent(x: string): string[]; + /** + * Does category exist in handbook cache + * @param category + * @returns true if exists in cache + */ + isCategory(category: string): boolean; + childrenCategories(x: string): string[]; + /** + * Convert non-roubles into roubles + * @param nonRoubleCurrencyCount Currency count to convert + * @param currencyTypeFrom What current currency is + * @returns Count in roubles + */ + inRUB(nonRoubleCurrencyCount: number, currencyTypeFrom: string): number; + /** + * Convert roubles into another currency + * @param roubleCurrencyCount roubles to convert + * @param currencyTypeTo Currency to convert roubles into + * @returns currency count in desired type + */ + fromRUB(roubleCurrencyCount: number, currencyTypeTo: string): number; +} +export {}; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/HealthHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/HealthHelper.d.ts new file mode 100644 index 0000000..7a6d41d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/HealthHelper.d.ts @@ -0,0 +1,57 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ISyncHealthRequestData } from "../models/eft/health/ISyncHealthRequestData"; +import { Effects, IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { IHealthConfig } from "../models/spt/config/IHealthConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { SaveServer } from "../servers/SaveServer"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class HealthHelper { + protected jsonUtil: JsonUtil; + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected configServer: ConfigServer; + protected healthConfig: IHealthConfig; + constructor(jsonUtil: JsonUtil, logger: ILogger, timeUtil: TimeUtil, saveServer: SaveServer, configServer: ConfigServer); + /** + * Resets the profiles vitality/health and vitality/effects properties to their defaults + * @param sessionID Session Id + * @returns updated profile + */ + resetVitality(sessionID: string): IAkiProfile; + /** + * Update player profile with changes from request object + * @param pmcData Player profile + * @param request Heal request + * @param sessionID Session id + * @param addEffects Should effects be added or removed (default - add) + */ + saveVitality(pmcData: IPmcData, request: ISyncHealthRequestData, sessionID: string, addEffects?: boolean, deleteExistingEffects?: boolean): void; + /** + * Adjust hydration/energy/temperate and body part hp values in player profile to values in profile.vitality + * @param pmcData Profile to update + * @param sessionId Session id + */ + protected saveHealth(pmcData: IPmcData, sessionID: string): void; + /** + * Save effects to profile + * Works by removing all effects and adding them back from profile + * Removes empty 'Effects' objects if found + * @param pmcData Player profile + * @param sessionId Session id + * @param bodyPartsWithEffects dict of body parts with effects that should be added to profile + * @param addEffects Should effects be added back to profile + */ + protected saveEffects(pmcData: IPmcData, sessionId: string, bodyPartsWithEffects: Effects, deleteExistingEffects?: boolean): void; + /** + * Add effect to body part in profile + * @param pmcData Player profile + * @param effectBodyPart body part to edit + * @param effectType Effect to add to body part + * @param duration How long the effect has left in seconds (-1 by default, no duration). + */ + protected addEffect(pmcData: IPmcData, effectBodyPart: string, effectType: string, duration?: number): void; + protected isEmpty(map: any): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/HideoutHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/HideoutHelper.d.ts new file mode 100644 index 0000000..a5849e3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/HideoutHelper.d.ts @@ -0,0 +1,186 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Common, HideoutArea, IHideoutImprovement, Production, Productive } from "../models/eft/common/tables/IBotBase"; +import { Upd } from "../models/eft/common/tables/IItem"; +import { StageBonus } from "../models/eft/hideout/IHideoutArea"; +import { IHideoutContinuousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinuousProductionStartRequestData"; +import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction"; +import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData"; +import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideoutTakeProductionRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IHideoutConfig } from "../models/spt/config/IHideoutConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { PlayerService } from "../services/PlayerService"; +import { HashUtil } from "../utils/HashUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { InventoryHelper } from "./InventoryHelper"; +import { ProfileHelper } from "./ProfileHelper"; +export declare class HideoutHelper { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected eventOutputHolder: EventOutputHolder; + protected httpResponse: HttpResponseUtil; + protected profileHelper: ProfileHelper; + protected inventoryHelper: InventoryHelper; + protected playerService: PlayerService; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + static bitcoinFarm: string; + static waterCollector: string; + static bitcoin: string; + static expeditionaryFuelTank: string; + static maxSkillPoint: number; + private static generatorOffMultipler; + protected hideoutConfig: IHideoutConfig; + constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, inventoryHelper: InventoryHelper, playerService: PlayerService, localisationService: LocalisationService, configServer: ConfigServer); + registerProduction(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData | IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * This convenience function initializes new Production Object + * with all the constants. + */ + initProduction(recipeId: string, productionTime: number): Production; + isProductionType(productive: Productive): productive is Production; + applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void; + /** + * TODO: + * After looking at the skills there doesnt seem to be a configuration per skill to boost + * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it) + * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure! + * @param pmcData + * @param bonus + */ + protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void; + /** + * Process a players hideout, update areas that use resources + increment production timers + * @param sessionID Session id + */ + updatePlayerHideout(sessionID: string): void; + /** + * Update progress timer for water collector + * @param pmcData profile to update + * @param productionId id of water collection production to update + * @param hideoutProperties Hideout properties + */ + protected updateWaterCollectorProductionTimer(pmcData: IPmcData, productionId: string, hideoutProperties: { + btcFarmCGs?: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + /** + * Iterate over productions and update their progress timers + * @param pmcData Profile to check for productions and update + * @param hideoutProperties Hideout properties + */ + protected updateProductionTimers(pmcData: IPmcData, hideoutProperties: { + btcFarmCGs: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + /** + * Update a productions progress value based on the amount of time that has passed + * @param pmcData Player profile + * @param prodId Production id being crafted + * @param recipe Recipe data being crafted + * @param hideoutProperties + */ + protected updateProductionProgress(pmcData: IPmcData, prodId: string, recipe: IHideoutProduction, hideoutProperties: { + btcFarmCGs?: number; + isGeneratorOn: boolean; + waterCollectorHasFilter?: boolean; + }): void; + /** + * Check if a productions progress value matches its corresponding recipes production time value + * @param pmcData Player profile + * @param prodId Production id + * @param recipe Recipe being crafted + * @returns progress matches productionTime from recipe + */ + protected doesProgressMatchProductionTime(pmcData: IPmcData, prodId: string): boolean; + /** + * Update progress timer for scav case + * @param pmcData Profile to update + * @param productionId Id of scav case production to update + */ + protected updateScavCaseProductionTimer(pmcData: IPmcData, productionId: string): void; + /** + * Iterate over hideout areas that use resources (fuel/filters etc) and update associated values + * @param sessionID Session id + * @param pmcData Profile to update areas of + * @param hideoutProperties hideout properties + */ + protected updateAreasWithResources(sessionID: string, pmcData: IPmcData, hideoutProperties: { + btcFarmCGs: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void; + protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean; + protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): void; + /** + * Adjust water filter objects resourceValue or delete when they reach 0 resource + * @param waterFilterArea water filter area to update + * @param production production object + * @param isGeneratorOn is generator enabled + * @param pmcData Player profile + * @returns Updated HideoutArea object + */ + protected updateWaterFilters(waterFilterArea: HideoutArea, production: Production, isGeneratorOn: boolean, pmcData: IPmcData): HideoutArea; + protected getAreaUpdObject(stackCount: number, resourceValue: number, resourceUnitsConsumed: number): Upd; + protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData): void; + protected updateBitcoinFarm(pmcData: IPmcData, btcFarmCGs: number, isGeneratorOn: boolean): Production; + /** + * Get a count of how many BTC can be gathered by the profile + * @param pmcData Profile to look up + * @returns coin slot count + */ + protected getBTCSlots(pmcData: IPmcData): number; + protected getManagementSkillsSlots(): number; + protected hasManagementSkillSlots(pmcData: IPmcData): boolean; + protected getHideoutManagementSkill(pmcData: IPmcData): Common; + protected getHideoutManagementConsumptionBonus(pmcData: IPmcData): number; + /** + * Get the crafting skill details from player profile + * @param pmcData Player profile + * @returns crafting skill, null if not found + */ + protected getCraftingSkill(pmcData: IPmcData): Common; + /** + * Adjust craft time based on crafting skill level found in player profile + * @param pmcData Player profile + * @param productionTime Time to complete hideout craft in seconds + * @returns Adjusted craft time in seconds + */ + protected getCraftingSkillProductionTimeReduction(pmcData: IPmcData, productionTime: number): number; + isProduction(productive: Productive): productive is Production; + /** + * Gather crafted BTC from hideout area and add to inventory + * Reset production start timestamp if hideout area at full coin capacity + * @param pmcData Player profile + * @param request Take production request + * @param sessionId Session id + * @returns IItemEventRouterResponse + */ + getBTC(pmcData: IPmcData, request: IHideoutTakeProductionRequestData, sessionId: string): IItemEventRouterResponse; + /** + * Upgrade hideout wall from starting level to interactable level if enough time has passed + * @param pmcProfile Profile to upgrade wall in + */ + unlockHideoutWallInProfile(pmcProfile: IPmcData): void; + /** + * Hideout improvement is flagged as complete + * @param improvement hideout improvement object + * @returns true if complete + */ + protected hideoutImprovementIsComplete(improvement: IHideoutImprovement): boolean; + /** + * Iterate over hideout improvements not completed and check if they need to be adjusted + * @param pmcProfile Profile to adjust + */ + setHideoutImprovementsToCompleted(pmcProfile: IPmcData): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/HttpServerHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/HttpServerHelper.d.ts new file mode 100644 index 0000000..c6e5296 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/HttpServerHelper.d.ts @@ -0,0 +1,23 @@ +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class HttpServerHelper { + protected configServer: ConfigServer; + protected httpConfig: IHttpConfig; + protected mime: { + css: string; + bin: string; + html: string; + jpg: string; + js: string; + json: string; + png: string; + svg: string; + txt: string; + }; + constructor(configServer: ConfigServer); + getMimeText(key: string): string; + buildUrl(): string; + getBackendUrl(): string; + getWebsocketUrl(): string; + sendTextJson(resp: any, output: any): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/InRaidHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/InRaidHelper.d.ts new file mode 100644 index 0000000..c69a810 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/InRaidHelper.d.ts @@ -0,0 +1,112 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Victim } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { ProfileFixerService } from "../services/ProfileFixerService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { InventoryHelper } from "./InventoryHelper"; +import { PaymentHelper } from "./PaymentHelper"; +export declare class InRaidHelper { + protected logger: ILogger; + protected saveServer: SaveServer; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected inventoryHelper: InventoryHelper; + protected paymentHelper: PaymentHelper; + protected localisationService: LocalisationService; + protected profileFixerService: ProfileFixerService; + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, profileFixerService: ProfileFixerService); + /** + * Check an array of items and add an upd object to money items with a stack count of 1 + * Single stack money items have no upd object and thus no StackObjectsCount, causing issues + * @param items Items array to check + */ + addUpdToMoneyFromRaid(items: Item[]): void; + /** + * Add karma changes up and return the new value + * @param existingFenceStanding Current fence standing level + * @param victims Array of kills player performed + * @returns adjusted karma level after kills are taken into account + */ + calculateFenceStandingChangeFromKills(existingFenceStanding: number, victims: Victim[]): number; + /** + * Reset a profile to a baseline, used post-raid + * Reset points earned during session property + * Increment exp + * Remove Labs keycard + * @param profileData Profile to update + * @param saveProgressRequest post raid save data request data + * @param sessionID Session id + * @returns Reset profile object + */ + updateProfileBaseStats(profileData: IPmcData, saveProgressRequest: ISaveProgressRequestData, sessionID: string): IPmcData; + /** + * Take body part effects from client profile and apply to server profile + * @param saveProgressRequest post-raid request + * @param profileData player profile on server + */ + protected transferPostRaidLimbEffectsToProfile(saveProgressRequest: ISaveProgressRequestData, profileData: IPmcData): void; + /** + * Some maps have one-time-use keys (e.g. Labs + * Remove the relevant key from an inventory based on the post-raid request data passed in + * @param offraidData post-raid data + * @param sessionID Session id + */ + protected removeMapAccessKey(offraidData: ISaveProgressRequestData, sessionID: string): void; + /** + * Set the SPT inraid location Profile property to 'none' + * @param sessionID Session id + */ + protected setPlayerInRaidLocationStatusToNone(sessionID: string): void; + /** + * Adds SpawnedInSession property to items found in a raid + * Removes SpawnedInSession for non-scav players if item was taken into raid with SpawnedInSession = true + * @param preRaidProfile profile to update + * @param postRaidProfile profile to update inventory contents of + * @param isPlayerScav Was this a p scav raid + * @returns + */ + addSpawnedInSessionPropertyToItems(preRaidProfile: IPmcData, postRaidProfile: IPmcData, isPlayerScav: boolean): IPmcData; + /** + * Iterate over inventory items and remove the property that defines an item as Found in Raid + * Only removes property if item had FiR when entering raid + * @param postRaidProfile profile to update items for + * @returns Updated profile with SpawnedInSession removed + */ + removeSpawnedInSessionPropertyFromItems(postRaidProfile: IPmcData): IPmcData; + /** + * Update a players inventory post-raid + * Remove equipped items from pre-raid + * Add new items found in raid to profile + * Store insurance items in profile + * @param sessionID + * @param pmcData Profile to update + * @param postRaidProfile Profile returned by client after a raid + * @returns Updated profile + */ + setInventory(sessionID: string, pmcData: IPmcData, postRaidProfile: IPmcData): IPmcData; + /** + * Clear pmc inventory of all items except those that are exempt + * Used post-raid to remove items after death + * @param pmcData Player profile + * @param sessionID Session id + * @returns Player profile with pmc inventory cleared + */ + deleteInventory(pmcData: IPmcData, sessionID: string): IPmcData; + /** + * Does the provided items slotId mean its kept on the player after death + * @param slotId slotid of item to check + * @returns true if item is kept after death + */ + isItemKeptAfterDeath(slotId: string): boolean; + /** + * Return the equipped items from a players inventory + * @param items Players inventory to search through + * @returns an array of equipped items + */ + getPlayerGear(items: Item[]): Item[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/InventoryHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/InventoryHelper.d.ts new file mode 100644 index 0000000..8855d1e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/InventoryHelper.d.ts @@ -0,0 +1,132 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { AddItem, IAddItemRequestData } from "../models/eft/inventory/IAddItemRequestData"; +import { IAddItemTempObject } from "../models/eft/inventory/IAddItemTempObject"; +import { IInventoryMergeRequestData } from "../models/eft/inventory/IInventoryMergeRequestData"; +import { IInventoryMoveRequestData } from "../models/eft/inventory/IInventoryMoveRequestData"; +import { IInventorySplitRequestData } from "../models/eft/inventory/IInventorySplitRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IInventoryConfig, RewardDetails } from "../models/spt/config/IInventoryConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { ContainerHelper } from "./ContainerHelper"; +import { DialogueHelper } from "./DialogueHelper"; +import { ItemHelper } from "./ItemHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { ProfileHelper } from "./ProfileHelper"; +import { TraderAssortHelper } from "./TraderAssortHelper"; +export interface OwnerInventoryItems { + from: Item[]; + to: Item[]; + sameInventory: boolean; + isMail: boolean; +} +export declare class InventoryHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected httpResponse: HttpResponseUtil; + protected fenceService: FenceService; + protected databaseServer: DatabaseServer; + protected paymentHelper: PaymentHelper; + protected traderAssortHelper: TraderAssortHelper; + protected dialogueHelper: DialogueHelper; + protected itemHelper: ItemHelper; + protected containerHelper: ContainerHelper; + protected profileHelper: ProfileHelper; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected inventoryConfig: IInventoryConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, httpResponse: HttpResponseUtil, fenceService: FenceService, databaseServer: DatabaseServer, paymentHelper: PaymentHelper, traderAssortHelper: TraderAssortHelper, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, containerHelper: ContainerHelper, profileHelper: ProfileHelper, localisationService: LocalisationService, configServer: ConfigServer); + /** + * BUG: Passing the same item multiple times with a count of 1 will cause multiples of that item to be added (e.g. x3 separate objects of tar cola with count of 1 = 9 tarcolas being added to inventory) + * @param pmcData Profile to add items to + * @param request request data to add items + * @param output response to send back to client + * @param sessionID Session id + * @param callback Code to execute later (function) + * @param foundInRaid Will results added to inventory be set as found in raid + * @param addUpd Additional upd properties for items being added to inventory + * @returns IItemEventRouterResponse + */ + addItem(pmcData: IPmcData, request: IAddItemRequestData, output: IItemEventRouterResponse, sessionID: string, callback: { + (): void; + }, foundInRaid?: boolean, addUpd?: any): IItemEventRouterResponse; + /** + * Add ammo to ammo boxes + * @param itemToAdd Item to check is ammo box + * @param toDo + * @param output IItemEventRouterResponse object + * @param sessionID Session id + * @param pmcData Profile to add ammobox to + */ + protected hydrateAmmoBoxWithAmmo(pmcData: IPmcData, itemToAdd: IAddItemTempObject, toDo: string[][], sessionID: string, output: IItemEventRouterResponse): void; + /** + * + * @param assortItems Items to add to inventory + * @param requestItem Details of purchased item to add to inventory + * @param result Array split stacks are added to + */ + protected splitStackIntoSmallerStacks(assortItems: Item[], requestItem: AddItem, result: IAddItemTempObject[]): void; + /** + * Remove item from player inventory + * @param pmcData Profile to remove item from + * @param itemId Items id to remove + * @param sessionID Session id + * @param output Existing IItemEventRouterResponse object to append data to, creates new one by default if not supplied + * @returns IItemEventRouterResponse + */ + removeItem(pmcData: IPmcData, itemId: string, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse; + removeItemByCount(pmcData: IPmcData, itemId: string, count: number, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse; + getItemSize(itemTpl: string, itemID: string, inventoryItem: Item[]): Record; + protected getSizeByInventoryItemHash(itemTpl: string, itemID: string, inventoryItemHash: InventoryHelper.InventoryItemHash): Record; + protected getInventoryItemHash(inventoryItem: Item[]): InventoryHelper.InventoryItemHash; + getContainerMap(containerW: number, containerH: number, itemList: Item[], containerId: string): number[][]; + /** + * Based on the item action, determine whose inventories we should be looking at for from and to. + */ + getOwnerInventoryItems(body: IInventoryMoveRequestData | IInventorySplitRequestData | IInventoryMergeRequestData, sessionID: string): OwnerInventoryItems; + /** + * Made a 2d array table with 0 - free slot and 1 - used slot + * @param {Object} pmcData + * @param {string} sessionID + * @returns Array + */ + protected getStashSlotMap(pmcData: IPmcData, sessionID: string): number[][]; + protected getStashType(sessionID: string): string; + protected getPlayerStashSize(sessionID: string): Record; + /** + * Internal helper function to transfer an item from one profile to another. + * fromProfileData: Profile of the source. + * toProfileData: Profile of the destination. + * body: Move request + */ + moveItemToProfile(fromItems: Item[], toItems: Item[], body: IInventoryMoveRequestData): void; + /** + * Internal helper function to move item within the same profile_f. + */ + moveItemInternal(inventoryItems: Item[], body: IInventoryMoveRequestData): void; + /** + * Internal helper function to handle cartridges in inventory if any of them exist. + */ + protected handleCartridges(items: Item[], body: IInventoryMoveRequestData): void; + /** + * Get details for how a random loot container should be handled, max rewards, possible reward tpls + * @param itemTpl Container being opened + * @returns Reward details + */ + getRandomLootContainerRewardDetails(itemTpl: string): RewardDetails; +} +declare namespace InventoryHelper { + interface InventoryItemHash { + byItemId: Record; + byParentId: Record; + } +} +export {}; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/ItemHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/ItemHelper.d.ts new file mode 100644 index 0000000..de424d2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/ItemHelper.d.ts @@ -0,0 +1,251 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { InsuredItem } from "../models/eft/common/tables/IBotBase"; +import { Item, Repairable } from "../models/eft/common/tables/IItem"; +import { IStaticAmmoDetails } from "../models/eft/common/tables/ILootBase"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemBaseClassService } from "../services/ItemBaseClassService"; +import { LocaleService } from "../services/LocaleService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { MathUtil } from "../utils/MathUtil"; +import { ObjectId } from "../utils/ObjectId"; +import { RandomUtil } from "../utils/RandomUtil"; +import { HandbookHelper } from "./HandbookHelper"; +declare class ItemHelper { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected randomUtil: RandomUtil; + protected objectId: ObjectId; + protected mathUtil: MathUtil; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected itemBaseClassService: ItemBaseClassService; + protected localisationService: LocalisationService; + protected localeService: LocaleService; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, objectId: ObjectId, mathUtil: MathUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemBaseClassService: ItemBaseClassService, localisationService: LocalisationService, localeService: LocaleService); + /** + * Checks if an id is a valid item. Valid meaning that it's an item that be stored in stash + * @param {string} tpl the template id / tpl + * @returns boolean; true for items that may be in player possession and not quest items + */ + isValidItem(tpl: string, invalidBaseTypes?: string[]): boolean; + /** + * Check if the tpl / template Id provided is a descendent of the baseclass + * + * @param {string} tpl the item template id to check + * @param {string} baseClassTpl the baseclass to check for + * @return {boolean} is the tpl a descendent? + */ + isOfBaseclass(tpl: string, baseClassTpl: string): boolean; + /** + * Check if item has any of the supplied base classes + * @param tpl Item to check base classes of + * @param baseClassTpls base classes to check for + * @returns true if any supplied base classes match + */ + isOfBaseclasses(tpl: string, baseClassTpls: string[]): boolean; + /** + * Returns the item price based on the handbook or as a fallback from the prices.json if the item is not + * found in the handbook. If the price can't be found at all return 0 + * + * @param {string} tpl the item template to check + * @returns {integer} The price of the item or 0 if not found + */ + getItemPrice(tpl: string): number; + fixItemStackCount(item: Item): Item; + /** + * AmmoBoxes contain StackSlots which need to be filled for the AmmoBox to have content. + * Here's what a filled AmmoBox looks like: + * { + * "_id": "b1bbe982daa00ac841d4ae4d", + * "_tpl": "57372c89245977685d4159b1", + * "parentId": "5fe49a0e2694b0755a504876", + * "slotId": "hideout", + * "location": { + * "x": 3, + * "y": 4, + * "r": 0 + * }, + * "upd": { + * "StackObjectsCount": 1 + * } + * }, + * { + * "_id": "b997b4117199033afd274a06", + * "_tpl": "56dff061d2720bb5668b4567", + * "parentId": "b1bbe982daa00ac841d4ae4d", + * "slotId": "cartridges", + * "location": 0, + * "upd": { + * "StackObjectsCount": 30 + * } + * } + * Given the AmmoBox Item (first object) this function generates the StackSlot (second object) and returns it. + * StackSlots are only used for AmmoBoxes which only have one element in StackSlots. However, it seems to be generic + * to possibly also have more than one StackSlot. As good as possible, without seeing items having more than one + * StackSlot, this function takes account of this and creates and returns an array of StackSlotItems + * + * @param {object} item The item template of the AmmoBox as given in items.json + * @param {string} parentId The id of the AmmoBox instance these StackSlotItems should be children of + * @returns {array} The array of StackSlotItems + */ + generateItemsFromStackSlot(item: ITemplateItem, parentId: string): Item[]; + /** + * Get cloned copy of all item data from items.json + * @returns array of ITemplateItem objects + */ + getItems(): ITemplateItem[]; + /** + * Gets item data from items.json + * @param tpl items template id to look up + * @returns bool - is valid + template item object as array + */ + getItem(tpl: string): [boolean, ITemplateItem]; + /** + * get normalized value (0-1) based on item condition + * @param item + * @returns number between 0 and 1 + */ + getItemQualityModifier(item: Item): number; + /** + * Get a quality value based on a repairable items (weapon/armor) current state between current and max durability + * @param itemDetails + * @param repairable repairable object + * @param item + * @returns a number between 0 and 1 + */ + protected getRepairableItemQualityValue(itemDetails: ITemplateItem, repairable: Repairable, item: Item): number; + /** + * Recursive function that looks at every item from parameter and gets their childrens Ids + * @param items + * @param itemID + * @returns an array of strings + */ + findAndReturnChildrenByItems(items: Item[], itemID: string): string[]; + /** + * A variant of findAndReturnChildren where the output is list of item objects instead of their ids. + * @param items + * @param baseItemId + * @returns An array of Item objects + */ + findAndReturnChildrenAsItems(items: Item[], baseItemId: string): Item[]; + /** + * Find children of the item in a given assort (weapons parts for example, need recursive loop function) + * @param itemIdToFind Template id of item to check for + * @param assort Array of items to check in + * @returns Array of children of requested item + */ + findAndReturnChildrenByAssort(itemIdToFind: string, assort: Item[]): Item[]; + /** + * Check if the passed in item has buy count restrictions + * @param itemToCheck Item to check + * @returns true if it has buy restrictions + */ + hasBuyRestrictions(itemToCheck: Item): boolean; + /** + * is the passed in template id a dog tag + * @param tpl Template id to check + * @returns true if it is a dogtag + */ + isDogtag(tpl: string): boolean; + /** + * Can the item passed in be sold to a trader because it is raw money + * @param tpl Item template id to check + * @returns true if unsellable + */ + isNotSellable(tpl: string): boolean; + /** + * Gets the identifier for a child using slotId, locationX and locationY. + * @param item + * @returns "slotId OR slotid,locationX,locationY" + */ + getChildId(item: Item): string; + /** + * Can the passed in item be stacked + * @param tpl item to check + * @returns true if it can be stacked + */ + isItemTplStackable(tpl: string): boolean; + /** + * split item stack if it exceeds StackMaxSize + */ + splitStack(item: Item): Item[]; + /** + * Find Barter items in the inventory + * @param {string} by + * @param {Object} pmcData + * @param {string} barterItemId + * @returns Array of Item objects + */ + findBarterItems(by: string, pmcData: IPmcData, barterItemId: string): Item[]; + /** + * + * @param pmcData + * @param items + * @param insuredItems insured items to not replace ids for + * @param fastPanel + * @returns + */ + replaceIDs(pmcData: IPmcData, items: Item[], insuredItems?: InsuredItem[], fastPanel?: any): any[]; + /** + * WARNING, SLOW. Recursively loop down through an items hierarchy to see if any of the ids match the supplied list, return true if any do + * @param {string} tpl + * @param {Array} tplsToCheck + * @returns boolean + */ + doesItemOrParentsIdMatch(tpl: string, tplsToCheck: string[]): boolean; + /** + * Return true if item is a quest item + * @param {string} tpl + * @returns boolean + */ + isQuestItem(tpl: string): boolean; + /** + * Get the inventory size of an item + * @param items + * @param rootItemId + * @returns ItemSize object (width and height) + */ + getItemSize(items: Item[], rootItemId: string): ItemHelper.ItemSize; + /** + * Get a random cartridge from an items Filter property + * @param item + * @returns + */ + getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string; + createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record, caliber?: string): Item; + protected getRandomValidCaliber(magTemplate: ITemplateItem): string; + protected drawAmmoTpl(caliber: string, staticAmmoDist: Record): string; + /** + * + * @param parentId container cartridges will be placed in + * @param ammoTpl Cartridge to insert + * @param stackCount Count of cartridges inside parent + * @param location Location inside parent (e.g. 0, 1) + * @returns Item + */ + createCartridges(parentId: string, ammoTpl: string, stackCount: number, location: number): Item; + /** + * Get the size of a stack, return 1 if no stack object count property found + * @param item Item to get stack size of + * @returns size of stack + */ + getItemStackSize(item: Item): number; + /** + * Get the name of an item from the locale file using the item tpl + * @param itemTpl Tpl of item to get name of + * @returns Name of item + */ + getItemName(itemTpl: string): string; +} +declare namespace ItemHelper { + interface ItemSize { + width: number; + height: number; + } +} +export { ItemHelper }; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/NotificationSendHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/NotificationSendHelper.d.ts new file mode 100644 index 0000000..c80f22d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/NotificationSendHelper.d.ts @@ -0,0 +1,12 @@ +import { INotification } from "../models/eft/notifier/INotifier"; +import { WebSocketServer } from "../servers/WebSocketServer"; +import { NotificationService } from "../services/NotificationService"; +export declare class NotificationSendHelper { + protected webSocketServer: WebSocketServer; + protected notificationService: NotificationService; + constructor(webSocketServer: WebSocketServer, notificationService: NotificationService); + /** + * Send notification message to the appropriate channel + */ + sendMessage(sessionID: string, notificationMessage: INotification): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/NotifierHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/NotifierHelper.d.ts new file mode 100644 index 0000000..738b69a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/NotifierHelper.d.ts @@ -0,0 +1,17 @@ +import { INotification } from "../models/eft/notifier/INotifier"; +import { Message, MessageContentRagfair } from "../models/eft/profile/IAkiProfile"; +import { HttpServerHelper } from "./HttpServerHelper"; +export declare class NotifierHelper { + protected httpServerHelper: HttpServerHelper; + /** + * The default notification sent when waiting times out. + */ + protected defaultNotification: INotification; + constructor(httpServerHelper: HttpServerHelper); + getDefaultNotification(): INotification; + /** Creates a new notification that displays the "Your offer was sold!" prompt and removes sold offer from "My Offers" on clientside */ + createRagfairOfferSoldNotification(dialogueMessage: Message, ragfairData: MessageContentRagfair): INotification; + /** Creates a new notification with the specified dialogueMessage object. */ + createNewMessageNotification(dialogueMessage: Message): INotification; + getWebSocketServer(sessionID: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/PaymentHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/PaymentHelper.d.ts new file mode 100644 index 0000000..2d068a4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/PaymentHelper.d.ts @@ -0,0 +1,14 @@ +export declare class PaymentHelper { + /** + * Check whether tpl is Money + * @param {string} tpl + * @returns void + */ + isMoneyTpl(tpl: string): boolean; + /** + * Gets currency TPL from TAG + * @param {string} currency + * @returns string + */ + getCurrency(currency: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/PresetHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/PresetHelper.d.ts new file mode 100644 index 0000000..cea210e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/PresetHelper.d.ts @@ -0,0 +1,18 @@ +import { Preset } from "../models/eft/common/IGlobals"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class PresetHelper { + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected lookup: Record; + protected defaultPresets: Record; + constructor(jsonUtil: JsonUtil, databaseServer: DatabaseServer); + hydratePresetStore(input: Record): void; + getDefaultPresets(): Record; + isPreset(id: string): boolean; + hasPreset(templateId: string): boolean; + getPreset(id: string): Preset; + getPresets(templateId: string): Preset[]; + getDefaultPreset(templateId: string): Preset; + getBaseItemTpl(presetId: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/ProbabilityHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/ProbabilityHelper.d.ts new file mode 100644 index 0000000..7a0676c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/ProbabilityHelper.d.ts @@ -0,0 +1,14 @@ +import { ILogger } from "../models/spt/utils/ILogger"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class ProbabilityHelper { + protected logger: ILogger; + protected randomUtil: RandomUtil; + constructor(logger: ILogger, randomUtil: RandomUtil); + /** + * Chance to roll a number out of 100 + * @param chance Percentage chance roll should success + * @param scale scale of chance to allow support of numbers > 1-100 + * @returns true if success + */ + rollChance(chance: number, scale?: number): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/ProfileHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/ProfileHelper.d.ts new file mode 100644 index 0000000..79652ad --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/ProfileHelper.d.ts @@ -0,0 +1,66 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Stats } from "../models/eft/common/tables/IBotBase"; +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { Watermark } from "../utils/Watermark"; +import { ItemHelper } from "./ItemHelper"; +export declare class ProfileHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected watermark: Watermark; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected profileSnapshotService: ProfileSnapshotService; + constructor(logger: ILogger, jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileSnapshotService: ProfileSnapshotService); + resetProfileQuestCondition(sessionID: string, conditionId: string): void; + /** + * Get all profiles from server + * @returns Dictionary of profiles + */ + getProfiles(): Record; + getCompleteProfile(sessionID: string): IPmcData[]; + /** + * Fix xp doubling on post-raid xp reward screen by sending a 'dummy' profile to the post-raid screen + * Server saves the post-raid changes prior to the xp screen getting the profile, this results in the xp screen using + * the now updated profile values as a base, meaning it shows x2 xp gained + * Instead, clone the post-raid profile (so we dont alter its values), apply the pre-raid xp values to the cloned objects and return + * Delete snapshot of pre-raid profile prior to returning profile data + * @param sessionId Session id + * @param output pmc and scav profiles array + * @param pmcProfile post-raid pmc profile + * @param scavProfile post-raid scav profile + * @returns updated profile array + */ + protected postRaidXpWorkaroundFix(sessionId: string, output: IPmcData[], pmcProfile: IPmcData, scavProfile: IPmcData): IPmcData[]; + isNicknameTaken(info: IValidateNicknameRequestData, sessionID: string): boolean; + /** + * Add experience to a PMC inside the players profile + * @param sessionID Session id + * @param experienceToAdd Experience to add to PMC character + */ + addExperienceToPmc(sessionID: string, experienceToAdd: number): void; + getProfileByPmcId(pmcId: string): IPmcData; + getExperience(level: number): number; + getMaxLevel(): number; + getDefaultAkiDataObject(): any; + getFullProfile(sessionID: string): IAkiProfile; + getPmcProfile(sessionID: string): IPmcData; + getScavProfile(sessionID: string): IPmcData; + getDefaultCounters(): Stats; + protected isWiped(sessionID: string): boolean; + protected getServerVersion(): string; + /** + * Iterate over player profile inventory items and find the secure container and remove it + * @param profile Profile to remove secure container from + * @returns profile without secure container + */ + removeSecureContainer(profile: IPmcData): IPmcData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/QuestConditionHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/QuestConditionHelper.d.ts new file mode 100644 index 0000000..90ee560 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/QuestConditionHelper.d.ts @@ -0,0 +1,7 @@ +import { AvailableForConditions } from "../models/eft/common/tables/IQuest"; +export declare class QuestConditionHelper { + getQuestConditions(q: AvailableForConditions[], furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[]; + getLevelConditions(q: AvailableForConditions[], furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[]; + getLoyaltyConditions(q: AvailableForConditions[], furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[]; + protected filterConditions(q: AvailableForConditions[], questType: string, furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/QuestHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/QuestHelper.d.ts new file mode 100644 index 0000000..de7cba2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/QuestHelper.d.ts @@ -0,0 +1,214 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Quest } from "../models/eft/common/tables/IBotBase"; +import { AvailableForConditions, AvailableForProps, IQuest, Reward } from "../models/eft/common/tables/IQuest"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData"; +import { IFailQuestRequestData } from "../models/eft/quests/IFailQuestRequestData"; +import { QuestStatus } from "../models/enums/QuestStatus"; +import { IQuestConfig } from "../models/spt/config/IQuestConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocaleService } from "../services/LocaleService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { DialogueHelper } from "./DialogueHelper"; +import { ItemHelper } from "./ItemHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { ProfileHelper } from "./ProfileHelper"; +import { RagfairServerHelper } from "./RagfairServerHelper"; +import { TraderHelper } from "./TraderHelper"; +export declare class QuestHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected timeUtil: TimeUtil; + protected hashUtil: HashUtil; + protected itemHelper: ItemHelper; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected localeService: LocaleService; + protected ragfairServerHelper: RagfairServerHelper; + protected dialogueHelper: DialogueHelper; + protected profileHelper: ProfileHelper; + protected paymentHelper: PaymentHelper; + protected localisationService: LocalisationService; + protected traderHelper: TraderHelper; + protected configServer: ConfigServer; + protected questConfig: IQuestConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, traderHelper: TraderHelper, configServer: ConfigServer); + /** + * Get status of a quest by quest id + * @param pmcData Profile to search + * @param questID Quest id to look up + * @returns QuestStatus enum + */ + getQuestStatus(pmcData: IPmcData, questID: string): QuestStatus; + /** + * returns true is the level condition is satisfied + * @param playerLevel Players level + * @param condition Quest condition + * @returns true if player level is greater than or equal to quest + */ + doesPlayerLevelFulfilCondition(playerLevel: number, condition: AvailableForConditions): boolean; + /** + * Get the quests found in both arrays (inner join) + * @param before Array of quests #1 + * @param after Array of quests #2 + * @returns Reduction of cartesian product between two quest arrays + */ + getDeltaQuests(before: IQuest[], after: IQuest[]): IQuest[]; + /** + * Increase skill points of a skill on player profile + * @param sessionID Session id + * @param pmcData Player profile + * @param skillName Name of skill to increase skill points of + * @param progressAmount Amount of skill points to add to skill + */ + rewardSkillPoints(sessionID: string, pmcData: IPmcData, skillName: string, progressAmount: number): void; + /** + * Get quest name by quest id + * @param questId id to get + * @returns + */ + getQuestNameFromLocale(questId: string): string; + /** + * Check if trader has sufficient loyalty to fulfill quest requirement + * @param questProperties Quest props + * @param profile Player profile + * @returns true if loyalty is high enough to fulfill quest requirement + */ + traderStandingRequirementCheck(questProperties: AvailableForProps, profile: IPmcData): boolean; + protected processReward(reward: Reward): Reward[]; + /** + * Gets a flat list of reward items for the given quest at a specific state (e.g. Fail/Success) + * @param quest quest to get rewards for + * @param state Quest status that holds the items (Started, Success, Fail) + * @returns array of items with the correct maxStack + */ + getQuestRewardItems(quest: IQuest, state: QuestStatus): Reward[]; + /** + * Look up quest in db by accepted quest id and construct a profile-ready object ready to store in profile + * @param pmcData Player profile + * @param newState State the new quest should be in when returned + * @param acceptedQuest Details of accepted quest from client + */ + getQuestReadyForProfile(pmcData: IPmcData, newState: QuestStatus, acceptedQuest: IAcceptQuestRequestData): Quest; + /** + * TODO: what is going on here + * @param acceptedQuestId Quest to add to profile + * @param sessionID Session id + * @returns Array of quests in profile + quest passed in as param + */ + acceptedUnlocked(acceptedQuestId: string, sessionID: string): IQuest[]; + /** + * TODO: what is going on here + * @param failedQuestId + * @param sessionID Session id + * @returns + */ + failedUnlocked(failedQuestId: string, sessionID: string): IQuest[]; + /** + * Adjust quest money rewards by passed in multiplier + * @param quest Quest to multiple money rewards + * @param multiplier Value to adjust money rewards by + * @returns Updated quest + */ + applyMoneyBoost(quest: IQuest, multiplier: number): IQuest; + /** + * Sets the item stack to new value, or delete the item if value <= 0 + * // TODO maybe merge this function and the one from customization + * @param pmcData Profile + * @param itemId id of item to adjust stack size of + * @param newStackSize Stack size to adjust to + * @param sessionID Session id + * @param output ItemEvent router response + */ + changeItemStack(pmcData: IPmcData, itemId: string, newStackSize: number, sessionID: string, output: IItemEventRouterResponse): void; + /** + * Get quests, strip all requirement conditions except level + * @param quests quests to process + * @returns quest array without conditions + */ + protected getQuestsWithOnlyLevelRequirementStartCondition(quests: IQuest[]): IQuest[]; + /** + * Remove all quest conditions except for level requirement + * @param quest quest to clean + * @returns reset IQuest object + */ + getQuestWithOnlyLevelRequirementStartCondition(quest: IQuest): IQuest; + /** + * Fail a quest in a player profile + * @param pmcData Player profile + * @param failRequest Fail quest request data + * @param sessionID Session id + * @returns Item event router response + */ + failQuest(pmcData: IPmcData, failRequest: IFailQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Get List of All Quests from db + * NOT CLONED + * @returns Array of IQuest objects + */ + getQuestsFromDb(): IQuest[]; + /** + * Get quest by id from database (repeatables are stored in profile, check there if questId not found) + * @param questId Id of quest to find + * @param pmcData Player profile + * @returns IQuest object + */ + getQuestFromDb(questId: string, pmcData: IPmcData): IQuest; + /** + * Get the locale Id from locale db for a quest message + * @param questMessageId Quest message id to look up + * @returns Locale Id from locale db + */ + getQuestLocaleIdFromDb(questMessageId: string): string; + /** + * Alter a quests state + Add a record to its status timers object + * @param pmcData Profile to update + * @param newQuestState New state the quest should be in + * @param questId Id of the quest to alter the status of + */ + updateQuestState(pmcData: IPmcData, newQuestState: QuestStatus, questId: string): void; + /** + * Give player quest rewards - Skills/exp/trader standing/items/assort unlocks - Returns reward items player earned + * @param pmcData Player profile + * @param questId questId of quest to get rewards for + * @param state State of the quest to get rewards for + * @param sessionId Session id + * @param questResponse Response to send back to client + * @returns Array of reward objects + */ + applyQuestReward(pmcData: IPmcData, questId: string, state: QuestStatus, sessionId: string, questResponse: IItemEventRouterResponse): Reward[]; + /** + * WIP - Find hideout craft id and add to unlockedProductionRecipe array in player profile + * also update client response recipeUnlocked array with craft id + * @param pmcData Player profile + * @param craftUnlockReward Reward item from quest with craft unlock details + * @param questDetails Quest with craft unlock reward + * @param sessionID Session id + * @param response Response to send back to client + */ + protected findAndAddHideoutProductionIdToProfile(pmcData: IPmcData, craftUnlockReward: Reward, questDetails: IQuest, sessionID: string, response: IItemEventRouterResponse): void; + /** + * Get players intel center bonus from profile + * @param pmcData player profile + * @returns bonus as a percent + */ + protected getIntelCenterRewardBonus(pmcData: IPmcData): number; + /** + * Find quest with 'findItem' requirement that needs the item tpl be handed in + * @param itemTpl item tpl to look for + * @returns 'FindItem' condition id + */ + getFindItemIdForQuestHandIn(itemTpl: string): string; + /** + * Add all quests to a profile with the provided statuses + * @param pmcProfile profile to update + * @param statuses statuses quests should have + */ + addAllQuestsToProfile(pmcProfile: IPmcData, statuses: QuestStatus[]): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairHelper.d.ts new file mode 100644 index 0000000..2c8dbb5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairHelper.d.ts @@ -0,0 +1,43 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { IGetOffersResult } from "../models/eft/ragfair/IGetOffersResult"; +import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RagfairLinkedItemService } from "../services/RagfairLinkedItemService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { HandbookHelper } from "./HandbookHelper"; +import { ItemHelper } from "./ItemHelper"; +import { TraderAssortHelper } from "./TraderAssortHelper"; +import { UtilityHelper } from "./UtilityHelper"; +export declare class RagfairHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected traderAssortHelper: TraderAssortHelper; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected itemHelper: ItemHelper; + protected ragfairLinkedItemService: RagfairLinkedItemService; + protected utilityHelper: UtilityHelper; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, traderAssortHelper: TraderAssortHelper, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, ragfairLinkedItemService: RagfairLinkedItemService, utilityHelper: UtilityHelper, configServer: ConfigServer); + /** + * Gets currency TAG from TPL + * @param {string} currency + * @returns string + */ + getCurrencyTag(currency: string): string; + filterCategories(sessionID: string, info: ISearchRequestData): string[]; + getDisplayableAssorts(sessionID: string): Record; + protected getCategoryList(handbookId: string): string[]; + countCategories(result: IGetOffersResult): void; + /** + * Merges Root Items + * Ragfair allows abnormally large stacks. + */ + mergeStackable(items: Item[]): Item[]; + getCurrencySymbol(currencyTpl: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairOfferHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairOfferHelper.d.ts new file mode 100644 index 0000000..3d0d570 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairOfferHelper.d.ts @@ -0,0 +1,74 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData"; +import { IQuestConfig } from "../models/spt/config/IQuestConfig"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocaleService } from "../services/LocaleService"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { HashUtil } from "../utils/HashUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { DialogueHelper } from "./DialogueHelper"; +import { ItemHelper } from "./ItemHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { PresetHelper } from "./PresetHelper"; +import { ProfileHelper } from "./ProfileHelper"; +import { RagfairHelper } from "./RagfairHelper"; +import { RagfairServerHelper } from "./RagfairServerHelper"; +import { RagfairSortHelper } from "./RagfairSortHelper"; +import { TraderHelper } from "./TraderHelper"; +export declare class RagfairOfferHelper { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected hashUtil: HashUtil; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected traderHelper: TraderHelper; + protected saveServer: SaveServer; + protected dialogueHelper: DialogueHelper; + protected itemHelper: ItemHelper; + protected paymentHelper: PaymentHelper; + protected presetHelper: PresetHelper; + protected profileHelper: ProfileHelper; + protected ragfairServerHelper: RagfairServerHelper; + protected ragfairSortHelper: RagfairSortHelper; + protected ragfairHelper: RagfairHelper; + protected ragfairOfferService: RagfairOfferService; + protected localeService: LocaleService; + protected configServer: ConfigServer; + protected static goodSoldTemplate: string; + protected ragfairConfig: IRagfairConfig; + protected questConfig: IQuestConfig; + constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, traderHelper: TraderHelper, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer); + getValidOffers(searchRequest: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; + getOffersForBuild(info: ISearchRequestData, itemsToAdd: string[], assorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; + /** + * Has a traders offer ran out of stock to sell to player + * @param offer Offer to check stock of + * @returns true if out of stock + */ + protected traderOutOfStock(offer: IRagfairOffer): boolean; + /** + * Check if trader offers' BuyRestrictionMax value has been reached + * @param offer offer to check restriction properties of + * @returns true if restriction reached, false if no restrictions/not reached + */ + protected traderBuyRestrictionReached(offer: IRagfairOffer): boolean; + /** + * Get an array of flea offers that are inaccessible to player due to their inadequate loyalty level + * @param offers Offers to check + * @param pmcProfile Players profile with trader loyalty levels + */ + protected getLoyaltyLockedOffers(offers: IRagfairOffer[], pmcProfile: IPmcData): string[]; + processOffersOnProfile(sessionID: string): boolean; + protected getProfileOffers(sessionID: string): IRagfairOffer[]; + protected deleteOfferByOfferId(sessionID: string, offerId: string): void; + protected completeOffer(sessionID: string, offer: IRagfairOffer, boughtAmount: number): IItemEventRouterResponse; + isDisplayableOffer(info: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record, offer: IRagfairOffer, pmcProfile: IPmcData): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairSellHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairSellHelper.d.ts new file mode 100644 index 0000000..bf7aeb6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairSellHelper.d.ts @@ -0,0 +1,36 @@ +import { SellResult } from "../models/eft/ragfair/IRagfairOffer"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class RagfairSellHelper { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected timeUtil: TimeUtil; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer); + /** + * Get the percent chance to sell an item based on its average listed price vs player chosen listing price + * @param baseChancePercent Base chance to sell item + * @param averageOfferPriceRub Price of average offer in roubles + * @param playerListedPriceRub Price player listed item for in roubles + * @returns percent value + */ + calculateSellChance(baseChancePercent: number, averageOfferPriceRub: number, playerListedPriceRub: number): number; + /** + * Get percent chance to sell an item when price is below items average listing price + * @param playerListedPriceRub Price player listed item for in roubles + * @param averageOfferPriceRub Price of average offer in roubles + * @returns percent value + */ + protected getSellMultiplierWhenPlayerPriceIsBelowAverageListingPrice(averageOfferPriceRub: number, playerListedPriceRub: number): number; + /** + * Determine if the offer being listed will be sold + * @param sellChancePercent chance item will sell + * @param itemSellCount count of items to sell + * @returns Array of purchases of item(s) listed + */ + rollForSale(sellChancePercent: number, itemSellCount: number): SellResult[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairServerHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairServerHelper.d.ts new file mode 100644 index 0000000..bfe6cc3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairServerHelper.d.ts @@ -0,0 +1,63 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { MemberCategory } from "../models/enums/MemberCategory"; +import { IQuestConfig } from "../models/spt/config/IQuestConfig"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { LocaleService } from "../services/LocaleService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { DialogueHelper } from "./DialogueHelper"; +import { ItemHelper } from "./ItemHelper"; +import { ProfileHelper } from "./ProfileHelper"; +/** + * Helper class for common ragfair server actions + */ +export declare class RagfairServerHelper { + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected profileHelper: ProfileHelper; + protected itemHelper: ItemHelper; + protected localeService: LocaleService; + protected dialogueHelper: DialogueHelper; + protected jsonUtil: JsonUtil; + protected itemFilterService: ItemFilterService; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + protected questConfig: IQuestConfig; + protected static goodsReturnedTemplate: string; + constructor(randomUtil: RandomUtil, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, profileHelper: ProfileHelper, itemHelper: ItemHelper, localeService: LocaleService, dialogueHelper: DialogueHelper, jsonUtil: JsonUtil, itemFilterService: ItemFilterService, configServer: ConfigServer); + /** + * Is item valid / on blacklist / quest item + * @param itemDetails + * @returns boolean + */ + isItemValidRagfairItem(itemDetails: [boolean, ITemplateItem]): boolean; + protected isItemBlacklisted(itemTemplateId: string): boolean; + isTrader(userID: string): boolean; + isPlayer(userID: string): boolean; + returnItems(sessionID: string, items: Item[]): void; + calculateDynamicStackCount(tplId: string, isWeaponPreset: boolean): number; + /** + * Choose a currency at random with bias + * @returns currency tpl + */ + getDynamicOfferCurrency(): string; + getMemberType(userID: string): MemberCategory; + getNickname(userID: string): string; + getPresetItems(item: any): Item[]; + getPresetItemsByTpl(item: Item): Item[]; + /** + * Generate new unique ids for the children while preserving hierarchy + * @param item base item + * @param preset + * @returns Item array with new IDs + */ + reparentPresets(item: Item, preset: Item[]): Item[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairSortHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairSortHelper.d.ts new file mode 100644 index 0000000..6a06528 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairSortHelper.d.ts @@ -0,0 +1,28 @@ +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { RagfairSort } from "../models/enums/RagfairSort"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocaleService } from "../services/LocaleService"; +export declare class RagfairSortHelper { + protected databaseServer: DatabaseServer; + protected localeService: LocaleService; + constructor(databaseServer: DatabaseServer, localeService: LocaleService); + /** + * Sort a list of ragfair offers by something (id/rating/offer name/price/expiry time) + * @param offers Offers to sort + * @param type How to sort it + * @param direction Ascending/descending + * @returns Sorted offers + */ + sortOffers(offers: IRagfairOffer[], type: RagfairSort, direction?: number): IRagfairOffer[]; + protected sortOffersByID(a: IRagfairOffer, b: IRagfairOffer): number; + protected sortOffersByRating(a: IRagfairOffer, b: IRagfairOffer): number; + protected sortOffersByName(a: IRagfairOffer, b: IRagfairOffer): number; + /** + * Order two offers by rouble price value + * @param a Offer a + * @param b Offer b + * @returns + */ + protected sortOffersByPrice(a: IRagfairOffer, b: IRagfairOffer): number; + protected sortOffersByExpiry(a: IRagfairOffer, b: IRagfairOffer): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairTaxHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairTaxHelper.d.ts new file mode 100644 index 0000000..820facb --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/RagfairTaxHelper.d.ts @@ -0,0 +1,16 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RagfairPriceService } from "../services/RagfairPriceService"; +import { ItemHelper } from "./ItemHelper"; +import { ILogger } from "../models/spt/utils/ILogger"; +export declare class RagfairTaxHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected ragfairPriceService: RagfairPriceService; + protected itemHelper: ItemHelper; + constructor(logger: ILogger, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, itemHelper: ItemHelper); + calculateTax(item: Item, pmcData: IPmcData, requirementsValue: number, offerItemCount: number, sellInOnePiece: boolean): number; + protected calculateItemWorth(item: Item, itemTemplate: ITemplateItem, itemCount: number, pmcData: IPmcData, isRootItem?: boolean): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/RepairHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/RepairHelper.d.ts new file mode 100644 index 0000000..0d0257a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/RepairHelper.d.ts @@ -0,0 +1,35 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem, Props } from "../models/eft/common/tables/ITemplateItem"; +import { IRepairConfig } from "../models/spt/config/IRepairConfig"; +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 RepairHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected repairConfig: IRepairConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Alter an items durability after a repair by trader/repair kit + * @param itemToRepair item to update durability details + * @param itemToRepairDetails db details of item to repair + * @param isArmor Is item being repaired a piece of armor + * @param amountToRepair how many unit of durability to repair + * @param useRepairKit Is item being repaired with a repair kit + * @param applyMaxDurabilityDegradation should item have max durability reduced + */ + updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit: boolean, traderQualityMultipler: number, applyMaxDurabilityDegradation?: boolean): void; + protected getRandomisedArmorRepairDegradationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number, traderQualityMultipler: number): number; + protected getRandomisedWeaponRepairDegradationValue(itemProps: Props, isRepairKit: boolean, weaponMax: number, traderQualityMultipler: number): number; + /** + * Is the supplied tpl a weapon + * @param tpl tplId to check is a weapon + * @returns true if tpl is a weapon + */ + isWeaponTemplate(tpl: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/SecureContainerHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/SecureContainerHelper.d.ts new file mode 100644 index 0000000..9e2bc32 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/SecureContainerHelper.d.ts @@ -0,0 +1,13 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { ItemHelper } from "./ItemHelper"; +export interface OwnerInventoryItems { + from: Item[]; + to: Item[]; + sameInventory: boolean; + isMail: boolean; +} +export declare class SecureContainerHelper { + protected itemHelper: ItemHelper; + constructor(itemHelper: ItemHelper); + getSecureContainerItems(items: Item[]): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/TradeHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/TradeHelper.d.ts new file mode 100644 index 0000000..6811dd1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/TradeHelper.d.ts @@ -0,0 +1,54 @@ +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item, Upd } from "../models/eft/common/tables/IItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBuyTradeRequestData } from "../models/eft/trade/IProcessBuyTradeRequestData"; +import { IProcessSellTradeRequestData } from "../models/eft/trade/IProcessSellTradeRequestData"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RagfairServer } from "../servers/RagfairServer"; +import { FenceService } from "../services/FenceService"; +import { PaymentService } from "../services/PaymentService"; +export declare class TradeHelper { + protected logger: ILogger; + protected eventOutputHolder: EventOutputHolder; + protected traderHelper: TraderHelper; + protected itemHelper: ItemHelper; + protected paymentService: PaymentService; + protected fenceService: FenceService; + protected inventoryHelper: InventoryHelper; + protected ragfairServer: RagfairServer; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, traderHelper: TraderHelper, itemHelper: ItemHelper, paymentService: PaymentService, fenceService: FenceService, inventoryHelper: InventoryHelper, ragfairServer: RagfairServer, configServer: ConfigServer); + /** + * Buy item from flea or trader + * @param pmcData Player profile + * @param buyRequestData data from client + * @param sessionID Session id + * @param foundInRaid Should item be found in raid + * @param upd optional item details used when buying from flea + * @returns + */ + buyItem(pmcData: IPmcData, buyRequestData: IProcessBuyTradeRequestData, sessionID: string, foundInRaid: boolean, upd: Upd): IItemEventRouterResponse; + /** + * Sell item to trader + * @param pmcData Profile to update + * @param sellRequest request data + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + sellItem(pmcData: IPmcData, sellRequest: IProcessSellTradeRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Increment the assorts buy count by number of items purchased + * Show error on screen if player attempts to buy more than what the buy max allows + * @param assortBeingPurchased assort being bought + * @param itemsPurchasedCount number of items being bought + */ + protected incrementAssortBuyCount(assortBeingPurchased: Item, itemsPurchasedCount: number): void; + protected checkPurchaseIsWithinTraderItemLimit(assortBeingPurchased: Item, assortId: string, count: number): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/TraderAssortHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/TraderAssortHelper.d.ts new file mode 100644 index 0000000..a0294a1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/TraderAssortHelper.d.ts @@ -0,0 +1,82 @@ +import { RagfairAssortGenerator } from "../generators/RagfairAssortGenerator"; +import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITrader, ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { TraderAssortService } from "../services/TraderAssortService"; +import { TraderPurchasePersisterService } from "../services/TraderPurchasePersisterService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { MathUtil } from "../utils/MathUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { AssortHelper } from "./AssortHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { ProfileHelper } from "./ProfileHelper"; +import { TraderHelper } from "./TraderHelper"; +export declare class TraderAssortHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected mathUtil: MathUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected profileHelper: ProfileHelper; + protected assortHelper: AssortHelper; + protected paymentHelper: PaymentHelper; + protected ragfairAssortGenerator: RagfairAssortGenerator; + protected ragfairOfferGenerator: RagfairOfferGenerator; + protected traderAssortService: TraderAssortService; + protected localisationService: LocalisationService; + protected traderPurchasePersisterService: TraderPurchasePersisterService; + protected traderHelper: TraderHelper; + protected fenceService: FenceService; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + protected mergedQuestAssorts: Record>; + protected createdMergedQuestAssorts: boolean; + constructor(logger: ILogger, jsonUtil: JsonUtil, mathUtil: MathUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, profileHelper: ProfileHelper, assortHelper: AssortHelper, paymentHelper: PaymentHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferGenerator: RagfairOfferGenerator, traderAssortService: TraderAssortService, localisationService: LocalisationService, traderPurchasePersisterService: TraderPurchasePersisterService, traderHelper: TraderHelper, fenceService: FenceService, configServer: ConfigServer); + /** + * Get a traders assorts + * Can be used for returning ragfair / fence assorts + * Filter out assorts not unlocked due to level OR quest completion + * @param sessionId session id + * @param traderId traders id + * @returns a traders' assorts + */ + getAssort(sessionId: string, traderId: string, flea?: boolean): ITraderAssort; + /** + * Create a dict of all assort id = quest id mappings used to work out what items should be shown to player based on the quests they've started/completed/failed + */ + protected hydrateMergedQuestAssorts(): void; + /** + * Reset a traders assorts and move nextResupply value to future + * Flag trader as needing a flea offer reset to be picked up by flea update() function + * @param trader trader details to alter + */ + resetExpiredTrader(trader: ITrader): void; + /** + * Does the supplied trader need its assorts refreshed + * @param traderID Trader to check + * @returns true they need refreshing + */ + traderAssortsHaveExpired(traderID: string): boolean; + /** + * Iterate over all assorts barter_scheme values, find barters selling for money and multiply by multipler in config + * @param traderAssort Assorts to multiple price of + */ + protected multiplyItemPricesByConfigMultiplier(traderAssort: ITraderAssort): void; + /** + * Get an array of pristine trader items prior to any alteration by player (as they were on server start) + * @param traderId trader id + * @returns array of Items + */ + protected getPristineTraderAssorts(traderId: string): Item[]; + /** + * Returns generated ragfair offers in a trader assort format + * @returns Trader assort object + */ + protected getRagfairDataAsTraderAssort(): ITraderAssort; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/TraderHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/TraderHelper.d.ts new file mode 100644 index 0000000..49aea28 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/TraderHelper.d.ts @@ -0,0 +1,158 @@ +import { FenceLevel } from "../models/eft/common/IGlobals"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IBarterScheme, ITraderAssort, ITraderBase, LoyaltyLevel } from "../models/eft/common/tables/ITrader"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { PlayerService } from "../services/PlayerService"; +import { TimeUtil } from "../utils/TimeUtil"; +import { HandbookHelper } from "./HandbookHelper"; +import { ItemHelper } from "./ItemHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { ProfileHelper } from "./ProfileHelper"; +export declare class TraderHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected saveServer: SaveServer; + protected profileHelper: ProfileHelper; + protected paymentHelper: PaymentHelper; + protected itemHelper: ItemHelper; + protected handbookHelper: HandbookHelper; + protected playerService: PlayerService; + protected localisationService: LocalisationService; + protected fenceService: FenceService; + protected timeUtil: TimeUtil; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + /** Dictionary of item tpl and the highest trader rouble price */ + protected highestTraderPriceItems: Record; + constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemHelper: ItemHelper, handbookHelper: HandbookHelper, playerService: PlayerService, localisationService: LocalisationService, fenceService: FenceService, timeUtil: TimeUtil, configServer: ConfigServer); + getTrader(traderID: string, sessionID: string): ITraderBase; + getTraderAssortsById(traderId: string): ITraderAssort; + /** + * Reset a profiles trader data back to its initial state as seen by a level 1 player + * Does NOT take into account different profile levels + * @param sessionID session id + * @param traderID trader id to reset + */ + resetTrader(sessionID: string, traderID: string): void; + /** + * Alter a traders unlocked status + * @param traderId Trader to alter + * @param status New status to use + * @param sessionId Session id + */ + setTraderUnlockedState(traderId: string, status: boolean, sessionId: string): void; + /** + * Get a list of items and their prices from player inventory that can be sold to a trader + * @param traderID trader id being traded with + * @param sessionID session id + * @returns IBarterScheme[][] + */ + getPurchasesData(traderID: string, sessionID: string): Record; + /** + * Should item be skipped when selling to trader according to its sell categories and other checks + * @param pmcData Profile + * @param item Item to be checked is sellable to trader + * @param sellCategory categories trader will buy + * @param traderId Trader item is being checked can be sold to + * @returns true if should NOT be sold to trader + */ + protected isItemUnSellableToTrader(pmcData: IPmcData, item: Item, sellCategory: string[], traderId: string): boolean; + /** + * Check if item has durability so low it precludes it from being sold to the trader (inclusive) + * @param item Item to check durability of + * @param traderId Trader item is sold to + * @returns + */ + protected itemIsBelowSellableDurabilityThreshhold(item: Item, traderId: string): boolean; + /** + * Get the percentage threshold value a trader will buy armor/weapons above + * @param traderId Trader to look up + * @returns percentage + */ + protected getTraderDurabiltyPurchaseThreshold(traderId: string): number; + /** + * Get the price of passed in item and all of its attached children (mods) + * Take into account bonuses/adjustments e.g. discounts + * @param pmcData profile data + * @param item item to calculate price of + * @param buyPriceCoefficient + * @param fenceInfo fence data + * @param traderBase trader details + * @param currencyTpl Currency to get price as + * @returns price of item + children + */ + protected getAdjustedItemPrice(pmcData: IPmcData, item: Item, buyPriceCoefficient: number, fenceInfo: FenceLevel, traderBase: ITraderBase, currencyTpl: string): number; + /** + * Get the raw price of item+child items from handbook without any modification + * @param pmcData profile data + * @param item item to calculate price of + * @returns price as number + */ + protected getRawItemPrice(pmcData: IPmcData, item: Item): number; + /** + * Get discount modifier for desired trader + * @param trader Trader to get discount for + * @param buyPriceCoefficient + * @param fenceInfo fence info, needed if getting fence modifier value + * @returns discount modifier value + */ + protected getTraderDiscount(trader: ITraderBase, buyPriceCoefficient: number, fenceInfo: FenceLevel): number; + /** + * Add standing to a trader and level them up if exp goes over level threshold + * @param sessionId Session id + * @param traderId Traders id + * @param standingToAdd Standing value to add to trader + */ + addStandingToTrader(sessionId: string, traderId: string, standingToAdd: number): void; + /** + * Calculate traders level based on exp amount and increments level if over threshold + * @param traderID trader to process + * @param sessionID session id + */ + lvlUp(traderID: string, sessionID: string): void; + /** + * Get the next update timestamp for a trader + * @param traderID Trader to look up update value for + * @returns future timestamp + */ + getNextUpdateTimestamp(traderID: string): number; + /** + * Get the reset time between trader assort refreshes in seconds + * @param traderId Trader to look up + * @returns Time in seconds + */ + getTraderUpdateSeconds(traderId: string): number; + /** + * check if an item is allowed to be sold to a trader + * @param categoriesTraderBuys array of allowed categories + * @param tplToCheck itemTpl of inventory + * @returns boolean if item can be sold to trader + */ + doesTraderBuyItem(categoriesTraderBuys: string[], tplToCheck: string): boolean; + getLoyaltyLevel(traderID: string, pmcData: IPmcData): LoyaltyLevel; + /** + * Store the purchase of an assort from a trader in the player profile + * @param sessionID Session id + * @param newPurchaseDetails New item assort id + count + */ + addTraderPurchasesToPlayerProfile(sessionID: string, newPurchaseDetails: { + items: { + item_id: string; + count: number; + }[]; + tid: string; + }): void; + /** + * Get the highest rouble price for an item from traders + * @param tpl Item to look up highest pride for + * @returns highest rouble cost for item + */ + getHighestTraderPriceRouble(tpl: string): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/UtilityHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/UtilityHelper.d.ts new file mode 100644 index 0000000..5d9f482 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/UtilityHelper.d.ts @@ -0,0 +1,3 @@ +export declare class UtilityHelper { + arrayIntersect(a: T[], b: T[]): T[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/helpers/WeightedRandomHelper.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/helpers/WeightedRandomHelper.d.ts new file mode 100644 index 0000000..9aa0d29 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/helpers/WeightedRandomHelper.d.ts @@ -0,0 +1,28 @@ +export declare class WeightedRandomHelper { + /** + * Gets a tplId from a weighted dictionary + * @param {tplId: weighting[]} itemArray + * @returns tplId + */ + getWeightedInventoryItem(itemArray: { + [tplId: string]: unknown; + } | ArrayLike): string; + /** + * Picks the random item based on its weight. + * The items with higher weight will be picked more often (with a higher probability). + * + * For example: + * - items = ['banana', 'orange', 'apple'] + * - weights = [0, 0.2, 0.8] + * - weightedRandom(items, weights) in 80% of cases will return 'apple', in 20% of cases will return + * 'orange' and it will never return 'banana' (because probability of picking the banana is 0%) + * + * @param {any[]} items + * @param {number[]} weights + * @returns {{item: any, index: number}} + */ + weightedRandom(items: string | any[], weights: string | any[]): { + item: any; + index: number; + }; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/ide/BleedingEdgeEntry.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/ide/BleedingEdgeEntry.d.ts new file mode 100644 index 0000000..fded23a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/ide/BleedingEdgeEntry.d.ts @@ -0,0 +1 @@ +import "reflect-metadata"; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/ide/DebugEntry.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/ide/DebugEntry.d.ts new file mode 100644 index 0000000..fded23a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/ide/DebugEntry.d.ts @@ -0,0 +1 @@ +import "reflect-metadata"; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/ide/ReleaseEntry.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/ide/ReleaseEntry.d.ts new file mode 100644 index 0000000..fded23a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/ide/ReleaseEntry.d.ts @@ -0,0 +1 @@ +import "reflect-metadata"; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/ide/TestEntry.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/ide/TestEntry.d.ts new file mode 100644 index 0000000..fded23a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/ide/TestEntry.d.ts @@ -0,0 +1 @@ +import "reflect-metadata"; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/loaders/BundleLoader.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/loaders/BundleLoader.d.ts new file mode 100644 index 0000000..b88723c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/loaders/BundleLoader.d.ts @@ -0,0 +1,29 @@ +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +declare class BundleInfo { + modPath: string; + key: string; + path: string; + filepath: string; + dependencyKeys: string[]; + constructor(modpath: string, bundle: any, bundlePath: string, bundleFilepath: string); +} +export declare class BundleLoader { + protected httpServerHelper: HttpServerHelper; + protected vfs: VFS; + protected jsonUtil: JsonUtil; + protected bundles: Record; + constructor(httpServerHelper: HttpServerHelper, vfs: VFS, jsonUtil: JsonUtil); + getBundles(local: boolean): BundleInfo[]; + getBundle(key: string, local: boolean): BundleInfo; + addBundles(modpath: string): void; +} +export interface BundleManifest { + manifest: Array; +} +export interface BundleManifestEntry { + key: string; + path: string; +} +export {}; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/loaders/ModTypeCheck.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/loaders/ModTypeCheck.d.ts new file mode 100644 index 0000000..e907341 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/loaders/ModTypeCheck.d.ts @@ -0,0 +1,43 @@ +import { IPostAkiLoadMod } from "../models/external/IPostAkiLoadMod"; +import { IPostAkiLoadModAsync } from "../models/external/IPostAkiLoadModAsync"; +import { IPostDBLoadMod } from "../models/external/IPostDBLoadMod"; +import { IPostDBLoadModAsync } from "../models/external/IPostDBLoadModAsync"; +import { IPreAkiLoadMod } from "../models/external/IPreAkiLoadMod"; +import { IPreAkiLoadModAsync } from "../models/external/IPreAkiLoadModAsync"; +export declare class ModTypeCheck { + /** + * Use defined safe guard to check if the mod is a IPreAkiLoadMod + * @returns boolean + */ + isPreAkiLoad(mod: any): mod is IPreAkiLoadMod; + /** + * Use defined safe guard to check if the mod is a IPostAkiLoadMod + * @returns boolean + */ + isPostAkiLoad(mod: any): mod is IPostAkiLoadMod; + /** + * Use defined safe guard to check if the mod is a IPostDBLoadMod + * @returns boolean + */ + isPostDBAkiLoad(mod: any): mod is IPostDBLoadMod; + /** + * Use defined safe guard to check if the mod is a IPreAkiLoadModAsync + * @returns boolean + */ + isPreAkiLoadAsync(mod: any): mod is IPreAkiLoadModAsync; + /** + * Use defined safe guard to check if the mod is a IPostAkiLoadModAsync + * @returns boolean + */ + isPostAkiLoadAsync(mod: any): mod is IPostAkiLoadModAsync; + /** + * Use defined safe guard to check if the mod is a IPostDBLoadModAsync + * @returns boolean + */ + isPostDBAkiLoadAsync(mod: any): mod is IPostDBLoadModAsync; + /** + * Checks for mod to be compatible with 3.X+ + * @returns boolean + */ + isPostV3Compatible(mod: any): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/loaders/PostAkiModLoader.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/loaders/PostAkiModLoader.d.ts new file mode 100644 index 0000000..5df8c6c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/loaders/PostAkiModLoader.d.ts @@ -0,0 +1,17 @@ +import { DependencyContainer } from "tsyringe"; +import { IModLoader } from "../models/spt/mod/IModLoader"; +import { VFS } from "../utils/VFS"; +import { BundleLoader } from "./BundleLoader"; +import { ModTypeCheck } from "./ModTypeCheck"; +import { PreAkiModLoader } from "./PreAkiModLoader"; +export declare class PostAkiModLoader implements IModLoader { + protected bundleLoader: BundleLoader; + protected vfs: VFS; + protected preAkiModLoader: PreAkiModLoader; + protected modTypeCheck: ModTypeCheck; + constructor(bundleLoader: BundleLoader, vfs: VFS, preAkiModLoader: PreAkiModLoader, modTypeCheck: ModTypeCheck); + getModPath(mod: string): string; + load(): Promise; + protected executeMods(container: DependencyContainer): Promise; + protected addBundles(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/loaders/PostDBModLoader.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/loaders/PostDBModLoader.d.ts new file mode 100644 index 0000000..c4cda5c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/loaders/PostDBModLoader.d.ts @@ -0,0 +1,13 @@ +import { DependencyContainer } from "tsyringe"; +import { OnLoad } from "../di/OnLoad"; +import { ModTypeCheck } from "./ModTypeCheck"; +import { PreAkiModLoader } from "./PreAkiModLoader"; +export declare class PostDBModLoader implements OnLoad { + protected preAkiModLoader: PreAkiModLoader; + protected modTypeCheck: ModTypeCheck; + constructor(preAkiModLoader: PreAkiModLoader, modTypeCheck: ModTypeCheck); + onLoad(): Promise; + getRoute(): string; + getModPath(mod: string): string; + protected executeMods(container: DependencyContainer): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/loaders/PreAkiModLoader.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/loaders/PreAkiModLoader.d.ts new file mode 100644 index 0000000..1949696 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/loaders/PreAkiModLoader.d.ts @@ -0,0 +1,76 @@ +import { DependencyContainer } from "tsyringe"; +import { ICoreConfig } from "../models/spt/config/ICoreConfig"; +import { IModLoader } from "../models/spt/mod/IModLoader"; +import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { ModCompilerService } from "../services/ModCompilerService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +import { BundleLoader } from "./BundleLoader"; +import { ModTypeCheck } from "./ModTypeCheck"; +export declare class PreAkiModLoader implements IModLoader { + protected logger: ILogger; + protected vfs: VFS; + protected jsonUtil: JsonUtil; + protected modCompilerService: ModCompilerService; + protected bundleLoader: BundleLoader; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected modTypeCheck: ModTypeCheck; + protected static container: DependencyContainer; + protected readonly basepath = "user/mods/"; + protected readonly modOrderPath = "user/mods/order.json"; + protected order: Record; + protected imported: Record; + protected akiConfig: ICoreConfig; + constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, modCompilerService: ModCompilerService, bundleLoader: BundleLoader, localisationService: LocalisationService, configServer: ConfigServer, modTypeCheck: ModTypeCheck); + load(container: DependencyContainer): Promise; + /** + * Returns a list of mods with preserved load order + * @returns Array of mod names in load order + */ + getImportedModsNames(): string[]; + getImportedModDetails(): Record; + getModPath(mod: string): string; + protected importMods(): Promise; + /** + * Check for duplciate mods loaded, show error if duplicate mod found + * @param modPackageData dictionary of mod package.json data + */ + protected checkForDuplicateMods(modPackageData: Record): void; + /** + * Check for and return duplicate strings inside an array + * @param stringArray Array to check for duplicates + * @returns string array of duplicates, empty if none found + */ + protected getDuplicates(stringArray: string[]): string[]; + /** + * Get an array of mods with errors that prevent them from working with SPT + * @param mods mods to validate + * @returns Mod names as array + */ + protected getBrokenMods(mods: string[]): string[]; + /** + * Get packageJson data for mods + * @param mods mods to get packageJson for + * @returns dictionary + */ + protected getModsPackageData(mods: string[]): Record; + protected isModCombatibleWithAki(mod: IPackageJsonData): boolean; + protected executeMods(container: DependencyContainer): Promise; + sortModsLoadOrder(): string[]; + protected addMod(mod: string): Promise; + protected areModDependenciesFulfilled(pkg: IPackageJsonData, loadedMods: Record): boolean; + protected isModCompatible(mod: IPackageJsonData, loadedMods: Record): boolean; + /** + * Validate a mod passes a number of checks + * @param modName name of mod in /mods/ to validate + * @returns true if valid + */ + protected validMod(modName: string): boolean; + protected getLoadOrderRecursive(mod: string, result: Record, visited: Record): void; + protected getLoadOrder(mods: Record): Record; + getContainer(): DependencyContainer; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/common/MinMax.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/common/MinMax.d.ts new file mode 100644 index 0000000..bc118a8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/common/MinMax.d.ts @@ -0,0 +1,4 @@ +export interface MinMax { + max: number; + min: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/bot/IGenerateBotsRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/bot/IGenerateBotsRequestData.d.ts new file mode 100644 index 0000000..f1f7013 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/bot/IGenerateBotsRequestData.d.ts @@ -0,0 +1,9 @@ +export interface IGenerateBotsRequestData { + conditions: Condition[]; +} +export interface Condition { + /** e.g. assault/pmcBot/bossKilla */ + Role: string; + Limit: number; + Difficulty: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/bot/IRandomisedBotLevelResult.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/bot/IRandomisedBotLevelResult.d.ts new file mode 100644 index 0000000..75bd936 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/bot/IRandomisedBotLevelResult.d.ts @@ -0,0 +1,4 @@ +export interface IRandomisedBotLevelResult { + level: number; + exp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/IEmptyRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/IEmptyRequestData.d.ts new file mode 100644 index 0000000..284d16e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/IEmptyRequestData.d.ts @@ -0,0 +1,2 @@ +export interface IEmptyRequestData { +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/IGlobals.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/IGlobals.d.ts new file mode 100644 index 0000000..b5ed401 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/IGlobals.d.ts @@ -0,0 +1,1305 @@ +import { Item } from "./tables/IItem"; +export interface IGlobals { + time: number; + config: Config; + bot_presets: BotPreset[]; + BotWeaponScatterings: BotWeaponScattering[]; + ItemPresets: Record; +} +export interface Config { + content: Content; + AimPunchMagnitude: number; + WeaponSkillProgressRate: number; + SkillAtrophy: boolean; + exp: Exp; + t_base_looting: number; + t_base_lockpicking: number; + armor: Armor; + SessionsToShowHotKeys: number; + MaxBotsAliveOnMap: number; + SavagePlayCooldown: number; + SavagePlayCooldownNdaFree: number; + MarksmanAccuracy: number; + SavagePlayCooldownDevelop: number; + TODSkyDate: string; + Mastering: Mastering[]; + GlobalItemPriceModifier: number; + TradingUnlimitedItems: boolean; + MaxLoyaltyLevelForAll: boolean; + GlobalLootChanceModifier: number; + TimeBeforeDeploy: number; + TimeBeforeDeployLocal: number; + TradingSetting: number; + TradingSettings: ITradingSettings; + ItemsCommonSettings: IItemsCommonSettings; + LoadTimeSpeedProgress: number; + BaseLoadTime: number; + BaseUnloadTime: number; + BaseCheckTime: number; + Customization: Customization; + UncheckOnShot: boolean; + BotsEnabled: boolean; + BufferZone: IBufferZone; + ArmorMaterials: ArmorMaterials; + LegsOverdamage: number; + HandsOverdamage: number; + StomachOverdamage: number; + Health: Health; + rating: Rating; + tournament: Tournament; + RagFair: RagFair; + handbook: Handbook; + FractureCausedByFalling: Probability; + FractureCausedByBulletHit: Probability; + WAVE_COEF_LOW: number; + WAVE_COEF_MID: number; + WAVE_COEF_HIGH: number; + WAVE_COEF_HORDE: number; + Stamina: Stamina; + StaminaRestoration: StaminaRestoration; + StaminaDrain: StaminaDrain; + RequirementReferences: RequirementReferences; + RestrictionsInRaid: RestrictionsInRaid[]; + SkillMinEffectiveness: number; + SkillFatiguePerPoint: number; + SkillFreshEffectiveness: number; + SkillFreshPoints: number; + SkillPointsBeforeFatigue: number; + SkillFatigueReset: number; + DiscardLimitsEnabled: boolean; + EventType: string[]; + WalkSpeed: xyz; + SprintSpeed: xyz; + SkillEnduranceWeightThreshold: number; + TeamSearchingTimeout: number; + Insurance: Insurance; + SkillExpPerLevel: number; + GameSearchingTimeout: number; + WallContusionAbsorption: xyz; + SkillsSettings: SkillsSettings; + AzimuthPanelShowsPlayerOrientation: boolean; + Aiming: Aiming; + Malfunction: Malfunction; + Overheat: Overheat; + FenceSettings: FenceSettings; + TestValue: number; + Inertia: Inertia; + Ballistic: Ballistic; + RepairSettings: RepairSettings; +} +export interface IBufferZone { + CustomerAccessTime: number; + CustomerCriticalTimeStart: number; + CustomerKickNotifTime: number; +} +export interface IItemsCommonSettings { + ItemRemoveAfterInterruptionTime: number; +} +export interface ITradingSettings { + BuyoutRestrictions: IBuyoutRestrictions; +} +export interface IBuyoutRestrictions { + MinDurability: number; + MinFoodDrinkResource: number; + MinMedsResource: number; +} +export interface Content { + ip: string; + port: number; + root: string; +} +export interface Exp { + heal: Heal; + match_end: MatchEnd; + kill: Kill; + level: Level; + loot_attempts: LootAttempt[]; + expForLockedDoorOpen: number; + expForLockedDoorBreach: number; + triggerMult: number; +} +export interface Heal { + expForHeal: number; + expForHydration: number; + expForEnergy: number; +} +export interface MatchEnd { + README: string; + survived_exp_requirement: number; + survived_seconds_requirement: number; + survived_exp_reward: number; + mia_exp_reward: number; + runner_exp_reward: number; + leftMult: number; + miaMult: number; + survivedMult: number; + runnerMult: number; + killedMult: number; +} +export interface Kill { + combo: Combo[]; + victimLevelExp: number; + headShotMult: number; + expOnDamageAllHealth: number; + longShotDistance: number; + bloodLossToLitre: number; + victimBotLevelExp: number; +} +export interface Combo { + percent: number; +} +export interface Level { + exp_table: ExpTable[]; + trade_level: number; + savage_level: number; + clan_level: number; + mastering1: number; + mastering2: number; +} +export interface ExpTable { + exp: number; +} +export interface LootAttempt { + k_exp: number; +} +export interface Armor { + class: Class[]; +} +export interface Class { + resistance: number; +} +export interface Mastering { + Name: string; + Templates: string[]; + Level2: number; + Level3: number; +} +export interface Customization { + SavageHead: SavageHead; + SavageBody: SavageBody; + SavageFeet: SavageFeet; + CustomizationVoice: CustomizationVoice[]; + BodyParts: BodyParts; +} +export interface SavageHead { + wild_head_1: WildHead; + wild_head_2: WildHead; + wild_head_3: WildHead; + Wild_Dealmaker_head: WildHead; + Wild_Killa_head: WildHead; + bear_head: WildHead; + bear_head_1: WildHead; + usec_head_1: WildHead; + Head_BOSS_Glukhar: WildHead; + Wild_Head_nonMesh: WildHead; + Head_BOSS_Sanitar: WildHead; + wild_head_drozd: WildHead; + wild_head_misha: WildHead; + head_cultist_01: WildHead; + head_cultist_02: WildHead; + head_cultist_03: WildHead; + DefaultUsecHead: WildHead; + usec_head_3: WildHead; + usec_head_4: WildHead; + usec_head_5: WildHead; +} +export interface WildHead { + head: string; + isNotRandom: boolean; + NotRandom: boolean; +} +export interface SavageBody { + wild_body: WildBody; + wild_body_1: WildBody; + wild_body_2: WildBody; + wild_body_3: WildBody; + Wild_Dealmaker_body: WildBody; + wild_security_body_1: WildBody; + wild_security_body_2: WildBody; + wild_Killa_body: WildBody; + wild_pmcBot_body: WildBody; + wild_Shturman_body: WildBody; + wild_Gluhar_body: WildBody; + Tshirt_security_TshirtTatu_01: WildBody; + Tshirt_security_TshirtTatu_02: WildBody; + Top_security_Husky: WildBody; + Top_security_Gorka4: WildBody; + scav_kit_upper_meteor: WildBody; + wild_body_russia1: WildBody; + Top_BOSS_Sanitar: WildBody; + wild_body_motocross: WildBody; + top_cultist_01: WildBody; + top_cultist_02: WildBody; + wild_body_rainparka: WildBody; + wild_body_underarmour: WildBody; + top_boss_tagilla: WildBody; + DefaultUsecBody: WildBody; + usec_upper_acu: WildBody; + usec_upper_commando: WildBody; + usec_upper_aggressor: WildBody; + usec_upper_hoody: WildBody; + usec_upper_pcuironsight: WildBody; + usec_top_beltstaff: WildBody; + usec_upper_flexion: WildBody; + usec_upper_tier3: WildBody; + usec_upper_pcsmulticam: WildBody; + usec_upper_tier_2: WildBody; + usec_upper_infiltrator: WildBody; + user_upper_NightPatrol: WildBody; + wild_body_bomber: WildBody; + wild_top_yellowcoat: WildBody; +} +export interface WildBody { + body: string; + hands: string; + isNotRandom: boolean; +} +export interface SavageFeet { + wild_feet: WildFeet; + wild_feet_1: WildFeet; + wild_feet_2: WildFeet; + Wild_Dealmaker_feet: WildFeet; + wild_security_feet_1: WildFeet; + Wild_Killa_feet: WildFeet; + wild_pmcBot_feet: WildFeet; + Pants_BOSS_Glukhar: WildFeet; + Pants_BOSS_Shturman: WildFeet; + Pants_security_Gorka4: WildFeet; + Pants_security_Flora: WildFeet; + scav_kit_lower_sklon: WildFeet; + Pants_BOSS_Sanitar: WildFeet; + wild_feet_sweatpants: WildFeet; + wild_feet_wasatch: WildFeet; + wild_feet_slimPants: WildFeet; + pants_cultist_01: WildFeet; + pants_cultist_02: WildFeet; + wild_feet_scavelite_taclite: WildFeet; + pants_boss_tagilla: WildFeet; + wild_feet_bomber: WildFeet; + wild_pants_yellowcoat: WildFeet; +} +export interface WildFeet { + feet: string; + isNotRandom: boolean; + NotRandom: boolean; +} +export interface CustomizationVoice { + voice: string; + side: string[]; + isNotRandom: boolean; +} +export interface BodyParts { + Head: string; + Body: string; + Feet: string; + Hands: string; +} +export interface ArmorMaterials { + UHMWPE: ArmorType; + Aramid: ArmorType; + Combined: ArmorType; + Titan: ArmorType; + Aluminium: ArmorType; + ArmoredSteel: ArmorType; + Ceramic: ArmorType; + Glass: ArmorType; +} +export interface ArmorType { + Destructibility: number; + MinRepairDegradation: number; + MaxRepairDegradation: number; + ExplosionDestructibility: number; + MinRepairKitDegradation: number; + MaxRepairKitDegradation: number; +} +export interface Health { + Falling: Falling; + Effects: Effects; + HealPrice: HealPrice; + ProfileHealthSettings: ProfileHealthSettings; +} +export interface Falling { + DamagePerMeter: number; + SafeHeight: number; +} +export interface Effects { + Existence: Existence; + Dehydration: Dehydration; + BreakPart: BreakPart; + Contusion: Contusion; + Disorientation: Disorientation; + Exhaustion: Exhaustion; + LowEdgeHealth: LowEdgeHealth; + RadExposure: RadExposure; + Stun: Stun; + Intoxication: Intoxication; + Regeneration: Regeneration; + Wound: Wound; + Berserk: Berserk; + Flash: Flash; + MedEffect: MedEffect; + Pain: Pain; + PainKiller: PainKiller; + SandingScreen: SandingScreen; + MildMusclePain: IMusclePainEffect; + SevereMusclePain: IMusclePainEffect; + Stimulator: Stimulator; + Tremor: Tremor; + ChronicStaminaFatigue: ChronicStaminaFatigue; + Fracture: Fracture2; + HeavyBleeding: HeavyBleeding2; + LightBleeding: LightBleeding2; + BodyTemperature: BodyTemperature; +} +export interface Existence { + EnergyLoopTime: number; + HydrationLoopTime: number; + EnergyDamage: number; + HydrationDamage: number; + DestroyedStomachEnergyTimeFactor: number; + DestroyedStomachHydrationTimeFactor: number; +} +export interface Dehydration { + DefaultDelay: number; + DefaultResidueTime: number; + BleedingHealth: number; + BleedingLoopTime: number; + BleedingLifeTime: number; + DamageOnStrongDehydration: number; + StrongDehydrationLoopTime: number; +} +export interface BreakPart { + DefaultDelay: number; + DefaultResidueTime: number; + HealExperience: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovePrice: number; + RemovedAfterDeath: boolean; + BulletHitProbability: Probability; + FallingProbability: Probability; +} +export interface Contusion { + Dummy: number; +} +export interface Disorientation { + Dummy: number; +} +export interface Exhaustion { + DefaultDelay: number; + DefaultResidueTime: number; + Damage: number; + DamageLoopTime: number; +} +export interface LowEdgeHealth { + DefaultDelay: number; + DefaultResidueTime: number; + StartCommonHealth: number; +} +export interface RadExposure { + Damage: number; + DamageLoopTime: number; +} +export interface Stun { + Dummy: number; +} +export interface Intoxication { + DefaultDelay: number; + DefaultResidueTime: number; + DamageHealth: number; + HealthLoopTime: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovedAfterDeath: boolean; + HealExperience: number; + RemovePrice: number; +} +export interface Regeneration { + LoopTime: number; + MinimumHealthPercentage: number; + Energy: number; + Hydration: number; + BodyHealth: BodyHealth; + Influences: Influences; +} +export interface BodyHealth { + Head: BodyHealthValue; + Chest: BodyHealthValue; + Stomach: BodyHealthValue; + LeftArm: BodyHealthValue; + RightArm: BodyHealthValue; + LeftLeg: BodyHealthValue; + RightLeg: BodyHealthValue; +} +export interface BodyHealthValue { + Value: number; +} +export interface Influences { + LightBleeding: Influence; + HeavyBleeding: Influence; + Fracture: Influence; + RadExposure: Influence; + Intoxication: Influence; +} +export interface Influence { + HealthSlowDownPercentage: number; + EnergySlowDownPercentage: number; + HydrationSlowDownPercentage: number; +} +export interface Wound { + WorkingTime: number; + ThresholdMin: number; + ThresholdMax: number; +} +export interface Berserk { + DefaultDelay: number; + WorkingTime: number; + DefaultResidueTime: number; +} +export interface Flash { + Dummy: number; +} +export interface MedEffect { + LoopTime: number; + StartDelay: number; + DrinkStartDelay: number; + FoodStartDelay: number; + DrugsStartDelay: number; + MedKitStartDelay: number; + MedicalStartDelay: number; + StimulatorStartDelay: number; +} +export interface Pain { + TremorDelay: number; + HealExperience: number; +} +export interface PainKiller { + Dummy: number; +} +export interface SandingScreen { + Dummy: number; +} +export interface IMusclePainEffect { + GymEffectivity: number; + OfflineDurationMax: number; + OfflineDurationMin: number; + TraumaChance: number; +} +export interface Stimulator { + BuffLoopTime: number; + Buffs: Buffs; +} +export interface Buffs { + BuffsSJ1TGLabs: Buff[]; + BuffsSJ6TGLabs: Buff[]; + BuffsPropital: Buff[]; + BuffsZagustin: Buff[]; + BuffseTGchange: Buff[]; + BuffsAdrenaline: Buff[]; + BuffsGoldenStarBalm: Buff[]; + Buffs_drink_aquamari: Buff[]; + Buffs_drink_maxenergy: Buff[]; + Buffs_drink_milk: Buff[]; + Buffs_drink_tarcola: Buff[]; + Buffs_drink_hotrod: Buff[]; + Buffs_drink_juice_army: Buff[]; + Buffs_drink_water: Buff[]; + Buffs_food_borodinskiye: Buff[]; + Buffs_food_condensed_milk: Buff[]; + Buffs_food_emelya: Buff[]; + Buffs_food_mayonez: Buff[]; + Buffs_food_mre: Buff[]; + Buffs_food_sugar: Buff[]; + Buffs_drink_vodka: Buff[]; + Buffs_drink_jack: Buff[]; + Buffs_drink_moonshine: Buff[]; + Buffs_drink_purewater: Buff[]; + Buffs_3bTG: Buff[]; + Buffs_AHF1M: Buff[]; + Buffs_L1: Buff[]; + Buffs_MULE: Buff[]; + Buffs_Meldonin: Buff[]; + Buffs_Obdolbos: Buff[]; + Buffs_P22: Buff[]; + Buffs_KultistsToxin: Buff[]; + Buffs_BodyTemperature: Buff[]; + Buffs_Antidote: Buff[]; + Buffs_melee_bleed: Buff[]; + Buffs_melee_blunt: Buff[]; + Buffs_hultafors: Buff[]; + Buffs_drink_vodka_BAD: Buff[]; + Buffs_food_alyonka: Buff[]; + Buffs_food_slippers: Buff[]; + Buffs_knife: Buff[]; +} +export interface Buff { + BuffType: string; + Chance: number; + Delay: number; + Duration: number; + Value: number; + AbsoluteValue: boolean; + SkillName: string; +} +export interface Tremor { + DefaultDelay: number; + DefaultResidueTime: number; +} +export interface ChronicStaminaFatigue { + EnergyRate: number; + WorkingTime: number; + TicksEvery: number; + EnergyRatePerStack: number; +} +export interface Fracture2 { + DefaultDelay: number; + DefaultResidueTime: number; + HealExperience: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovePrice: number; + RemovedAfterDeath: boolean; + BulletHitProbability: Probability; + FallingProbability: Probability; +} +export interface HeavyBleeding2 { + DefaultDelay: number; + DefaultResidueTime: number; + DamageEnergy: number; + DamageHealth: number; + EnergyLoopTime: number; + HealthLoopTime: number; + DamageHealthDehydrated: number; + HealthLoopTimeDehydrated: number; + LifeTimeDehydrated: number; + EliteVitalityDuration: number; + HealExperience: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovePrice: number; + RemovedAfterDeath: boolean; + Probability: Probability; +} +export interface Probability { + FunctionType: string; + K: number; + B: number; + Threshold: number; +} +export interface LightBleeding2 { + DefaultDelay: number; + DefaultResidueTime: number; + DamageEnergy: number; + DamageHealth: number; + EnergyLoopTime: number; + HealthLoopTime: number; + DamageHealthDehydrated: number; + HealthLoopTimeDehydrated: number; + LifeTimeDehydrated: number; + EliteVitalityDuration: number; + HealExperience: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovePrice: number; + RemovedAfterDeath: boolean; + Probability: Probability; +} +export interface BodyTemperature { + DefaultBuildUpTime: number; + DefaultResidueTime: number; + LoopTime: number; +} +export interface HealPrice { + HealthPointPrice: number; + HydrationPointPrice: number; + EnergyPointPrice: number; + TrialLevels: number; + TrialRaids: number; +} +export interface ProfileHealthSettings { + BodyPartsSettings: BodyPartsSettings; + HealthFactorsSettings: HealthFactorsSettings; + DefaultStimulatorBuff: string; +} +export interface BodyPartsSettings { + Head: BodyPartsSetting; + Chest: BodyPartsSetting; + Stomach: BodyPartsSetting; + LeftArm: BodyPartsSetting; + RightArm: BodyPartsSetting; + LeftLeg: BodyPartsSetting; + RightLeg: BodyPartsSetting; +} +export interface BodyPartsSetting { + Minimum: number; + Maximum: number; + Default: number; + OverDamageReceivedMultiplier: number; +} +export interface HealthFactorsSettings { + Energy: HealthFactorSetting; + Hydration: HealthFactorSetting; + Temperature: HealthFactorSetting; + Poisoning: HealthFactorSetting; + Radiation: HealthFactorSetting; +} +export interface HealthFactorSetting { + Minimum: number; + Maximum: number; + Default: number; +} +export interface Rating { + levelRequired: number; + limit: number; + categories: Categories; +} +export interface Categories { + experience: boolean; + kd: boolean; + surviveRatio: boolean; + avgEarnings: boolean; + kills: boolean; + raidCount: boolean; + longestShot: boolean; + timeOnline: boolean; + inventoryFullCost: boolean; + ragFairStanding: boolean; +} +export interface Tournament { + categories: Categories2; + limit: number; + levelRequired: number; +} +export interface Categories2 { + dogtags: boolean; +} +export interface RagFair { + enabled: boolean; + priceStabilizerEnabled: boolean; + includePveTraderSales: boolean; + priceStabilizerStartIntervalInHours: number; + minUserLevel: number; + communityTax: number; + communityItemTax: number; + communityRequirementTax: number; + offerPriorityCost: number; + offerDurationTimeInHour: number; + offerDurationTimeInHourAfterRemove: number; + priorityTimeModifier: number; + maxRenewOfferTimeInHour: number; + renewPricePerHour: number; + maxActiveOfferCount: MaxActiveOfferCount[]; + balancerRemovePriceCoefficient: number; + balancerMinPriceCount: number; + balancerAveragePriceCoefficient: number; + delaySinceOfferAdd: number; + uniqueBuyerTimeoutInDays: number; + ratingSumForIncrease: number; + ratingIncreaseCount: number; + ratingSumForDecrease: number; + ratingDecreaseCount: number; + maxSumForIncreaseRatingPerOneSale: number; + maxSumForDecreaseRatingPerOneSale: number; + maxSumForRarity: MaxSumForRarity; + ChangePriceCoef: number; + balancerUserItemSaleCooldownEnabled: boolean; + balancerUserItemSaleCooldown: number; + youSellOfferMaxStorageTimeInHour: number; + yourOfferDidNotSellMaxStorageTimeInHour: number; + isOnlyFoundInRaidAllowed: boolean; + sellInOnePiece: number; +} +export interface MaxActiveOfferCount { + from: number; + to: number; + count: number; +} +export interface MaxSumForRarity { + Common: RarityMaxSum; + Rare: RarityMaxSum; + Superrare: RarityMaxSum; + Not_exist: RarityMaxSum; +} +export interface RarityMaxSum { + value: number; +} +export interface Handbook { + defaultCategory: string; +} +export interface Stamina { + Capacity: number; + SprintDrainRate: number; + BaseRestorationRate: number; + JumpConsumption: number; + GrenadeHighThrow: number; + GrenadeLowThrow: number; + AimDrainRate: number; + AimRangeFinderDrainRate: number; + OxygenCapacity: number; + OxygenRestoration: number; + WalkOverweightLimits: xyz; + BaseOverweightLimits: xyz; + SprintOverweightLimits: xyz; + WalkSpeedOverweightLimits: xyz; + CrouchConsumption: xyz; + WalkConsumption: xyz; + StandupConsumption: xyz; + TransitionSpeed: xyz; + SprintAccelerationLowerLimit: number; + SprintSpeedLowerLimit: number; + SprintSensitivityLowerLimit: number; + AimConsumptionByPose: xyz; + RestorationMultiplierByPose: xyz; + OverweightConsumptionByPose: xyz; + AimingSpeedMultiplier: number; + WalkVisualEffectMultiplier: number; + HandsCapacity: number; + HandsRestoration: number; + ProneConsumption: number; + BaseHoldBreathConsumption: number; + SoundRadius: xyz; + ExhaustedMeleeSpeed: number; + FatigueRestorationRate: number; + FatigueAmountToCreateEffect: number; + ExhaustedMeleeDamageMultiplier: number; + FallDamageMultiplier: number; + SafeHeightOverweight: number; + SitToStandConsumption: number; + StaminaExhaustionCausesJiggle: boolean; + StaminaExhaustionStartsBreathSound: boolean; + StaminaExhaustionRocksCamera: boolean; + HoldBreathStaminaMultiplier: xyz; + PoseLevelIncreaseSpeed: xyz; + PoseLevelDecreaseSpeed: xyz; + PoseLevelConsumptionPerNotch: xyz; +} +export interface StaminaRestoration { + LowerLeftPoint: number; + LowerRightPoint: number; + LeftPlatoPoint: number; + RightPlatoPoint: number; + RightLimit: number; + ZeroValue: number; +} +export interface StaminaDrain { + LowerLeftPoint: number; + LowerRightPoint: number; + LeftPlatoPoint: number; + RightPlatoPoint: number; + RightLimit: number; + ZeroValue: number; +} +export interface RequirementReferences { + Alpinist: Alpinist[]; +} +export interface Alpinist { + Requirement: string; + Id: string; + Count: number; + RequiredSlot: string; + RequirementTip: string; +} +export interface RestrictionsInRaid { + TemplateId: string; + Value: number; +} +export interface Insurance { + MaxStorageTimeInHour: number; +} +export interface SkillsSettings { + SkillProgressRate: number; + WeaponSkillProgressRate: number; + WeaponSkillRecoilBonusPerLevel: number; + HideoutManagement: HideoutManagement; + Crafting: Crafting; + Metabolism: Metabolism; + Immunity: Immunity; + Endurance: Endurance; + Strength: Strength; + Vitality: Vitality; + Health: Health2; + StressResistance: StressResistance; + Throwing: Throwing; + RecoilControl: RecoilControl; + Pistol: WeaponSkills; + Revolver: WeaponSkills; + SMG: any[]; + Assault: WeaponSkills; + Shotgun: WeaponSkills; + Sniper: WeaponSkills; + LMG: any[]; + HMG: any[]; + Launcher: any[]; + AttachedLauncher: any[]; + Melee: IMeleeSkill; + DMR: WeaponSkills; + BearAssaultoperations: any[]; + BearAuthority: any[]; + BearAksystems: any[]; + BearHeavycaliber: any[]; + BearRawpower: any[]; + UsecArsystems: any[]; + UsecDeepweaponmodding_Settings: any[]; + UsecLongrangeoptics_Settings: any[]; + UsecNegotiations: any[]; + UsecTactics: any[]; + BotReload: any[]; + CovertMovement: CovertMovement; + FieldMedicine: any[]; + Search: Search; + Sniping: any[]; + ProneMovement: any[]; + FirstAid: any[]; + LightVests: ArmorSkills; + HeavyVests: ArmorSkills; + WeaponModding: any[]; + AdvancedModding: any[]; + NightOps: any[]; + SilentOps: any[]; + Lockpicking: any[]; + WeaponTreatment: WeaponTreatment; + MagDrills: MagDrills; + Freetrading: any[]; + Auctions: any[]; + Cleanoperations: any[]; + Barter: any[]; + Shadowconnections: any[]; + Taskperformance: any[]; + Perception: Perception; + Intellect: Intellect; + Attention: Attention; + Charisma: Charisma; + Memory: Memory; + Surgery: Surgery; + AimDrills: AimDrills; + BotSound: any[]; + TroubleShooting: TroubleShooting; +} +export interface IMeleeSkill { + BuffSettings: IBuffSettings; +} +export interface ArmorSkills { + BuffMaxCount: number; + BuffSettings: IBuffSettings; + Counters: IArmorCounters; + MoveSpeedPenaltyReductionHVestsReducePerLevel: number; + RicochetChanceHVestsCurrentDurabilityThreshold: number; + RicochetChanceHVestsEliteLevel: number; + RicochetChanceHVestsMaxDurabilityThreshold: number; + MeleeDamageLVestsReducePerLevel: number; + MoveSpeedPenaltyReductionLVestsReducePerLevel: number; + WearAmountRepairLVestsReducePerLevel: number; + WearChanceRepairLVestsReduceEliteLevel: number; +} +export interface IArmorCounters { + armorDurability: ISkillCounter; +} +export interface HideoutManagement { + SkillPointsPerAreaUpgrade: number; + SkillPointsPerCraft: number; + ConsumptionReductionPerLevel: number; + SkillBoostPercent: number; + SkillPointsRate: SkillPointsRate; + EliteSlots: EliteSlots; +} +export interface SkillPointsRate { + Generator: Generator; + AirFilteringUnit: SkillPointRate; + WaterCollector: SkillPointRate; + SolarPower: SkillPointRate; +} +export interface SkillPointRate { + ResourceSpent: number; + PointsGained: number; +} +export interface EliteSlots { + Generator: EliteSlot; + AirFilteringUnit: EliteSlot; + WaterCollector: EliteSlot; + BitcoinFarm: EliteSlot; +} +export interface EliteSlot { + Slots: number; + Container: number; +} +export interface Crafting { + PointsPerCraftingCycle: number; + CraftingCycleHours: number; + PointsPerUniqueCraftCycle: number; + UniqueCraftsPerCycle: number; + CraftTimeReductionPerLevel: number; + ProductionTimeReductionPerLevel: number; + EliteExtraProductions: number; + CraftingPointsToInteligence: number; +} +export interface Metabolism { + HydrationRecoveryRate: number; + EnergyRecoveryRate: number; + IncreasePositiveEffectDurationRate: number; + DecreaseNegativeEffectDurationRate: number; + DecreasePoisonDurationRate: number; +} +export interface Immunity { + ImmunityMiscEffects: number; + ImmunityPoisonBuff: number; + ImmunityPainKiller: number; + HealthNegativeEffect: number; + StimulatorNegativeBuff: number; +} +export interface Endurance { + MovementAction: number; + SprintAction: number; + GainPerFatigueStack: number; + QTELevelMultipliers: Record>; +} +export interface Strength { + SprintActionMin: number; + SprintActionMax: number; + MovementActionMin: number; + MovementActionMax: number; + PushUpMin: number; + PushUpMax: number; + QTELevelMultipliers: IQTELevelMultiplier[]; + FistfightAction: number; + ThrowAction: number; +} +export interface IQTELevelMultiplier { + Level: number; + Multiplier: number; +} +export interface Vitality { + DamageTakenAction: number; + HealthNegativeEffect: number; +} +export interface Health2 { + SkillProgress: number; +} +export interface StressResistance { + HealthNegativeEffect: number; + LowHPDuration: number; +} +export interface Throwing { + ThrowAction: number; +} +export interface RecoilControl { + RecoilAction: number; + RecoilBonusPerLevel: number; +} +export interface WeaponSkills { + WeaponReloadAction: number; + WeaponShotAction: number; + WeaponFixAction: number; + WeaponChamberAction: number; +} +export interface CovertMovement { + MovementAction: number; +} +export interface Search { + SearchAction: number; + FindAction: number; +} +export interface WeaponTreatment { + BuffMaxCount: number; + BuffSettings: IBuffSettings; + Counters: IWeaponTreatmentCounters; + DurLossReducePerLevel: number; + SkillPointsPerRepair: number; + Filter: any[]; + WearAmountRepairGunsReducePerLevel: number; + WearChanceRepairGunsReduceEliteLevel: number; +} +export interface IWeaponTreatmentCounters { + firearmsDurability: ISkillCounter; +} +export interface IBuffSettings { + CommonBuffChanceLevelBonus: number; + CommonBuffMinChanceValue: number; + CurrentDurabilityLossToRemoveBuff?: number; + MaxDurabilityLossToRemoveBuff?: number; + RareBuffChanceCoff: number; + ReceivedDurabilityMaxPercent: number; +} +export interface MagDrills { + RaidLoadedAmmoAction: number; + RaidUnloadedAmmoAction: number; + MagazineCheckAction: number; +} +export interface Perception { + DependentSkillRatios: ISkillRatio[]; + OnlineAction: number; + UniqueLoot: number; +} +export interface ISkillRatio { + Ratio: number; + SkillId: string; +} +export interface Intellect { + Counters: IIntellectCounters; + ExamineAction: number; + SkillProgress: number; + RepairAction: number; + WearAmountReducePerLevel: number; + WearChanceReduceEliteLevel: number; + RepairPointsCostReduction: number; +} +export interface IIntellectCounters { + armorDurability: ISkillCounter; + firearmsDurability: ISkillCounter; + meleeWeaponDurability: ISkillCounter; +} +export interface ISkillCounter { + divisor: number; + points: number; +} +export interface Attention { + DependentSkillRatios: ISkillRatio[]; + ExamineWithInstruction: number; + FindActionFalse: number; + FindActionTrue: number; +} +export interface Charisma { + BonusSettings: IBonusSettings; + Counters: ICharismaSkillCounters; + SkillProgressInt: number; + SkillProgressAtn: number; + SkillProgressPer: number; +} +export interface ICharismaSkillCounters { + insuranceCost: ISkillCounter; + repairCost: ISkillCounter; + repeatableQuestCompleteCount: ISkillCounter; + restoredHealthCost: ISkillCounter; + scavCaseCost: ISkillCounter; +} +export interface IBonusSettings { + EliteBonusSettings: IEliteBonusSettings; + LevelBonusSettings: ILevelBonusSettings; +} +export interface IEliteBonusSettings { + FenceStandingLossDiscount: number; + RepeatableQuestExtraCount: number; + ScavCaseDiscount: number; +} +export interface ILevelBonusSettings { + HealthRestoreDiscount: number; + HealthRestoreTraderDiscount: number; + InsuranceDiscount: number; + InsuranceTraderDiscount: number; + PaidExitDiscount: number; + RepeatableQuestChangeDiscount: number; +} +export interface Memory { + AnySkillUp: number; + SkillProgress: number; +} +export interface Surgery { + SurgeryAction: number; + SkillProgress: number; +} +export interface AimDrills { + WeaponShotAction: number; +} +export interface TroubleShooting { + MalfRepairSpeedBonusPerLevel: number; + SkillPointsPerMalfFix: number; + EliteDurabilityChanceReduceMult: number; + EliteAmmoChanceReduceMult: number; + EliteMagChanceReduceMult: number; +} +export interface Aiming { + ProceduralIntensityByPose: xyz; + AimProceduralIntensity: number; + HeavyWeight: number; + LightWeight: number; + MaxTimeHeavy: number; + MinTimeHeavy: number; + MaxTimeLight: number; + MinTimeLight: number; + RecoilScaling: number; + RecoilDamping: number; + CameraSnapGlobalMult: number; + RecoilXIntensityByPose: xyz; + RecoilYIntensityByPose: xyz; + RecoilZIntensityByPose: xyz; + RecoilCrank: boolean; + RecoilHandDamping: number; + RecoilConvergenceMult: number; + RecoilVertBonus: number; + RecoilBackBonus: number; +} +export interface Malfunction { + AmmoMalfChanceMult: number; + MagazineMalfChanceMult: number; + MalfRepairHardSlideMult: number; + MalfRepairOneHandBrokenMult: number; + MalfRepairTwoHandsBrokenMult: number; + AllowMalfForBots: boolean; + ShowGlowAttemptsCount: number; + OutToIdleSpeedMultForPistol: number; + IdleToOutSpeedMultOnMalf: number; + TimeToQuickdrawPistol: number; + DurRangeToIgnoreMalfs: xyz; + DurFeedWt: number; + DurMisfireWt: number; + DurJamWt: number; + DurSoftSlideWt: number; + DurHardSlideMinWt: number; + DurHardSlideMaxWt: number; + AmmoMisfireWt: number; + AmmoFeedWt: number; + AmmoJamWt: number; + OverheatFeedWt: number; + OverheatJamWt: number; + OverheatSoftSlideWt: number; + OverheatHardSlideMinWt: number; + OverheatHardSlideMaxWt: number; +} +export interface Overheat { + MinOverheat: number; + MaxOverheat: number; + OverheatProblemsStart: number; + ModHeatFactor: number; + ModCoolFactor: number; + MinWearOnOverheat: number; + MaxWearOnOverheat: number; + MinWearOnMaxOverheat: number; + MaxWearOnMaxOverheat: number; + OverheatWearLimit: number; + MaxCOIIncreaseMult: number; + MinMalfChance: number; + MaxMalfChance: number; + DurReduceMinMult: number; + DurReduceMaxMult: number; + BarrelMoveRndDuration: number; + BarrelMoveMaxMult: number; + FireratePitchMult: number; + FirerateReduceMinMult: number; + FirerateReduceMaxMult: number; + FirerateOverheatBorder: number; + EnableSlideOnMaxOverheat: boolean; + StartSlideOverheat: number; + FixSlideOverheat: number; + AutoshotMinOverheat: number; + AutoshotChance: number; + AutoshotPossibilityDuration: number; + MaxOverheatCoolCoef: number; +} +export interface FenceSettings { + FenceId: string; + Levels: Record; + paidExitStandingNumerator: number; +} +export interface FenceLevel { + SavageCooldownModifier: number; + ScavCaseTimeModifier: number; + PaidExitCostModifier: number; + BotFollowChance: number; + ScavEquipmentSpawnChanceModifier: number; + PriceModifier: number; + HostileBosses: boolean; + HostileScavs: boolean; + ScavAttackSupport: boolean; + ExfiltrationPriceModifier: number; + AvailableExits: number; +} +export interface Inertia { + InertiaLimits: xyz; + InertiaLimitsStep: number; + ExitMovementStateSpeedThreshold: xyz; + WalkInertia: xyz; + FallThreshold: number; + SpeedLimitAfterFallMin: xyz; + SpeedLimitAfterFallMax: xyz; + SpeedLimitDurationMin: xyz; + SpeedLimitDurationMax: xyz; + SpeedInertiaAfterJump: xyz; + BaseJumpPenaltyDuration: number; + DurationPower: number; + BaseJumpPenalty: number; + PenaltyPower: number; + InertiaTiltCurveMin: xyz; + InertiaTiltCurveMax: xyz; + InertiaBackwardCoef: xyz; + TiltInertiaMaxSpeed: xyz; + TiltStartSideBackSpeed: xyz; + TiltMaxSideBackSpeed: xyz; + TiltAcceleration: xyz; + AverageRotationFrameSpan: number; + SprintSpeedInertiaCurveMin: xyz; + SprintSpeedInertiaCurveMax: xyz; + SprintBrakeInertia: xyz; + SprintTransitionMotionPreservation: xyz; + WeaponFlipSpeed: xyz; + PreSprintAccelerationLimits: xyz; + SprintAccelerationLimits: xyz; + SideTime: xyz; + DiagonalTime: xyz; + MaxTimeWithoutInput: xyz; + MinDirectionBlendTime: number; + MoveTimeRange: xyz; + ProneDirectionAccelerationRange: xyz; + ProneSpeedAccelerationRange: xyz; + MinMovementAccelerationRangeRight: xyz; + MaxMovementAccelerationRangeRight: xyz; +} +export interface xyz { + x: number; + y: number; + z: number; +} +export interface Ballistic { + GlobalDamageDegradationCoefficient: number; +} +export interface RepairSettings { + ItemEnhancementSettings: IItemEnhancementSettings; + MinimumLevelToApplyBuff: number; + RepairStrategies: IRepairStrategies; + armorClassDivisor: number; + durabilityPointCostArmor: number; + durabilityPointCostGuns: number; +} +export interface IItemEnhancementSettings { + DamageReduction: IPriceModifier; + MalfunctionProtections: IPriceModifier; + WeaponSpread: IPriceModifier; +} +export interface IPriceModifier { + PriceModifier: number; +} +export interface IRepairStrategies { + Armor: IRepairStrategy; + Firearms: IRepairStrategy; +} +export interface IRepairStrategy { + BuffTypes: string[]; + Filter: string[]; +} +export interface BotPreset { + UseThis: boolean; + Role: string; + BotDifficulty: string; + VisibleAngle: number; + VisibleDistance: number; + ScatteringPerMeter: number; + HearingSense: number; + SCATTERING_DIST_MODIF: number; + MAX_AIMING_UPGRADE_BY_TIME: number; + FIRST_CONTACT_ADD_SEC: number; + COEF_IF_MOVE: number; +} +export interface BotWeaponScattering { + Name: string; + PriorityScatter1meter: number; + PriorityScatter10meter: number; + PriorityScatter100meter: number; +} +export interface Preset { + _id: string; + _type: string; + _changeWeaponName: boolean; + _name: string; + _parent: string; + _items: Item[]; + /** Default presets have this property */ + _encyclopedia?: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocation.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocation.d.ts new file mode 100644 index 0000000..42fac06 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocation.d.ts @@ -0,0 +1,6 @@ +import { ILocationBase } from "./ILocationBase"; +import { ILooseLoot } from "./ILooseLoot"; +export interface ILocation { + base: ILocationBase; + looseLoot: ILooseLoot; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocationBase.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocationBase.d.ts new file mode 100644 index 0000000..1c3a2fa --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocationBase.d.ts @@ -0,0 +1,212 @@ +export interface ILocationBase { + AccessKeys: string[]; + AirdropParameters: AirdropParameter[]; + Area: number; + AveragePlayTime: number; + AveragePlayerLevel: number; + Banners: Banner[]; + BossLocationSpawn: BossLocationSpawn[]; + BotAssault: number; + BotEasy: number; + BotHard: number; + BotImpossible: number; + BotLocationModifier: BotLocationModifier; + BotMarksman: number; + BotMax: number; + BotMaxPlayer: number; + BotMaxTimePlayer: number; + BotNormal: number; + BotSpawnTimeOffMax: number; + BotSpawnTimeOffMin: number; + BotSpawnTimeOnMax: number; + BotSpawnTimeOnMin: number; + BotStart: number; + BotStop: number; + Description: string; + DisabledForScav: boolean; + DisabledScavExits: string; + Enabled: boolean; + EnableCoop: boolean; + GlobalLootChanceModifier: number; + IconX: number; + IconY: number; + Id: string; + Insurance: boolean; + IsSecret: boolean; + Locked: boolean; + Loot: any[]; + MaxBotPerZone: number; + MaxDistToFreePoint: number; + MaxPlayers: number; + MinDistToExitPoint: number; + MinDistToFreePoint: number; + MinMaxBots: MinMaxBot[]; + MinPlayers: number; + MaxCoopGroup: number; + Name: string; + NewSpawn: boolean; + OcculsionCullingEnabled: boolean; + OldSpawn: boolean; + OpenZones: string; + Preview: Preview; + RequiredPlayerLevel: number; + PmcMaxPlayersInGroup: number; + ScavMaxPlayersInGroup: number; + Rules: string; + SafeLocation: boolean; + Scene: Scene; + SpawnPointParams: SpawnPointParam[]; + UnixDateTime: number; + _Id: string; + doors: any[]; + EscapeTimeLimit: number; + EscapeTimeLimitCoop: number; + exit_access_time: number; + exit_count: number; + exit_time: number; + exits: Exit[]; + filter_ex: string[]; + limits: ILimit[]; + matching_min_seconds: number; + GenerateLocalLootCache: boolean; + maxItemCountInLocation: MaxItemCountInLocation[]; + sav_summon_seconds: number; + tmp_location_field_remove_me: number; + users_gather_seconds: number; + users_spawn_seconds_n: number; + users_spawn_seconds_n2: number; + users_summon_seconds: number; + waves: Wave[]; +} +export interface ILimit { + min: number; + max: number; + items: any[]; +} +export interface AirdropParameter { + AirdropPointDeactivateDistance: number; + MinPlayersCountToSpawnAirdrop: number; + PlaneAirdropChance: number; + PlaneAirdropCooldownMax: number; + PlaneAirdropCooldownMin: number; + PlaneAirdropEnd: number; + PlaneAirdropMax: number; + PlaneAirdropStartMax: number; + PlaneAirdropStartMin: number; + UnsuccessfulTryPenalty: number; +} +export interface Banner { + id: string; + pic: Pic; +} +export interface Pic { + path: string; + rcid: string; +} +export interface BossLocationSpawn { + BossChance: number; + BossDifficult: string; + BossEscortAmount: string; + BossEscortDifficult: string; + BossEscortType: string; + BossName: string; + BossPlayer: boolean; + BossZone: string; + RandomTimeSpawn: boolean; + Time: number; + TriggerId: string; + TriggerName: string; + Delay?: number; + Supports?: BossSupport[]; + sptId?: string; +} +export interface BossSupport { + BossEscortAmount: string; + BossEscortDifficult: string[]; + BossEscortType: string; +} +export interface BotLocationModifier { + AccuracySpeed: number; + DistToActivate: number; + DistToPersueAxemanCoef: number; + DistToSleep: number; + GainSight: number; + KhorovodChance: number; + MagnetPower: number; + MarksmanAccuratyCoef: number; + Scattering: number; + VisibleDistance: number; +} +export interface MinMaxBot { + WildSpawnType: WildSpawnType; + max: number; + min: number; +} +export interface Preview { + path: string; + rcid: string; +} +export interface Scene { + path: string; + rcid: string; +} +export interface SpawnPointParam { + BotZoneName: string; + Categories: string[]; + ColliderParams: ColliderParams; + DelayToCanSpawnSec: number; + Id: string; + Infiltration: string; + Position: xyz; + Rotation: number; + Sides: string[]; +} +export interface ColliderParams { + _parent: string; + _props: Props; +} +export interface Props { + Center: xyz; + Radius: number; +} +export interface xyz { + x: number; + y: number; + z: number; +} +export interface Exit { + Chance: number; + Count: number; + EntryPoints: string; + ExfiltrationTime: number; + ExfiltrationType: string; + RequiredSlot?: string; + Id: string; + MaxTime: number; + MinTime: number; + Name: string; + PassageRequirement: string; + PlayersCount: number; + RequirementTip: string; +} +export interface MaxItemCountInLocation { + TemplateId: string; + Value: number; +} +export interface Wave { + BotPreset: string; + BotSide: string; + SpawnPoints: string; + WildSpawnType: WildSpawnType; + isPlayers: boolean; + number: number; + slots_max: number; + slots_min: number; + time_max: number; + time_min: number; + sptId?: string; +} +export declare enum WildSpawnType { + ASSAULT = "assault", + MARKSMAN = "marksman" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocationsSourceDestinationBase.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocationsSourceDestinationBase.d.ts new file mode 100644 index 0000000..7f8d915 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILocationsSourceDestinationBase.d.ts @@ -0,0 +1,9 @@ +import { ILocations } from "../../spt/server/ILocations"; +export interface ILocationsGenerateAllResponse { + locations: ILocations; + paths: Path[]; +} +export interface Path { + Source: string; + Destination: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILooseLoot.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILooseLoot.d.ts new file mode 100644 index 0000000..14b795e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/ILooseLoot.d.ts @@ -0,0 +1,45 @@ +export interface ILooseLoot { + spawnpointCount: SpawnpointCount; + spawnpointsForced: SpawnpointsForced[]; + spawnpoints: Spawnpoint[]; +} +export interface SpawnpointCount { + mean: number; + std: number; +} +export interface SpawnpointsForced { + locationId: string; + probability: number; + template: SpawnpointTemplate; +} +export interface SpawnpointTemplate { + Id: string; + IsStatic: boolean; + useGravity: boolean; + randomRotation: boolean; + Position: Xyz; + Rotation: Xyz; + IsGroupPosition: boolean; + GroupPositions: any[]; + Root: any; + Items: Item[]; +} +export interface Item { + _id: string; + _tpl?: string; +} +export interface Spawnpoint { + locationId: string; + probability: number; + template: SpawnpointTemplate; + itemDistribution: ItemDistribution[]; +} +export interface Xyz { + x: number; + y: number; + z: number; +} +export interface ItemDistribution { + tpl: string; + relativeProbability: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/IMetricsTableData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/IMetricsTableData.d.ts new file mode 100644 index 0000000..873ef82 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/IMetricsTableData.d.ts @@ -0,0 +1,7 @@ +export interface IMetricsTableData { + Keys: number[]; + NetProcessingBins: number[]; + RenderBins: number[]; + GameUpdateBins: number[]; + MemoryMeasureInterval: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/IPmcData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/IPmcData.d.ts new file mode 100644 index 0000000..5703e4b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/IPmcData.d.ts @@ -0,0 +1,3 @@ +import { IBotBase } from "./tables/IBotBase"; +export interface IPmcData extends IBotBase { +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/request/IBaseInteractionRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/request/IBaseInteractionRequestData.d.ts new file mode 100644 index 0000000..7303275 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/request/IBaseInteractionRequestData.d.ts @@ -0,0 +1,9 @@ +export interface IBaseInteractionRequestData { + Action: string; + fromOwner?: OwnerInfo; + toOwner?: OwnerInfo; +} +export interface OwnerInfo { + id: string; + type: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IBotBase.d.ts new file mode 100644 index 0000000..dd7c478 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IBotBase.d.ts @@ -0,0 +1,378 @@ +import { HideoutAreas } from "../../../enums/HideoutAreas"; +import { MemberCategory } from "../../../enums/MemberCategory"; +import { QuestStatus } from "../../../enums/QuestStatus"; +import { IRagfairOffer } from "../../ragfair/IRagfairOffer"; +import { Item, Upd } from "./IItem"; +import { IPmcDataRepeatableQuest } from "./IRepeatableQuests"; +export interface IBotBase { + _id: string; + aid: string; + savage?: string; + Info: Info; + Customization: Customization; + Health: Health; + Inventory: Inventory; + Skills: Skills; + Stats: Stats; + Encyclopedia: Record; + ConditionCounters: ConditionCounters; + BackendCounters: Record; + InsuredItems: InsuredItem[]; + Hideout: Hideout; + Quests: Quest[]; + TradersInfo: Record; + UnlockedInfo: IUnlockedInfo; + RagfairInfo: RagfairInfo; + RepeatableQuests: IPmcDataRepeatableQuest[]; + Bonuses: Bonus[]; + Notes: Notes; + CarExtractCounts: CarExtractCounts; + SurvivorClass: SurvivorClass; + WishList: string[]; + /** SPT specific property used during bot generation in raid */ + sptIsPmc?: boolean; +} +export interface IUnlockedInfo { + unlockedProductionRecipe: string[]; +} +export interface Info { + EntryPoint: string; + Nickname: string; + LowerNickname: string; + Side: string; + Voice: string; + Level: number; + Experience: number; + RegistrationDate: number; + GameVersion: string; + AccountType: number; + MemberCategory: MemberCategory; + lockedMoveCommands: boolean; + SavageLockTime: number; + LastTimePlayedAsSavage: number; + Settings: Settings; + NicknameChangeDate: number; + NeedWipeOptions: any[]; + lastCompletedWipe: LastCompleted; + Bans: IBan[]; + BannedState: boolean; + BannedUntil: number; + IsStreamerModeAvailable: boolean; + lastCompletedEvent?: LastCompleted; +} +export interface Settings { + Role: string; + BotDifficulty: string; + Experience: number; + StandingForKill: number; + AggressorBonus: number; +} +export interface IBan { + type: BanType; + dateTime: number; +} +export declare enum BanType { + CHAT = 0, + RAGFAIR = 1, + VOIP = 2, + TRADING = 3, + ONLINE = 4, + FRIENDS = 5, + CHANGE_NICKNAME = 6 +} +export interface Customization { + Head: string; + Body: string; + Feet: string; + Hands: string; +} +export interface Health { + Hydration: CurrentMax; + Energy: CurrentMax; + Temperature: CurrentMax; + BodyParts: BodyPartsHealth; + UpdateTime: number; +} +export interface BodyPartsHealth { + Head: BodyPartHealth; + Chest: BodyPartHealth; + Stomach: BodyPartHealth; + LeftArm: BodyPartHealth; + RightArm: BodyPartHealth; + LeftLeg: BodyPartHealth; + RightLeg: BodyPartHealth; +} +export interface BodyPartHealth { + Health: CurrentMax; + Effects?: Record; +} +export interface BodyPartEffectProperties { + Time: number; +} +export interface CurrentMax { + Current: number; + Maximum: number; +} +export interface Inventory { + items: Item[]; + equipment: string; + stash: string; + sortingTable: string; + questRaidItems: string; + questStashItems: string; + fastPanel: FastPanel; +} +export interface FastPanel { +} +export interface Skills { + Common: Common[]; + Mastering: Mastering[]; + Points: number; +} +export interface Common { + Id: string; + Progress: number; + PointsEarnedDuringSession?: number; + LastAccess?: number; + max?: number; + min?: number; +} +export interface Mastering { + Id: string; + Progress: number; + max?: number; + min?: number; +} +export interface Stats { + CarriedQuestItems: string[]; + Victims: Victim[]; + TotalSessionExperience: number; + LastSessionDate: number; + SessionCounters: SessionCounters; + OverallCounters: OverallCounters; + SessionExperienceMult?: number; + ExperienceBonusMult?: number; + Aggressor?: Aggressor; + DroppedItems?: IDroppedItem[]; + FoundInRaidItems?: FoundInRaidItem[]; + DamageHistory?: DamageHistory; + DeathCause?: DeathCause; + LastPlayerState?: LastPlayerState; + TotalInGameTime: number; + SurvivorClass?: string; +} +export interface IDroppedItem { + QuestId: string; + ItemId: string; + ZoneId: string; +} +export interface FoundInRaidItem { + QuestId: string; + ItemId: string; +} +export interface Victim { + AccountId: string; + ProfileId: string; + Name: string; + Side: string; + BodyPart: string; + Time: string; + Distance: number; + Level: number; + Weapon: string; + Role: string; +} +export interface SessionCounters { + Items: CounterKeyValue[]; +} +export interface OverallCounters { + Items: CounterKeyValue[]; +} +export interface CounterKeyValue { + Key: string[]; + Value: number; +} +export interface ConditionCounters { + Counters: Counter[]; +} +export interface Counter { + id: string; + value: number; + qid: string; +} +export interface Aggressor { + AccountId: string; + ProfileId: string; + MainProfileNickname: string; + Name: string; + Side: string; + BodyPart: string; + HeadSegment: string; + WeaponName: string; + Category: string; +} +export interface DamageHistory { + LethalDamagePart: string; + LethalDamage: LethalDamage; + BodyParts: BodyPartsDamageHistory; +} +export interface LethalDamage { + Amount: number; + Type: string; + SourceId: string; + OverDamageFrom: string; + Blunt: boolean; + ImpactsCount: number; +} +export interface BodyPartsDamageHistory { + Head: DamageStats[]; + Chest: DamageStats[]; + Stomach: DamageStats[]; + LeftArm: DamageStats[]; + RightArm: DamageStats[]; + LeftLeg: DamageStats[]; + RightLeg: DamageStats[]; + Common: DamageStats[]; +} +export interface DamageStats { + Amount: number; + Type: string; + SourceId: string; + OverDamageFrom: string; + Blunt: boolean; + ImpactsCount: number; +} +export interface DeathCause { + DamageType: string; + Side: string; + Role: string; + WeaponId: string; +} +export interface LastPlayerState { + Info: LastPlayerStateInfo; + Customization: Record; + Equipment: any; +} +export interface LastPlayerStateInfo { + Nickname: string; + Side: string; + Level: number; + MemberCategory: string; +} +export interface BackendCounter { + id: string; + qid?: string; + value: number; +} +export interface InsuredItem { + tid: string; + itemId: string; +} +export interface Hideout { + Production: Record; + Areas: HideoutArea[]; + Improvements: Record; + sptUpdateLastRunTimestamp: number; +} +export interface IHideoutImprovement { + completed: boolean; + improveCompleteTimestamp: number; +} +export interface Productive { + Products: Product[]; + /** Seconds passed of production */ + Progress?: number; + /** Is craft in some state of being worked on by client (crafting/ready to pick up) */ + inProgress?: boolean; + StartTimestamp?: number; + SkipTime?: number; + /** Seconds needed to fully craft */ + ProductionTime?: number; + sptIsScavCase?: boolean; +} +export interface Production extends Productive { + RecipeId: string; + SkipTime: number; + ProductionTime: number; +} +export interface ScavCase extends Productive { + RecipeId: string; +} +export interface Product { + _id: string; + _tpl: string; + upd?: Upd; +} +export interface HideoutArea { + type: HideoutAreas; + level: number; + active: boolean; + passiveBonusesEnabled: boolean; + completeTime: number; + constructing: boolean; + slots: HideoutSlot[]; + lastRecipe: string; +} +export interface HideoutSlot { + /** SPT specific value to keep track of what index this slot is (0,1,2,3 etc) */ + locationIndex: number; + item?: HideoutItem[]; +} +export interface HideoutItem { + _id: string; + _tpl: string; + upd?: Upd; +} +export interface LastCompleted { + $oid: string; +} +export interface Notes { + Notes: Note[]; +} +export interface CarExtractCounts { +} +export declare enum SurvivorClass { + UNKNOWN = 0, + NEUTRALIZER = 1, + MARAUDER = 2, + PARAMEDIC = 3, + SURVIVOR = 4 +} +export interface Quest { + qid: string; + startTime: number; + status: QuestStatus; + statusTimers?: Record; + /** SPT specific property */ + completedConditions?: string[]; + availableAfter?: number; +} +export interface TraderInfo { + loyaltyLevel: number; + salesSum: number; + disabled: boolean; + standing: number; + nextResupply: number; + unlocked: boolean; +} +export interface RagfairInfo { + rating: number; + isRatingGrowing: boolean; + offers: IRagfairOffer[]; +} +export interface Bonus { + id?: string; + type: string; + templateId?: string; + passive?: boolean; + production?: boolean; + visible?: boolean; + value?: number; + icon?: string; + filter?: string[]; + skillType?: string; +} +export interface Note { + Time: number; + Text: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IBotCore.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IBotCore.d.ts new file mode 100644 index 0000000..16a782d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IBotCore.d.ts @@ -0,0 +1,133 @@ +export interface IBotCore { + SAVAGE_KILL_DIST: number; + SOUND_DOOR_BREACH_METERS: number; + SOUND_DOOR_OPEN_METERS: number; + STEP_NOISE_DELTA: number; + JUMP_NOISE_DELTA: number; + GUNSHOT_SPREAD: number; + GUNSHOT_SPREAD_SILENCE: number; + BASE_WALK_SPEREAD2: number; + MOVE_SPEED_COEF_MAX: number; + SPEED_SERV_SOUND_COEF_A: number; + SPEED_SERV_SOUND_COEF_B: number; + G: number; + STAY_COEF: number; + SIT_COEF: number; + LAY_COEF: number; + MAX_ITERATIONS: number; + START_DIST_TO_COV: number; + MAX_DIST_TO_COV: number; + STAY_HEIGHT: number; + CLOSE_POINTS: number; + COUNT_TURNS: number; + SIMPLE_POINT_LIFE_TIME_SEC: number; + DANGER_POINT_LIFE_TIME_SEC: number; + DANGER_POWER: number; + COVER_DIST_CLOSE: number; + GOOD_DIST_TO_POINT: number; + COVER_TOOFAR_FROM_BOSS: number; + COVER_TOOFAR_FROM_BOSS_SQRT: number; + MAX_Y_DIFF_TO_PROTECT: number; + FLARE_POWER: number; + MOVE_COEF: number; + PRONE_POSE: number; + LOWER_POSE: number; + MAX_POSE: number; + FLARE_TIME: number; + MAX_REQUESTS__PER_GROUP: number; + UPDATE_GOAL_TIMER_SEC: number; + DIST_NOT_TO_GROUP: number; + DIST_NOT_TO_GROUP_SQR: number; + LAST_SEEN_POS_LIFETIME: number; + DELTA_GRENADE_START_TIME: number; + DELTA_GRENADE_END_TIME: number; + DELTA_GRENADE_RUN_DIST: number; + DELTA_GRENADE_RUN_DIST_SQRT: number; + PATROL_MIN_LIGHT_DIST: number; + HOLD_MIN_LIGHT_DIST: number; + STANDART_BOT_PAUSE_DOOR: number; + ARMOR_CLASS_COEF: number; + SHOTGUN_POWER: number; + RIFLE_POWER: number; + PISTOL_POWER: number; + SMG_POWER: number; + SNIPE_POWER: number; + GESTUS_PERIOD_SEC: number; + GESTUS_AIMING_DELAY: number; + GESTUS_REQUEST_LIFETIME: number; + GESTUS_FIRST_STAGE_MAX_TIME: number; + GESTUS_SECOND_STAGE_MAX_TIME: number; + GESTUS_MAX_ANSWERS: number; + GESTUS_FUCK_TO_SHOOT: number; + GESTUS_DIST_ANSWERS: number; + GESTUS_DIST_ANSWERS_SQRT: number; + GESTUS_ANYWAY_CHANCE: number; + TALK_DELAY: number; + CAN_SHOOT_TO_HEAD: boolean; + CAN_TILT: boolean; + TILT_CHANCE: number; + MIN_BLOCK_DIST: number; + MIN_BLOCK_TIME: number; + COVER_SECONDS_AFTER_LOSE_VISION: number; + MIN_ARG_COEF: number; + MAX_ARG_COEF: number; + DEAD_AGR_DIST: number; + MAX_DANGER_CARE_DIST_SQRT: number; + MAX_DANGER_CARE_DIST: number; + MIN_MAX_PERSON_SEARCH: number; + PERCENT_PERSON_SEARCH: number; + LOOK_ANYSIDE_BY_WALL_SEC_OF_ENEMY: number; + CLOSE_TO_WALL_ROTATE_BY_WALL_SQRT: number; + SHOOT_TO_CHANGE_RND_PART_MIN: number; + SHOOT_TO_CHANGE_RND_PART_MAX: number; + SHOOT_TO_CHANGE_RND_PART_DELTA: number; + FORMUL_COEF_DELTA_DIST: number; + FORMUL_COEF_DELTA_SHOOT: number; + FORMUL_COEF_DELTA_FRIEND_COVER: number; + SUSPETION_POINT_DIST_CHECK: number; + MAX_BASE_REQUESTS_PER_PLAYER: number; + MAX_HOLD_REQUESTS_PER_PLAYER: number; + MAX_GO_TO_REQUESTS_PER_PLAYER: number; + MAX_COME_WITH_ME_REQUESTS_PER_PLAYER: number; + CORE_POINT_MAX_VALUE: number; + CORE_POINTS_MAX: number; + CORE_POINTS_MIN: number; + BORN_POISTS_FREE_ONLY_FAREST_BOT: boolean; + BORN_POINSTS_FREE_ONLY_FAREST_PLAYER: boolean; + SCAV_GROUPS_TOGETHER: boolean; + LAY_DOWN_ANG_SHOOT: number; + HOLD_REQUEST_TIME_SEC: number; + TRIGGERS_DOWN_TO_RUN_WHEN_MOVE: number; + MIN_DIST_TO_RUN_WHILE_ATTACK_MOVING: number; + MIN_DIST_TO_RUN_WHILE_ATTACK_MOVING_OTHER_ENEMIS: number; + MIN_DIST_TO_STOP_RUN: number; + JUMP_SPREAD_DIST: number; + LOOK_TIMES_TO_KILL: number; + COME_INSIDE_TIMES: number; + TOTAL_TIME_KILL: number; + TOTAL_TIME_KILL_AFTER_WARN: number; + MOVING_AIM_COEF: number; + VERTICAL_DIST_TO_IGNORE_SOUND: number; + DEFENCE_LEVEL_SHIFT: number; + MIN_DIST_CLOSE_DEF: number; + USE_ID_PRIOR_WHO_GO: boolean; + SMOKE_GRENADE_RADIUS_COEF: number; + GRENADE_PRECISION: number; + MAX_WARNS_BEFORE_KILL: number; + CARE_ENEMY_ONLY_TIME: number; + MIDDLE_POINT_COEF: number; + MAIN_TACTIC_ONLY_ATTACK: boolean; + LAST_DAMAGE_ACTIVE: number; + SHALL_DIE_IF_NOT_INITED: boolean; + CHECK_BOT_INIT_TIME_SEC: number; + WEAPON_ROOT_Y_OFFSET: number; + DELTA_SUPRESS_DISTANCE_SQRT: number; + DELTA_SUPRESS_DISTANCE: number; + WAVE_COEF_LOW: number; + WAVE_COEF_MID: number; + WAVE_COEF_HIGH: number; + WAVE_COEF_HORDE: number; + WAVE_ONLY_AS_ONLINE: boolean; + LOCAL_BOTS_COUNT: number; + AXE_MAN_KILLS_END: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IBotType.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IBotType.d.ts new file mode 100644 index 0000000..e02d990 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IBotType.d.ts @@ -0,0 +1,159 @@ +import { MinMax } from "../../../common/MinMax"; +import { Skills } from "./IBotBase"; +export interface IBotType { + appearance: Appearance; + chances: Chances; + difficulty: Difficulties; + experience: Experience; + firstName: string[]; + generation: Generation; + health: Health; + inventory: Inventory; + lastName: string[]; + skills: Skills; +} +export interface Appearance { + body: Record; + feet: Record; + hands: string[]; + head: string[]; + voice: string[]; +} +export interface Chances { + equipment: EquipmentChances; + mods: ModsChances; +} +export interface EquipmentChances { + ArmBand: number; + ArmorVest: number; + Backpack: number; + Earpiece: number; + Eyewear: number; + FaceCover: number; + FirstPrimaryWeapon: number; + Headwear: number; + Holster: number; + Pockets: number; + Scabbard: number; + SecondPrimaryWeapon: number; + SecuredContainer: number; + TacticalVest: number; +} +export interface ModsChances { + mod_charge: number; + mod_equipment: number; + mod_equipment_000: number; + mod_equipment_001: number; + mod_equipment_002: number; + mod_flashlight: number; + mod_foregrip: number; + mod_launcher: number; + mod_magazine: number; + mod_mount: number; + mod_mount_000: number; + mod_mount_001: number; + mod_muzzle: number; + mod_nvg: number; + mod_pistol_grip: number; + mod_reciever: number; + mod_scope: number; + mod_scope_000: number; + mod_scope_001: number; + mod_scope_002: number; + mod_scope_003: number; + mod_sight_front: number; + mod_sight_rear: number; + mod_stock: number; + mod_stock_000: number; + mod_stock_akms: number; + mod_tactical: number; + mod_tactical_000: number; + mod_tactical_001: number; + mod_tactical_002: number; + mod_tactical_003: number; +} +export interface Difficulties { + easy: Difficulty; + normal: Difficulty; + hard: Difficulty; + impossible: Difficulty; +} +export interface Difficulty { + Aiming: Record; + Boss: Record; + Change: Record; + Core: Record; + Cover: Record; + Grenade: Record; + Hearing: Record; + Lay: Record; + Look: Record; + Mind: Record; + Move: Record; + Patrol: Record; + Scattering: Record; + Shoot: Record; +} +export interface Experience { + aggressorBonus: number; + level: MinMax; + reward: MinMax; + standingForKill: number; +} +export interface Generation { + items: ItemMinMax; +} +export interface ItemMinMax { + grenades: MinMax; + healing: MinMax; + drugs: MinMax; + stims: MinMax; + looseLoot: MinMax; + magazines: MinMax; + specialItems: MinMax; +} +export interface Health { + BodyParts: BodyPart[]; + Energy: MinMax; + Hydration: MinMax; + Temperature: MinMax; +} +export interface BodyPart { + Chest: MinMax; + Head: MinMax; + LeftArm: MinMax; + LeftLeg: MinMax; + RightArm: MinMax; + RightLeg: MinMax; + Stomach: MinMax; +} +export interface Inventory { + equipment: Equipment; + Ammo: Record>; + items: Items; + mods: Mods; +} +export interface Equipment { + ArmBand: Record; + ArmorVest: Record; + Backpack: Record; + Earpiece: Record; + Eyewear: Record; + FaceCover: Record; + FirstPrimaryWeapon: Record; + Headwear: Record; + Holster: Record; + Pockets: Record; + Scabbard: Record; + SecondPrimaryWeapon: Record; + SecuredContainer: Record; + TacticalVest: Record; +} +export interface Items { + Backpack: string[]; + Pockets: string[]; + SecuredContainer: string[]; + SpecialLoot: string[]; + TacticalVest: string[]; +} +export type Mods = Record>; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ICustomizationItem.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ICustomizationItem.d.ts new file mode 100644 index 0000000..8bfeece --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ICustomizationItem.d.ts @@ -0,0 +1,33 @@ +export interface ICustomizationItem { + _id: string; + _name: string; + _parent: string; + _type: string; + _props: Props; + _proto: string; +} +export interface Props { + Name: string; + ShortName: string; + Description: string; + Side: string[]; + BodyPart: string; + AvailableAsDefault?: boolean; + Body: string; + Hands: string; + Feet: string; + Prefab: Prefab; + WatchPrefab: Prefab; + IntegratedArmorVest: boolean; + WatchPosition: Xyz; + WatchRotation: Xyz; +} +export interface Prefab { + path: string; + rcid: string; +} +export interface Xyz { + x: number; + y: number; + z: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IHandbookBase.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IHandbookBase.d.ts new file mode 100644 index 0000000..7d7db07 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IHandbookBase.d.ts @@ -0,0 +1,16 @@ +export interface IHandbookBase { + Categories: Category[]; + Items: HandbookItem[]; +} +export interface Category { + Id: string; + ParentId?: string; + Icon: string; + Color: string; + Order: string; +} +export interface HandbookItem { + Id: string; + ParentId: string; + Price: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IItem.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IItem.d.ts new file mode 100644 index 0000000..ce00ae9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IItem.d.ts @@ -0,0 +1,120 @@ +export interface Item { + _id: string; + _tpl: string; + parentId?: string; + slotId?: string; + location?: Location | number; + upd?: Upd; +} +export interface Upd { + Buff?: Buff; + OriginalStackObjectsCount?: number; + Togglable?: Togglable; + Map?: Map; + Tag?: Tag; + sptPresetId?: string; + FaceShield?: FaceShield; + StackObjectsCount?: number; + UnlimitedCount?: boolean; + Repairable?: Repairable; + RecodableComponent?: RecodableComponent; + FireMode?: FireMode; + SpawnedInSession?: boolean; + Light?: Light; + Key?: Key; + Resource?: Resource; + Sight?: Sight; + MedKit?: MedKit; + FoodDrink?: FoodDrink; + Dogtag?: Dogtag; + BuyRestrictionMax?: number; + BuyRestrictionCurrent?: number; + Foldable?: Foldable; + SideEffect?: SideEffect; + RepairKit?: RepairKit; +} +export interface Buff { + rarity: string; + buffType: string; + value: number; + thresholdDurability?: number; +} +export interface Togglable { + On: boolean; +} +export interface Map { + Markers: MapMarker[]; +} +export interface MapMarker { + X: number; + Y: number; +} +export interface Tag { + Color: number; + Name: string; +} +export interface FaceShield { + Hits: number; +} +export interface Repairable { + Durability: number; + MaxDurability: number; +} +export interface RecodableComponent { + IsEncoded: boolean; +} +export interface MedKit { + HpResource: number; +} +export interface Sight { + ScopesCurrentCalibPointIndexes: number[]; + ScopesSelectedModes: number[]; + SelectedScope: number; +} +export interface Foldable { + Folded: boolean; +} +export interface FireMode { + FireMode: string; +} +export interface FoodDrink { + HpPercent: number; +} +export interface Key { + NumberOfUsages: number; +} +export interface Resource { + Value: number; + UnitsConsumed: number; +} +export interface Light { + IsActive: boolean; + SelectedMode: number; +} +export interface Dogtag { + AccountId: string; + ProfileId: string; + Nickname: string; + Side: string; + Level: number; + Time: string; + Status: string; + KillerAccountId: string; + KillerProfileId: string; + KillerName: string; + WeaponName: string; +} +export interface Location { + x: number; + y: number; + r: string | number; + isSearched?: boolean; + /** SPT property? */ + rotation?: string | boolean; +} +export interface SideEffect { + Value: number; +} +export interface RepairKit { + Resource: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ILocationsBase.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ILocationsBase.d.ts new file mode 100644 index 0000000..2c96af3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ILocationsBase.d.ts @@ -0,0 +1,10 @@ +export interface ILocationsBase { + locations: Locations; + paths: Path[]; +} +export interface Locations { +} +export interface Path { + Source: string; + Destination: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ILootBase.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ILootBase.d.ts new file mode 100644 index 0000000..e4baac5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ILootBase.d.ts @@ -0,0 +1,64 @@ +import { Item } from "./IItem"; +export interface ILootBase { + staticAmmo: Record; + staticContainers: Record; + staticLoot: Record; +} +export interface IStaticAmmoDetails { + tpl: string; + relativeProbability: number; +} +export interface IStaticContainerDetails { + staticWeapons: IStaticWeaponProps[]; + staticContainers: IStaticContainerProps[]; + staticForced: IStaticForcedProps[]; +} +export interface IStaticWeaponProps { + Id: string; + IsStatic: boolean; + useGravity: boolean; + randomRotation: boolean; + Position: Xyz; + Rotation: Xyz; + IsGroupPosition: boolean; + GroupPositions: any[]; + Root: string; + Items: Item[]; +} +export interface IStaticContainerProps { + Id: string; + IsStatic: boolean; + useGravity: boolean; + randomRotation: boolean; + Position: Xyz; + Rotation: Xyz; + IsGroupPosition: boolean; + GroupPositions: any[]; + Root: any; + Items: StaticItem[]; +} +export interface Xyz { + x: number; + y: number; + z: number; +} +export interface StaticItem { + _id: any; + _tpl: string; +} +export interface IStaticForcedProps { + containerId: string; + itemTpl: string; +} +export interface IStaticLootDetails { + itemcountDistribution: ItemCountDistribution[]; + itemDistribution: ItemDistribution[]; +} +export interface ItemCountDistribution { + count: number; + relativeProbability: number; +} +export interface ItemDistribution { + tpl: string; + relativeProbability: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IMatch.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IMatch.d.ts new file mode 100644 index 0000000..c30cb48 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IMatch.d.ts @@ -0,0 +1,10 @@ +export interface IMatch { + metrics: Metrics; +} +export interface Metrics { + Keys: number[]; + NetProcessingBins: number[]; + RenderBins: number[]; + GameUpdateBins: number[]; + MemoryMeasureInterval: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IProfileTemplate.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IProfileTemplate.d.ts new file mode 100644 index 0000000..66ebbe8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IProfileTemplate.d.ts @@ -0,0 +1,27 @@ +import { Dialogue, WeaponBuild } from "../../profile/IAkiProfile"; +import { IPmcData } from "../IPmcData"; +export interface IProfileTemplates { + Standard: IProfileSides; + "Left Behind": IProfileSides; + "Prepare To Escape": IProfileSides; + "Edge Of Darkness": IProfileSides; +} +export interface IProfileSides { + usec: TemplateSide; + bear: TemplateSide; +} +export interface TemplateSide { + character: IPmcData; + suits: string[]; + dialogues: Record; + weaponbuilds: WeaponBuild[]; + trader: ProfileTraderTemplate; +} +export interface ProfileTraderTemplate { + initialLoyaltyLevel: number; + setQuestsAvailableForStart?: boolean; + setQuestsAvailableForFinish?: boolean; + initialStanding: number; + initialSalesSum: number; + jaegerUnlocked: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IQuest.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IQuest.d.ts new file mode 100644 index 0000000..5c939e1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IQuest.d.ts @@ -0,0 +1,118 @@ +import { QuestRewardType } from "../../../enums/QuestRewardType"; +import { QuestStatus } from "../../../enums/QuestStatus"; +import { Item } from "./IItem"; +export interface IQuest { + QuestName?: string; + _id: string; + canShowNotificationsInGame: boolean; + conditions: Conditions; + description: string; + failMessageText: string; + name: string; + note: string; + traderId: string; + location: string; + image: string; + type: string; + isKey: boolean; + questStatus: any; + restartable: boolean; + instantComplete: boolean; + secretQuest: boolean; + startedMessageText: string; + successMessageText: string; + templateId: string; + rewards: Rewards; + status: string | number; + KeyQuest: boolean; + changeQuestMessageText: string; + side: string; +} +export interface Conditions { + Started: AvailableForConditions[]; + AvailableForFinish: AvailableForConditions[]; + AvailableForStart: AvailableForConditions[]; + Success: AvailableForConditions[]; + Fail: AvailableForConditions[]; +} +export interface AvailableForConditions { + _parent: string; + _props: AvailableForProps; + dynamicLocale?: boolean; +} +export interface AvailableForProps { + id: string; + index: number; + parentId: string; + isEncoded: boolean; + dynamicLocale: boolean; + value?: number; + compareMethod?: string; + visibilityConditions?: VisibilityCondition[]; + target?: string | string[]; + status?: QuestStatus[]; + availableAfter?: number; + dispersion?: number; + onlyFoundInRaid?: boolean; + oneSessionOnly?: boolean; + doNotResetIfCounterCompleted?: boolean; + dogtagLevel?: number; + maxDurability?: number; + minDurability?: number; + counter?: AvailableForCounter; + plantTime?: number; + zoneId?: string; + type?: boolean; + countInRaid?: boolean; +} +export interface AvailableForCounter { + id: string; + conditions: CounterCondition[]; +} +export interface CounterCondition { + _parent: string; + _props: CounterProps; +} +export interface CounterProps { + id: string; + target: string[] | string; + compareMethod?: string; + value?: string; + weapon?: string[]; + equipmentInclusive?: string[][]; + weaponModsInclusive?: string[][]; + status?: string[]; + bodyPart?: string[]; + daytime?: DaytimeCounter; +} +export interface DaytimeCounter { + from: number; + to: number; +} +export interface VisibilityCondition { + id: string; + value: number; + dynamicLocale: boolean; + oneSessionOnly: boolean; +} +export interface Rewards { + AvailableForStart: Reward[]; + AvailableForFinish: Reward[]; + Started: Reward[]; + Success: Reward[]; + Fail: Reward[]; + FailRestartable: Reward[]; + Expired: Reward[]; +} +export interface Reward extends Item { + value?: string | number; + id: string; + type: QuestRewardType; + index: number; + target?: string; + items?: Item[]; + loyaltyLevel?: number; + traderId?: string; + unknown?: boolean; + findInRaid?: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IRepeatableQuests.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IRepeatableQuests.d.ts new file mode 100644 index 0000000..3a33f2e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/IRepeatableQuests.d.ts @@ -0,0 +1,220 @@ +import { Item } from "./IItem"; +export interface IReward { + index: number; + type: string; + value: number; + target?: string; + items?: Item[]; +} +export interface IRepeatableQuestDatabase { + templates: ITemplates; + rewards: IRewardOptions; + data: IOptions; + samples: ISampleQuests[]; +} +export interface ITemplates { + Elimination: IRepeatableQuest; + Completion: IRepeatableQuest; + Exploration: IRepeatableQuest; +} +export interface IPmcDataRepeatableQuest { + id?: string; + name: string; + activeQuests: IRepeatableQuest[]; + inactiveQuests: IRepeatableQuest[]; + endTime: number; + changeRequirement: TChangeRequirementRecord; +} +export type TChangeRequirementRecord = Record; +export interface IChangeRequirement { + changeCost: IChangeCost[]; + changeStandingCost: number; +} +export interface IChangeCost { + templateId: string; + count: number; +} +export interface IRepeatableQuest { + _id: any; + traderId: string; + location: any; + image: string; + type: string; + isKey: boolean; + restartable: boolean; + instantComplete: boolean; + secretQuest: boolean; + canShowNotificationsInGame: boolean; + rewards: IRewards; + conditions: IConditions; + side: string; + name: string; + note: string; + description: string; + successMessageText: string; + failMessageText: string; + startedMessageText: string; + changeQuestMessageText: string; + templateId: string; + changeCost: IChangeCost[]; + changeStandingCost: number; +} +export interface IRewards { + Started: IReward[]; + Success: IReward[]; + Fail: IReward[]; +} +export interface IConditions { + AvailableForStart: any[]; + AvailableForFinish: IAvailableFor[]; + Fail: any[]; +} +export interface IAvailableFor { + _props: IAvailableForProps; + _parent: string; + dynamicLocale: boolean; +} +export interface IAvailableForProps { + id: string; + parentId: string; + dynamicLocale: boolean; + index: number; + visibilityConditions: IVisibilityCondition[]; + value: number; +} +export interface IVisibilityCondition { + id: string; + oneSessionOnly: boolean; + value: number; + index: number; + dynamicLocale: boolean; +} +export interface IAvailableForPropsCounter extends IAvailableForProps { + type: string; + oneSessionOnly: boolean; + doNotResetIfCounterCompleted: boolean; + counter: ICounter; +} +export interface ICounter { + id: string; + conditions: ICondition[]; +} +export interface ICondition { + _props: IConditionProps; + _parent: string; +} +export interface IConditionProps { + id: string; + dynamicLocale: boolean; +} +export interface IElimination extends IRepeatableQuest { + conditions: IEliminationConditions; +} +export interface IEliminationConditions extends IConditions { + AvailableForFinish: IEliminationAvailableFor[]; +} +export interface IEliminationAvailableFor extends IAvailableFor { + _props: IEliminationAvailableForProps; +} +export interface IEliminationAvailableForProps extends IAvailableForPropsCounter { + counter: IEliminationCounter; +} +export interface IEliminationCounter extends ICounter { + conditions: IEliminationCondition[]; +} +export interface IEliminationCondition extends ICondition { + _props: ILocationConditionProps | IKillConditionProps; +} +export interface IExploration extends IRepeatableQuest { + conditions: IExplorationConditions; +} +export interface IExplorationConditions extends IConditions { + AvailableForFinish: IExplorationAvailableFor[]; +} +export interface IExplorationAvailableFor extends IAvailableFor { + _props: IExplorationAvailableForProps; +} +export interface IExplorationAvailableForProps extends IAvailableForPropsCounter { + counter: IExplorationCounter; +} +export interface IExplorationCounter extends ICounter { + conditions: IExplorationCondition[]; +} +export interface IExplorationCondition extends ICondition { + _props: ILocationConditionProps | IExitStatusConditionProps | IExitNameConditionProps; +} +export interface ICompletion extends IRepeatableQuest { + conditions: ICompletionConditions; +} +export interface ICompletionConditions extends IConditions { + AvailableForFinish: ICompletionAvailableFor[]; +} +export interface ICompletionAvailableFor extends IAvailableFor { + _props: ICompletionAvailableForProps; +} +export interface ICompletionAvailableForProps extends IAvailableForProps { + target: string[]; + minDurability: number; + maxDurability: number; + dogtagLevel: number; + onlyFoundInRaid: boolean; +} +export interface ILocationConditionProps extends IConditionProps { + target: string[]; +} +export interface IKillConditionProps extends IConditionProps { + target: string; + value: number; + savageRole?: string[]; + bodyPart?: string[]; + distance?: IDistanceCheck; +} +export interface IDistanceCheck { + compareMethod: string; + value: number; +} +export interface IExitStatusConditionProps extends IConditionProps { + status: string[]; +} +export interface IExitNameConditionProps extends IConditionProps { + exitName: string; +} +export interface IRewardOptions { + itemsBlacklist: string[]; +} +export interface IOptions { + Completion: ICompletionFilter; +} +export interface ICompletionFilter { + itemsBlacklist: ItemsBlacklist[]; + itemsWhitelist: ItemsWhitelist[]; +} +export interface ItemsBlacklist { + minPlayerLevel: number; + itemIds: string[]; +} +export interface ItemsWhitelist { + minPlayerLevel: number; + itemIds: string[]; +} +export interface ISampleQuests { + _id: string; + traderId: string; + location: string; + image: string; + type: string; + isKey: boolean; + restartable: boolean; + instantComplete: boolean; + secretQuest: boolean; + canShowNotificationsInGame: boolean; + rewards: IRewards; + conditions: IConditions; + name: string; + note: string; + description: string; + successMessageText: string; + failMessageText: string; + startedMessageText: string; + templateId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ITemplateItem.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ITemplateItem.d.ts new file mode 100644 index 0000000..cbad0a6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ITemplateItem.d.ts @@ -0,0 +1,467 @@ +export interface ITemplateItem { + _id: string; + _name: string; + _parent: string; + _type: string; + _props: Props; + _proto: string; +} +export interface Props { + Name?: string; + ShortName?: string; + Description?: string; + Weight?: number; + BackgroundColor?: string; + Width?: number; + Height?: number; + StackMaxSize?: number; + Rarity?: string; + SpawnChance?: number; + CreditsPrice?: number; + ItemSound?: string; + Prefab?: Prefab; + UsePrefab?: Prefab; + StackObjectsCount?: number; + NotShownInSlot?: boolean; + ExaminedByDefault?: boolean; + ExamineTime?: number; + IsUndiscardable?: boolean; + IsUnsaleable?: boolean; + IsUnbuyable?: boolean; + IsUngivable?: boolean; + IsUnremovable?: boolean; + IsLockedafterEquip?: boolean; + IsSpecialSlotOnly?: boolean; + QuestItem?: boolean; + QuestStashMaxCount?: number; + LootExperience?: number; + ExamineExperience?: number; + HideEntrails?: boolean; + InsuranceDisabled?: boolean; + RepairCost?: number; + RepairSpeed?: number; + ExtraSizeLeft?: number; + ExtraSizeRight?: number; + ExtraSizeUp?: number; + ExtraSizeDown?: number; + ExtraSizeForceAdd?: boolean; + MergesWithChildren?: boolean; + CanSellOnRagfair?: boolean; + CanRequireOnRagfair?: boolean; + ConflictingItems?: string[]; + Unlootable?: boolean; + UnlootableFromSlot?: string; + UnlootableFromSide?: string[]; + AnimationVariantsNumber?: number; + DiscardingBlock?: boolean; + DropSoundType?: string; + RagFairCommissionModifier?: number; + IsAlwaysAvailableForInsurance?: boolean; + DiscardLimit?: number; + MaxResource?: number; + Resource?: number; + DogTagQualities?: boolean; + Grids?: Grid[]; + Slots?: Slot[]; + CanPutIntoDuringTheRaid?: boolean; + CantRemoveFromSlotsDuringRaid?: string[]; + KeyIds?: string[]; + TagColor?: number; + TagName?: string; + Durability?: number; + Accuracy?: number; + Recoil?: number; + Loudness?: number; + EffectiveDistance?: number; + Ergonomics?: number; + Velocity?: number; + RaidModdable?: boolean; + ToolModdable?: boolean; + BlocksFolding?: boolean; + BlocksCollapsible?: boolean; + IsAnimated?: boolean; + HasShoulderContact?: boolean; + SightingRange?: number; + DoubleActionAccuracyPenaltyMult?: number; + ModesCount?: any; + DurabilityBurnModificator?: number; + HeatFactor?: number; + CoolFactor?: number; + muzzleModType?: string; + CustomAimPlane?: string; + sightModType?: string; + aimingSensitivity?: number; + SightModesCount?: number; + OpticCalibrationDistances?: number[]; + ScopesCount?: number; + AimSensitivity?: number | number[][]; + Zooms?: number[][]; + CalibrationDistances?: number[][]; + Intensity?: number; + Mask?: string; + MaskSize?: number; + NoiseIntensity?: number; + NoiseScale?: number; + Color?: Color; + DiffuseIntensity?: number; + HasHinge?: boolean; + RampPalette?: string; + DepthFade?: number; + RoughnessCoef?: number; + SpecularCoef?: number; + MainTexColorCoef?: number; + MinimumTemperatureValue?: number; + RampShift?: number; + HeatMin?: number; + ColdMax?: number; + IsNoisy?: boolean; + IsFpsStuck?: boolean; + IsGlitch?: boolean; + IsMotionBlurred?: boolean; + IsPixelated?: boolean; + PixelationBlockCount?: number; + ShiftsAimCamera?: number; + magAnimationIndex?: number; + Cartridges?: Slot[]; + CanFast?: boolean; + CanHit?: boolean; + CanAdmin?: boolean; + LoadUnloadModifier?: number; + CheckTimeModifier?: number; + CheckOverride?: number; + ReloadMagType?: string; + VisibleAmmoRangesString?: string; + MalfunctionChance?: number; + IsShoulderContact?: boolean; + Foldable?: boolean; + Retractable?: boolean; + SizeReduceRight?: number; + CenterOfImpact?: number; + ShotgunDispersion?: number; + IsSilencer?: boolean; + DeviationCurve?: number; + DeviationMax?: number; + SearchSound?: string; + BlocksArmorVest?: boolean; + speedPenaltyPercent?: number; + GridLayoutName?: string; + SpawnFilter?: any[]; + containType?: any[]; + sizeWidth?: number; + sizeHeight?: number; + isSecured?: boolean; + spawnTypes?: string; + lootFilter?: any[]; + spawnRarity?: string; + minCountSpawn?: number; + maxCountSpawn?: number; + openedByKeyID?: any[]; + RigLayoutName?: string; + MaxDurability?: number; + armorZone?: string[]; + armorClass?: string | number; + mousePenalty?: number; + weaponErgonomicPenalty?: number; + BluntThroughput?: number; + ArmorMaterial?: string; + ArmorType?: string; + weapClass?: string; + weapUseType?: string; + ammoCaliber?: string; + OperatingResource?: number; + RepairComplexity?: number; + durabSpawnMin?: number; + durabSpawnMax?: number; + isFastReload?: boolean; + RecoilForceUp?: number; + RecoilForceBack?: number; + Convergence?: number; + RecoilAngle?: number; + weapFireType?: string[]; + RecolDispersion?: number; + SingleFireRate?: number; + CanQueueSecondShot?: boolean; + bFirerate?: number; + bEffDist?: number; + bHearDist?: number; + isChamberLoad?: boolean; + chamberAmmoCount?: number; + isBoltCatch?: boolean; + defMagType?: string; + defAmmo?: string; + AdjustCollimatorsToTrajectory?: boolean; + shotgunDispersion?: number; + Chambers?: Slot[]; + CameraRecoil?: number; + CameraSnap?: number; + ReloadMode?: string; + AimPlane?: number; + TacticalReloadStiffnes?: Xyz; + TacticalReloadFixation?: number; + RecoilCenter?: Xyz; + RotationCenter?: Xyz; + RotationCenterNoStock?: Xyz; + FoldedSlot?: string; + CompactHandling?: boolean; + MinRepairDegradation?: number; + MaxRepairDegradation?: number; + IronSightRange?: number; + IsFlareGun?: boolean; + IsGrenadeLauncher?: boolean; + IsOneoff?: boolean; + MustBoltBeOpennedForExternalReload?: boolean; + MustBoltBeOpennedForInternalReload?: boolean; + NoFiremodeOnBoltcatch?: boolean; + BoltAction?: boolean; + HipAccuracyRestorationDelay?: number; + HipAccuracyRestorationSpeed?: number; + HipInnaccuracyGain?: number; + ManualBoltCatch?: boolean; + BurstShotsCount?: number; + BaseMalfunctionChance?: number; + AllowJam?: boolean; + AllowFeed?: boolean; + AllowMisfire?: boolean; + AllowSlide?: boolean; + DurabilityBurnRatio?: number; + HeatFactorGun?: number; + CoolFactorGun?: number; + CoolFactorGunMods?: number; + HeatFactorByShot?: number; + AllowOverheat?: boolean; + DoubleActionAccuracyPenalty?: number; + RecoilPosZMult?: number; + MinRepairKitDegradation?: number; + MaxRepairKitDegradation?: number; + BlocksEarpiece?: boolean; + BlocksEyewear?: boolean; + BlocksHeadwear?: boolean; + BlocksFaceCover?: boolean; + Indestructibility?: number; + headSegments?: string[]; + FaceShieldComponent?: boolean; + FaceShieldMask?: string; + MaterialType?: string; + RicochetParams?: Xyz; + DeafStrength?: string; + BlindnessProtection?: number; + Distortion?: number; + CompressorTreshold?: number; + CompressorAttack?: number; + CompressorRelease?: number; + CompressorGain?: number; + CutoffFreq?: number; + Resonance?: number; + CompressorVolume?: number; + AmbientVolume?: number; + DryVolume?: number; + foodUseTime?: number; + foodEffectType?: string; + StimulatorBuffs?: string; + effects_health?: IHealthEffect[] | Record>; + effects_damage?: any; + MaximumNumberOfUsage?: number; + knifeHitDelay?: number; + knifeHitSlashRate?: number; + knifeHitStabRate?: number; + knifeHitRadius?: number; + knifeHitSlashDam?: number; + knifeHitStabDam?: number; + knifeDurab?: number; + PrimaryDistance?: number; + SecondryDistance?: number; + SlashPenetration?: number; + StabPenetration?: number; + PrimaryConsumption?: number; + SecondryConsumption?: number; + DeflectionConsumption?: number; + AppliedTrunkRotation?: Xyz; + AppliedHeadRotation?: Xyz; + DisplayOnModel?: boolean; + AdditionalAnimationLayer?: number; + StaminaBurnRate?: number; + ColliderScaleMultiplier?: Xyz; + ConfigPathStr?: string; + MaxMarkersCount?: number; + scaleMin?: number; + scaleMax?: number; + medUseTime?: number; + medEffectType?: string; + MaxHpResource?: number; + hpResourceRate?: number; + apResource?: number; + krResource?: number; + MaxOpticZoom?: number; + MaxRepairResource?: number; + TargetItemFilter?: string[]; + RepairQuality?: number; + RepairType?: string; + StackMinRandom?: number; + StackMaxRandom?: number; + ammoType?: string; + InitialSpeed?: number; + BallisticCoeficient?: number; + BulletMassGram?: number; + BulletDiameterMilimeters?: number; + Damage?: number; + ammoAccr?: number; + ammoRec?: number; + ammoDist?: number; + buckshotBullets?: number; + PenetrationPower?: number; + PenetrationPowerDiviation?: number; + ammoHear?: number; + ammoSfx?: string; + MisfireChance?: number; + MinFragmentsCount?: number; + MaxFragmentsCount?: number; + ammoShiftChance?: number; + casingName?: string; + casingEjectPower?: number; + casingMass?: number; + casingSounds?: string; + ProjectileCount?: number; + PenetrationChance?: number; + RicochetChance?: number; + FragmentationChance?: number; + Deterioration?: number; + SpeedRetardation?: number; + Tracer?: boolean; + TracerColor?: string; + TracerDistance?: number; + ArmorDamage?: number; + Caliber?: string; + StaminaBurnPerDamage?: number; + HeavyBleedingDelta?: number; + LightBleedingDelta?: number; + ShowBullet?: boolean; + HasGrenaderComponent?: boolean; + FuzeArmTimeSec?: number; + ExplosionStrength?: number; + MinExplosionDistance?: number; + MaxExplosionDistance?: number; + FragmentsCount?: number; + FragmentType?: string; + ShowHitEffectOnExplode?: boolean; + ExplosionType?: string; + AmmoLifeTimeSec?: number; + Contusion?: Xyz; + ArmorDistanceDistanceDamage?: Xyz; + Blindness?: Xyz; + IsLightAndSoundShot?: boolean; + LightAndSoundShotAngle?: number; + LightAndSoundShotSelfContusionTime?: number; + LightAndSoundShotSelfContusionStrength?: number; + MalfMisfireChance?: number; + MalfFeedChance?: number; + StackSlots?: StackSlot[]; + type?: string; + eqMin?: number; + eqMax?: number; + rate?: number; + ThrowType?: string; + ExplDelay?: number; + Strength?: number; + ContusionDistance?: number; + throwDamMax?: number; + explDelay?: number; + EmitTime?: number; + CanBeHiddenDuringThrow?: boolean; + MinTimeToContactExplode?: number; + ExplosionEffectType?: string; + LinkedWeapon?: string; + UseAmmoWithoutShell?: boolean; +} +export interface IHealthEffect { + type: string; + value: number; +} +export interface Prefab { + path: string; + rcid: string; +} +export interface Grid { + _name: string; + _id: string; + _parent: string; + _props: GridProps; + _proto: string; +} +export interface GridProps { + filters: GridFilter[]; + cellsH: number; + cellsV: number; + minCount: number; + maxCount: number; + maxWeight: number; + isSortingTable: boolean; +} +export interface GridFilter { + Filter: string[]; + ExcludedFilter: string[]; +} +export interface Slot { + _name: string; + _id: string; + _parent: string; + _props: SlotProps; + _max_count?: number; + _required: boolean; + _mergeSlotWithChildren: boolean; + _proto: string; +} +export interface SlotProps { + filters: SlotFilter[]; +} +export interface SlotFilter { + Shift?: number; + Filter: string[]; + AnimationIndex?: number; +} +export interface Xyz { + x: number; + y: number; + z: number; +} +export interface StackSlot { + _name?: string; + _id: string; + _parent: string; + _max_count: number; + _props: StackSlotProps; + _proto: string; + upd: any; +} +export interface StackSlotProps { + filters: SlotFilter[]; +} +export interface EffectsHealth { + Energy: EffectsHealthProps; + Hydration: EffectsHealthProps; +} +export interface EffectsHealthProps { + value: number; +} +export interface EffectsDamage { + Pain: EffectDamageProps; + LightBleeding: EffectDamageProps; + HeavyBleeding: EffectDamageProps; + Contusion: EffectDamageProps; + RadExposure: EffectDamageProps; + Fracture: EffectDamageProps; + DestroyedPart: EffectDamageProps; +} +export interface EffectDamageProps { + delay: number; + duration: number; + fadeOut: number; + cost?: number; + healthPenaltyMin?: number; + healthPenaltyMax?: number; +} +export interface Color { + r: number; + g: number; + b: number; + a: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ITrader.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ITrader.d.ts new file mode 100644 index 0000000..1fcfbaa --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/common/tables/ITrader.d.ts @@ -0,0 +1,99 @@ +import { Item } from "./IItem"; +export interface ITrader { + assort: ITraderAssort; + base: ITraderBase; + dialogue?: Record; + questassort: Record>; + suits?: ISuit[]; +} +export interface ITraderBase { + refreshTraderRagfairOffers: boolean; + _id: string; + availableInRaid: boolean; + avatar: string; + balance_dol: number; + balance_eur: number; + balance_rub: number; + buyer_up: boolean; + currency: string; + customization_seller: boolean; + discount: number; + discount_end: number; + gridHeight: number; + insurance: Insurance; + items_buy: IItemBuyData; + items_buy_prohibited: IItemBuyData; + location: string; + loyaltyLevels: LoyaltyLevel[]; + medic: boolean; + name: string; + nextResupply: number; + nickname: string; + repair: Repair; + sell_category: string[]; + surname: string; + unlockedByDefault: boolean; +} +export interface IItemBuyData { + category: string[]; + id_list: string[]; +} +export interface Insurance { + availability: boolean; + excluded_category: string[]; + max_return_hour: number; + max_storage_time: number; + min_payment: number; + min_return_hour: number; +} +export interface LoyaltyLevel { + buy_price_coef: number; + exchange_price_coef: number; + heal_price_coef: number; + insurance_price_coef: number; + minLevel: number; + minSalesSum: number; + minStanding: number; + repair_price_coef: number; +} +export interface Repair { + availability: boolean; + currency: string; + currency_coefficient: number; + excluded_category: string[]; + /** Doesn't exist in client object */ + excluded_id_list: any[]; + quality: number; +} +export interface ITraderAssort { + nextResupply: number; + items: Item[]; + barter_scheme: Record; + loyal_level_items: Record; +} +export interface IBarterScheme { + count: number; + _tpl: string; + onlyFunctional?: boolean; + sptQuestLocked?: boolean; +} +export interface ISuit { + _id: string; + tid: string; + suiteId: string; + isActive: boolean; + requirements: Requirements; +} +export interface Requirements { + loyaltyLevel: number; + profileLevel: number; + standing: number; + skillRequirements: string[]; + questRequirements: string[]; + itemRequirements: ItemRequirement[]; +} +export interface ItemRequirement { + count: number; + _tpl: string; + onlyFunctional: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/customization/IBuyClothingRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/customization/IBuyClothingRequestData.d.ts new file mode 100644 index 0000000..d19b70d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/customization/IBuyClothingRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IBuyClothingRequestData { + Action: "CustomizationBuy"; + offer: string; + items: ClothingItem[]; +} +export interface ClothingItem { + del: boolean; + id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/customization/IGetSuitsResponse.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/customization/IGetSuitsResponse.d.ts new file mode 100644 index 0000000..cbb909d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/customization/IGetSuitsResponse.d.ts @@ -0,0 +1,4 @@ +export interface IGetSuitsResponse { + _id: string; + suites: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/customization/IWearClothingRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/customization/IWearClothingRequestData.d.ts new file mode 100644 index 0000000..122d9cf --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/customization/IWearClothingRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IWearClothingRequestData { + Action: "CustomizationWear"; + suites: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IChatServer.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IChatServer.d.ts new file mode 100644 index 0000000..48cacc4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IChatServer.d.ts @@ -0,0 +1,16 @@ +export interface IChatServer { + _id: string; + RegistrationId: number; + VersionId: string; + Ip: string; + Port: number; + DateTime: number; + Chats: IChat[]; + Regions: string[]; + /** Possibly removed */ + IsDeveloper?: boolean; +} +export interface IChat { + _id: string; + Members: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IFriendRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IFriendRequestData.d.ts new file mode 100644 index 0000000..9c326ac --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IFriendRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IFriendRequestData { + to: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetAllAttachmentsRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetAllAttachmentsRequestData.d.ts new file mode 100644 index 0000000..53d8289 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetAllAttachmentsRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetAllAttachmentsRequestData { + dialogId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetAllAttachmentsResponse.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetAllAttachmentsResponse.d.ts new file mode 100644 index 0000000..076d414 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetAllAttachmentsResponse.d.ts @@ -0,0 +1,6 @@ +import { Message } from "../profile/IAkiProfile"; +export interface IGetAllAttachmentsResponse { + messages: Message[]; + profiles: any[]; + hasMessagesWithRewards: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetChatServerListRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetChatServerListRequestData.d.ts new file mode 100644 index 0000000..8f1beac --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetChatServerListRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetChatServerListRequestData { + VersionId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetFriendListDataResponse.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetFriendListDataResponse.d.ts new file mode 100644 index 0000000..f8d700c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetFriendListDataResponse.d.ts @@ -0,0 +1,16 @@ +import { MemberCategory } from "../../enums/MemberCategory"; +export interface IGetFriendListDataResponse { + Friends: Friend[]; + Ignore: string[]; + InIgnoreList: string[]; +} +export interface Friend { + _id: string; + Info: Info; +} +export interface Info { + Nickname: string; + Side: string; + Level: number; + MemberCategory: MemberCategory; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetMailDialogInfoRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetMailDialogInfoRequestData.d.ts new file mode 100644 index 0000000..eed84b1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetMailDialogInfoRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetMailDialogInfoRequestData { + dialogId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetMailDialogListRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetMailDialogListRequestData.d.ts new file mode 100644 index 0000000..f8fbf5d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetMailDialogListRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IGetMailDialogListRequestData { + limit: number; + offset: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetMailDialogViewRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetMailDialogViewRequestData.d.ts new file mode 100644 index 0000000..43d416e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetMailDialogViewRequestData.d.ts @@ -0,0 +1,7 @@ +import { MessageType } from "../../enums/MessageType"; +export interface IGetMailDialogViewRequestData { + type: MessageType; + dialogId: string; + limit: number; + time: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetMailDialogViewResponseData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetMailDialogViewResponseData.d.ts new file mode 100644 index 0000000..4f8b946 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IGetMailDialogViewResponseData.d.ts @@ -0,0 +1,7 @@ +import { IPmcData } from "../common/IPmcData"; +import { Message } from "../profile/IAkiProfile"; +export interface IGetMailDialogViewResponseData { + messages: Message[]; + profiles: IPmcData[]; + hasMessagesWithRewards: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IPinDialogRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IPinDialogRequestData.d.ts new file mode 100644 index 0000000..57b8a00 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IPinDialogRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IPinDialogRequestData { + dialogId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IRemoveDialogRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IRemoveDialogRequestData.d.ts new file mode 100644 index 0000000..874b828 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/IRemoveDialogRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IRemoveDialogRequestData { + dialogId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/ISendMessageRequest.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/ISendMessageRequest.d.ts new file mode 100644 index 0000000..dd79deb --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/ISendMessageRequest.d.ts @@ -0,0 +1,7 @@ +import { MessageType } from "../../enums/MessageType"; +export interface ISendMessageRequest { + dialogId: string; + type: MessageType; + text: string; + replyTo: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/ISetDialogReadRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/ISetDialogReadRequestData.d.ts new file mode 100644 index 0000000..2076232 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/dialog/ISetDialogReadRequestData.d.ts @@ -0,0 +1,3 @@ +export interface ISetDialogReadRequestData { + dialogs: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/ICheckVersionResponse.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/ICheckVersionResponse.d.ts new file mode 100644 index 0000000..fa8aa6f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/ICheckVersionResponse.d.ts @@ -0,0 +1,4 @@ +export interface ICheckVersionResponse { + isvalid: boolean; + latestVersion: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameConfigResponse.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameConfigResponse.d.ts new file mode 100644 index 0000000..e1b7587 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameConfigResponse.d.ts @@ -0,0 +1,21 @@ +export interface IGameConfigResponse { + aid: string; + lang: string; + languages: Record; + ndaFree: boolean; + taxonomy: number; + activeProfileId: string; + backend: Backend; + utc_time: number; + /** Total in game time */ + totalInGame: number; + reportAvailable: boolean; + twitchEventMember: boolean; +} +export interface Backend { + Lobby: string; + Trading: string; + Messaging: string; + Main: string; + RagFair: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameEmptyCrcRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameEmptyCrcRequestData.d.ts new file mode 100644 index 0000000..a3ecad9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameEmptyCrcRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGameEmptyCrcRequestData { + crc: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameKeepAliveResponse.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameKeepAliveResponse.d.ts new file mode 100644 index 0000000..170ce6a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameKeepAliveResponse.d.ts @@ -0,0 +1,4 @@ +export interface IGameKeepAliveResponse { + msg: string; + utc_time: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameLogoutResponseData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameLogoutResponseData.d.ts new file mode 100644 index 0000000..0f52050 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameLogoutResponseData.d.ts @@ -0,0 +1,3 @@ +export interface IGameLogoutResponseData { + status: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameStartResponse.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameStartResponse.d.ts new file mode 100644 index 0000000..9f0ab6d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGameStartResponse.d.ts @@ -0,0 +1,3 @@ +export interface IGameStartResponse { + utc_time: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGetItemPricesResponse.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGetItemPricesResponse.d.ts new file mode 100644 index 0000000..ab6e818 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IGetItemPricesResponse.d.ts @@ -0,0 +1,5 @@ +export interface IGetItemPricesResponse { + supplyNextTime: number; + prices: Record; + currencyCourses: Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IReportNicknameRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IReportNicknameRequestData.d.ts new file mode 100644 index 0000000..087c58b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IReportNicknameRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IReportNicknameRequestData { + uid: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IServerDetails.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IServerDetails.d.ts new file mode 100644 index 0000000..101cf99 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IServerDetails.d.ts @@ -0,0 +1,4 @@ +export interface IServerDetails { + ip: string; + port: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IVersionValidateRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IVersionValidateRequestData.d.ts new file mode 100644 index 0000000..0aa0fed --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/game/IVersionValidateRequestData.d.ts @@ -0,0 +1,11 @@ +export interface IVersionValidateRequestData { + version: Version; + develop: boolean; +} +export interface Version { + major: string; + minor: string; + game: string; + backend: string; + taxonomy: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/Effect.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/Effect.d.ts new file mode 100644 index 0000000..62d95a8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/Effect.d.ts @@ -0,0 +1,7 @@ +export declare enum Effect { + FRACTURE = "Fracture", + LIGHT_BLEEDING = "LightBleeding", + HEAVY_BLEEDING = "HeavyBleeding", + MILD_MUSCLE_PAIN = "MildMusclePain", + SEVERE_MUSCLE_PAIN = "SevereMusclePain" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/IHealthTreatmentRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/IHealthTreatmentRequestData.d.ts new file mode 100644 index 0000000..7fb80a8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/IHealthTreatmentRequestData.d.ts @@ -0,0 +1,29 @@ +export interface IHealthTreatmentRequestData { + Action: "RestoreHealth"; + trader: string; + items: Item[]; + difference: Difference; + timestamp: number; +} +export interface Item { + id: string; + count: number; +} +export interface Difference { + BodyParts: BodyParts; + Energy: number; + Hydration: number; +} +export interface BodyParts { + Head: BodyPart; + Chest: BodyPart; + Stomach: BodyPart; + LeftArm: BodyPart; + RightArm: BodyPart; + LeftLeg: BodyPart; + RightLeg: BodyPart; +} +export interface BodyPart { + Health: number; + Effects: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/IOffraidEatRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/IOffraidEatRequestData.d.ts new file mode 100644 index 0000000..8e2b6c3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/IOffraidEatRequestData.d.ts @@ -0,0 +1,7 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface IOffraidEatRequestData extends IBaseInteractionRequestData { + Action: "Eat"; + item: string; + count: number; + time: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/IOffraidHealRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/IOffraidHealRequestData.d.ts new file mode 100644 index 0000000..26b02bd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/IOffraidHealRequestData.d.ts @@ -0,0 +1,18 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface IOffraidHealRequestData extends IBaseInteractionRequestData { + Action: "Heal"; + item: string; + part: BodyPart; + count: number; + time: number; +} +export declare enum BodyPart { + HEAD = "Head", + CHEST = "Chest", + STOMACH = "Stomach", + LEFT_ARM = "LeftArm", + RIGHT_ARM = "RightArm", + LEFT_LEG = "LeftLeg", + RIGHT_LEG = "RightLeg", + COMMON = "Common" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/ISyncHealthRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/ISyncHealthRequestData.d.ts new file mode 100644 index 0000000..20e32f6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/ISyncHealthRequestData.d.ts @@ -0,0 +1,21 @@ +export interface ISyncHealthRequestData { + Health: Health; + IsAlive: boolean; + Hydration?: number; + Energy?: number; + Temperature?: number; +} +export interface Health { + Head?: BodyPartHealth; + Chest?: BodyPartHealth; + Stomach?: BodyPartHealth; + LeftArm?: BodyPartHealth; + RightArm?: BodyPartHealth; + LeftLeg?: BodyPartHealth; + RightLeg?: BodyPartHealth; +} +export interface BodyPartHealth { + Maximum: number; + Current: number; + Effects: Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/IWorkoutData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/IWorkoutData.d.ts new file mode 100644 index 0000000..ba629d2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/health/IWorkoutData.d.ts @@ -0,0 +1,4 @@ +export interface IWorkoutData extends Record { + skills: any; + effects: any; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/HideoutUpgradeCompleteRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/HideoutUpgradeCompleteRequestData.d.ts new file mode 100644 index 0000000..8583e8d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/HideoutUpgradeCompleteRequestData.d.ts @@ -0,0 +1,5 @@ +export interface HideoutUpgradeCompleteRequestData { + Action: string; + areaType: number; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHandleQTEEventRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHandleQTEEventRequestData.d.ts new file mode 100644 index 0000000..5dda485 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHandleQTEEventRequestData.d.ts @@ -0,0 +1,8 @@ +export interface IHandleQTEEventRequestData { + Action: string; + /** true if QTE was successful, otherwise false */ + results: boolean[]; + /** Id of the QTE object used from db/hideout/qte.json */ + id: string; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutArea.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutArea.d.ts new file mode 100644 index 0000000..fa5ca20 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutArea.d.ts @@ -0,0 +1,72 @@ +export interface IHideoutArea { + _id: string; + type: number; + enabled: boolean; + needsFuel: boolean; + requirements: IAreaRequirement[]; + takeFromSlotLocked: boolean; + craftGivesExp: boolean; + displayLevel: boolean; + enableAreaRequirements: boolean; + stages: Record; +} +export interface IAreaRequirement { + areaType: number; + requiredlevel: number; + type: string; +} +export interface Stage { + autoUpgrade: boolean; + bonuses: StageBonus[]; + constructionTime: number; + description: string; + displayInterface: boolean; + improvements: IStageImprovement[]; + requirements: IStageRequirement[]; + slots: number; +} +export interface IStageImprovement { + id: string; + bonuses: IStageImprovementBonus[]; + improvementTime: number; + requirements: IStageImprovementRequirement[]; +} +export interface IStageImprovementBonus { + passive: boolean; + production: boolean; + type: string; + value: number; + visible: boolean; +} +export interface IStageImprovementRequirement { + count: number; + isEncoded: boolean; + isFunctional: boolean; + templateId: string; + type: string; +} +export interface IStageRequirement { + areaType?: number; + requiredLevel?: number; + type: string; + templateId?: string; + count?: number; + isEncoded: false; + isFunctional?: boolean; + traderId?: string; + loyaltyLevel?: number; + skillName?: string; + skillLevel?: number; +} +export interface StageBonus { + value: number; + passive: boolean; + production: boolean; + visible: boolean; + skillType?: string; + type: string; + filter?: string[]; + icon?: string; + id?: string; + templateId?: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutContinuousProductionStartRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutContinuousProductionStartRequestData.d.ts new file mode 100644 index 0000000..3ef00c6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutContinuousProductionStartRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IHideoutContinuousProductionStartRequestData { + Action: "HideoutContinuousProductionStart"; + recipeId: string; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutImproveAreaRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutImproveAreaRequestData.d.ts new file mode 100644 index 0000000..7e927bf --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutImproveAreaRequestData.d.ts @@ -0,0 +1,13 @@ +export interface IHideoutImproveAreaRequestData { + Action: "HideoutImproveArea"; + /** Hideout area id from areas.json */ + id: string; + areaType: number; + items: HideoutItem[]; + timestamp: number; +} +export interface HideoutItem { + /** Hideout inventory id that was used by improvement action */ + id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutProduction.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutProduction.d.ts new file mode 100644 index 0000000..2367e08 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutProduction.d.ts @@ -0,0 +1,23 @@ +export interface IHideoutProduction { + _id: string; + areaType: number; + requirements: Requirement[]; + productionTime: number; + endProduct: string; + isEncoded: boolean; + locked: boolean; + needFuelForAllProductionTime: boolean; + continuous: boolean; + count: number; + productionLimitCount: number; +} +export interface Requirement { + templateId?: string; + count?: number; + isEncoded?: boolean; + isFunctional?: boolean; + type: string; + areaType?: number; + requiredLevel?: number; + resource?: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutPutItemInRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutPutItemInRequestData.d.ts new file mode 100644 index 0000000..8326c55 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutPutItemInRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IHideoutPutItemInRequestData { + Action: "HideoutPutItemsInAreaSlots"; + areaType: number; + items: Record; + timestamp: number; +} +export interface ItemDetails { + count: number; + id: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutScavCase.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutScavCase.d.ts new file mode 100644 index 0000000..e0b9a27 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutScavCase.d.ts @@ -0,0 +1,18 @@ +import { MinMax } from "../../common/MinMax"; +export interface IHideoutScavCase { + _id: string; + ProductionTime: number; + Requirements: Requirement[]; + EndProducts: EndProducts; +} +export interface Requirement { + templateId: string; + count: number; + isFunctional: boolean; + type: string; +} +export interface EndProducts { + Common: MinMax; + Rare: MinMax; + Superrare: MinMax; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutScavCaseStartRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutScavCaseStartRequestData.d.ts new file mode 100644 index 0000000..72fda86 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutScavCaseStartRequestData.d.ts @@ -0,0 +1,15 @@ +export interface IHideoutScavCaseStartRequestData { + Action: "HideoutScavCaseProductionStart"; + recipeId: string; + items: HideoutItem[]; + tools: Tool[]; + timestamp: number; +} +export interface HideoutItem { + id: string; + count: number; +} +export interface Tool { + id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutSettingsBase.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutSettingsBase.d.ts new file mode 100644 index 0000000..8e45939 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutSettingsBase.d.ts @@ -0,0 +1,6 @@ +export interface IHideoutSettingsBase { + generatorSpeedWithoutFuel: number; + generatorFuelFlowRate: number; + airFilterUnitFlowRate: number; + gpuBoostRate: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutSingleProductionStartRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutSingleProductionStartRequestData.d.ts new file mode 100644 index 0000000..1ed542a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutSingleProductionStartRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IHideoutSingleProductionStartRequestData { + Action: "HideoutSingleProductionStart"; + recipeId: string; + items: Item[]; + timestamp: number; +} +export interface Item { + id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutTakeItemOutRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutTakeItemOutRequestData.d.ts new file mode 100644 index 0000000..83a740a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutTakeItemOutRequestData.d.ts @@ -0,0 +1,6 @@ +export interface IHideoutTakeItemOutRequestData { + Action: "HideoutTakeItemsFromAreaSlots"; + areaType: number; + slots: number[]; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutTakeProductionRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutTakeProductionRequestData.d.ts new file mode 100644 index 0000000..a6847ef --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutTakeProductionRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IHideoutTakeProductionRequestData { + Action: "HideoutTakeProduction"; + recipeId: string; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutToggleAreaRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutToggleAreaRequestData.d.ts new file mode 100644 index 0000000..cdea513 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutToggleAreaRequestData.d.ts @@ -0,0 +1,6 @@ +export interface IHideoutToggleAreaRequestData { + Action: "HideoutToggleArea"; + areaType: number; + enabled: boolean; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutUpgradeCompleteRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutUpgradeCompleteRequestData.d.ts new file mode 100644 index 0000000..545311e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutUpgradeCompleteRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IHideoutUpgradeCompleteRequestData { + Action: "HideoutUpgradeComplete"; + areaType: number; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutUpgradeRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutUpgradeRequestData.d.ts new file mode 100644 index 0000000..dfbfdca --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IHideoutUpgradeRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IHideoutUpgradeRequestData { + Action: "HideoutUpgrade"; + areaType: number; + items: HideoutItem[]; + timestamp: number; +} +export interface HideoutItem { + count: number; + id: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IQteData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IQteData.d.ts new file mode 100644 index 0000000..f842b84 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IQteData.d.ts @@ -0,0 +1,38 @@ +export interface IQteData { + Id: string; + Type: string; + Area: string; + AreaLevel: number; + QuickTimeEvents: IQuickTimeEvent[]; + Requirements: IQteRequirement[]; + Results: Record; +} +export interface IQuickTimeEvent { + Type: string; + Position: number; + StartDelay: number; + EndDelay: number; + Speed: number; + SuccessRange: string; + Key: string; +} +export interface IQteRequirement { + type: string; +} +export interface IQteResult { + Energy: number; + Hydration: number; + RewardsRange: IQteEffect[]; +} +export interface IQteEffect { + Type: string; + SkillId: string; + levelMultipliers: ISkillLevelMultiplier[]; + Time: number; + Weight: number; + Result: string; +} +export interface ISkillLevelMultiplier { + level: number; + multiplier: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IRecordShootingRangePoints.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IRecordShootingRangePoints.d.ts new file mode 100644 index 0000000..5bfd2fd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/hideout/IRecordShootingRangePoints.d.ts @@ -0,0 +1,4 @@ +export interface IRecordShootingRangePoints { + Action: "RecordShootingRangePoints"; + points: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/httpResponse/IGetBodyResponseData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/httpResponse/IGetBodyResponseData.d.ts new file mode 100644 index 0000000..b5dc5c1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/httpResponse/IGetBodyResponseData.d.ts @@ -0,0 +1,5 @@ +export interface IGetBodyResponseData { + err: number; + errmsg: any; + (data: Type): Type; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/httpResponse/INullResponseData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/httpResponse/INullResponseData.d.ts new file mode 100644 index 0000000..a3ae838 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/httpResponse/INullResponseData.d.ts @@ -0,0 +1,5 @@ +export interface INullResponseData { + err: number; + errmsg: any; + data: null; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inRaid/IRegisterPlayerRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inRaid/IRegisterPlayerRequestData.d.ts new file mode 100644 index 0000000..e2d9cf1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inRaid/IRegisterPlayerRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IRegisterPlayerRequestData { + crc: number; + locationId: string; + variantId: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inRaid/ISaveProgressRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inRaid/ISaveProgressRequestData.d.ts new file mode 100644 index 0000000..6930261 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inRaid/ISaveProgressRequestData.d.ts @@ -0,0 +1,8 @@ +import { IPmcData } from "../common/IPmcData"; +import { ISyncHealthRequestData } from "../health/ISyncHealthRequestData"; +export interface ISaveProgressRequestData { + exit: string; + profile: IPmcData; + isPlayerScav: boolean; + health: ISyncHealthRequestData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/insurance/IGetInsuranceCostRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/insurance/IGetInsuranceCostRequestData.d.ts new file mode 100644 index 0000000..0e32e96 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/insurance/IGetInsuranceCostRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IGetInsuranceCostRequestData { + traders: string[]; + items: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/insurance/IGetInsuranceCostResponseData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/insurance/IGetInsuranceCostResponseData.d.ts new file mode 100644 index 0000000..4579fdb --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/insurance/IGetInsuranceCostResponseData.d.ts @@ -0,0 +1 @@ +export type IGetInsuranceCostResponseData = Record>; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/insurance/IInsureRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/insurance/IInsureRequestData.d.ts new file mode 100644 index 0000000..f657bb7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/insurance/IInsureRequestData.d.ts @@ -0,0 +1,6 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface IInsureRequestData extends IBaseInteractionRequestData { + Action: "Insure"; + tid: string; + items: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IAddItemRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IAddItemRequestData.d.ts new file mode 100644 index 0000000..61516d6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IAddItemRequestData.d.ts @@ -0,0 +1,9 @@ +export interface IAddItemRequestData { + tid: string; + items: AddItem[]; +} +export interface AddItem { + count: number; + isPreset?: boolean; + item_id: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IAddItemTempObject.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IAddItemTempObject.d.ts new file mode 100644 index 0000000..62d4b64 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IAddItemTempObject.d.ts @@ -0,0 +1,7 @@ +import { Item, Location } from "../common/tables/IItem"; +export interface IAddItemTempObject { + itemRef: Item; + count: number; + isPreset: boolean; + location?: Location; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryAddRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryAddRequestData.d.ts new file mode 100644 index 0000000..462e0de --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryAddRequestData.d.ts @@ -0,0 +1,6 @@ +import { Container, IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryAddRequestData extends IInventoryBaseActionRequestData { + Action: "Add"; + item: string; + container: Container; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryBaseActionRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryBaseActionRequestData.d.ts new file mode 100644 index 0000000..6d7c190 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryBaseActionRequestData.d.ts @@ -0,0 +1,27 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface IInventoryBaseActionRequestData extends IBaseInteractionRequestData { +} +export interface To { + id: string; + container: string; + location?: ToLocation | number; +} +export interface ToLocation { + x: number; + y: number; + r: string; + rotation?: string; + isSearched: boolean; +} +export interface Container { + id: string; + container: string; + location?: Location | number; +} +export interface Location { + x: number; + y: number; + r: string; + rotation?: string; + isSearched: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryBindRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryBindRequestData.d.ts new file mode 100644 index 0000000..ff35066 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryBindRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryBindRequestData extends IInventoryBaseActionRequestData { + Action: "Bind"; + item: string; + index: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryCreateMarkerRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryCreateMarkerRequestData.d.ts new file mode 100644 index 0000000..1e1ecef --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryCreateMarkerRequestData.d.ts @@ -0,0 +1,12 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryCreateMarkerRequestData extends IInventoryBaseActionRequestData { + Action: "CreateMapMarker"; + item: string; + mapMarker: MapMarker; +} +export interface MapMarker { + Type: string; + X: number; + Y: number; + Note: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryDeleteMarkerRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryDeleteMarkerRequestData.d.ts new file mode 100644 index 0000000..0657e1b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryDeleteMarkerRequestData.d.ts @@ -0,0 +1,7 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryDeleteMarkerRequestData extends IInventoryBaseActionRequestData { + Action: "DeleteMapMarker"; + item: string; + X: number; + Y: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryEditMarkerRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryEditMarkerRequestData.d.ts new file mode 100644 index 0000000..e2857e1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryEditMarkerRequestData.d.ts @@ -0,0 +1,14 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryEditMarkerRequestData extends IInventoryBaseActionRequestData { + Action: "EditMapMarker"; + item: string; + X: number; + Y: number; + mapMarker: MapMarker; +} +export interface MapMarker { + Type: string; + X: number; + Y: number; + Note: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryExamineRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryExamineRequestData.d.ts new file mode 100644 index 0000000..614711f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryExamineRequestData.d.ts @@ -0,0 +1,10 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryExamineRequestData extends IInventoryBaseActionRequestData { + Action: "Examine"; + item: string; + fromOwner: IFromOwner; +} +export interface IFromOwner { + id: string; + type: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryFoldRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryFoldRequestData.d.ts new file mode 100644 index 0000000..a5fb2a1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryFoldRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryFoldRequestData extends IInventoryBaseActionRequestData { + Action: "Fold"; + item: string; + value: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryMergeRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryMergeRequestData.d.ts new file mode 100644 index 0000000..3fcfa35 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryMergeRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryMergeRequestData extends IInventoryBaseActionRequestData { + Action: "Merge"; + item: string; + with: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryMoveRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryMoveRequestData.d.ts new file mode 100644 index 0000000..b767908 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryMoveRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData, To } from "./IInventoryBaseActionRequestData"; +export interface IInventoryMoveRequestData extends IInventoryBaseActionRequestData { + Action: "Move"; + item: string; + to: To; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryReadEncyclopediaRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryReadEncyclopediaRequestData.d.ts new file mode 100644 index 0000000..5487b20 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryReadEncyclopediaRequestData.d.ts @@ -0,0 +1,5 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryReadEncyclopediaRequestData extends IInventoryBaseActionRequestData { + Action: "ReadEncyclopedia"; + ids: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryRemoveRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryRemoveRequestData.d.ts new file mode 100644 index 0000000..07d1a52 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryRemoveRequestData.d.ts @@ -0,0 +1,5 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryRemoveRequestData extends IInventoryBaseActionRequestData { + Action: "Remove"; + item: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventorySortRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventorySortRequestData.d.ts new file mode 100644 index 0000000..a0b7928 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventorySortRequestData.d.ts @@ -0,0 +1,20 @@ +import { Upd } from "../common/tables/IItem"; +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventorySortRequestData extends IInventoryBaseActionRequestData { + Action: "ApplyInventoryChanges"; + changedItems: ChangedItem[]; +} +export interface ChangedItem { + _id: string; + _tpl: string; + parentId: string; + slotId: string; + location: Location; + upd: Upd; +} +export interface Location { + x: number; + y: number; + r: string; + isSearched: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventorySplitRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventorySplitRequestData.d.ts new file mode 100644 index 0000000..730ae71 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventorySplitRequestData.d.ts @@ -0,0 +1,7 @@ +import { Container, IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventorySplitRequestData extends IInventoryBaseActionRequestData { + Action: "Split"; + item: string; + container: Container; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventorySwapRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventorySwapRequestData.d.ts new file mode 100644 index 0000000..1b0464d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventorySwapRequestData.d.ts @@ -0,0 +1,11 @@ +import { OwnerInfo } from "../common/request/IBaseInteractionRequestData"; +import { IInventoryBaseActionRequestData, To } from "./IInventoryBaseActionRequestData"; +export interface IInventorySwapRequestData extends IInventoryBaseActionRequestData { + Action: "Swap"; + item: string; + to: To; + item2: string; + to2: To; + fromOwner2: OwnerInfo; + toOwner2: OwnerInfo; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryTagRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryTagRequestData.d.ts new file mode 100644 index 0000000..f021661 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryTagRequestData.d.ts @@ -0,0 +1,7 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryTagRequestData extends IInventoryBaseActionRequestData { + Action: "Tag"; + item: string; + TagName: string; + TagColor: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryToggleRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryToggleRequestData.d.ts new file mode 100644 index 0000000..0955440 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryToggleRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryToggleRequestData extends IInventoryBaseActionRequestData { + Action: "Toggle"; + item: string; + value: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryTransferRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryTransferRequestData.d.ts new file mode 100644 index 0000000..cf4391b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IInventoryTransferRequestData.d.ts @@ -0,0 +1,7 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryTransferRequestData extends IInventoryBaseActionRequestData { + Action: "Transfer"; + item: string; + with: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IOpenRandomLootContainerRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IOpenRandomLootContainerRequestData.d.ts new file mode 100644 index 0000000..3c45124 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/inventory/IOpenRandomLootContainerRequestData.d.ts @@ -0,0 +1,11 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IOpenRandomLootContainerRequestData extends IInventoryBaseActionRequestData { + Action: "OpenRandomLootContainer"; + /** Container item opened */ + item: string; + to: To[]; +} +export interface To { + /** Player character (pmc/scav) id items will be sent to */ + id: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/itemEvent/IEmptyItemEventRouterResponse.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/itemEvent/IEmptyItemEventRouterResponse.d.ts new file mode 100644 index 0000000..689fe75 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/itemEvent/IEmptyItemEventRouterResponse.d.ts @@ -0,0 +1,4 @@ +import { IItemEventRouterBase } from "./IItemEventRouterBase"; +export interface IEmptyItemEventRouterResponse extends IItemEventRouterBase { + profileChanges: ""; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/itemEvent/IItemEventRouterBase.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/itemEvent/IItemEventRouterBase.d.ts new file mode 100644 index 0000000..dbf6330 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/itemEvent/IItemEventRouterBase.d.ts @@ -0,0 +1,71 @@ +import { QuestStatus } from "../../../models/enums/QuestStatus"; +import { Health, Productive, Skills, TraderInfo } from "../common/tables/IBotBase"; +import { Item, Upd } from "../common/tables/IItem"; +import { IQuest } from "../common/tables/IQuest"; +import { IPmcDataRepeatableQuest } from "../common/tables/IRepeatableQuests"; +import { IRagfairOffer } from "../ragfair/IRagfairOffer"; +export interface IItemEventRouterBase { + warnings: Warning[]; + profileChanges: TProfileChanges | ""; +} +export type TProfileChanges = Record; +export interface Warning { + index: number; + errmsg: string; + code?: string; + data?: any; +} +export interface ProfileChange { + _id: string; + experience: number; + quests: IQuest[]; + ragFairOffers: IRagfairOffer[]; + builds: BuildChange[]; + items: ItemChanges; + production: Record; + /** Hideout area improvement id */ + improvements: Record; + skills: Skills; + health: Health; + traderRelations: Record; + repeatableQuests?: IPmcDataRepeatableQuest[]; + recipeUnlocked: Record; + questsStatus: QuestStatusChange[]; +} +export interface QuestStatusChange { + qid: string; + startTime: number; + status: QuestStatus; + statusTimers: Record; + completedConditions: string[]; + availableAfter: number; +} +export interface BuildChange { + id: string; + name: string; + root: string; + items: Item[]; +} +export interface ItemChanges { + new: Product[]; + change: Product[]; + del: Product[]; +} +export interface Improvement { + completed: boolean; + improveCompleteTimestamp: number; +} +export interface Product { + _id: string; + _tpl?: string; + parentId?: string; + slotId?: string; + location?: ItemChangeLocation; + upd?: Upd; +} +export interface ItemChangeLocation { + x: number; + y: number; + r: number; + isSearched?: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/itemEvent/IItemEventRouterRequest.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/itemEvent/IItemEventRouterRequest.d.ts new file mode 100644 index 0000000..515b49a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/itemEvent/IItemEventRouterRequest.d.ts @@ -0,0 +1,21 @@ +export interface IItemEventRouterRequest { + data: Daum[]; + tm: number; + reload: number; +} +export interface Daum { + Action: string; + item: string; + to: To; +} +export interface To { + id: string; + container: string; + location?: Location; +} +export interface Location { + x: number; + y: number; + r: string; + isSearched: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/itemEvent/IItemEventRouterResponse.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/itemEvent/IItemEventRouterResponse.d.ts new file mode 100644 index 0000000..72a9b5b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/itemEvent/IItemEventRouterResponse.d.ts @@ -0,0 +1,3 @@ +import { IItemEventRouterBase } from "./IItemEventRouterBase"; +export interface IItemEventRouterResponse extends IItemEventRouterBase { +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IChangeRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IChangeRequestData.d.ts new file mode 100644 index 0000000..f0a7838 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IChangeRequestData.d.ts @@ -0,0 +1,4 @@ +import { ILoginRequestData } from "./ILoginRequestData"; +export interface IChangeRequestData extends ILoginRequestData { + change: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IGetMiniProfileRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IGetMiniProfileRequestData.d.ts new file mode 100644 index 0000000..a14c7c9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IGetMiniProfileRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IGetMiniProfileRequestData { + username: string; + password: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/ILoginRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/ILoginRequestData.d.ts new file mode 100644 index 0000000..e965813 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/ILoginRequestData.d.ts @@ -0,0 +1,4 @@ +export interface ILoginRequestData { + username: string; + password: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IMiniProfile.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IMiniProfile.d.ts new file mode 100644 index 0000000..c12661a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IMiniProfile.d.ts @@ -0,0 +1,14 @@ +export interface IMiniProfile { + username: string; + nickname: string; + side: string; + currlvl: number; + currexp: number; + prevexp: number; + nextlvl: number; + maxlvl: number; + akiData: AkiData; +} +export interface AkiData { + version: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IRegisterData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IRegisterData.d.ts new file mode 100644 index 0000000..61a8bbe --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IRegisterData.d.ts @@ -0,0 +1,4 @@ +import { ILoginRequestData } from "./ILoginRequestData"; +export interface IRegisterData extends ILoginRequestData { + edition: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IRemoveProfileData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IRemoveProfileData.d.ts new file mode 100644 index 0000000..4cc5618 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/launcher/IRemoveProfileData.d.ts @@ -0,0 +1,2 @@ +import { ILoginRequestData } from "./ILoginRequestData"; +export type IRemoveProfileData = ILoginRequestData; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/location/IGetLocationRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/location/IGetLocationRequestData.d.ts new file mode 100644 index 0000000..04e84d9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/location/IGetLocationRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IGetLocationRequestData { + crc: number; + locationId: string; + variantId: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/ICreateGroupRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/ICreateGroupRequestData.d.ts new file mode 100644 index 0000000..7413a8a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/ICreateGroupRequestData.d.ts @@ -0,0 +1,6 @@ +import { RaidMode } from "../../enums/RaidMode"; +export interface ICreateGroupRequestData { + location: string; + raidMode: RaidMode; + startInGroup: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IEndOfflineRaidRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IEndOfflineRaidRequestData.d.ts new file mode 100644 index 0000000..811e9a2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IEndOfflineRaidRequestData.d.ts @@ -0,0 +1,6 @@ +export interface IEndOfflineRaidRequestData { + crc: number; + exitStatus: string; + exitName: any; + raidSeconds: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IGetGroupStatusRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IGetGroupStatusRequestData.d.ts new file mode 100644 index 0000000..55d7079 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IGetGroupStatusRequestData.d.ts @@ -0,0 +1,9 @@ +import { RaidMode } from "../../enums/RaidMode"; +export interface IGetGroupStatusRequestData { + location: string; + savage: boolean; + dt: string; + keyId: string; + raidMode: RaidMode; + startInGroup: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IGetProfileRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IGetProfileRequestData.d.ts new file mode 100644 index 0000000..86b5bbd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IGetProfileRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetProfileRequestData { + profileId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IGetRaidConfigurationRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IGetRaidConfigurationRequestData.d.ts new file mode 100644 index 0000000..cbcc2f6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IGetRaidConfigurationRequestData.d.ts @@ -0,0 +1,30 @@ +export interface IGetRaidConfigurationRequestData { + timeVariant: string; + raidMode: string; + metabolismDisabled: boolean; + playersSpawnPlace: string; + timeAndWeatherSettings: TimeAndWeatherSettings; + botSettings: BotSettings; + wavesSettings: WavesSettings; + location: string; +} +export interface TimeAndWeatherSettings { + isRandomTime: boolean; + isRandomWeather: boolean; + cloudinessType: string; + rainType: string; + windType: string; + fogType: string; + timeFlowType: string; + hourOfDay: number; +} +export interface BotSettings { + isScavWars: boolean; + botAmount: string; +} +export interface WavesSettings { + botAmount: string; + botDifficulty: string; + isBosses: boolean; + isTaggedAndCursed: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IJoinMatchRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IJoinMatchRequestData.d.ts new file mode 100644 index 0000000..cd34f7b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IJoinMatchRequestData.d.ts @@ -0,0 +1,12 @@ +export interface IJoinMatchRequestData { + location: string; + savage: boolean; + dt: string; + servers: Server[]; + keyId: string; +} +export interface Server { + ping: number; + ip: string; + port: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IJoinMatchResult.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IJoinMatchResult.d.ts new file mode 100644 index 0000000..81c9055 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IJoinMatchResult.d.ts @@ -0,0 +1,13 @@ +export interface IJoinMatchResult { + profileid: string; + status: string; + sid: string; + ip: string; + port: number; + version: string; + location: string; + raidMode: string; + mode: string; + shortid: string; + additional_info: any[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IPutMetricsRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IPutMetricsRequestData.d.ts new file mode 100644 index 0000000..d9ed214 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IPutMetricsRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IPutMetricsRequestData { + sid: string; + settings: any; + SharedSettings: any; + HardwareDescription: any; + Location: string; + Metrics: any; + ClientEvents: any; + SpikeSamples: any[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IUpdatePingRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IUpdatePingRequestData.d.ts new file mode 100644 index 0000000..defbd66 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/match/IUpdatePingRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IUpdatePingRequestData { + servers: any[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/notes/INoteActionData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/notes/INoteActionData.d.ts new file mode 100644 index 0000000..610657f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/notes/INoteActionData.d.ts @@ -0,0 +1,10 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface INoteActionData extends IBaseInteractionRequestData { + Action: string; + index: number; + note: INote; +} +export interface INote { + Time: number; + Text: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/notifier/INotifier.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/notifier/INotifier.d.ts new file mode 100644 index 0000000..b248636 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/notifier/INotifier.d.ts @@ -0,0 +1,14 @@ +export interface INotifierChannel { + server: string; + channel_id: string; + url: string; + notifierServer: string; + ws: string; +} +import { Message } from "../profile/IAkiProfile"; +export interface INotification { + type: "RagfairOfferSold" | "new_message" | "ping"; + eventId: string; + dialogId?: string; + message?: Message; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/notifier/ISelectProfileRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/notifier/ISelectProfileRequestData.d.ts new file mode 100644 index 0000000..2bc3d1e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/notifier/ISelectProfileRequestData.d.ts @@ -0,0 +1,3 @@ +export interface ISelectProfileRequestData { + uid: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/notifier/ISelectProfileResponse.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/notifier/ISelectProfileResponse.d.ts new file mode 100644 index 0000000..ecb668a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/notifier/ISelectProfileResponse.d.ts @@ -0,0 +1,6 @@ +import { INotifierChannel } from "./INotifier"; +export interface ISelectProfileResponse { + status: string; + notifier: INotifierChannel; + notifierServer: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/player/IPlayerIncrementSkillLevelRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/player/IPlayerIncrementSkillLevelRequestData.d.ts new file mode 100644 index 0000000..2f9827c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/player/IPlayerIncrementSkillLevelRequestData.d.ts @@ -0,0 +1,21 @@ +import { Skills } from "../common/tables/IBotBase"; +export interface IPlayerIncrementSkillLevelRequestData { + _id: string; + experience: number; + quests: any[]; + ragFairOffers: any[]; + builds: any[]; + items: Items; + production: Production; + skills: Skills; + traderRelations: TraderRelations; +} +export interface Items { + new: any[]; + change: any[]; + del: any[]; +} +export interface Production { +} +export interface TraderRelations { +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts new file mode 100644 index 0000000..99c61f1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts @@ -0,0 +1,25 @@ +export interface IPresetBuildActionRequestData { + Action: string; + id: string; + name: string; + root: string; + items: Item[]; +} +export interface Item { + _id: string; + _tpl: string; + upd?: Upd; + parentId?: string; + slotId?: string; +} +export interface Upd { + Repairable: Repairable; + FireMode: FireMode; +} +export interface Repairable { + MaxDurability: number; + Durability: number; +} +export interface FireMode { + FireMode: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/GetProfileStatusResponseData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/GetProfileStatusResponseData.d.ts new file mode 100644 index 0000000..1228c2e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/GetProfileStatusResponseData.d.ts @@ -0,0 +1,18 @@ +export interface GetProfileStatusResponseData { + maxPveCountExceeded: false; + profiles: ProfileData[]; +} +export interface ProfileData { + profileid: string; + profileToken: string; + status: string; + ip: string; + port: number; + sid: string; + version?: string; + location?: string; + raidMode?: string; + mode?: string; + shortId?: string; + additional_info?: any[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IAkiProfile.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IAkiProfile.d.ts new file mode 100644 index 0000000..2cea0c8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IAkiProfile.d.ts @@ -0,0 +1,176 @@ +import { MessageType } from "../../enums/MessageType"; +import { IPmcData } from "../common/IPmcData"; +import { Item } from "../common/tables/IItem"; +export interface IAkiProfile { + info: Info; + characters: Characters; + suits: string[]; + weaponbuilds: WeaponBuild[]; + dialogues: Record; + aki: Aki; + vitality: Vitality; + inraid: Inraid; + insurance: Insurance[]; + /** Assort purchases made by player since last trader refresh */ + traderPurchases?: Record>; +} +export declare class TraderPurchaseData { + count: number; + purchaseTimestamp: number; +} +export interface Info { + id: string; + username: string; + password: string; + wipe: boolean; + edition: string; +} +export interface Characters { + pmc: IPmcData; + scav: IPmcData; +} +export interface WeaponBuild { + id: string; + name: string; + root: string; + items: Item[]; +} +export interface Dialogue { + _id: string; + messages: Message[]; + pinned: boolean; + new: number; + attachmentsNew: number; +} +export interface DialogueInfo { + attachmentsNew: number; + new: number; + type: MessageType; + pinned: boolean; + message: MessagePreview; + _id: string; +} +export interface Message { + _id: string; + uid: string; + type: MessageType; + dt: number; + UtcDateTime?: number; + Member?: IUpdatableChatMember; + templateId: string; + text?: string; + hasRewards: boolean; + rewardCollected: boolean; + items: MessageItems; + maxStorageTime?: number; + systemData?: ISystemData; + profileChangeEvents?: any[]; +} +export interface MessagePreview { + uid: string; + type: MessageType; + dt: number; + templateId: string; + text?: string; +} +export interface MessageItems { + stash?: string; + data?: Item[]; +} +export interface ISystemData { + date?: string; + time?: string; + location?: string; + buyerNickname?: string; + soldItem?: string; + itemCount?: number; +} +export interface IUpdatableChatMember { + Nickname: string; + Side: string; + Level: number; + MemberCategory: string; + Ignored: boolean; + Banned: boolean; +} +export interface DateTime { + date: string; + time: string; +} +export interface Aki { + version: string; + mods?: ModDetails[]; +} +export interface ModDetails { + name: string; + version: string; + author: string; + dateAdded: number; +} +export interface Vitality { + health: Health; + effects: Effects; +} +export interface Health { + Hydration: number; + Energy: number; + Temperature: number; + Head: number; + Chest: number; + Stomach: number; + LeftArm: number; + RightArm: number; + LeftLeg: number; + RightLeg: number; +} +export interface Effects { + Head: Head; + Chest: Chest; + Stomach: Stomach; + LeftArm: LeftArm; + RightArm: RightArm; + LeftLeg: LeftLeg; + RightLeg: RightLeg; +} +export interface Head { +} +export interface Chest { +} +export interface Stomach { +} +export interface LeftArm { + Fracture?: number; +} +export interface RightArm { + Fracture?: number; +} +export interface LeftLeg { + Fracture?: number; +} +export interface RightLeg { + Fracture?: number; +} +export interface Inraid { + location: string; + character: string; +} +export interface Insurance { + scheduledTime: number; + traderId: string; + messageContent: MessageContent; + items: Item[]; +} +export interface MessageContent { + ragfair?: MessageContentRagfair; + text?: string; + templateId: string; + type: MessageType; + maxStorageTime?: number; + profileChangeEvents?: any[]; + systemData?: ISystemData; +} +export interface MessageContentRagfair { + offerId: string; + count: number; + handbookId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IProfileChangeNicknameRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IProfileChangeNicknameRequestData.d.ts new file mode 100644 index 0000000..4a61196 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IProfileChangeNicknameRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IProfileChangeNicknameRequestData { + nickname: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IProfileChangeVoiceRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IProfileChangeVoiceRequestData.d.ts new file mode 100644 index 0000000..91058ce --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IProfileChangeVoiceRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IProfileChangeVoiceRequestData { + voice: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IProfileCreateRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IProfileCreateRequestData.d.ts new file mode 100644 index 0000000..93cc656 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IProfileCreateRequestData.d.ts @@ -0,0 +1,6 @@ +export interface IProfileCreateRequestData { + side: string; + nickname: string; + headId: string; + voiceId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/ISearchFriendRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/ISearchFriendRequestData.d.ts new file mode 100644 index 0000000..e63e386 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/ISearchFriendRequestData.d.ts @@ -0,0 +1,3 @@ +export interface ISearchFriendRequestData { + nickname: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/ISearchFriendResponse.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/ISearchFriendResponse.d.ts new file mode 100644 index 0000000..96d88b2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/ISearchFriendResponse.d.ts @@ -0,0 +1,9 @@ +export interface ISearchFriendResponse { + _id: string; + Info: Info; +} +export interface Info { + Nickname: string; + Side: string; + Level: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IValidateNicknameRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IValidateNicknameRequestData.d.ts new file mode 100644 index 0000000..9cca7e7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/profile/IValidateNicknameRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IValidateNicknameRequestData { + nickname: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IAcceptQuestRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IAcceptQuestRequestData.d.ts new file mode 100644 index 0000000..0e4821a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IAcceptQuestRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IAcceptQuestRequestData { + Action: "QuestAccept"; + qid: string; + type: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/ICompleteQuestRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/ICompleteQuestRequestData.d.ts new file mode 100644 index 0000000..36a6db3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/ICompleteQuestRequestData.d.ts @@ -0,0 +1,6 @@ +export interface ICompleteQuestRequestData { + Action: string; + /** Quest Id */ + qid: string; + removeExcessItems: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IFailQuestRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IFailQuestRequestData.d.ts new file mode 100644 index 0000000..5881d91 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IFailQuestRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IFailQuestRequestData { + Action: "QuestComplete"; + qid: string; + removeExcessItems: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IHandoverQuestRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IHandoverQuestRequestData.d.ts new file mode 100644 index 0000000..63f10a8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IHandoverQuestRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IHandoverQuestRequestData { + Action: "QuestHandover"; + qid: string; + conditionId: string; + items: Item[]; +} +export interface Item { + id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IListQuestsRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IListQuestsRequestData.d.ts new file mode 100644 index 0000000..91f0b8c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IListQuestsRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IListQuestsRequestData { + completed: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IRepeatableQuestChangeRequest.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IRepeatableQuestChangeRequest.d.ts new file mode 100644 index 0000000..015f58e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/quests/IRepeatableQuestChangeRequest.d.ts @@ -0,0 +1,4 @@ +export interface IRepeatableQuestChangeRequest { + Action: "RepeatableQuestChange"; + qid: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IAddOfferRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IAddOfferRequestData.d.ts new file mode 100644 index 0000000..465ee02 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IAddOfferRequestData.d.ts @@ -0,0 +1,13 @@ +export interface IAddOfferRequestData { + Action: string; + sellInOnePiece: boolean; + items: string[]; + requirements: Requirement[]; +} +export interface Requirement { + _tpl: string; + count: number; + level: number; + side: number; + onlyFunctional: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IExtendOfferRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IExtendOfferRequestData.d.ts new file mode 100644 index 0000000..2a4a876 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IExtendOfferRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IExtendOfferRequestData { + offerId: string; + renewalTime: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IGetItemPriceResult.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IGetItemPriceResult.d.ts new file mode 100644 index 0000000..676322a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IGetItemPriceResult.d.ts @@ -0,0 +1,5 @@ +export interface IGetItemPriceResult { + avg: number; + min: number; + max: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IGetMarketPriceRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IGetMarketPriceRequestData.d.ts new file mode 100644 index 0000000..00f8f17 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IGetMarketPriceRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetMarketPriceRequestData { + templateId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IGetOffersResult.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IGetOffersResult.d.ts new file mode 100644 index 0000000..fbc631d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IGetOffersResult.d.ts @@ -0,0 +1,7 @@ +import { IRagfairOffer } from "./IRagfairOffer"; +export interface IGetOffersResult { + categories?: Record; + offers: IRagfairOffer[]; + offersCount: number; + selectedCategory: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IRagfairOffer.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IRagfairOffer.d.ts new file mode 100644 index 0000000..792ec7d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IRagfairOffer.d.ts @@ -0,0 +1,45 @@ +import { MemberCategory } from "../../enums/MemberCategory"; +import { Item } from "../common/tables/IItem"; +export interface IRagfairOffer { + sellResult?: SellResult[]; + _id: string; + items: Item[]; + requirements: OfferRequirement[]; + root: string; + intId: number; + /** Handbook price */ + itemsCost: number; + /** Rouble price */ + requirementsCost: number; + startTime: number; + endTime: number; + sellInOnePiece: boolean; + loyaltyLevel: number; + buyRestrictionMax?: number; + buyRestrictionCurrent?: number; + locked: boolean; + unlimitedCount: boolean; + /** Rouble price */ + summaryCost: number; + user: IRagfairOfferUser; + notAvailable: boolean; + CurrentItemCount: number; + priority: boolean; +} +export interface OfferRequirement { + _tpl: string; + count: number; + onlyFunctional: boolean; +} +export interface IRagfairOfferUser { + id: string; + nickname?: string; + rating?: number; + memberType: MemberCategory; + avatar?: string; + isRatingGrowing?: boolean; +} +export interface SellResult { + sellTime: number; + amount: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IRemoveOfferRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IRemoveOfferRequestData.d.ts new file mode 100644 index 0000000..d926615 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/IRemoveOfferRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IRemoveOfferRequestData { + Action: string; + offerId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/ISearchRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/ISearchRequestData.d.ts new file mode 100644 index 0000000..56d093b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/ISearchRequestData.d.ts @@ -0,0 +1,33 @@ +import { RagfairSort } from "../../enums/RagfairSort"; +export interface ISearchRequestData { + page: number; + limit: number; + sortType: RagfairSort; + sortDirection: number; + currency: number; + priceFrom: number; + priceTo: number; + quantityFrom: number; + quantityTo: number; + conditionFrom: number; + conditionTo: number; + oneHourExpiration: boolean; + removeBartering: boolean; + offerOwnerType: OfferOwnerType; + onlyFunctional: boolean; + updateOfferCount: boolean; + handbookId: string; + linkedSearchId: string; + neededSearchId: string; + buildItems: BuildItems; + buildCount: number; + tm: number; + reload: number; +} +export declare enum OfferOwnerType { + ANYOWNERTYPE = 0, + TRADEROWNERTYPE = 1, + PLAYEROWNERTYPE = 2 +} +export interface BuildItems { +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/ISendRagfairReportRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/ISendRagfairReportRequestData.d.ts new file mode 100644 index 0000000..2d14d20 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/ragfair/ISendRagfairReportRequestData.d.ts @@ -0,0 +1,3 @@ +export interface ISendRagfairReportRequestData { + offerId: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/repair/IBaseRepairActionDataRequest.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/repair/IBaseRepairActionDataRequest.d.ts new file mode 100644 index 0000000..e645fb3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/repair/IBaseRepairActionDataRequest.d.ts @@ -0,0 +1,3 @@ +export interface IBaseRepairActionDataRequest { + Action: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/repair/IRepairActionDataRequest.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/repair/IRepairActionDataRequest.d.ts new file mode 100644 index 0000000..263d400 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/repair/IRepairActionDataRequest.d.ts @@ -0,0 +1,10 @@ +import { IBaseRepairActionDataRequest } from "./IBaseRepairActionDataRequest"; +export interface IRepairActionDataRequest extends IBaseRepairActionDataRequest { + Action: "Repair"; + repairKitsInfo: RepairKitsInfo[]; + target: string; +} +export interface RepairKitsInfo { + _id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/repair/ITraderRepairActionDataRequest.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/repair/ITraderRepairActionDataRequest.d.ts new file mode 100644 index 0000000..e3d469d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/repair/ITraderRepairActionDataRequest.d.ts @@ -0,0 +1,10 @@ +import { IBaseRepairActionDataRequest } from "./IBaseRepairActionDataRequest"; +export interface ITraderRepairActionDataRequest extends IBaseRepairActionDataRequest { + Action: "TraderRepair"; + tid: string; + repairItems: RepairItem[]; +} +export interface RepairItem { + _id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/trade/IProcessBaseTradeRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/trade/IProcessBaseTradeRequestData.d.ts new file mode 100644 index 0000000..a9ef757 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/trade/IProcessBaseTradeRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IProcessBaseTradeRequestData { + Action: string; + type: string; + tid: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/trade/IProcessBuyTradeRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/trade/IProcessBuyTradeRequestData.d.ts new file mode 100644 index 0000000..a9e4c17 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/trade/IProcessBuyTradeRequestData.d.ts @@ -0,0 +1,14 @@ +import { IProcessBaseTradeRequestData } from "./IProcessBaseTradeRequestData"; +export interface IProcessBuyTradeRequestData extends IProcessBaseTradeRequestData { + Action: "buy_from_trader" | "TradingConfirm" | "RestoreHealth" | ""; + type: string; + tid: string; + item_id: string; + count: number; + scheme_id: number; + scheme_items: SchemeItem[]; +} +export interface SchemeItem { + id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/trade/IProcessRagfairTradeRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/trade/IProcessRagfairTradeRequestData.d.ts new file mode 100644 index 0000000..889dfd1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/trade/IProcessRagfairTradeRequestData.d.ts @@ -0,0 +1,13 @@ +export interface IProcessRagfairTradeRequestData { + Action: string; + offers: Offer[]; +} +export interface Offer { + id: string; + count: number; + items: Item[]; +} +export interface Item { + id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/trade/IProcessSellTradeRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/trade/IProcessSellTradeRequestData.d.ts new file mode 100644 index 0000000..dee0cd5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/trade/IProcessSellTradeRequestData.d.ts @@ -0,0 +1,13 @@ +import { IProcessBaseTradeRequestData } from "./IProcessBaseTradeRequestData"; +export interface IProcessSellTradeRequestData extends IProcessBaseTradeRequestData { + Action: "sell_to_trader"; + type: string; + tid: string; + price: number; + items: Item[]; +} +export interface Item { + id: string; + count: number; + scheme_id: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/weather/IWeatherData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/weather/IWeatherData.d.ts new file mode 100644 index 0000000..1f5d5b5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/weather/IWeatherData.d.ts @@ -0,0 +1,21 @@ +import { WindDirection } from "../../../models/enums/WindDirection"; +export interface IWeatherData { + acceleration: number; + time: string; + date: string; + weather?: IWeather; +} +export interface IWeather { + pressure: number; + temp: number; + fog: number; + rain_intensity: number; + rain: number; + wind_gustiness: number; + wind_direction: WindDirection; + wind_speed: number; + cloud: number; + time: string; + date: string; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/eft/wishlist/IWishlistActionData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/wishlist/IWishlistActionData.d.ts new file mode 100644 index 0000000..9217864 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/eft/wishlist/IWishlistActionData.d.ts @@ -0,0 +1,4 @@ +export interface IWishlistActionData { + Action: string; + templateId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/AmmoTypes.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/AmmoTypes.d.ts new file mode 100644 index 0000000..254b410 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/AmmoTypes.d.ts @@ -0,0 +1,208 @@ +export declare enum Grenade { + M386_HE_GRENADE = "5ede475b549eed7c6d5c18fb", + M576_MP_APERS_GRENADE = "5ede475339ee016e8c534742", + M433_HEDP_GRENADE = "5f0c892565703e5c461894e9", + M406_HE_GRENADE = "5ede4739e0350d05467f73e8", + M381_HE_GRENADE = "5ede474b0c226a66f5402622", + M441_HE_GRENADE = "5ede47405b097655935d7d16" +} +export declare enum Ammo762x51 { + M62_TRACER = "5a608bf24f39f98ffc77720e", + M80 = "58dd3ad986f77403051cba8f", + M61 = "5a6086ea4f39f99cd479502f", + BCP_FMJ = "5e023e53d4353e3302577c4c", + ULTRA_NOSLER = "5e023e88277cce2b522ff2b1", + TCW_SP = "5e023e6e34d52a55c3304f71", + M993 = "5efb0c1bd79ff02a1f5e68d9" +} +export declare enum Ammo762x54 { + SNB_GZH = "560d61e84bdc2da74d8b4571", + LPS_GZH = "5887431f2459777e1612938f", + PS_GZH = "59e77a2386f7742ee578960a", + T46M_GZH = "5e023cf8186a883be655e54f", + BT_GZH = "5e023d34e8a400319a28ed44", + BS_GZH = "5e023d48186a883be655e551" +} +export declare enum Ammo86x70 { + TAC_X = "5fc382b6d6fa9c00c571bbc3", + UCW = "5fc382c1016cce60e8341b20", + AP = "5fc382a9d724d907e2077dab", + FMJ = "5fc275cf85fd526b824a571a" +} +export declare enum Ammo46x30 { + AP_SX = "5ba26835d4351e0035628ff5", + ACTION_SX = "5ba26812d4351e003201fef1", + FMJ_SX = "5ba2678ad4351e44f824b344", + SUBSONIC_SX = "5ba26844d4351e00334c9475" +} +export declare enum Ammo57x28 { + SS198LF = "5cc80f79e4a949033c7343b2", + R37_F = "5cc86832d7f00c000d3a6e6c", + SS190 = "5cc80f38e4a949001152b560", + R37_X = "5cc86840d7f00c002412c56c", + L191 = "5cc80f53e4a949000e1ea4f8", + SS197SR = "5cc80f8fe4a949033b0224a2", + SB193 = "5cc80f67e4a949035e43bbba" +} +export declare enum Ammo762x25 { + FMJ43 = "5735ff5c245977640e39ba7e", + LRN = "573601b42459776410737435", + P_GL = "5736026a245977644601dc61", + PST_GZH = "573603562459776430731618", + LRNPC = "573602322459776445391df1", + AKBS = "5735fdcd2459776445391d61", + PT_GZH = "573603c924597764442bd9cb" +} +export declare enum Ammo9x18 { + PM_SP8_GZH = "5737218f245977612125ba51", + P_GZH = "573719762459775a626ccbc1", + PSTM_GZH = "57371aab2459775a77142f22", + RG028_GZH = "573720e02459776143012541", + BZHT_GZH = "573718ba2459775a75491131", + PM_PSV = "5737207f24597760ff7b25f2", + SP7_GZH = "57372140245977611f70ee91", + PBM_GZH = "573719df2459775a626ccbc2", + PSO_GZH = "57371f8d24597761006c6a81", + PST_GZH = "5737201124597760fc4431f1", + PS_GS_PPO = "57371f2b24597761224311f1", + PRS_GS = "57371eb62459776125652ac1", + PPT_GZH = "57371e4124597760ff7b25f1", + PPE_GZH = "57371b192459775a9f58a5e0" +} +export declare enum Ammo9x19 { + PSO_GZH = "58864a4f2459770fcc257101", + PST_GZH = "56d59d3ad2720bdb418b4577", + GREEN_TRACER = "5c3df7d588a4501f290594e5", + RIP = "5c0d56a986f774449d5de529", + AP_63 = "5c925fa22e221601da359b7b", + LUGER_CCI = "5a3c16fe86f77452b62de32a", + PBP_GZH = "5efb0da7a29a85116f6ea05f", + QUAKEMAKER = "5efb0e16aeb21837e749c7ff" +} +export declare enum Ammo9x21 { + P_GZH = "5a26abfac4a28232980eabff", + PS_GZH = "5a269f97c4a282000b151807", + PE_GZH = "5a26ac06c4a282000c5a90a8", + BT_GZH = "5a26ac0ec4a28200741e1e18" +} +export declare enum Ammo9x33R { + FMJ = "62330b3ed4dc74626d570b95", + HOLLOW_POINT = "62330bfadc5883093563729b", + SOFT_POINT = "62330c40bdd19b369e1e53d1", + JACKET_HP = "62330c18744e5e31df12f516" +} +export declare enum Ammo1143x23ACP { + MATCH_FMJ = "5e81f423763d9f754677bf2e", + HYDRA_SHOK = "5efb0fc6aeb21837e749c801", + LASERMATCH_FMJ = "5efb0d4f4bc50b58e81710f3", + AP = "5efb0cabfb3e451d70735af5", + RIP = "5ea2a8e200685063ec28c05a" +} +export declare enum Ammo545x39 { + PS_GS = "56dff3afd2720bba668b4567", + SP = "56dff421d2720b5f5a8b4567", + PPBS_GS_IGOLNIK = "5c0d5e4486f77478390952fe", + BS_7N40 = "61962b617c6c7b169525f168", + PRS_GS = "56dff338d2720bbd668b4569", + BT_GS = "56dff061d2720bb5668b4567", + US_GS = "56dff4ecd2720b5f5a8b4568", + BP_GS = "56dfef82d2720bbd668b4567", + HP = "56dff216d2720bbd668b4568", + BS_GS = "56dff026d2720bb8668b4567", + T_GS = "56dff4a2d2720bbd668b456a", + PP_GS = "56dff2ced2720bb4668b4567", + FMJ = "56dff0bed2720bb0668b4567" +} +export declare enum Ammo556x45 { + M856 = "59e68f6f86f7746c9f75e846", + MK255_MOD_0_RRLP = "59e6918f86f7746c9f75e849", + M995 = "59e690b686f7746c9f75e848", + M855A1 = "54527ac44bdc2d36668b4567", + M856A1 = "59e6906286f7746c9f75e847", + M855 = "54527a984bdc2d4e668b4567", + HP = "59e6927d86f77411da468256", + FMJ = "59e6920f86f77411d82aa167", + WARMAGEDDON = "5c0d5ae286f7741e46554302", + MK_318_MOD_0_SOST = "60194943740c5d77f6705eea", + SSA_AP = "601949593ae8f707c4608daa" +} +export declare enum Ammo762x35 { + M62_TRACER = "619636be6db0f2477964e710", + BCP_FMJ = "5fbe3ffdf8b6a877a729ea82", + AP = "5fd20ff893a8961fc660a954", + V_MAX = "6196364158ef8c428c287d9f", + WHISPER = "6196365d58ef8c428c287da1" +} +export declare enum Ammo762x39 { + PS_GZH = "5656d7c34bdc2d9d198b4587", + HP = "59e4d3d286f774176a36250a", + US_GZH = "59e4d24686f7741776641ac7", + T45M1_GZH = "59e4cf5286f7741778269d8a", + BP_GZH = "59e0d99486f7744a32234762", + MAI_AP = "601aa3d2b2bcb34913271e6d" +} +export declare enum Ammo9x39 { + SP5_GS = "57a0dfb82459774d3078b56c", + BP_GS = "5c0d688c86f77413ae3407b2", + SP6_GS = "57a0e5022459774d1673f889", + SPP_GS = "5c0d668f86f7747ccb7f13b2", + PAB9_GS = "61962d879bb3d20b0946d385" +} +export declare enum Ammo366TKM { + FMJ = "59e6542b86f77411dc52a77a", + GEKSA = "59e6658b86f77411d949b250", + EKO = "59e655cb86f77411dc52a77b", + APM = "5f0596629e22f464da6bbdd9" +} +export declare enum Ammo127x55 { + PS12 = "5cadf6ddae9215051e1c23b2", + PS12B = "5cadf6eeae921500134b2799", + PS12A = "5cadf6e5ae921500113bb973" +} +export declare enum Ammo12Gauge { + BUCKSHOT_7MM = "560d5e524bdc2d25448b4571", + MAGNUM_85MM = "5d6e6806a4b936088465b17e", + RIP = "5c0d591486f7744c505b416f", + BMG_SLUG_50CAL = "5d6e68c4a4b9361b93413f79", + BUCKSHOT_525MM = "5d6e6772a4b936088465b17c", + EXPRESS_65MM = "5d6e67fba4b9361bc73bc779", + FLECHETTE = "5d6e6911a4b9361bd5780d52", + FTX_CUSTOM_LITE_SLUG = "5d6e68e6a4b9361c140bcfe0", + AP20_ARMOR_PIERCING_SLUG = "5d6e68a8a4b9360b6c0d54e2", + DUAL_SABOT_SLUG = "5d6e68dea4b9361bcc29e659", + POLEVA_6U_SLUG = "5d6e689ca4b9361bc8618956", + POLEVA_3_SLUG = "5d6e6891a4b9361bd473feea", + GRIZZLY_40_SLUG = "5d6e6869a4b9361c140bcfde", + SUPERFORMANCE_HP_SLUG = "5d6e68d1a4b93622fe60e845", + COPPER_SABOT_PREMIER_HP_SLUG = "5d6e68b3a4b9361bca7e50b5", + LEAD_SLUG = "58820d1224597753c90aeb13" +} +export declare enum Ammo20Gauge { + BUCKSHOT_75MM = "5a38ebd9c4a282000d722a5b", + STAR_SLUG = "5d6e6a05a4b93618084f58d0", + BUCKSHOT_73MM = "5d6e69c7a4b9360b6c0d54e4", + DEVASTATOR_SLUG = "5d6e6a5fa4b93614ec501745", + BUCKSHOT_56MM = "5d6e695fa4b936359b35d852", + POLEVA_6U_SLUG = "5d6e6a42a4b9364f07165f52", + POLEVA_3_SLUG = "5d6e6a53a4b9361bd473feec", + BUCKSHOT_62MM = "5d6e69b9a4b9361bc8618958" +} +export declare enum Ammo23x75 { + SHRAPNEL10_BUCKSHOT = "5e85a9a6eacf8c039e4e2ac1", + SHRAPNEL25_BUCKSHOT = "5f647f31b6238e5dd066e196", + ZVEZDA_FLASHBANG = "5e85a9f4add9fe03027d9bf1", + BARRIKADA_SLUG = "5e85aa1a988a8701445df1f5" +} +export declare enum Ammo30x29 { + VOG_30 = "5d70e500a4b9364de70d38ce" +} +export declare enum Ammo127x108 { + B32 = "5cde8864d7f00c0010373be1", + BZT_44M = "5d2f2ab648f03550091993ca" +} +export declare enum Ammo26x75 { + GREEN_FLARE = "62389aaba63f32501b1b444f", + RED_FLARE = "62389ba9a63f32501b1b4451", + WHITE_FLARE = "62389bc9423ed1685422dc57", + YELLOW_FLARE = "62389be94d5d474bf712e709" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/BackendErrorCodes.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/BackendErrorCodes.d.ts new file mode 100644 index 0000000..6614b75 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/BackendErrorCodes.d.ts @@ -0,0 +1,67 @@ +export declare enum BackendErrorCodes { + NONE = 0, + UNKNOWN_ERROR = 200, + NOT_AUTHORIZED = 201, + NEED_AUTHORIZATION_CODE = 209, + WRONG_AUTHORIZATION_CODE = 211, + NEED_CAPTCHA = 214, + NO_NEED_CAPTCHA = 215, + CAPTCHA_FAILED = 218, + CAPTCHA_BRUTE_FORCED = 219, + NO_ROOM_IN_STASH = 223, + NICKNAME_NOT_UNIQUE = 225, + NICKNAME_NOT_VALID = 226, + UNSUPPORTED_CLIENT_VERSION = 232, + REPORT_NOT_ALLOWED = 238, + NICKNAME_IS_ABUSIVE = 241, + NICKNAME_CHANGE_TIMEOUT = 242, + NOT_MODIFIED = 304, + HTTP_BAD_REQUEST = 400, + HTTP_NOT_AUTHORIZED = 401, + HTTP_FORBIDDEN = 403, + HTTP_NOT_FOUND = 404, + HTTP_METHOD_NOT_ALLOWED = 405, + UNKNOWN_TRADING_ERROR = 500, + HTTPNOTIMPLEMENTED = 501, + HTTPBADGATEWAY = 502, + HTTPSERVICEUNAVAILABLE = 503, + HTTPGATEWAYTIMEOUT = 504, + TRADEROUTOFMONEY = 505, + HTTPVARIANTALSONEGOTIATES = 506, + PRICECHANGED = 509, + TRADERDISABLED = 512, + ITEMHASBEENSOLD = 513, + NOTENOUGHSPACEFORMONEY = 518, + HTTPINVALIDSSLCERTIFICATE = 526, + UNKNOWNRAGFAIRERROR = 550, + UNKNOWNRAGFAIRERROR2 = 551, + UNKNOWNMATCHMAKERERROR = 600, + SESSIONPARAMETERSERROR = 601, + SESSIONLOST = 602, + SERVERNOTREGISTERED = 604, + UNKNOWNQUESTERROR = 700, + QUESTBADPARAM = 702, + QUESTNOTFOUND = 703, + QUESTISUNAVAILABLE = 704, + NOFREESPACEFORREWARDS = 705, + WRONGQUESTSTATUS = 706, + CANTCOMPLETEQUEST = 707, + UNKNOWNMAILERROR = 900, + TOOMANYFRIENDREQUESTS = 925, + UNKNOWNSCRIPTEXECUTIONERROR = 1000, + UNKNOWNREPAIRINGERROR = 1200, + UNKNOWNINSURANCEERROR = 1300, + UNKNOWNCURRENCYEXCHANGEERROR = 1400, + OFFERNOTFOUND = 1503, + NOTENOUGHSPACE = 1505, + OFFEROUTOFSTOCK = 1506, + OFFERSOLD = 1507, + RAGFAIRUNAVAILABLE = 1511, + BANNEDERRORCODE = 1513, + INSUFFICIENTNUMBERINSTOCK = 1516, + TOOMANYITEMSTOSELL = 1517, + EXAMINATIONFAILED = 22001, + ITEMALREADYEXAMINED = 22002, + UNKNOWNNGINXERROR = 9000, + PARSERESPONSEERROR = 9001 +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/BaseClasses.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/BaseClasses.d.ts new file mode 100644 index 0000000..c6e880a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/BaseClasses.d.ts @@ -0,0 +1,95 @@ +export declare enum BaseClasses { + WEAPON = "5422acb9af1c889c16000029", + UBGL = "55818b014bdc2ddc698b456b", + ARMOR = "5448e54d4bdc2dcc718b4568", + ARMOREDEQUIPMENT = "57bef4c42459772e8d35a53b", + HEADWEAR = "5a341c4086f77401f2541505", + FACECOVER = "5a341c4686f77469e155819e", + VEST = "5448e5284bdc2dcb718b4567", + BACKPACK = "5448e53e4bdc2d60728b4567", + COMPOUND = "566162e44bdc2d3f298b4573", + VISORS = "5448e5724bdc2ddf718b4568", + FOOD = "5448e8d04bdc2ddf718b4569", + GAS_BLOCK = "56ea9461d2720b67698b456f", + RAIL_COVER = "55818b1d4bdc2d5b648b4572", + DRINK = "5448e8d64bdc2dce718b4568", + BARTER_ITEM = "5448eb774bdc2d0a728b4567", + INFO = "5448ecbe4bdc2d60728b4568", + MEDKIT = "5448f39d4bdc2d0a728b4568", + DRUGS = "5448f3a14bdc2d27728b4569", + STIMULATOR = "5448f3a64bdc2d60728b456a", + MEDICAL = "5448f3ac4bdc2dce718b4569", + MEDICAL_SUPPLIES = "57864c8c245977548867e7f1", + MOD = "5448fe124bdc2da5018b4567", + FUNCTIONAL_MOD = "550aa4154bdc2dd8348b456b", + FUEL = "5d650c3e815116009f6201d2", + GEAR_MOD = "55802f3e4bdc2de7118b4584", + STOCK = "55818a594bdc2db9688b456a", + FOREGRIP = "55818af64bdc2d5b648b4570", + MASTER_MOD = "55802f4a4bdc2ddb688b4569", + MOUNT = "55818b224bdc2dde698b456f", + MUZZLE = "5448fe394bdc2d0d028b456c", + SIGHTS = "5448fe7a4bdc2d6f028b456b", + MEDS = "543be5664bdc2dd4348b4569", + MAP = "567849dd4bdc2d150f8b456e", + MONEY = "543be5dd4bdc2deb348b4569", + NIGHTVISION = "5a2c3a9486f774688b05e574", + KEY = "543be5e94bdc2df1348b4568", + KEY_MECHANICAL = "5c99f98d86f7745c314214b3", + KEYCARD = "5c164d2286f774194c5e69fa", + EQUIPMENT = "543be5f84bdc2dd4348b456a", + THROW_WEAPON = "543be6564bdc2df4348b4568", + FOOD_DRINK = "543be6674bdc2df1348b4569", + PISTOL = "5447b5cf4bdc2d65278b4567", + REVOLVER = "617f1ef5e8b54b0998387733", + SMG = "5447b5e04bdc2d62278b4567", + ASSAULT_RIFLE = "5447b5f14bdc2d61278b4567", + ASSAULT_CARBINE = "5447b5fc4bdc2d87278b4567", + SHOTGUN = "5447b6094bdc2dc3278b4567", + MARKSMAN_RIFLE = "5447b6194bdc2d67278b4567", + SNIPER_RIFLE = "5447b6254bdc2dc3278b4568", + MACHINE_GUN = "5447bed64bdc2d97278b4568", + GRENADE_LAUNCHER = "5447bedf4bdc2d87278b4568", + SPECIAL_WEAPON = "5447bee84bdc2dc3278b4569", + SPEC_ITEM = "5447e0e74bdc2d3c308b4567", + KNIFE = "5447e1d04bdc2dff2f8b4567", + AMMO = "5485a8684bdc2da71d8b4567", + AMMO_BOX = "543be5cb4bdc2deb348b4568", + LOOT_CONTAINER = "566965d44bdc2d814c8b4571", + MOD_CONTAINER = "5448bf274bdc2dfc2f8b456a", + SEARCHABLE_ITEM = "566168634bdc2d144c8b456c", + STASH = "566abbb64bdc2d144c8b457d", + SORTING_TABLE = "6050cac987d3f925bf016837", + LOCKABLE_CONTAINER = "5671435f4bdc2d96058b4569", + SIMPLE_CONTAINER = "5795f317245977243854e041", + INVENTORY = "55d720f24bdc2d88028b456d", + STATIONARY_CONTAINER = "567583764bdc2d98058b456e", + POCKETS = "557596e64bdc2dc2118b4571", + ARMBAND = "5b3f15d486f77432d0509248", + DOG_TAG_USEC = "59f32c3b86f77472a31742f0", + DOG_TAG_BEAR = "59f32bb586f774757e1e8442", + JEWELRY = "57864a3d24597754843f8721", + ELECTRONICS = "57864a66245977548f04a81f", + BUILDING_MATERIAL = "57864ada245977548638de91", + TOOL = "57864bb7245977548b3b66c2", + HOUSEHOLD_GOODS = "57864c322459775490116fbf", + LUBRICANT = "57864e4c24597754843f8723", + BATTERY = "57864ee62459775490116fc1", + ASSAULT_SCOPE = "55818add4bdc2d5b648b456f", + TACTICAL_COMBO = "55818b164bdc2ddc698b456c", + FLASHLIGHT = "55818b084bdc2d5b648b4571", + MAGAZINE = "5448bc234bdc2d3c308b4569", + LIGHT_LASER_DESIGNATOR = "55818b0e4bdc2dde698b456e", + FLASH_HIDER = "550aa4bf4bdc2dd6348b456b", + COLLIMATOR = "55818ad54bdc2ddc698b4569", + IRON_SIGHT = "55818ac54bdc2d5b648b456e", + COMPACT_COLLIMATOR = "55818acf4bdc2dde698b456b", + COMPENSATOR = "550aa4af4bdc2dd4348b456e", + OPTIC_SCOPE = "55818ae44bdc2dde698b456c", + SPECIAL_SCOPE = "55818aeb4bdc2ddc698b456a", + OTHER = "590c745b86f7743cc433c5f2", + SILENCER = "550aa4cd4bdc2dd8348b456c", + PORTABLE_RANGE_FINDER = "61605ddea09d851a0a0c1bbc", + ITEM = "54009119af1c881c07000029", + CYLINDER_MAGAZINE = "610720f290b75a49ff2e5e25" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/BotAmount.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/BotAmount.d.ts new file mode 100644 index 0000000..9ef9cab --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/BotAmount.d.ts @@ -0,0 +1,7 @@ +export declare enum BotAmount { + AS_ONLINE = "AsOnline", + LOW = "Low", + MEDIUM = "Medium", + HIGH = "High", + HORDE = "Horde" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/BotDifficulty.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/BotDifficulty.d.ts new file mode 100644 index 0000000..80e45ad --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/BotDifficulty.d.ts @@ -0,0 +1,8 @@ +export declare enum BotDifficulty { + AS_ONLINE = "AsOnline", + EASY = "Easy", + MEDIUM = "Medium", + HARD = "Hard", + IMPOSSIBLE = "Impossible", + RANDOM = "Random" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ConfigTypes.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ConfigTypes.d.ts new file mode 100644 index 0000000..9c48b68 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ConfigTypes.d.ts @@ -0,0 +1,23 @@ +export declare enum ConfigTypes { + AIRDROP = "aki-airdrop", + BOT = "aki-bot", + CORE = "aki-core", + HEALTH = "aki-health", + HIDEOUT = "aki-hideout", + HTTP = "aki-http", + IN_RAID = "aki-inraid", + INSURANCE = "aki-insurance", + INVENTORY = "aki-inventory", + ITEM = "aki-item", + LOCALE = "aki-locale", + LOCATION = "aki-location", + MATCH = "aki-match", + PLAYERSCAV = "aki-playerscav", + QUEST = "aki-quest", + RAGFAIR = "aki-ragfair", + REPAIR = "aki-repair", + SCAVCASE = "aki-scavcase", + TRADER = "aki-trader", + WEATHER = "aki-weather", + SEASONAL_EVENT = "aki-seasonalevents" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ContainerTypes.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ContainerTypes.d.ts new file mode 100644 index 0000000..e6b330a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ContainerTypes.d.ts @@ -0,0 +1,29 @@ +export declare enum CommonContainers { + AMMO_CASE = "5aafbde786f774389d0cbc0f", + DOCUMENTS_CASE = "590c60fc86f77412b13fddcf", + DOGTAG_CASE = "5c093e3486f77430cb02e593", + GRENADE_CASE = "5e2af55f86f7746d4159f07c", + INJECTOR_CASE = "619cbf7d23893217ec30b689", + ITEM_CASE = "59fb042886f7746c5005a7b2", + KEY_TOOL = "59fafd4b86f7745ca07e1232", + KEYCARD_HOLDER = "619cbf9e0a7c3a1a2731940a", + SCAV_JUNKBOX = "5b7c710788a4506dec015957", + MAGAZINE_CASE = "5c127c4486f7745625356c13", + MEDICINE_CASE = "5aafbcd986f7745e590fff23", + MONEY_CASE = "59fb016586f7746d0d4b423a", + HOLODILNICK_THERMAL_BAG = "5c093db286f7740a1b2617e3", + PISTOL_CASE = "567143bf4bdc2d1a0f8b4567", + SICC_ORGANIZATIONAL_POUCH = "5d235bb686f77443f4331278", + SIMPLE_WALLET = "5783c43d2459774bbe137486", + THICC_ITEM_CASE = "5c0a840b86f7742ffa4f2482", + THICC_WEAPON_CASE = "5b6d9ce188a4501afc1b2b25", + WEAPON_CASE = "59fb023c86f7746d0d4b423c", + WZ_WALLET = "60b0f6c058e0b0481a09ad11" +} +export declare enum SecuredContainers { + ALPHA = "544a11ac4bdc2d470e8b456a", + BETA = "5857a8b324597729ab0a0e7d", + EPSILON = "59db794186f77448bc595262", + GAMMA = "5857a8bc2459772bad15db29", + KAPPA = "5c093ca986f7740a1867ab12" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ELocationName.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ELocationName.d.ts new file mode 100644 index 0000000..c52ae87 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ELocationName.d.ts @@ -0,0 +1,13 @@ +export declare enum ELocationName { + FACTORY_DAY = "factory4_day", + FACTORY_NIGHT = "factory4_night", + BIGMAP = "bigmap", + WOODS = "Woods", + SHORELINE = "Shoreline", + INTERCHANGE = "Interchange", + LIGHTHOUSE = "Lighthouse", + LABORATORY = "laboratory", + RESERVE = "RezervBase", + STREETS = "TarkovStreets", + ANY = "any" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/EquipmentSlots.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/EquipmentSlots.d.ts new file mode 100644 index 0000000..35c18ff --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/EquipmentSlots.d.ts @@ -0,0 +1,16 @@ +export declare enum EquipmentSlots { + HEADWEAR = "Headwear", + EARPIECE = "Earpiece", + FACE_COVER = "FaceCover", + ARMOR_VEST = "ArmorVest", + EYEWEAR = "Eyewear", + ARM_BAND = "ArmBand", + TACTICAL_VEST = "TacticalVest", + POCKETS = "Pockets", + BACKPACK = "Backpack", + SECURED_CONTAINER = "SecuredContainer", + FIRST_PRIMARY_WEAPON = "FirstPrimaryWeapon", + SECOND_PRIMARY_WEAPON = "SecondPrimaryWeapon", + HOLSTER = "Holster", + SCABBARD = "Scabbard" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ExitStatis.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ExitStatis.d.ts new file mode 100644 index 0000000..78d9733 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ExitStatis.d.ts @@ -0,0 +1,7 @@ +export declare enum ExitStatus { + SURVIVED = 0, + KILLED = 1, + LEFT = 2, + RUNNER = 3, + MISSINGINACTION = 4 +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/HideoutAreas.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/HideoutAreas.d.ts new file mode 100644 index 0000000..c8313d9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/HideoutAreas.d.ts @@ -0,0 +1,27 @@ +export declare enum HideoutAreas { + NOTSET = -1, + VENTS = 0, + SECURITY = 1, + LAVATORY = 2, + STASH = 3, + GENERATOR = 4, + HEATING = 5, + WATER_COLLECTOR = 6, + MEDSTATION = 7, + NUTRITION_UNIT = 8, + REST_SPACE = 9, + WORKBENCH = 10, + INTEL_CENTER = 11, + SHOOTING_RANGE = 12, + LIBRARY = 13, + SCAV_CASE = 14, + ILLUMINATION = 15, + PLACE_OF_FAME = 16, + AIR_FILTERING = 17, + SOLAR_POWER = 18, + BOOZE_GENERATOR = 19, + BITCOIN_FARM = 20, + CHRISTMAS_TREE = 21, + EMERGENCY_WALL = 22, + GYM = 23 +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/HideoutEventActions.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/HideoutEventActions.d.ts new file mode 100644 index 0000000..aa04131 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/HideoutEventActions.d.ts @@ -0,0 +1,13 @@ +export declare enum HideoutEventActions { + HIDEOUT_UPGRADE = "HideoutUpgrade", + HIDEOUT_UPGRADE_COMPLETE = "HideoutUpgradeComplete", + HIDEOUT_PUT_ITEMS_IN_AREA_SLOTS = "HideoutPutItemsInAreaSlots", + HIDEOUT_TAKE_ITEMS_FROM_AREA_SLOTS = "HideoutTakeItemsFromAreaSlots", + HIDEOUT_TOGGLE_AREA = "HideoutToggleArea", + HIDEOUT_SINGLE_PRODUCTION_START = "HideoutSingleProductionStart", + HIDEOUT_SCAV_CASE_PRODUCTION_START = "HideoutScavCaseProductionStart", + HIDEOUT_CONTINUOUS_PRODUCTION_START = "HideoutContinuousProductionStart", + HIDEOUT_TAKE_PRODUCTION = "HideoutTakeProduction", + HIDEOUT_RECORD_SHOOTING_RANGE_POINTS = "RecordShootingRangePoints", + HIDEOUT_IMPROVE_AREA = "HideoutImproveArea" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ItemEventActions.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ItemEventActions.d.ts new file mode 100644 index 0000000..94061f8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/ItemEventActions.d.ts @@ -0,0 +1,20 @@ +export declare enum ItemEventActions { + MOVE = "Move", + REMOVE = "Remove", + SPLIT = "Split", + MERGE = "Merge", + TRANSFER = "Transfer", + SWAP = "Swap", + FOLD = "Fold", + TOGGLE = "Toggle", + TAG = "Tag", + BIND = "Bind", + EXAMINE = "Examine", + READ_ENCYCLOPEDIA = "ReadEncyclopedia", + APPLY_INVENTORY_CHANGES = "ApplyInventoryChanges", + CREATE_MAP_MARKER = "CreateMapMarker", + DELETE_MAP_MARKER = "DeleteMapMarker", + EDIT_MAP_MARKER = "EditMapMarker", + OPEN_RANDOM_LOOT_CONTAINER = "OpenRandomLootContainer", + HIDEOUT_QTE_EVENT = "HideoutQuickTimeEvent" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/MemberCategory.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/MemberCategory.d.ts new file mode 100644 index 0000000..a81380e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/MemberCategory.d.ts @@ -0,0 +1,13 @@ +export declare enum MemberCategory { + DEFAULT = 0, + DEVELOPER = 1, + UNIQUE_ID = 2, + TRADER = 4, + GROUP = 8, + SYSTEM = 16, + CHAT_MODERATOR = 32, + CHAT_MODERATOR_WITH_PERMANENT_BAN = 64, + UNIT_TEST = 128, + SHERPA = 256, + EMISSARY = 512 +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/MessageType.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/MessageType.d.ts new file mode 100644 index 0000000..1b0c649 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/MessageType.d.ts @@ -0,0 +1,16 @@ +export declare enum MessageType { + USER_MESSAGE = 1, + NPC_TRADER = 2, + AUCTION_MESSAGE = 3, + FLEAMARKET_MESSAGE = 4, + ADMIN_MESSAGE = 5, + GROUP_CHAT_MESSAGE = 6, + SYSTEM_MESSAGE = 7, + INSURANCE_RETURN = 8, + GLOBAL_CHAT = 9, + QUEST_START = 10, + QUEST_FAIL = 11, + QUEST_SUCCESS = 12, + MESSAGE_WITH_ITEMS = 13, + INITIAL_SUPPORT = 14 +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/Money.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/Money.d.ts new file mode 100644 index 0000000..0d39613 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/Money.d.ts @@ -0,0 +1,5 @@ +export declare enum Money { + ROUBLES = "5449016a4bdc2d6f028b456f", + EUROS = "569668774bdc2da2298b4568", + DOLLARS = "5696686a4bdc2da3298b456a" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/QuestRewardType.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/QuestRewardType.d.ts new file mode 100644 index 0000000..ff8c5f4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/QuestRewardType.d.ts @@ -0,0 +1,9 @@ +export declare enum QuestRewardType { + SKILL = "Skill", + EXPERIENCE = "Experience", + TRADER_STANDING = "TraderStanding", + TRADER_UNLOCK = "TraderUnlock", + ITEM = "Item", + ASSORTMENT_UNLOCK = "AssortmentUnlock", + PRODUCTIONS_SCHEME = "ProductionScheme" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/QuestStatus.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/QuestStatus.d.ts new file mode 100644 index 0000000..e706c05 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/QuestStatus.d.ts @@ -0,0 +1,12 @@ +export declare enum QuestStatus { + Locked = 0, + AvailableForStart = 1, + Started = 2, + AvailableForFinish = 3, + Success = 4, + Fail = 5, + FailRestartable = 6, + MarkedAsFailed = 7, + Expired = 8, + AvailableAfter = 9 +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/RagfairSort.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/RagfairSort.d.ts new file mode 100644 index 0000000..798a5e7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/RagfairSort.d.ts @@ -0,0 +1,7 @@ +export declare enum RagfairSort { + ID = 0, + RATING = 3, + OFFER_TITLE = 4, + PRICE = 5, + EXPIRY = 6 +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/RaidMode.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/RaidMode.d.ts new file mode 100644 index 0000000..e20cf3f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/RaidMode.d.ts @@ -0,0 +1,5 @@ +export declare enum RaidMode { + ONLINE = "Online", + LOCAL = "Local", + COOP = "Coop" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/SkillTypes.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/SkillTypes.d.ts new file mode 100644 index 0000000..4eb90af --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/SkillTypes.d.ts @@ -0,0 +1,52 @@ +export declare enum SkillTypes { + HIDEOUT_MANAGEMENT = "HideoutManagement", + CRAFTING = "Crafting", + METABOLISM = "Metabolism", + IMMUNITY = "Immunity", + ENDURANCE = "Endurance", + STRENGTH = "Strength", + VITALITY = "Vitality", + HEALTH = "Health", + STRESS_RESISTANCE = "StressResistance", + THROWING = "Throwing", + RECOIL_CONTROL = "RecoilControl", + COVERT_MOVEMENT = "CovertMovement", + FIELD_MEDICINE = "FieldMedicine", + SEARCH = "Search", + SNIPING = "Sniping", + PERCEPTION = "Perception", + INTELLECT = "Intellect", + ATTENTION = "Attention", + CHARISMA = "Charisma", + MEMORY = "Memory", + SURGERY = "Surgery", + AIM_DRILLS = "AimDrills", + TROUBLESHOOTING = "TroubleShooting", + PRONE_MOVEMENT = "ProneMovement", + FIRST_AID = "FirstAid", + LIGHT_VESTS = "LightVests", + HEAVY_VESTS = "HeavyVests", + WEAPON_MODDING = "WeaponModding", + ADVANCED_MODDING = "AdvancedModding", + NIGHT_OPS = "NightOps", + SILENT_OPS = "SilentOps", + LOCKPICKING = "Lockpicking", + WEAPON_TREATMENT = "WeaponTreatment", + MAG_DRILLS = "MagDrills", + FREE_TRADING = "Freetrading", + AUCTIONS = "Auctions", + CLEAN_OPS = "Cleanoperations", + BARTER = "Barter", + SHADOW_CONNECTIONS = "Shadowconnections", + TASK_PERFORMANCE = "Taskperformance", + BEAR_ASSAULT_OPS = "BearAssaultoperations", + BEAR_AUTHORITY = "BearAuthority", + BEAR_AK_SYSTEMS = "BearAksystems", + BEAR_HEAVY_CAL = "BearHeavycaliber", + BEAR_RAW_POWER = "BearRawpower", + USEC_AR_SYSTEMS = "UsecArsystems", + USEC_DEEP_WEAPON_MOD = "UsecDeepweaponmodding_Settings", + USEC_LONG_RANGE_OPTICS = "UsecLongrangeoptics_Settings", + USEC_NEGOTIATIONS = "UsecNegotiations", + USEC_TACTICS = "UsecTactics" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/Traders.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/Traders.d.ts new file mode 100644 index 0000000..ffea725 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/Traders.d.ts @@ -0,0 +1,11 @@ +export declare enum Traders { + PRAPOR = "54cb50c76803fa8b248b4571", + THERAPIST = "54cb57776803fa99248b456e", + FENCE = "579dc571d53a0658a154fbec", + SKIER = "58330581ace78e27b8b10cee", + PEACEKEEPER = "5935c25fb3acc3127c3d8cd9", + MECHANIC = "5a7c2eca46aef81a7ca2145d", + RAGMAN = "5ac3b934156ae10c4430e83c", + JAEGER = "5c0647fdd443bc2504c2d371", + LIGHTHOUSEKEEPER = "638f541a29ffd1183d187f57" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WeaponSkillTypes.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WeaponSkillTypes.d.ts new file mode 100644 index 0000000..1e20a2d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WeaponSkillTypes.d.ts @@ -0,0 +1,14 @@ +export declare enum WeaponSkillTypes { + PISTOL = "Pistol", + REVOLVER = "Revolver", + SMG = "SMG", + ASSAULT = "Assault", + SHOTGUN = "Shotgun", + SNIPER = "Sniper", + LMG = "LMG", + HMG = "HMG", + DMR = "DMR", + LAUNCHER = "Launcher", + ATTACHED_LAUNCHER = "AttachedLauncher", + MELEE = "Melee" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WeaponTypes.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WeaponTypes.d.ts new file mode 100644 index 0000000..867b052 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WeaponTypes.d.ts @@ -0,0 +1,151 @@ +export declare enum Weapons127x55 { + ASH_12 = "5cadfbf7ae92152ac412eeef" +} +export declare enum Weapons86x70 { + MK_18 = "5fc22d7c187fea44d52eda44", + AXMC = "627e14b21713922ded6f2c15" +} +export declare enum Weapons9x39 { + AS_VAL = "57c44b372459772d2b39b8ce", + VSS_VINTOREZ = "57838ad32459774a17445cd2" +} +export declare enum Weapons762x54R { + SVDS = "5c46fbd72e2216398b5a8c9c", + MP_18 = "61f7c9e189e6fb1a5e3ea78d", + MOSIN_INFANTRY = "5bfd297f0db834001a669119", + MOSIN_SNIPER = "5ae08f0a5acfc408fb1398a1", + SV_98 = "55801eed4bdc2d89578b4588" +} +export declare enum Weapons762x51 { + VPO_101 = "5c501a4d2e221602b412b540", + DT_MDR_762 = "5dcbd56fdbd3d91b3e5468d5", + SA_58 = "5b0bbe4e5acfc40dc528a72d", + SCARH_BLACK = "6183afd850224f204c1da514", + SCARH_FDE = "6165ac306ef05c2ce828ef74", + HK_G28 = "6176aca650224f204c1da3fb", + M1A = "5aafa857e5b5b00018480968", + RFB = "5f2a9575926fd9352339381f", + RSASS = "5a367e5dc4a282000e49738f", + SR_25 = "5df8ce05b11454561e39243b", + DVL_10 = "588892092459774ac91d4b11", + M700 = "5bfea6e90db834001b7347f3", + T5000M = "5df24cf80dee1b22f862e9bc" +} +export declare enum Weapons366TKM { + VPO_209 = "59e6687d86f77411d949b251", + VPO_215 = "5de652c31b7e3716273428be" +} +export declare enum Weapons762x39 { + OP_SKS = "587e02ff24597743df3deaeb", + SKS = "574d967124597745970e7c94", + AK_103 = "5ac66d2e5acfc43b321d4b53", + AK_104 = "5ac66d725acfc43b321d4b60", + AKM = "59d6088586f774275f37482f", + AKMN = "5a0ec13bfcdbcb00165aa685", + AKMS = "59ff346386f77477562ff5e2", + AKMSN = "5abcbc27d8ce8700182eceeb", + MK47_MUTANT = "606587252535c57a13424cfd", + RD_704 = "628a60ae6b1d481ff772e9c8", + VPO_136 = "59e6152586f77473dc057aa1" +} +export declare enum Weapons762x35 { + MCX = "5fbcc1d9016cce60e8341ab3" +} +export declare enum Weapons556x45 { + ADAR_2_15 = "5c07c60e0db834002330051f", + AK_101 = "5ac66cb05acfc40198510a10", + AK_102 = "5ac66d015acfc400180ae6e4", + DT_MDR_556 = "5c488a752e221602b412af63", + HK_416A5 = "5bb2475ed4351e00853264e3", + HK_G36 = "623063e994fc3f7b302a9696", + M4A1 = "5447a9cd4bdc2dbd208b4567", + SCARL_BLACK = "6184055050224f204c1da540", + SCARL_FDE = "618428466ef05c2ce828f218", + TX15_DML = "5d43021ca4b9362eab4b5e25" +} +export declare enum Weapons545x39 { + AK_105 = "5ac66d9b5acfc4001633997a", + AK_74 = "5bf3e03b0db834001d2c4a9c", + AK_74M = "5ac4cd105acfc40016339859", + AK_74N = "5644bd2b4bdc2d3b4c8b4572", + AKS_74 = "5bf3e0490db83400196199af", + AKS_74N = "5ab8e9fcd8ce870019439434", + AKS_74U = "57dc2fa62459775949412633", + AKS_74UB = "5839a40f24597726f856b511", + AKS_74UN = "583990e32459771419544dd2", + SAG_AK = "628b5638ad252a16da6dd245", + SAG_AK_SHORT = "628b9c37a733087d0d7fe84b", + RPK_16 = "5beed0f50db834001c062b12" +} +export declare enum Weapons57x28FN { + FN_57_BLACK = "5d3eb3b0a4b93615055e84d2", + FN_57_FDE = "5d67abc1a4b93614ec50137f", + FN_P90 = "5cc82d76e24e8d00134b4b83" +} +export declare enum Weapons46x30HK { + MP7A1 = "5ba26383d4351e00334c93d9", + MP7A2 = "5bd70322209c4d00d7167b8f" +} +export declare enum Weapons1143x23 { + M1911A1 = "5e81c3cbac2bb513793cdc75", + M45A1 = "5f36a0e5fbf956000b716b65", + USP45 = "6193a720f8ee7e52e42109ed", + UMP45 = "5fc3e272f8b6a877a729eac5", + VECTOR45 = "5fb64bc92b1b027b1f50bcf2" +} +export declare enum Weapons9x33R { + CR_50DS = "61a4c8884f95bc3b2c5dc96f" +} +export declare enum Weapons9x21 { + SR_1MP = "59f98b4986f7746f546d2cef" +} +export declare enum Weapons9x19 { + GLOCK_17 = "5a7ae0c351dfba0017554310", + GLOCK_18C = "5b1fa9b25acfc40018633c01", + M9A3 = "5cadc190ae921500103bb3b6", + MP_443 = "576a581d2459771e7b1bc4f1", + P226R = "56d59856d2720bd8418b456a", + PL_15 = "602a9740da11d6478d5a06dc", + CR_200DS = "624c2e8614da335f1e034d8c", + MP5 = "5926bb2186f7744b1c6c6e60", + MP5K = "5d2f0d8048f0356c925bc3b0", + MP9 = "5e00903ae9dc277128008b87", + MP9_N = "5de7bd7bfd6b4e6e2276dc25", + MPX = "58948c8e86f77409493f7266", + PP_19_01 = "59984ab886f7743e98271174", + SAIGA_9 = "59f9cabd86f7743a10721f46", + STM_9 = "60339954d62c9b14ed777c06", + VECTOR_9MM = "5fc3f2d5900b1d5091531e57" +} +export declare enum Weapons9x18 { + APB = "5abccb7dd8ce87001773e277", + APS = "5a17f98cfcdbcb0980087290", + PB_SILENCED = "56e0598dd2720bb5668b45a6", + PM = "5448bd6b4bdc2dfc2f8b4569", + PM_T = "579204f224597773d619e051", + PP9_KLIN = "57f4c844245977379d5c14d1", + PP91_KEDR = "57d14d2524597714373db789", + PP91_KEDRB = "57f3c6bd24597738e730fa2f" +} +export declare enum Weapons762x25 { + TT = "571a12c42459771f627b58a0", + TT_GOLD = "5b3b713c5acfc4330140bd8d", + PPSH_41 = "5ea03f7400685063ec28bfa8" +} +export declare enum Weapons12Gauge { + M3_SUPER90 = "6259b864ebedf17603599e88", + M590A1 = "5e870397991fd70db46995c8", + M870 = "5a7828548dc32e5a9c28b516", + MP_133 = "54491c4f4bdc2db1078b4568", + MP_153 = "56dee2bdd2720bc8328b4567", + MP_155 = "606dae0ab0e443224b421bb7", + MP_43_1C = "5580223e4bdc2d1c128b457f", + MTS_255_12 = "60db29ce99594040e04c4a27", + SAIGA_12GA = "576165642459773c7a400233" +} +export declare enum Weapons20Gauge { + TOZ_106 = "5a38e6bac4a2826c6e06d79b" +} +export declare enum Weapons23x75 { + KS_23M = "5e848cc2988a8701445df1e8" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WeatherType.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WeatherType.d.ts new file mode 100644 index 0000000..d31fefe --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WeatherType.d.ts @@ -0,0 +1,19 @@ +export declare enum WeatherType { + CLEAR_DAY = 1, + CLEAR_WIND = 2, + CLEAR_NIGHT = 3, + PARTLY_CLOUD_DAY = 4, + PARTLY_CLOUD_NIGHT = 5, + CLEAR_FOG_DAY = 6, + CLEAR_FOG_NIGHT = 7, + CLOUDFOG = 8, + FOG = 9, + MOSTLY_CLOUD = 10, + LIGHT_RAIN = 11, + RAIN = 12, + CLOUD_WIND = 13, + CLOUD_WIND_RAIN = 14, + FULL_CLOUD = 15, + THUNDER_CLOUD = 16, + NONE = 0 +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WildSpawnTypeNumber.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WildSpawnTypeNumber.d.ts new file mode 100644 index 0000000..ff806fe --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WildSpawnTypeNumber.d.ts @@ -0,0 +1,33 @@ +export declare enum WildSpawnTypeNumber { + ASSAULT = 1, + MARKSMAN = 2, + BOSSTEST = 4, + BOSSBULLY = 8, + FOLLOWERTEST = 16, + FOLLOWERBULLY = 32, + BOSSKILLA = 64, + BOSSKOJANIY = 128, + FOLLOWERKOJANIY = 256, + PMCBOT = 512, + CURSEDASSAULT = 1024, + BOSSGLUHAR = 2048, + FOLLOWERGLUHARASSAULT = 4096, + FOLLOWERGLUHARSECURITY = 8192, + FOLLOWERGLUHARSCOUT = 16384, + FOLLOWERGLUHARSNIPE = 32768, + FOLLOWERSANITAR = 65536, + BOSSSANITAR = 131072, + TEST = 262144, + ASSAULTGROUP = 524288, + SECTANTWARRIOR = 1048576, + SECTANTPRIEST = 2097152, + BOSSTAGILLA = 4194304, + FOLLOWERTAGILLA = 8388608, + EXUSEC = 16777216, + GIFTER = 33554432, + BOSSKNIGHT = 67108864, + FOLLOWERBIGPIPE = 134217728, + FOLLOWERBIRDEYE = 268435456, + SPTUSEC = 536870912, + SPTBEAR = 1073741824 +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WindDirection.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WindDirection.d.ts new file mode 100644 index 0000000..fb30b20 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/enums/WindDirection.d.ts @@ -0,0 +1,10 @@ +export declare enum WindDirection { + EAST = 1, + NORTH = 2, + WEST = 3, + SOUTH = 4, + SE = 5, + SW = 6, + NW = 7, + NE = 8 +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/external/HttpFramework.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/external/HttpFramework.d.ts new file mode 100644 index 0000000..64a37d6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/external/HttpFramework.d.ts @@ -0,0 +1,33 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +export type HandleFn = (_: string, req: IncomingMessage, resp: ServerResponse) => void; +/** + * Associates handlers, HTTP methods and a base url to a listener using a proxy + * @param basePath The base path + * @returns The decorator that create the listener proxy + */ +export declare const Listen: (basePath: string) => any>(Base: T) => T; +/** + * HTTP DELETE decorator + */ +export declare const Delete: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP GET decorator + */ +export declare const Get: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP OPTIONS decorator + */ +export declare const Options: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP PATCH decorator + */ +export declare const Patch: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP POST decorator + */ +export declare const Post: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP PUT decorator + */ +export declare const Put: (path?: string) => (target: any, propertyKey: string) => void; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPostAkiLoadMod.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPostAkiLoadMod.d.ts new file mode 100644 index 0000000..f6950e8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPostAkiLoadMod.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPostAkiLoadMod { + postAkiLoad(container: DependencyContainer): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPostAkiLoadModAsync.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPostAkiLoadModAsync.d.ts new file mode 100644 index 0000000..073ce6e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPostAkiLoadModAsync.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPostAkiLoadModAsync { + postAkiLoadAsync(container: DependencyContainer): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPostDBLoadMod.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPostDBLoadMod.d.ts new file mode 100644 index 0000000..ca7c682 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPostDBLoadMod.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPostDBLoadMod { + postDBLoad(container: DependencyContainer): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPostDBLoadModAsync.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPostDBLoadModAsync.d.ts new file mode 100644 index 0000000..b23825a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPostDBLoadModAsync.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPostDBLoadModAsync { + postDBLoadAsync(container: DependencyContainer): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPreAkiLoadMod.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPreAkiLoadMod.d.ts new file mode 100644 index 0000000..ae7579e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPreAkiLoadMod.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPreAkiLoadMod { + preAkiLoad(container: DependencyContainer): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPreAkiLoadModAsync.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPreAkiLoadModAsync.d.ts new file mode 100644 index 0000000..1249ff1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/external/IPreAkiLoadModAsync.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPreAkiLoadModAsync { + preAkiLoadAsync(container: DependencyContainer): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/external/tsyringe.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/external/tsyringe.d.ts new file mode 100644 index 0000000..56a7e58 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/external/tsyringe.d.ts @@ -0,0 +1,2 @@ +import type { DependencyContainer } from "tsyringe"; +export type { DependencyContainer }; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/bindings/Route.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/bindings/Route.d.ts new file mode 100644 index 0000000..1b29d7d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/bindings/Route.d.ts @@ -0,0 +1,3 @@ +export interface IRoute { + aki: any; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/bots/BotGenerationDetails.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/bots/BotGenerationDetails.d.ts new file mode 100644 index 0000000..26571a2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/bots/BotGenerationDetails.d.ts @@ -0,0 +1,18 @@ +export interface BotGenerationDetails { + /** Should the bot be generated as a PMC */ + isPmc: boolean; + /** assault/pmcBot etc */ + role: string; + /** Side of bot */ + side: string; + /** Active players current level */ + playerLevel: number; + /** Delta of highest level of bot */ + botRelativeLevelDeltaMax: number; + /** How many to create and store */ + botCountToGenerate: number; + /** Desired difficulty of the bot */ + botDifficulty: string; + /** Will the generated bot be a player scav */ + isPlayerScav: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/bots/BotLootCache.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/bots/BotLootCache.d.ts new file mode 100644 index 0000000..aedf7b0 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/bots/BotLootCache.d.ts @@ -0,0 +1,23 @@ +import { ITemplateItem } from "../../eft/common/tables/ITemplateItem"; +export declare class BotLootCache { + backpackLoot: ITemplateItem[]; + pocketLoot: ITemplateItem[]; + vestLoot: ITemplateItem[]; + combinedPoolLoot: ITemplateItem[]; + specialItems: ITemplateItem[]; + healingItems: ITemplateItem[]; + drugItems: ITemplateItem[]; + stimItems: ITemplateItem[]; + grenadeItems: ITemplateItem[]; +} +export declare enum LootCacheType { + SPECIAL = "Special", + BACKPACK = "Backpack", + POCKET = "Pocket", + VEST = "Vest", + COMBINED = "Combined", + HEALING_ITEMS = "HealingItems", + DRUG_ITEMS = "DrugItems", + STIM_ITEMS = "StimItems", + GRENADE_ITEMS = "GrenadeItems" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/bots/GenerateWeaponResult.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/bots/GenerateWeaponResult.d.ts new file mode 100644 index 0000000..56fa481 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/bots/GenerateWeaponResult.d.ts @@ -0,0 +1,10 @@ +import { Mods } from "../../eft/common/tables/IBotType"; +import { Item } from "../../eft/common/tables/IItem"; +import { ITemplateItem } from "../../eft/common/tables/ITemplateItem"; +export declare class GenerateWeaponResult { + weapon: Item[]; + chosenAmmoTpl: string; + chosenUbglAmmoTpl: string; + weaponMods: Mods; + weaponTemplate: ITemplateItem; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IBotCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IBotCallbacks.d.ts new file mode 100644 index 0000000..2c42813 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IBotCallbacks.d.ts @@ -0,0 +1,10 @@ +import { IGenerateBotsRequestData } from "../../eft/bot/IGenerateBotsRequestData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IBotBase } from "../../eft/common/tables/IBotBase"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +export interface IBotCallbacks { + getBotLimit(url: string, info: IEmptyRequestData, sessionID: string): string; + getBotDifficulty(url: string, info: IEmptyRequestData, sessionID: string): string; + generateBots(url: string, info: IGenerateBotsRequestData, sessionID: string): IGetBodyResponseData; + getBotCap(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IBundleCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IBundleCallbacks.d.ts new file mode 100644 index 0000000..7e37c6e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IBundleCallbacks.d.ts @@ -0,0 +1,5 @@ +export interface IBundleCallbacks { + 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; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ICustomizationCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ICustomizationCallbacks.d.ts new file mode 100644 index 0000000..d10027f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ICustomizationCallbacks.d.ts @@ -0,0 +1,12 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IBuyClothingRequestData } from "../../eft/customization/IBuyClothingRequestData"; +import { IWearClothingRequestData } from "../../eft/customization/IWearClothingRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { ISuit } from "../../eft/common/tables/ITrader"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface ICustomizationCallbacks { + getSuits(url: string, info: any, sessionID: string): IGetBodyResponseData; + getTraderSuits(url: string, info: any, sessionID: string): IGetBodyResponseData; + wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse; + buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IDataCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IDataCallbacks.d.ts new file mode 100644 index 0000000..b4f4f8c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IDataCallbacks.d.ts @@ -0,0 +1,25 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGlobals } from "../../eft/common/IGlobals"; +import { IQuest } from "../../eft/common/tables/IQuest"; +import { IHideoutArea } from "../../eft/hideout/IHideoutArea"; +import { IHideoutProduction } from "../../eft/hideout/IHideoutProduction"; +import { IHideoutScavCase } from "../../eft/hideout/IHideoutScavCase"; +import { IHideoutSettingsBase } from "../../eft/hideout/IHideoutSettingsBase"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { ISettingsBase } from "../server/ISettingsBase"; +export interface IDataCallbacks { + getSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getGlobals(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateItems(url: string, info: IEmptyRequestData, sessionID: string): string; + getTemplateHandbook(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateCharacter(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateQuests(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutAreas(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + gethideoutProduction(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutScavcase(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocalesLanguages(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + getLocalesMenu(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocalesGlobal(url: string, info: IEmptyRequestData, sessionID: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IDialogueCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IDialogueCallbacks.d.ts new file mode 100644 index 0000000..fe2115a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IDialogueCallbacks.d.ts @@ -0,0 +1,34 @@ +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../../eft/httpResponse/INullResponseData"; +import { IGetMailDialogViewRequestData } from "../../eft/dialog/IGetMailDialogViewRequestData"; +import { IGetMailDialogInfoRequestData } from "../../eft/dialog/IGetMailDialogInfoRequestData"; +import { IRemoveDialogRequestData } from "../../eft/dialog/IRemoveDialogRequestData"; +import { IGetMailDialogListRequestData } from "../../eft/dialog/IGetMailDialogListRequestData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IFriendRequestData } from "../../eft/dialog/IFriendRequestData"; +import { IPinDialogRequestData } from "../../eft/dialog/IPinDialogRequestData"; +import { ISetDialogReadRequestData } from "../../eft/dialog/ISetDialogReadRequestData"; +import { IGetAllAttachmentsRequestData } from "../../eft/dialog/IGetAllAttachmentsRequestData"; +import { IGetChatServerListRequestData } from "../../eft/dialog/IGetChatServerListRequestData"; +import { IGetFriendListDataResponse } from "../../eft/dialog/IGetFriendListDataResponse"; +import { ISendMessageRequest } from "../../eft/dialog/ISendMessageRequest"; +import { IGetMailDialogViewResponseData } from "../../eft/dialog/IGetMailDialogViewResponseData"; +import { IGetAllAttachmentsResponse } from "../../eft/dialog/IGetAllAttachmentsResponse"; +import { DialogueInfo } from "../../eft/profile/IAkiProfile"; +export interface IDialogueCallbacks { + getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData; + removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData; + pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData; + unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData; + setRead(url: string, info: ISetDialogReadRequestData, sessionID: string): IGetBodyResponseData; + getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData; + listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; + sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData; + update(): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IGameCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IGameCallbacks.d.ts new file mode 100644 index 0000000..38ebc5f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IGameCallbacks.d.ts @@ -0,0 +1,16 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGameEmptyCrcRequestData } from "../../eft/game/IGameEmptyCrcRequestData"; +import { IVersionValidateRequestData } from "../../eft/game/IVersionValidateRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../../eft/httpResponse/INullResponseData"; +import { IGameConfigResponse } from "../../eft/game/IGameConfigResponse"; +export interface IGameCallbacks { + versionValidate(url: string, info: IVersionValidateRequestData, sessionID: string): INullResponseData; + gameStart(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + gameLogout(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getGameConfig(url: string, info: IGameEmptyCrcRequestData, sessionID: string): IGetBodyResponseData; + getServer(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + validateGameVersion(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + gameKeepalive(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getVersion(url: string, info: IEmptyRequestData, sessionID: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IHandbookCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IHandbookCallbacks.d.ts new file mode 100644 index 0000000..5857a3e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IHandbookCallbacks.d.ts @@ -0,0 +1,3 @@ +export interface IHandbookCallbacks { + load(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IHealthCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IHealthCallbacks.d.ts new file mode 100644 index 0000000..d238c7a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IHealthCallbacks.d.ts @@ -0,0 +1,13 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IAkiProfile } from "../../eft/profile/IAkiProfile"; +import { ISyncHealthRequestData } from "../../eft/health/ISyncHealthRequestData"; +import { IOffraidEatRequestData } from "../../eft/health/IOffraidEatRequestData"; +import { IOffraidHealRequestData } from "../../eft/health/IOffraidHealRequestData"; +import { IHealthTreatmentRequestData } from "../../eft/health/IHealthTreatmentRequestData"; +export interface IHealthCallbacks { + onLoad(sessionID: string): IAkiProfile; + syncHealth(url: string, info: ISyncHealthRequestData, sessionID: string): any; + offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): any; + offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): any; + healthTreatment(pmcData: IPmcData, info: IHealthTreatmentRequestData, sessionID: string): any; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IHideoutCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IHideoutCallbacks.d.ts new file mode 100644 index 0000000..ad2af48 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IHideoutCallbacks.d.ts @@ -0,0 +1,23 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IHideoutUpgradeRequestData } from "../../eft/hideout/IHideoutUpgradeRequestData"; +import { IHideoutUpgradeCompleteRequestData } from "../../eft/hideout/IHideoutUpgradeCompleteRequestData"; +import { IHideoutScavCaseStartRequestData } from "../../eft/hideout/IHideoutScavCaseStartRequestData"; +import { IHideoutPutItemInRequestData } from "../../eft/hideout/IHideoutPutItemInRequestData"; +import { IHideoutTakeItemOutRequestData } from "../../eft/hideout/IHideoutTakeItemOutRequestData"; +import { IHideoutToggleAreaRequestData } from "../../eft/hideout/IHideoutToggleAreaRequestData"; +import { IHideoutSingleProductionStartRequestData } from "../../eft/hideout/IHideoutSingleProductionStartRequestData"; +import { IHideoutContinuousProductionStartRequestData } from "../../eft/hideout/IHideoutContinuousProductionStartRequestData"; +import { IHideoutTakeProductionRequestData } from "../../eft/hideout/IHideoutTakeProductionRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface IHideoutCallbacks { + 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: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse; + update(timeSinceLastRun: number): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IHttpCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IHttpCallbacks.d.ts new file mode 100644 index 0000000..3ecd945 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IHttpCallbacks.d.ts @@ -0,0 +1,5 @@ +export interface IHttpCallbacks { + load(): void; + sendImage(sessionID: string, req: any, resp: any, body: any): void; + getImage(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IInraidCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IInraidCallbacks.d.ts new file mode 100644 index 0000000..e959b98 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IInraidCallbacks.d.ts @@ -0,0 +1,14 @@ +import { INullResponseData } from "../../eft/httpResponse/INullResponseData"; +import { IAkiProfile } from "../../eft/profile/IAkiProfile"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IRegisterPlayerRequestData } from "../../eft/inRaid/IRegisterPlayerRequestData"; +import { ISaveProgressRequestData } from "../../eft/inRaid/ISaveProgressRequestData"; +export interface IInraidCallbacks { + onLoad(sessionID: string): IAkiProfile; + 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; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IInsuranceCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IInsuranceCallbacks.d.ts new file mode 100644 index 0000000..082112d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IInsuranceCallbacks.d.ts @@ -0,0 +1,10 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IAkiProfile } from "../../eft/profile/IAkiProfile"; +import { IGetInsuranceCostRequestData } from "../../eft/insurance/IGetInsuranceCostRequestData"; +import { IInsureRequestData } from "../../eft/insurance/IInsureRequestData"; +export interface IInsuranceCallbacks { + onLoad(sessionID: string): IAkiProfile; + getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): any; + insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): any; + update(secondsSinceLastRun: number): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IInventoryCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IInventoryCallbacks.d.ts new file mode 100644 index 0000000..e53f7d0 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IInventoryCallbacks.d.ts @@ -0,0 +1,36 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IInventoryFoldRequestData } from "../../eft/inventory/IInventoryFoldRequestData"; +import { IInventorySplitRequestData } from "../../eft/inventory/IInventorySplitRequestData"; +import { IInventoryMoveRequestData } from "../../eft/inventory/IInventoryMoveRequestData"; +import { IInventoryMergeRequestData } from "../../eft/inventory/IInventoryMergeRequestData"; +import { IInventoryRemoveRequestData } from "../../eft/inventory/IInventoryRemoveRequestData"; +import { IInventoryTransferRequestData } from "../../eft/inventory/IInventoryTransferRequestData"; +import { IInventorySwapRequestData } from "../../eft/inventory/IInventorySwapRequestData"; +import { IInventoryToggleRequestData } from "../../eft/inventory/IInventoryToggleRequestData"; +import { IInventoryTagRequestData } from "../../eft/inventory/IInventoryTagRequestData"; +import { IInventoryBindRequestData } from "../../eft/inventory/IInventoryBindRequestData"; +import { IInventoryExamineRequestData } from "../../eft/inventory/IInventoryExamineRequestData"; +import { IInventoryReadEncyclopediaRequestData } from "../../eft/inventory/IInventoryReadEncyclopediaRequestData"; +import { IInventorySortRequestData } from "../../eft/inventory/IInventorySortRequestData"; +import { IInventoryCreateMarkerRequestData } from "../../eft/inventory/IInventoryCreateMarkerRequestData"; +import { IInventoryDeleteMarkerRequestData } from "../../eft/inventory/IInventoryDeleteMarkerRequestData"; +import { IInventoryEditMarkerRequestData } from "../../eft/inventory/IInventoryEditMarkerRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface IInventoryCallbacks { + 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; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IItemEventCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IItemEventCallbacks.d.ts new file mode 100644 index 0000000..59db771 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IItemEventCallbacks.d.ts @@ -0,0 +1,6 @@ +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { IItemEventRouterRequest } from "../../eft/itemEvent/IItemEventRouterRequest"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface IItemEventCallbacks { + handleEvents(url: string, info: IItemEventRouterRequest, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ILauncherCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ILauncherCallbacks.d.ts new file mode 100644 index 0000000..52dfec6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ILauncherCallbacks.d.ts @@ -0,0 +1,20 @@ +import { IRegisterData } from "../../eft/launcher/IRegisterData"; +import { IRemoveProfileData } from "../../eft/launcher/IRemoveProfileData"; +import { ILoginRequestData } from "../../eft/launcher/ILoginRequestData"; +import { IChangeRequestData } from "../../eft/launcher/IChangeRequestData"; +import { IGetMiniProfileRequestData } from "../../eft/launcher/IGetMiniProfileRequestData.js"; +export interface ILauncherCallbacks { + 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"; + getMiniProfile(url: string, info: IGetMiniProfileRequestData, sessionID: string): string; + getAllMiniProfiles(url: string, info: any, sessionID: string): string; + getServerVersion(): string; + ping(url: string, info: any, sessionID: string): string; + removeProfile(url: string, info: IRemoveProfileData, sessionID: string): string; + getCompatibleTarkovVersion(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ILocationCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ILocationCallbacks.d.ts new file mode 100644 index 0000000..71656a4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ILocationCallbacks.d.ts @@ -0,0 +1,8 @@ +import { IGetLocationRequestData } from "../../eft/location/IGetLocationRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { ILocationsGenerateAllResponse } from "../../eft/common/ILocationsSourceDestinationBase"; +import { ILocationBase } from "../../eft/common/ILocationBase"; +export interface ILocationCallbacks { + getLocationData(url: string, info: any, sessionID: string): IGetBodyResponseData; + getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IModCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IModCallbacks.d.ts new file mode 100644 index 0000000..1a4cd7b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IModCallbacks.d.ts @@ -0,0 +1,6 @@ +export interface IModCallbacks { + load(): void; + 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; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/INoteCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/INoteCallbacks.d.ts new file mode 100644 index 0000000..8453a4f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/INoteCallbacks.d.ts @@ -0,0 +1,8 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { INoteActionData } from "../../eft/notes/INoteActionData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface INoteCallbacks { + addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/INotifierCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/INotifierCallbacks.d.ts new file mode 100644 index 0000000..a211310 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/INotifierCallbacks.d.ts @@ -0,0 +1,17 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { INotifierChannel } from "../../eft/notifier/INotifier"; +import { ISelectProfileRequestData } from "../../eft/notifier/ISelectProfileRequestData"; +export interface INotifierCallbacks { + /** + * 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; + createNotifierChannel(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + selectProfile(url: string, info: ISelectProfileRequestData, sessionID: string): IGetBodyResponseData; + notify(url: string, info: any, sessionID: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IPresetBuildCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IPresetBuildCallbacks.d.ts new file mode 100644 index 0000000..97c6487 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IPresetBuildCallbacks.d.ts @@ -0,0 +1,10 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IPresetBuildActionRequestData } from "../../eft/presetBuild/IPresetBuildActionRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { WeaponBuild } from "../../eft/profile/IAkiProfile"; +export interface IPresetBuildCallbacks { + getHandbookUserlist(url: string, info: any, sessionID: string): IGetBodyResponseData; + saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; + removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IPresetCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IPresetCallbacks.d.ts new file mode 100644 index 0000000..4169857 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IPresetCallbacks.d.ts @@ -0,0 +1,3 @@ +export interface IPresetCallbacks { + load(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IProfileCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IProfileCallbacks.d.ts new file mode 100644 index 0000000..9d4d2df --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IProfileCallbacks.d.ts @@ -0,0 +1,21 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../../eft/httpResponse/INullResponseData"; +import { IProfileChangeNicknameRequestData } from "../../eft/profile/IProfileChangeNicknameRequestData"; +import { IProfileChangeVoiceRequestData } from "../../eft/profile/IProfileChangeVoiceRequestData"; +import { IProfileCreateRequestData } from "../../eft/profile/IProfileCreateRequestData"; +import { IValidateNicknameRequestData } from "../../eft/profile/IValidateNicknameRequestData"; +import { ISearchFriendRequestData } from "../../eft/profile/ISearchFriendRequestData"; +import { ISearchFriendResponse } from "../../eft/profile/ISearchFriendResponse"; +export interface IProfileCallbacks { + onLoad(sessionID: string): any; + createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData; + getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData; + changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData; + validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData; + getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getProfileStatus(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + searchFriend(url: string, info: ISearchFriendRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IQuestCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IQuestCallbacks.d.ts new file mode 100644 index 0000000..1c4d0c3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IQuestCallbacks.d.ts @@ -0,0 +1,19 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IAcceptQuestRequestData } from "../../eft/quests/IAcceptQuestRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { IListQuestsRequestData } from "../../eft/quests/IListQuestsRequestData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { ICompleteQuestRequestData } from "../../eft/quests/ICompleteQuestRequestData"; +import { IHandoverQuestRequestData } from "../../eft/quests/IHandoverQuestRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IQuest } from "../../eft/common/tables/IQuest"; +import { IPmcDataRepeatableQuest } from "../../eft/common/tables/IRepeatableQuests"; +import { IRepeatableQuestChangeRequest } from "../../eft/quests/IRepeatableQuestChangeRequest"; +export interface IQuestCallbacks { + 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; + activityPeriods(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IRagfairCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IRagfairCallbacks.d.ts new file mode 100644 index 0000000..9282bd4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IRagfairCallbacks.d.ts @@ -0,0 +1,21 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { ISearchRequestData } from "../../eft/ragfair/ISearchRequestData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGetMarketPriceRequestData } from "../../eft/ragfair/IGetMarketPriceRequestData"; +import { IAddOfferRequestData } from "../../eft/ragfair/IAddOfferRequestData"; +import { IRemoveOfferRequestData } from "../../eft/ragfair/IRemoveOfferRequestData"; +import { IExtendOfferRequestData } from "../../eft/ragfair/IExtendOfferRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IGetItemPriceResult } from "../../eft/ragfair/IGetItemPriceResult"; +export interface IRagfairCallbacks { + load(): void; + search(url: string, info: ISearchRequestData, sessionID: string): IGetBodyResponseData; + getMarketPrice(url: string, info: IGetMarketPriceRequestData, sessionID: string): IGetBodyResponseData; + getItemPrices(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + addOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse; + removeOffer(pmcData: IPmcData, info: IRemoveOfferRequestData, sessionID: string): IItemEventRouterResponse; + extendOffer(pmcData: IPmcData, info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse; + update(timeSinceLastRun: number): boolean; + updatePlayer(timeSinceLastRun: number): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IRepairCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IRepairCallbacks.d.ts new file mode 100644 index 0000000..e8183c9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IRepairCallbacks.d.ts @@ -0,0 +1,8 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IRepairActionDataRequest } from "../../eft/repair/IRepairActionDataRequest"; +import { ITraderRepairActionDataRequest } from "../../eft/repair/ITraderRepairActionDataRequest"; +export interface IRepairCallbacks { + traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ISaveCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ISaveCallbacks.d.ts new file mode 100644 index 0000000..1ad3b82 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ISaveCallbacks.d.ts @@ -0,0 +1,4 @@ +export interface ISaveCallbacks { + load(): void; + update(secondsSinceLastRun: number): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ITradeCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ITradeCallbacks.d.ts new file mode 100644 index 0000000..2f41d54 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ITradeCallbacks.d.ts @@ -0,0 +1,8 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IProcessRagfairTradeRequestData } from "../../eft/trade/IProcessRagfairTradeRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBaseTradeRequestData } from "../../eft/trade/IProcessBaseTradeRequestData"; +export interface ITradeCallbacks { + processTrade(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse; + processRagfairTrade(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ITraderCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ITraderCallbacks.d.ts new file mode 100644 index 0000000..e0d7d06 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/ITraderCallbacks.d.ts @@ -0,0 +1,11 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IBarterScheme, ITraderAssort, ITraderBase } from "../../eft/common/tables/ITrader"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +export interface ITraderCallbacks { + load(): void; + getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + update(): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IWeatherCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IWeatherCallbacks.d.ts new file mode 100644 index 0000000..9ac72ae --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IWeatherCallbacks.d.ts @@ -0,0 +1,5 @@ +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +export interface IWeatherCallbacks { + getWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IWishlistCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IWishlistCallbacks.d.ts new file mode 100644 index 0000000..e5d519c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/callbacks/IWishlistCallbacks.d.ts @@ -0,0 +1,7 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IWishlistActionData } from "../../eft/wishlist/IWishlistActionData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface IWishlistCallbacks { + addToWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; + removeFromWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IAirdropConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IAirdropConfig.d.ts new file mode 100644 index 0000000..627b603 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IAirdropConfig.d.ts @@ -0,0 +1,33 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IAirdropConfig extends IBaseConfig { + kind: "aki-airdrop"; + airdropChancePercent: AirdropChancePercent; + planeMinFlyHeight: number; + planeMaxFlyHeight: number; + planeVolume: number; + planeSpeed: number; + crateFallSpeed: number; + airdropMinStartTimeSeconds: number; + airdropMaxStartTimeSeconds: number; + loot: AirdropLoot; +} +export interface AirdropChancePercent { + bigmap: number; + woods: number; + lighthouse: number; + shoreline: number; + interchange: number; + reserve: number; + tarkovStreets: number; +} +export interface AirdropLoot { + presetCount: MinMax; + itemCount: MinMax; + itemBlacklist: string[]; + itemTypeWhitelist: string[]; + /** key: item base type: value: max count */ + itemLimits: Record; + itemStackLimits: Record; + armorLevelWhitelist: number[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IBaseConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IBaseConfig.d.ts new file mode 100644 index 0000000..8b6ba88 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IBaseConfig.d.ts @@ -0,0 +1,3 @@ +export interface IBaseConfig { + kind: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IBotConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IBotConfig.d.ts new file mode 100644 index 0000000..fcbc179 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IBotConfig.d.ts @@ -0,0 +1,110 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +import { IBotDurability } from "./IBotDurability"; +import { IPmcConfig } from "./IPmcConfig"; +export interface IBotConfig extends IBaseConfig { + kind: "aki-bot"; + /** How many variants of each bot should be generated on raid start */ + presetBatch: PresetBatch; + /** What bot types should be classified as bosses */ + bosses: string[]; + /** Control weapon/armor durability min/max values for each bot type */ + durability: IBotDurability; + /** Control the weighting of how expensive an average loot item is on a PMC or Scav */ + lootNValue: LootNvalue; + /** Control what bots are added to a bots revenge list key: bottype, value: bottypes to revenge on seeing their death */ + revenge: Record; + /** PMC bot specific config settings */ + pmc: IPmcConfig; + /** Control how many items are allowed to spawn on a bot + * key: bottype, value: */ + itemSpawnLimits: Record>; + /** Blacklist/whitelist items on a bot */ + equipment: Record; + /** Show a bots botType value after their name */ + showTypeInNickname: boolean; + /** Max number of bots that can be spawned in a raid at any one time */ + maxBotCap: Record; + chanceAssaultScavHasPlayerScavName: number; + /** How many stacks of secret ammo should a bot have in its bot secure container */ + secureContainerAmmoStackCount: number; + /** Batch generation size when type not available in cache */ + botGenerationBatchSizePerType: number; +} +export interface PresetBatch { + assault: number; + bossBully: number; + bossGluhar: number; + bossKilla: number; + bossKojaniy: number; + bossSanitar: number; + bossTagilla: number; + bossKnight: number; + bossTest: number; + cursedAssault: number; + followerBully: number; + followerGluharAssault: number; + followerGluharScout: number; + followerGluharSecurity: number; + followerGluharSnipe: number; + followerKojaniy: number; + followerSanitar: number; + followerTagilla: number; + followerBirdEye: number; + followerBigPipe: number; + followerTest: number; + marksman: number; + pmcBot: number; + sectantPriest: number; + sectantWarrior: number; + gifter: number; + test: number; + exUsec: number; +} +export interface LootNvalue { + scav: number; + pmc: number; +} +export interface EquipmentFilters { + weaponModLimits: ModLimits; + weaponSightWhitelist: Record; + faceShieldIsActiveChancePercent?: number; + lightLaserIsActiveChancePercent?: number; + nvgIsActiveChancePercent?: number; + randomisation: RandomisationDetails[]; + blacklist: EquipmentFilterDetails[]; + whitelist: EquipmentFilterDetails[]; + clothing: WeightingAdjustmentDetails[]; + weightingAdjustments: WeightingAdjustmentDetails[]; +} +export interface ModLimits { + /** How many scopes are allowed on a weapon - hard coded to work with OPTIC_SCOPE, ASSAULT_SCOPE, COLLIMATOR, COMPACT_COLLIMATOR */ + scopeLimit?: number; + /** How many lasers or lights are allowed on a weapon - hard coded to work with TACTICAL_COMBO, and FLASHLIGHT */ + lightLaserLimit?: number; +} +export interface RandomisationDetails { + levelRange: MinMax; + generation?: Record; + randomisedWeaponModSlots?: string[]; + randomisedArmorSlots?: string[]; + /** Equipment chances */ + equipment?: Record; + /** Modc chances */ + mods?: Record; +} +export interface EquipmentFilterDetails { + levelRange: MinMax; + equipment: Record; + cartridge: Record; +} +export interface WeightingAdjustmentDetails { + levelRange: MinMax; + ammo?: AdjustmentDetails; + equipment?: AdjustmentDetails; + clothing?: AdjustmentDetails; +} +export interface AdjustmentDetails { + add: Record>; + edit: Record>; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IBotDurability.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IBotDurability.d.ts new file mode 100644 index 0000000..a4ff53c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IBotDurability.d.ts @@ -0,0 +1,45 @@ +export interface IBotDurability { + default: DefaultDurability; + pmc: PmcDurability; + boss: BotDurability; + follower: BotDurability; + assault: BotDurability; + cursedassault: BotDurability; + marksman: BotDurability; + pmcbot: BotDurability; + exusec: BotDurability; + gifter: BotDurability; + sectantpriest: BotDurability; + sectantwarrior: BotDurability; +} +/** Durability values to be used when a more specific bot type cant be found */ +export interface DefaultDurability { + armor: ArmorDurability; + weapon: WeaponDurability; +} +export interface PmcDurability { + armor: PmcDurabilityArmor; + weapon: WeaponDurability; +} +export interface PmcDurabilityArmor { + lowestMaxPercent: number; + highestMaxPercent: number; + maxDelta: number; + minDelta: number; +} +export interface BotDurability { + armor: ArmorDurability; + weapon: WeaponDurability; +} +export interface ArmorDurability { + maxDelta: number; + minDelta: number; + minLimitPercent: number; +} +export interface WeaponDurability { + lowestMax: number; + highestMax: number; + maxDelta: number; + minDelta: number; + minLimitPercent: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ICoreConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ICoreConfig.d.ts new file mode 100644 index 0000000..b2819a4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ICoreConfig.d.ts @@ -0,0 +1,8 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface ICoreConfig extends IBaseConfig { + kind: "aki-core"; + akiVersion: string; + projectName: string; + compatibleTarkovVersion: string; + commit: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IHealthConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IHealthConfig.d.ts new file mode 100644 index 0000000..fdbf656 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IHealthConfig.d.ts @@ -0,0 +1,14 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IHealthConfig extends IBaseConfig { + kind: "aki-health"; + healthMultipliers: HealthMultipliers; + save: Save; +} +export interface HealthMultipliers { + death: number; + blacked: number; +} +export interface Save { + health: boolean; + effects: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IHideoutConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IHideoutConfig.d.ts new file mode 100644 index 0000000..0785f1e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IHideoutConfig.d.ts @@ -0,0 +1,7 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IHideoutConfig extends IBaseConfig { + kind: "aki-hideout"; + runIntervalSeconds: number; + hoursForSkillCrafting: number; + hideoutWallAppearTimeSeconds: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IHttpConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IHttpConfig.d.ts new file mode 100644 index 0000000..3fe4787 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IHttpConfig.d.ts @@ -0,0 +1,7 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IHttpConfig extends IBaseConfig { + webSocketPingDelayMs: number; + kind: "aki-http"; + ip: string; + port: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IInRaidConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IInRaidConfig.d.ts new file mode 100644 index 0000000..3ae2972 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IInRaidConfig.d.ts @@ -0,0 +1,22 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IInRaidConfig extends IBaseConfig { + kind: "aki-inraid"; + MIAOnRaidEnd: boolean; + raidMenuSettings: RaidMenuSettings; + save: Save; + carExtracts: string[]; + carExtractBaseStandingGain: number; + scavExtractGain: number; +} +export interface RaidMenuSettings { + aiAmount: string; + aiDifficulty: string; + bossEnabled: boolean; + scavWars: boolean; + taggedAndCursed: boolean; + enablePve: boolean; +} +export interface Save { + loot: boolean; + durability: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IInsuranceConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IInsuranceConfig.d.ts new file mode 100644 index 0000000..fd498bc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IInsuranceConfig.d.ts @@ -0,0 +1,10 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IInsuranceConfig extends IBaseConfig { + kind: "aki-insurance"; + insuranceMultiplier: Record; + returnChancePercent: Record; + blacklistedEquipment: string[]; + slotIdsWithChanceOfNotReturning: string[]; + returnTimeOverrideSeconds: number; + runIntervalSeconds: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IInventoryConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IInventoryConfig.d.ts new file mode 100644 index 0000000..4642b9b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IInventoryConfig.d.ts @@ -0,0 +1,11 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IInventoryConfig extends IBaseConfig { + kind: "aki-inventory"; + newItemsMarkedFound: boolean; + randomLootContainers: Record; +} +export interface RewardDetails { + rewardCount: number; + foundInRaid: boolean; + rewardTplPool: Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IItemConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IItemConfig.d.ts new file mode 100644 index 0000000..5ecccc2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IItemConfig.d.ts @@ -0,0 +1,5 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IItemConfig extends IBaseConfig { + kind: "aki-item"; + blacklist: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ILocaleConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ILocaleConfig.d.ts new file mode 100644 index 0000000..0a8955c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ILocaleConfig.d.ts @@ -0,0 +1,10 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface ILocaleConfig extends IBaseConfig { + kind: "aki-locale"; + /** e.g. ru/en/cn/fr etc, or 'system', will take computer locale setting */ + gameLocale: string; + /** e.g. ru/en/cn/fr etc, or 'system', will take computer locale setting */ + serverLocale: string; + /** Languages server can be translated into */ + serverSupportedLocales: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ILocationConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ILocationConfig.d.ts new file mode 100644 index 0000000..f808ad8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ILocationConfig.d.ts @@ -0,0 +1,37 @@ +import { BossLocationSpawn, Wave } from "../../../models/eft/common/ILocationBase"; +import { IBaseConfig } from "./IBaseConfig"; +export interface ILocationConfig extends IBaseConfig { + kind: "aki-location"; + fixEmptyBotWaves: boolean; + fixRoguesTakingAllSpawnsOnLighthouse: boolean; + lighthouseRogueSpawnTimeSeconds: number; + looseLootMultiplier: LootMultiplier; + staticLootMultiplier: LootMultiplier; + customWaves: CustomWaves; + /** Open zones to add to map */ + openZones: Record; + /** Key = map id, value = item tpls that should only have one forced loot spawn position */ + forcedLootSingleSpawnById: Record; +} +export interface CustomWaves { + boss: Record; + normal: Record; +} +export interface LootMultiplier { + bigmap: number; + develop: number; + factory4_day: number; + factory4_night: number; + interchange: number; + laboratory: number; + rezervbase: number; + shoreline: number; + woods: number; + hideout: number; + lighthouse: number; + privatearea: number; + suburbs: number; + tarkovstreets: number; + terminal: number; + town: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IMatchConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IMatchConfig.d.ts new file mode 100644 index 0000000..92c4d77 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IMatchConfig.d.ts @@ -0,0 +1,5 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IMatchConfig extends IBaseConfig { + kind: "aki-match"; + enabled: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IPlayerScavConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IPlayerScavConfig.d.ts new file mode 100644 index 0000000..3a65e83 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IPlayerScavConfig.d.ts @@ -0,0 +1,25 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IPlayerScavConfig extends IBaseConfig { + kind: "aki-playerscav"; + karmaLevel: Record; +} +export interface KarmaLevel { + botTypeForLoot: string; + modifiers: Modifiers; + itemLimits: ItemLimits; + equipmentBlacklist: Record; + labsAccessCardChancePercent: number; +} +export interface Modifiers { + equipment: Record; + mod: Record; +} +export interface ItemLimits { + healing: MinMax; + drugs: MinMax; + stims: MinMax; + looseLoot: MinMax; + magazines: MinMax; + grenades: MinMax; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IPmcConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IPmcConfig.d.ts new file mode 100644 index 0000000..979122c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IPmcConfig.d.ts @@ -0,0 +1,29 @@ +import { MinMax } from "../../common/MinMax"; +export interface IPmcConfig { + dynamicLoot: DynamicLoot; + useDifficultyOverride: boolean; + difficulty: string; + looseWeaponInBackpackChancePercent: number; + looseWeaponInBackpackLootMinMax: MinMax; + isUsec: number; + usecType: string; + bearType: string; + chanceSameSideIsHostilePercent: number; + /** key: location, value: type for usec/bear */ + pmcType: Record>>; + maxBackpackLootTotalRub: number; + maxPocketLootTotalRub: number; + maxVestLootTotalRub: number; + convertIntoPmcChance: Record; + enemyTypes: string[]; + botRelativeLevelDeltaMax: number; +} +export interface PmcTypes { + usec: string; + bear: string; +} +export interface DynamicLoot { + whitelist: string[]; + blacklist: string[]; + moneyStackLimits: Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IQuestConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IQuestConfig.d.ts new file mode 100644 index 0000000..9adfaba --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IQuestConfig.d.ts @@ -0,0 +1,96 @@ +import { ELocationName } from "../../enums/ELocationName"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IQuestConfig extends IBaseConfig { + kind: "aki-quest"; + redeemTime: number; + questTemplateIds: IPlayerTypeQuestIds; + repeatableQuests: IRepeatableQuestConfig[]; + locationIdMap: Record; + bearOnlyQuests: string[]; + usecOnlyQuests: string[]; +} +export interface IPlayerTypeQuestIds { + pmc: IQuestTypeIds; + scav: IQuestTypeIds; +} +export interface IQuestTypeIds { + Elimination: string; + Completion: string; + Exploration: string; +} +export interface IRepeatableQuestConfig { + name: string; + side: string; + types: string[]; + resetTime: number; + numQuests: number; + minPlayerLevel: number; + rewardScaling: IRewardScaling; + locations: Record; + traderWhitelist: ITraderWhitelist[]; + questConfig: IRepeatableQuestTypesConfig; + /** Item base types to block when generating rewards */ + rewardBaseTypeBlacklist: string[]; + /** Item tplIds to ignore when generating rewards */ + rewardBlacklist: string[]; + rewardAmmoStackMinSize: number; +} +export interface IRewardScaling { + levels: number[]; + experience: number[]; + roubles: number[]; + items: number[]; + reputation: number[]; + rewardSpread: number; +} +export interface ITraderWhitelist { + traderId: string; + questTypes: string[]; +} +export interface IRepeatableQuestTypesConfig { + Exploration: IExploration; + Completion: ICompletion; + Elimination: IElimination; +} +export interface IExploration { + maxExtracts: number; + specificExits: ISpecificExits; +} +export interface ISpecificExits { + probability: number; + passageRequirementWhitelist: string[]; +} +export interface ICompletion { + minRequestedAmount: number; + maxRequestedAmount: number; + minRequestedBulletAmount: number; + maxRequestedBulletAmount: number; + useWhitelist: boolean; + useBlacklist: boolean; +} +export interface IElimination { + targets: ITarget[]; + bodyPartProb: number; + bodyParts: IBodyPart[]; + specificLocationProb: number; + distLocationBlacklist: string[]; + distProb: number; + maxDist: number; + minDist: number; + maxKills: number; + minKills: number; +} +export interface IProbabilityObject { + key: string; + relativeProbability: number; + data?: any; +} +export interface ITarget extends IProbabilityObject { + data: IBossInfo; +} +export interface IBossInfo { + isBoss: boolean; +} +export interface IBodyPart extends IProbabilityObject { + data: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IRagfairConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IRagfairConfig.d.ts new file mode 100644 index 0000000..3fa04de --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IRagfairConfig.d.ts @@ -0,0 +1,77 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IRagfairConfig extends IBaseConfig { + kind: "aki-ragfair"; + runIntervalSeconds: number; + sell: Sell; + traders: Record; + dynamic: Dynamic; +} +export interface Sell { + fees: boolean; + chance: Chance; + time: Time; + reputation: Reputation; + simulatedSellHours: number; +} +export interface Chance { + base: number; + overpriced: number; + underpriced: number; +} +export interface Time { + base: number; + min: number; + max: number; +} +export interface Reputation { + gain: number; + loss: number; +} +export interface Dynamic { + purchasesAreFoundInRaid: boolean; + barter: Barter; + offerAdjustment: OfferAdjustment; + expiredOfferThreshold: number; + offerItemCount: MinMax; + price: MinMax; + presetPrice: MinMax; + showDefaultPresetsOnly: boolean; + endTimeSeconds: MinMax; + condition: Condition; + stackablePercent: MinMax; + nonStackableCount: MinMax; + rating: MinMax; + currencies: Record; + showAsSingleStack: string[]; + removeSeasonalItemsWhenNotInEvent: boolean; + blacklist: Blacklist; +} +export interface Barter { + enable: boolean; + chancePercent: number; + itemCountMin: number; + itemCountMax: number; + priceRangeVariancePercent: number; + minRoubleCostToBecomeBarter: number; + itemTypeBlacklist: string[]; +} +export interface OfferAdjustment { + maxPriceDifferenceBelowHandbookPercent: number; + handbookPriceMultipier: number; + priceThreshholdRub: number; +} +export interface Condition { + conditionChance: number; + min: number; + max: number; +} +export interface Blacklist { + /** + * show/hide trader items that are blacklisted by bsg + */ + traderItems: boolean; + custom: string[]; + enableBsgList: boolean; + enableQuestList: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IRepairConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IRepairConfig.d.ts new file mode 100644 index 0000000..b6db332 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IRepairConfig.d.ts @@ -0,0 +1,25 @@ +import { MinMax } from "../../../models/common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IRepairConfig extends IBaseConfig { + kind: "aki-repair"; + priceMultiplier: number; + applyRandomizeDurabilityLoss: boolean; + weaponSkillRepairGain: number; + armorKitSkillPointGainPerRepairPointMultiplier: number; + repairKit: RepairKit; +} +export interface RepairKit { + armor: BonusSettings; + weapon: BonusSettings; +} +export interface BonusSettings { + rarityWeight: Record; + bonusTypeWeight: Record; + common: Record; + rare: Record; +} +export interface BonusValues { + valuesMinMax: MinMax; + /** What dura is buff active between (min max of current max) */ + activeDurabilityPercentMinMax: MinMax; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IScavCaseConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IScavCaseConfig.d.ts new file mode 100644 index 0000000..df5dae0 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IScavCaseConfig.d.ts @@ -0,0 +1,27 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IScavCaseConfig extends IBaseConfig { + kind: "aki-scavcase"; + rewardItemValueRangeRub: Record; + moneyRewards: MoneyRewards; + ammoRewards: AmmoRewards; + rewardItemParentBlacklist: string[]; + rewardItemBlacklist: string[]; +} +export interface MoneyRewards { + moneyRewardChancePercent: number; + rubCount: MoneyLevels; + usdCount: MoneyLevels; + eurCount: MoneyLevels; +} +export interface MoneyLevels { + common: MinMax; + rare: MinMax; + superrare: MinMax; +} +export interface AmmoRewards { + ammoRewardChancePercent: number; + ammoRewardBlacklist: Record; + ammoRewardValueRangeRub: Record; + minStackSize: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ISeasonalEventConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ISeasonalEventConfig.d.ts new file mode 100644 index 0000000..cedf9a9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ISeasonalEventConfig.d.ts @@ -0,0 +1,21 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface ISeasonalEventConfig extends IBaseConfig { + kind: "aki-seasonalevents"; + enableSeasonalEventDetection: boolean; + /** event / botType / equipSlot / itemid */ + eventGear: Record>>>; + events: ISeasonalEvent[]; + gifterSettings: GifterSetting[]; +} +export interface ISeasonalEvent { + name: string; + startDay: number; + startMonth: number; + endDay: number; + endMonth: number; +} +export interface GifterSetting { + map: string; + zones: string; + spawnChance: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ITraderConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ITraderConfig.d.ts new file mode 100644 index 0000000..56c7d35 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/ITraderConfig.d.ts @@ -0,0 +1,35 @@ +import { MinMax } from "../../../models/common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface ITraderConfig extends IBaseConfig { + kind: "aki-trader"; + updateTime: UpdateTime[]; + updateTimeDefault: number; + /** What % of max durability an item needs to sell to a trader*/ + durabilityPurchaseThreshhold: Record; + traderPriceMultipler: number; + persistPurchaseDataInProfile: boolean; + fence: FenceConfig; +} +export interface UpdateTime { + traderId: string; + seconds: number; +} +export interface FenceConfig { + discountOptions: DiscountOptions; + partialRefreshTimeSeconds: number; + partialRefreshChangePercent: number; + assortSize: number; + maxPresetsPercent: number; + itemPriceMult: number; + presetPriceMult: number; + armorMaxDurabilityPercentMinMax: MinMax; + presetMaxDurabilityPercentMinMax: MinMax; + itemTypeLimits: Record; + regenerateAssortsOnRefresh: boolean; + blacklist: string[]; +} +export interface DiscountOptions { + assortSize: number; + itemPriceMult: number; + presetPriceMult: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IWeatherConfig.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IWeatherConfig.d.ts new file mode 100644 index 0000000..41a1c83 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/config/IWeatherConfig.d.ts @@ -0,0 +1,23 @@ +import { WindDirection } from "../../../models/enums/WindDirection"; +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IWeatherConfig extends IBaseConfig { + kind: "aki-weather"; + acceleration: number; + weather: Weather; +} +export interface Weather { + clouds: MinMax; + windSpeed: WeatherSettings; + windDirection: WeatherSettings; + windGustiness: MinMax; + rain: WeatherSettings; + rainIntensity: MinMax; + fog: WeatherSettings; + temp: MinMax; + pressure: MinMax; +} +export interface WeatherSettings { + values: T[]; + weights: number[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/controllers/IBotController.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/controllers/IBotController.d.ts new file mode 100644 index 0000000..010e208 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/controllers/IBotController.d.ts @@ -0,0 +1,13 @@ +import { IGenerateBotsRequestData } from "../../eft/bot/IGenerateBotsRequestData"; +import { IBotBase } from "../../eft/common/tables/IBotBase"; +import { IBotCore } from "../../eft/common/tables/IBotCore"; +import { Difficulty } from "../../eft/common/tables/IBotType"; +export interface IBotController { + getBotLimit(type: string): number; + getBotDifficulty(type: string, difficulty: string): IBotCore | Difficulty; + isBotPmc(botRole: string): boolean; + isBotBoss(botRole: string): boolean; + isBotFollower(botRole: string): boolean; + generate(info: IGenerateBotsRequestData, playerScav: boolean): IBotBase[]; + getBotCap(): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/IBotGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/IBotGenerator.d.ts new file mode 100644 index 0000000..9043945 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/IBotGenerator.d.ts @@ -0,0 +1,10 @@ +import { Inventory as PmcInventory } from "../../eft/common/tables/IBotBase"; +import { Inventory, Chances, Generation } from "../../eft/common/tables/IBotType"; +export interface IBotGenerator { + generateInventory(templateInventory: Inventory, equipmentChances: Chances, generation: Generation, botRole: string, isPmc: boolean): PmcInventory; +} +export interface IExhaustableArray { + getRandomValue(): T; + getFirstValue(): T; + hasValues(): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/ILocationGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/ILocationGenerator.d.ts new file mode 100644 index 0000000..530ceca --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/ILocationGenerator.d.ts @@ -0,0 +1,6 @@ +import { IStaticContainerProps, IStaticLootDetails, IStaticAmmoDetails, IStaticForcedProps } from "../../eft/common/tables/ILootBase"; +import { ILooseLoot, SpawnpointTemplate } from "../../eft/common/ILooseLoot"; +export interface ILocationGenerator { + generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record, staticAmmoDist: Record, locationName: string): IStaticContainerProps; + generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record, locationName: string): SpawnpointTemplate[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/IPMCLootGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/IPMCLootGenerator.d.ts new file mode 100644 index 0000000..a9db89b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/IPMCLootGenerator.d.ts @@ -0,0 +1,4 @@ +export interface IPMCLootGenerator { + generatePMCPocketLootPool(): string[]; + generatePMCBackpackLootPool(): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/IRagfairAssortGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/IRagfairAssortGenerator.d.ts new file mode 100644 index 0000000..6670540 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/IRagfairAssortGenerator.d.ts @@ -0,0 +1,4 @@ +import { Item } from "../../eft/common/tables/IItem"; +export interface IRagfairAssortGenerator { + getAssortItems(): Item[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/IRagfairOfferGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/IRagfairOfferGenerator.d.ts new file mode 100644 index 0000000..30b4be5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/generators/IRagfairOfferGenerator.d.ts @@ -0,0 +1,6 @@ +import { IBarterScheme } from "../../eft/common/tables/ITrader"; +import { IRagfairOffer } from "../../eft/ragfair/IRagfairOffer"; +import { Item } from "../../eft/common/tables/IItem"; +export interface IRagfairOfferGenerator { + createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece: boolean): IRagfairOffer; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/hideout/ScavCaseRewardCountsAndPrices.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/hideout/ScavCaseRewardCountsAndPrices.d.ts new file mode 100644 index 0000000..1b5af39 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/hideout/ScavCaseRewardCountsAndPrices.d.ts @@ -0,0 +1,11 @@ +export interface ScavCaseRewardCountsAndPrices { + common: RewardCountAndPriceDetails; + rare: RewardCountAndPriceDetails; + superrare: RewardCountAndPriceDetails; +} +export interface RewardCountAndPriceDetails { + minCount: number; + maxCount: number; + minPriceRub: number; + maxPriceRub: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/logging/LogBackgroundColor.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/logging/LogBackgroundColor.d.ts new file mode 100644 index 0000000..1dd369b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/logging/LogBackgroundColor.d.ts @@ -0,0 +1,11 @@ +export declare enum LogBackgroundColor { + DEFAULT = "", + BLACK = "blackBG", + RED = "redBG", + GREEN = "greenBG", + YELLOW = "yellowBG", + BLUE = "blueBG", + MAGENTA = "magentaBG", + CYAN = "cyanBG", + WHITE = "whiteBG" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/logging/LogTextColor.d.ts new file mode 100644 index 0000000..6c7abf3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/logging/LogTextColor.d.ts @@ -0,0 +1,11 @@ +export declare enum LogTextColor { + BLACK = "black", + RED = "red", + GREEN = "green", + YELLOW = "yellow", + BLUE = "blue", + MAGENTA = "magenta", + CYAN = "cyan", + WHITE = "white", + GRAY = "" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/logging/SptLogger.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/logging/SptLogger.d.ts new file mode 100644 index 0000000..ea1b3d8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/logging/SptLogger.d.ts @@ -0,0 +1,7 @@ +export interface SptLogger { + error: (msg: string | Record) => void; + warn: (msg: string | Record) => void; + succ?: (msg: string | Record) => void; + info: (msg: string | Record) => void; + debug: (msg: string | Record) => void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/mod/IModLoader.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/mod/IModLoader.d.ts new file mode 100644 index 0000000..9a71f61 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/mod/IModLoader.d.ts @@ -0,0 +1,5 @@ +import { DependencyContainer } from "tsyringe"; +export interface IModLoader { + load(container: DependencyContainer): void; + getModPath(mod: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/mod/IPackageJsonData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/mod/IPackageJsonData.d.ts new file mode 100644 index 0000000..06f7454 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/mod/IPackageJsonData.d.ts @@ -0,0 +1,13 @@ +export interface IPackageJsonData { + incompatibilities?: string[]; + dependencies?: Record; + modDependencies?: Record; + name: string; + author: string; + version: string; + akiVersion: string; + licence: string; + main: string; + isBundleMod: boolean; + contributors: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/mod/NewItemDetails.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/mod/NewItemDetails.d.ts new file mode 100644 index 0000000..fc69a06 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/mod/NewItemDetails.d.ts @@ -0,0 +1,39 @@ +import { ITemplateItem, Props } from "../../eft/common/tables/ITemplateItem"; +export declare abstract class NewItemDetailsBase { + /** Price of the item on flea market */ + fleaPriceRoubles: number; + /** Price of the item in the handbook */ + handbookPriceRoubles: number; + /** + * A dictionary for locale settings, key = langauge (e.g. en,cn,es-mx,jp,fr) + * If a language is not included, the first item in the array will be used in its place + */ + locales: Record; +} +export declare class NewItemFromCloneDetails extends NewItemDetailsBase { + /** Id of the item to copy and use as a base */ + itemTplToClone: string; + /** Item properties that should be applied over the top of the cloned base */ + overrideProperties: Props; + /** ParentId for the new item (item type) */ + parentId: string; + /** + * the id the new item should have, leave blank to have one generated for you + * This is often known as the TplId, or TemplateId + */ + newId: string; +} +export declare class NewItemDetails extends NewItemDetailsBase { + newItem: ITemplateItem; +} +export declare class LocaleDetails { + name: string; + shortName: string; + description: string; +} +export declare class CreateItemResult { + constructor(); + success: boolean; + itemId: string; + errors: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/ragfair/IRagfairServerPrices.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/ragfair/IRagfairServerPrices.d.ts new file mode 100644 index 0000000..c7d246a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/ragfair/IRagfairServerPrices.d.ts @@ -0,0 +1,4 @@ +export interface IRagfairServerPrices { + static: Record; + dynamic: Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/IDatabaseTables.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/IDatabaseTables.d.ts new file mode 100644 index 0000000..582d9e2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/IDatabaseTables.d.ts @@ -0,0 +1,56 @@ +import { IQteData } from "../../../models/eft/hideout/IQteData"; +import { IGlobals } from "../../eft/common/IGlobals"; +import { IBotBase } from "../../eft/common/tables/IBotBase"; +import { IBotCore } from "../../eft/common/tables/IBotCore"; +import { IBotType } from "../../eft/common/tables/IBotType"; +import { ICustomizationItem } from "../../eft/common/tables/ICustomizationItem"; +import { IHandbookBase } from "../../eft/common/tables/IHandbookBase"; +import { ILootBase } from "../../eft/common/tables/ILootBase"; +import { IMatch } from "../../eft/common/tables/IMatch"; +import { IProfileTemplates } from "../../eft/common/tables/IProfileTemplate"; +import { IQuest } from "../../eft/common/tables/IQuest"; +import { IRepeatableQuestDatabase } from "../../eft/common/tables/IRepeatableQuests"; +import { ITemplateItem } from "../../eft/common/tables/ITemplateItem"; +import { ITrader } from "../../eft/common/tables/ITrader"; +import { IHideoutArea } from "../../eft/hideout/IHideoutArea"; +import { IHideoutProduction } from "../../eft/hideout/IHideoutProduction"; +import { IHideoutScavCase } from "../../eft/hideout/IHideoutScavCase"; +import { IHideoutSettingsBase } from "../../eft/hideout/IHideoutSettingsBase"; +import { ILocaleBase } from "./ILocaleBase"; +import { ILocations } from "./ILocations"; +import { IServerBase } from "./IServerBase"; +import { ISettingsBase } from "./ISettingsBase"; +export interface IDatabaseTables { + bots?: { + types: Record; + base: IBotBase; + core: IBotCore; + }; + hideout?: { + areas: IHideoutArea[]; + production: IHideoutProduction[]; + scavcase: IHideoutScavCase[]; + settings: IHideoutSettingsBase; + qte: IQteData[]; + }; + locales?: ILocaleBase; + locations?: ILocations; + loot?: ILootBase; + match?: IMatch; + templates?: { + character: string[]; + items: Record; + quests: Record; + repeatableQuests: IRepeatableQuestDatabase; + handbook: IHandbookBase; + customization: Record; + /** The profile templates listed in the launcher on profile creation, split by account type (e.g. Standard) then side (e.g. bear/usec) */ + profiles: IProfileTemplates; + /** Flea prices of items - gathered from online flea market dump */ + prices: Record; + }; + traders?: Record; + globals?: IGlobals; + server?: IServerBase; + settings?: ISettingsBase; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/ILocaleBase.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/ILocaleBase.d.ts new file mode 100644 index 0000000..3cdaf6f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/ILocaleBase.d.ts @@ -0,0 +1,5 @@ +export interface ILocaleBase { + global: Record>; + menu: Record; + languages: Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/ILocations.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/ILocations.d.ts new file mode 100644 index 0000000..18f0262 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/ILocations.d.ts @@ -0,0 +1,26 @@ +import { ILocationBase } from "../../eft/common/ILocationBase"; +import { ILooseLoot } from "../../eft/common/ILooseLoot"; +import { ILocationsBase } from "../../eft/common/tables/ILocationsBase"; +export interface ILocations { + bigmap?: ILocationData; + develop?: ILocationData; + factory4_day?: ILocationData; + factory4_night?: ILocationData; + hideout?: ILocationData; + interchange?: ILocationData; + laboratory?: ILocationData; + lighthouse?: ILocationData; + privatearea?: ILocationData; + rezervbase?: ILocationData; + shoreline?: ILocationData; + suburbs?: ILocationData; + tarkovstreets?: ILocationData; + terminal?: ILocationData; + town?: ILocationData; + woods?: ILocationData; + base?: ILocationsBase; +} +export interface ILocationData { + base: ILocationBase; + looseLoot?: ILooseLoot; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/IServerBase.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/IServerBase.d.ts new file mode 100644 index 0000000..d033db3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/IServerBase.d.ts @@ -0,0 +1,4 @@ +export interface IServerBase { + ip: string; + port: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/ISettingsBase.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/ISettingsBase.d.ts new file mode 100644 index 0000000..2870cfb --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/server/ISettingsBase.d.ts @@ -0,0 +1,48 @@ +export interface ISettingsBase { + config: Config; +} +export interface Config { + AFKTimeoutSeconds: number; + AdditionalRandomDelaySeconds: number; + ClientSendRateLimit: number; + CriticalRetriesCount: number; + DefaultRetriesCount: number; + FirstCycleDelaySeconds: number; + FramerateLimit: FramerateLimit; + GroupStatusInterval: number; + GroupStatusButtonInterval: number; + KeepAliveInterval: number; + LobbyKeepAliveInterval: number; + Mark502and504AsNonImportant: boolean; + MemoryManagementSettings: MemoryManagementSettings; + NVidiaHighlights: boolean; + NextCycleDelaySeconds: number; + PingServerResultSendInterval: number; + PingServersInterval: number; + ReleaseProfiler: ReleaseProfiler; + RequestConfirmationTimeouts: number[]; + RequestsMadeThroughLobby: string[]; + SecondCycleDelaySeconds: number; + ShouldEstablishLobbyConnection: boolean; + TurnOffLogging: boolean; + WeaponOverlapDistanceCulling: number; + WebDiagnosticsEnabled: boolean; +} +export interface FramerateLimit { + MaxFramerateGameLimit: number; + MaxFramerateLobbyLimit: number; + MinFramerateLimit: number; +} +export interface MemoryManagementSettings { + AggressiveGC: boolean; + GigabytesRequiredToDisableGCDuringRaid: number; + HeapPreAllocationEnabled: boolean; + HeapPreAllocationMB: number; + OverrideRamCleanerSettings: boolean; + RamCleanerEnabled: boolean; +} +export interface ReleaseProfiler { + Enabled: boolean; + MaxRecords: number; + RecordTriggerValue: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/services/CustomPreset.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/services/CustomPreset.d.ts new file mode 100644 index 0000000..f07382e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/services/CustomPreset.d.ts @@ -0,0 +1,5 @@ +import { Preset } from "../../eft/common/IGlobals"; +export interface CustomPreset { + key: string; + preset: Preset; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/services/CustomTraderAssortData.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/services/CustomTraderAssortData.d.ts new file mode 100644 index 0000000..265a26a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/services/CustomTraderAssortData.d.ts @@ -0,0 +1,6 @@ +import { ITraderAssort } from "../../eft/common/tables/ITrader"; +import { Traders } from "../../enums/Traders"; +export interface CustomTraderAssortData { + traderId: Traders; + assorts: ITraderAssort; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/services/LootItem.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/services/LootItem.d.ts new file mode 100644 index 0000000..acb7606 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/services/LootItem.d.ts @@ -0,0 +1,6 @@ +export declare class LootItem { + id?: string; + tpl: string; + isPreset: boolean; + stackCount: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/services/LootRequest.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/services/LootRequest.d.ts new file mode 100644 index 0000000..8c197ee --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/services/LootRequest.d.ts @@ -0,0 +1,11 @@ +import { MinMax } from "../../common/MinMax"; +export declare class LootRequest { + presetCount: MinMax; + itemCount: MinMax; + itemBlacklist: string[]; + itemTypeWhitelist: string[]; + /** key: item base type: value: max count */ + itemLimits: Record; + itemStackLimits: Record; + armorLevelWhitelist: number[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/utils/IAsyncQueue.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/utils/IAsyncQueue.d.ts new file mode 100644 index 0000000..2be801a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/utils/IAsyncQueue.d.ts @@ -0,0 +1,4 @@ +import { ICommand } from "./ICommand"; +export interface IAsyncQueue { + waitFor(command: ICommand): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/utils/ICommand.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/utils/ICommand.d.ts new file mode 100644 index 0000000..696bb83 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/utils/ICommand.d.ts @@ -0,0 +1,4 @@ +export interface ICommand { + uuid: string; + cmd: () => Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/utils/ILogger.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/utils/ILogger.d.ts new file mode 100644 index 0000000..2af3fac --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/utils/ILogger.d.ts @@ -0,0 +1,13 @@ +import { Daum } from "../../eft/itemEvent/IItemEventRouterRequest"; +import { LogBackgroundColor } from "../logging/LogBackgroundColor"; +import { LogTextColor } from "../logging/LogTextColor"; +export interface ILogger { + writeToLogFile(data: string | Daum): void; + log(data: string | Record | Error, color: string, backgroundColor?: string): void; + logWithColor(data: string | Record, textColor: LogTextColor, backgroundColor?: LogBackgroundColor): void; + error(data: string): void; + warning(data: string): void; + success(data: string): void; + info(data: string): void; + debug(data: string | Record, onlyShowInConsole?: boolean): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/models/spt/utils/IUuidGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/utils/IUuidGenerator.d.ts new file mode 100644 index 0000000..3870469 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/models/spt/utils/IUuidGenerator.d.ts @@ -0,0 +1,3 @@ +export interface IUUidGenerator { + generate(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/EventOutputHolder.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/EventOutputHolder.d.ts new file mode 100644 index 0000000..9a34219 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/EventOutputHolder.d.ts @@ -0,0 +1,41 @@ +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IHideoutImprovement, Productive } from "../models/eft/common/tables/IBotBase"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class EventOutputHolder { + protected jsonUtil: JsonUtil; + protected profileHelper: ProfileHelper; + protected timeUtil: TimeUtil; + /** What has client been informed of this game session */ + protected clientActiveSessionStorage: Record; + constructor(jsonUtil: JsonUtil, profileHelper: ProfileHelper, timeUtil: TimeUtil); + protected output: IItemEventRouterResponse; + getOutput(sessionID: string): IItemEventRouterResponse; + /** + * Reset the response object to a default state + * Occurs prior to event being handled by server + * @param sessionID Players id + */ + resetOutput(sessionID: string): void; + /** + * Update output object with most recent values from player profile + * @param sessionId Session id + */ + updateOutputProperties(sessionId: string): void; + /** + * Return all hideout Improvements from player profile, adjust completed Improvements' completed property to be true + * @param pmcData Player profile + * @returns dictionary of hideout improvements + */ + protected getImprovementsFromProfileAndFlagComplete(pmcData: IPmcData): Record; + /** + * Return productions from player profile except those completed crafts the client has already seen + * @param pmcData Player profile + * @returns dictionary of hideout productions + */ + protected getProductionsFromProfileAndFlagComplete(productions: Record): Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/HttpRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/HttpRouter.d.ts new file mode 100644 index 0000000..f75a47d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/HttpRouter.d.ts @@ -0,0 +1,16 @@ +/// +import { IncomingMessage } from "http"; +import { DynamicRouter, Router, StaticRouter } from "../di/Router"; +export declare class HttpRouter { + protected staticRouters: StaticRouter[]; + protected dynamicRoutes: DynamicRouter[]; + constructor(staticRouters: StaticRouter[], dynamicRoutes: DynamicRouter[]); + protected groupBy(list: T[], keyGetter: (t: T) => string): Map; + getResponse(req: IncomingMessage, info: any, sessionID: string): string; + protected handleRoute(url: string, info: any, sessionID: string, wrapper: ResponseWrapper, routers: Router[], dynamic: boolean): boolean; +} +declare class ResponseWrapper { + output: string; + constructor(output: string); +} +export {}; diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/ImageRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/ImageRouter.d.ts new file mode 100644 index 0000000..675441c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/ImageRouter.d.ts @@ -0,0 +1,14 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { ImageRouteService } from "../services/mod/image/ImageRouteService"; +import { HttpFileUtil } from "../utils/HttpFileUtil"; +import { VFS } from "../utils/VFS"; +export declare class ImageRouter { + protected vfs: VFS; + protected imageRouteService: ImageRouteService; + protected httpFileUtil: HttpFileUtil; + constructor(vfs: VFS, imageRouteService: ImageRouteService, httpFileUtil: HttpFileUtil); + addRoute(key: string, valueToAdd: string): void; + sendImage(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void; + getImage(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/ItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/ItemEventRouter.d.ts new file mode 100644 index 0000000..9c7f70e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/ItemEventRouter.d.ts @@ -0,0 +1,22 @@ +import { ItemEventRouterDefinition } from "../di/Router"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IItemEventRouterRequest } from "../models/eft/itemEvent/IItemEventRouterRequest"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { EventOutputHolder } from "./EventOutputHolder"; +export declare class ItemEventRouter { + protected logger: ILogger; + protected profileHelper: ProfileHelper; + protected itemEventRouters: ItemEventRouterDefinition[]; + protected localisationService: LocalisationService; + protected eventOutputHolder: EventOutputHolder; + constructor(logger: ILogger, profileHelper: ProfileHelper, itemEventRouters: ItemEventRouterDefinition[], localisationService: LocalisationService, eventOutputHolder: EventOutputHolder); + /** + * + * @param info Event request + * @param sessionID Session id + * @returns Item response + */ + handleEvents(info: IItemEventRouterRequest, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/BotDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/BotDynamicRouter.d.ts new file mode 100644 index 0000000..6d0ab4b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/BotDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { BotCallbacks } from "../../callbacks/BotCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class BotDynamicRouter extends DynamicRouter { + protected botCallbacks: BotCallbacks; + constructor(botCallbacks: BotCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/BundleDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/BundleDynamicRouter.d.ts new file mode 100644 index 0000000..a765410 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/BundleDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { BundleCallbacks } from "../../callbacks/BundleCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class BundleDynamicRouter extends DynamicRouter { + protected bundleCallbacks: BundleCallbacks; + constructor(bundleCallbacks: BundleCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/CustomizationDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/CustomizationDynamicRouter.d.ts new file mode 100644 index 0000000..2db7cc5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/CustomizationDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { CustomizationCallbacks } from "../../callbacks/CustomizationCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class CustomizationDynamicRouter extends DynamicRouter { + protected customizationCallbacks: CustomizationCallbacks; + constructor(customizationCallbacks: CustomizationCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/DataDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/DataDynamicRouter.d.ts new file mode 100644 index 0000000..836ed8d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/DataDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { DataCallbacks } from "../../callbacks/DataCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class DataDynamicRouter extends DynamicRouter { + protected dataCallbacks: DataCallbacks; + constructor(dataCallbacks: DataCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/HttpDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/HttpDynamicRouter.d.ts new file mode 100644 index 0000000..a152b4d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/HttpDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { DynamicRouter } from "../../di/Router"; +import { ImageRouter } from "../ImageRouter"; +export declare class HttpDynamicRouter extends DynamicRouter { + protected imageRouter: ImageRouter; + constructor(imageRouter: ImageRouter); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/InraidDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/InraidDynamicRouter.d.ts new file mode 100644 index 0000000..7c0561f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/InraidDynamicRouter.d.ts @@ -0,0 +1,7 @@ +import { InraidCallbacks } from "../../callbacks/InraidCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class InraidDynamicRouter extends DynamicRouter { + protected inraidCallbacks: InraidCallbacks; + constructor(inraidCallbacks: InraidCallbacks); + getTopLevelRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/LocationDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/LocationDynamicRouter.d.ts new file mode 100644 index 0000000..b8e5cdf --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/LocationDynamicRouter.d.ts @@ -0,0 +1,7 @@ +import { LocationCallbacks } from "../../callbacks/LocationCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class LocationDynamicRouter extends DynamicRouter { + protected locationCallbacks: LocationCallbacks; + constructor(locationCallbacks: LocationCallbacks); + getTopLevelRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/NotifierDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/NotifierDynamicRouter.d.ts new file mode 100644 index 0000000..83c60c5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/NotifierDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { NotifierCallbacks } from "../../callbacks/NotifierCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class NotifierDynamicRouter extends DynamicRouter { + protected notifierCallbacks: NotifierCallbacks; + constructor(notifierCallbacks: NotifierCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/TraderDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/TraderDynamicRouter.d.ts new file mode 100644 index 0000000..5b7cc1b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/dynamic/TraderDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { TraderCallbacks } from "../../callbacks/TraderCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class TraderDynamicRouter extends DynamicRouter { + protected traderCallbacks: TraderCallbacks; + constructor(traderCallbacks: TraderCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/CustomizationItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/CustomizationItemEventRouter.d.ts new file mode 100644 index 0000000..32519b1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/CustomizationItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { CustomizationCallbacks } from "../../callbacks/CustomizationCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class CustomizationItemEventRouter extends ItemEventRouterDefinition { + protected customizationCallbacks: CustomizationCallbacks; + constructor(customizationCallbacks: CustomizationCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/HealthItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/HealthItemEventRouter.d.ts new file mode 100644 index 0000000..2b2b91d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/HealthItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { HealthCallbacks } from "../../callbacks/HealthCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class HealthItemEventRouter extends ItemEventRouterDefinition { + protected healthCallbacks: HealthCallbacks; + constructor(healthCallbacks: HealthCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/HideoutItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/HideoutItemEventRouter.d.ts new file mode 100644 index 0000000..44bd1cd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/HideoutItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { HideoutCallbacks } from "../../callbacks/HideoutCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class HideoutItemEventRouter extends ItemEventRouterDefinition { + protected hideoutCallbacks: HideoutCallbacks; + constructor(hideoutCallbacks: HideoutCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/InsuranceItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/InsuranceItemEventRouter.d.ts new file mode 100644 index 0000000..3b6ae8c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/InsuranceItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { InsuranceCallbacks } from "../../callbacks/InsuranceCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class InsuranceItemEventRouter extends ItemEventRouterDefinition { + protected insuranceCallbacks: InsuranceCallbacks; + constructor(insuranceCallbacks: InsuranceCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/InventoryItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/InventoryItemEventRouter.d.ts new file mode 100644 index 0000000..d6a6ae5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/InventoryItemEventRouter.d.ts @@ -0,0 +1,12 @@ +import { HideoutCallbacks } from "../../callbacks/HideoutCallbacks"; +import { InventoryCallbacks } from "../../callbacks/InventoryCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class InventoryItemEventRouter extends ItemEventRouterDefinition { + protected inventoryCallbacks: InventoryCallbacks; + protected hideoutCallbacks: HideoutCallbacks; + constructor(inventoryCallbacks: InventoryCallbacks, hideoutCallbacks: HideoutCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/NoteItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/NoteItemEventRouter.d.ts new file mode 100644 index 0000000..71ed5d4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/NoteItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { NoteCallbacks } from "../../callbacks/NoteCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class NoteItemEventRouter extends ItemEventRouterDefinition { + protected noteCallbacks: NoteCallbacks; + constructor(noteCallbacks: NoteCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/PresetBuildItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/PresetBuildItemEventRouter.d.ts new file mode 100644 index 0000000..f2a7bf3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/PresetBuildItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { PresetBuildCallbacks } from "../../callbacks/PresetBuildCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class PresetBuildItemEventRouter extends ItemEventRouterDefinition { + protected presetBuildCallbacks: PresetBuildCallbacks; + constructor(presetBuildCallbacks: PresetBuildCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/QuestItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/QuestItemEventRouter.d.ts new file mode 100644 index 0000000..a092aa6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/QuestItemEventRouter.d.ts @@ -0,0 +1,12 @@ +import { QuestCallbacks } from "../../callbacks/QuestCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../../models/spt/utils/ILogger"; +export declare class QuestItemEventRouter extends ItemEventRouterDefinition { + protected logger: ILogger; + protected questCallbacks: QuestCallbacks; + constructor(logger: ILogger, questCallbacks: QuestCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(eventAction: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/RagfairItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/RagfairItemEventRouter.d.ts new file mode 100644 index 0000000..986d9e7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/RagfairItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { RagfairCallbacks } from "../../callbacks/RagfairCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class RagfairItemEventRouter extends ItemEventRouterDefinition { + protected ragfairCallbacks: RagfairCallbacks; + constructor(ragfairCallbacks: RagfairCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/RepairItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/RepairItemEventRouter.d.ts new file mode 100644 index 0000000..1c2768c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/RepairItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { RepairCallbacks } from "../../callbacks/RepairCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class RepairItemEventRouter extends ItemEventRouterDefinition { + protected repairCallbacks: RepairCallbacks; + constructor(repairCallbacks: RepairCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/TradeItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/TradeItemEventRouter.d.ts new file mode 100644 index 0000000..5d84559 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/TradeItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { TradeCallbacks } from "../../callbacks/TradeCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class TradeItemEventRouter extends ItemEventRouterDefinition { + protected tradeCallbacks: TradeCallbacks; + constructor(tradeCallbacks: TradeCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/WishlistItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/WishlistItemEventRouter.d.ts new file mode 100644 index 0000000..9e3c2a0 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/item_events/WishlistItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { WishlistCallbacks } from "../../callbacks/WishlistCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class WishlistItemEventRouter extends ItemEventRouterDefinition { + protected wishlistCallbacks: WishlistCallbacks; + constructor(wishlistCallbacks: WishlistCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/save_load/HealthSaveLoadRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/save_load/HealthSaveLoadRouter.d.ts new file mode 100644 index 0000000..26cb07a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/save_load/HealthSaveLoadRouter.d.ts @@ -0,0 +1,7 @@ +import { HandledRoute, SaveLoadRouter } from "../../di/Router"; +import { IAkiProfile } from "../../models/eft/profile/IAkiProfile"; +export declare class HealthSaveLoadRouter extends SaveLoadRouter { + constructor(); + getHandledRoutes(): HandledRoute[]; + handleLoad(profile: IAkiProfile): IAkiProfile; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/save_load/InraidSaveLoadRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/save_load/InraidSaveLoadRouter.d.ts new file mode 100644 index 0000000..40f388e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/save_load/InraidSaveLoadRouter.d.ts @@ -0,0 +1,7 @@ +import { HandledRoute, SaveLoadRouter } from "../../di/Router"; +import { IAkiProfile } from "../../models/eft/profile/IAkiProfile"; +export declare class InraidSaveLoadRouter extends SaveLoadRouter { + constructor(); + getHandledRoutes(): HandledRoute[]; + handleLoad(profile: IAkiProfile): IAkiProfile; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/save_load/InsuranceSaveLoadRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/save_load/InsuranceSaveLoadRouter.d.ts new file mode 100644 index 0000000..22d645e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/save_load/InsuranceSaveLoadRouter.d.ts @@ -0,0 +1,7 @@ +import { HandledRoute, SaveLoadRouter } from "../../di/Router"; +import { IAkiProfile } from "../../models/eft/profile/IAkiProfile"; +export declare class InsuranceSaveLoadRouter extends SaveLoadRouter { + constructor(); + getHandledRoutes(): HandledRoute[]; + handleLoad(profile: IAkiProfile): IAkiProfile; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/save_load/ProfileSaveLoadRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/save_load/ProfileSaveLoadRouter.d.ts new file mode 100644 index 0000000..f60af15 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/save_load/ProfileSaveLoadRouter.d.ts @@ -0,0 +1,7 @@ +import { HandledRoute, SaveLoadRouter } from "../../di/Router"; +import { IAkiProfile } from "../../models/eft/profile/IAkiProfile"; +export declare class ProfileSaveLoadRouter extends SaveLoadRouter { + constructor(); + getHandledRoutes(): HandledRoute[]; + handleLoad(profile: IAkiProfile): IAkiProfile; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/serializers/BundleSerializer.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/serializers/BundleSerializer.d.ts new file mode 100644 index 0000000..ca4d8b6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/serializers/BundleSerializer.d.ts @@ -0,0 +1,14 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { Serializer } from "../../di/Serializer"; +import { BundleLoader } from "../../loaders/BundleLoader"; +import { ILogger } from "../../models/spt/utils/ILogger"; +import { HttpFileUtil } from "../../utils/HttpFileUtil"; +export declare class BundleSerializer extends Serializer { + protected logger: ILogger; + protected bundleLoader: BundleLoader; + protected httpFileUtil: HttpFileUtil; + constructor(logger: ILogger, bundleLoader: BundleLoader, httpFileUtil: HttpFileUtil); + serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void; + canHandle(route: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/serializers/ImageSerializer.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/serializers/ImageSerializer.d.ts new file mode 100644 index 0000000..5de48ff --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/serializers/ImageSerializer.d.ts @@ -0,0 +1,10 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { Serializer } from "../../di/Serializer"; +import { ImageRouter } from "../ImageRouter"; +export declare class ImageSerializer extends Serializer { + protected imageRouter: ImageRouter; + constructor(imageRouter: ImageRouter); + serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void; + canHandle(route: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/serializers/NotifySerializer.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/serializers/NotifySerializer.d.ts new file mode 100644 index 0000000..0d8cc89 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/serializers/NotifySerializer.d.ts @@ -0,0 +1,12 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { NotifierController } from "../../controllers/NotifierController"; +import { Serializer } from "../../di/Serializer"; +import { HttpServerHelper } from "../../helpers/HttpServerHelper"; +export declare class NotifySerializer extends Serializer { + protected notifierController: NotifierController; + protected httpServerHelper: HttpServerHelper; + constructor(notifierController: NotifierController, httpServerHelper: HttpServerHelper); + serialize(_sessionID: string, req: IncomingMessage, resp: ServerResponse, _: any): void; + canHandle(route: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/BotStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/BotStaticRouter.d.ts new file mode 100644 index 0000000..aeea220 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/BotStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { BotCallbacks } from "../../callbacks/BotCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class BotStaticRouter extends StaticRouter { + protected botCallbacks: BotCallbacks; + constructor(botCallbacks: BotCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/BundleStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/BundleStaticRouter.d.ts new file mode 100644 index 0000000..fb682fc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/BundleStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { BundleCallbacks } from "../../callbacks/BundleCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class BundleStaticRouter extends StaticRouter { + protected bundleCallbacks: BundleCallbacks; + constructor(bundleCallbacks: BundleCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/CustomizationStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/CustomizationStaticRouter.d.ts new file mode 100644 index 0000000..21bc4bb --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/CustomizationStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { CustomizationCallbacks } from "../../callbacks/CustomizationCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class CustomizationStaticRouter extends StaticRouter { + protected customizationCallbacks: CustomizationCallbacks; + constructor(customizationCallbacks: CustomizationCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/DataStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/DataStaticRouter.d.ts new file mode 100644 index 0000000..84ba7fd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/DataStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { DataCallbacks } from "../../callbacks/DataCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class DataStaticRouter extends StaticRouter { + protected dataCallbacks: DataCallbacks; + constructor(dataCallbacks: DataCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/DialogStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/DialogStaticRouter.d.ts new file mode 100644 index 0000000..546cdf1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/DialogStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { DialogueCallbacks } from "../../callbacks/DialogueCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class DialogStaticRouter extends StaticRouter { + protected dialogueCallbacks: DialogueCallbacks; + constructor(dialogueCallbacks: DialogueCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/GameStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/GameStaticRouter.d.ts new file mode 100644 index 0000000..a9a7496 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/GameStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { GameCallbacks } from "../../callbacks/GameCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class GameStaticRouter extends StaticRouter { + protected gameCallbacks: GameCallbacks; + constructor(gameCallbacks: GameCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/HealthStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/HealthStaticRouter.d.ts new file mode 100644 index 0000000..863fd5e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/HealthStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { HealthCallbacks } from "../../callbacks/HealthCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class HealthStaticRouter extends StaticRouter { + protected healthCallbacks: HealthCallbacks; + constructor(healthCallbacks: HealthCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/InraidStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/InraidStaticRouter.d.ts new file mode 100644 index 0000000..b29ad23 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/InraidStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { InraidCallbacks } from "../../callbacks/InraidCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class InraidStaticRouter extends StaticRouter { + protected inraidCallbacks: InraidCallbacks; + constructor(inraidCallbacks: InraidCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/InsuranceStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/InsuranceStaticRouter.d.ts new file mode 100644 index 0000000..5676499 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/InsuranceStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { InsuranceCallbacks } from "../../callbacks/InsuranceCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class InsuranceStaticRouter extends StaticRouter { + protected insuranceCallbacks: InsuranceCallbacks; + constructor(insuranceCallbacks: InsuranceCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/ItemEventStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/ItemEventStaticRouter.d.ts new file mode 100644 index 0000000..c30a7fc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/ItemEventStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { ItemEventCallbacks } from "../../callbacks/ItemEventCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class ItemEventStaticRouter extends StaticRouter { + protected itemEventCallbacks: ItemEventCallbacks; + constructor(itemEventCallbacks: ItemEventCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/LauncherStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/LauncherStaticRouter.d.ts new file mode 100644 index 0000000..0040cbd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/LauncherStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { LauncherCallbacks } from "../../callbacks/LauncherCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class LauncherStaticRouter extends StaticRouter { + protected launcherCallbacks: LauncherCallbacks; + constructor(launcherCallbacks: LauncherCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/LocationStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/LocationStaticRouter.d.ts new file mode 100644 index 0000000..b6de956 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/LocationStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { LocationCallbacks } from "../../callbacks/LocationCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class LocationStaticRouter extends StaticRouter { + protected locationCallbacks: LocationCallbacks; + constructor(locationCallbacks: LocationCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/MatchStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/MatchStaticRouter.d.ts new file mode 100644 index 0000000..9920a92 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/MatchStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { MatchCallbacks } from "../../callbacks/MatchCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class MatchStaticRouter extends StaticRouter { + protected matchCallbacks: MatchCallbacks; + constructor(matchCallbacks: MatchCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/NotifierStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/NotifierStaticRouter.d.ts new file mode 100644 index 0000000..8f1f5cc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/NotifierStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { NotifierCallbacks } from "../../callbacks/NotifierCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class NotifierStaticRouter extends StaticRouter { + protected notifierCallbacks: NotifierCallbacks; + constructor(notifierCallbacks: NotifierCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/PresetStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/PresetStaticRouter.d.ts new file mode 100644 index 0000000..a9e7458 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/PresetStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { PresetBuildCallbacks } from "../../callbacks/PresetBuildCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class PresetStaticRouter extends StaticRouter { + protected presetCallbacks: PresetBuildCallbacks; + constructor(presetCallbacks: PresetBuildCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/ProfileStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/ProfileStaticRouter.d.ts new file mode 100644 index 0000000..83403f2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/ProfileStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { ProfileCallbacks } from "../../callbacks/ProfileCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class ProfileStaticRouter extends StaticRouter { + protected profileCallbacks: ProfileCallbacks; + constructor(profileCallbacks: ProfileCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/QuestStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/QuestStaticRouter.d.ts new file mode 100644 index 0000000..8f7ca0a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/QuestStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { QuestCallbacks } from "../../callbacks/QuestCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class QuestStaticRouter extends StaticRouter { + protected questCallbacks: QuestCallbacks; + constructor(questCallbacks: QuestCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/RagfairStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/RagfairStaticRouter.d.ts new file mode 100644 index 0000000..6c41467 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/RagfairStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { RagfairCallbacks } from "../../callbacks/RagfairCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class RagfairStaticRouter extends StaticRouter { + protected ragfairCallbacks: RagfairCallbacks; + constructor(ragfairCallbacks: RagfairCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/TraderStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/TraderStaticRouter.d.ts new file mode 100644 index 0000000..41728a1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/TraderStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { TraderCallbacks } from "../../callbacks/TraderCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class TraderStaticRouter extends StaticRouter { + protected traderCallbacks: TraderCallbacks; + constructor(traderCallbacks: TraderCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/routers/static/WeatherStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/WeatherStaticRouter.d.ts new file mode 100644 index 0000000..72ed851 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/routers/static/WeatherStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { WeatherCallbacks } from "../../callbacks/WeatherCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class WeatherStaticRouter extends StaticRouter { + protected weatherCallbacks: WeatherCallbacks; + constructor(weatherCallbacks: WeatherCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/servers/ConfigServer.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/servers/ConfigServer.d.ts new file mode 100644 index 0000000..a079be8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/servers/ConfigServer.d.ts @@ -0,0 +1,14 @@ +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigTypes } from "../models/enums/ConfigTypes"; +export declare class ConfigServer { + protected logger: ILogger; + protected vfs: VFS; + protected jsonUtil: JsonUtil; + protected configs: Record; + constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil); + getConfig(configType: ConfigTypes): T; + getConfigByString(configType: string): T; + initialize(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/servers/DatabaseServer.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/servers/DatabaseServer.d.ts new file mode 100644 index 0000000..b3d29e9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/servers/DatabaseServer.d.ts @@ -0,0 +1,6 @@ +import { IDatabaseTables } from "../models/spt/server/IDatabaseTables"; +export declare class DatabaseServer { + protected tableData: IDatabaseTables; + getTables(): IDatabaseTables; + setTables(tableData: IDatabaseTables): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/servers/HttpServer.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/servers/HttpServer.d.ts new file mode 100644 index 0000000..80c1d48 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/servers/HttpServer.d.ts @@ -0,0 +1,26 @@ +/// +import http, { IncomingMessage, ServerResponse } from "http"; +import { ApplicationContext } from "../context/ApplicationContext"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { ConfigServer } from "./ConfigServer"; +import { DatabaseServer } from "./DatabaseServer"; +import { IHttpListener } from "./http/IHttpListener"; +import { WebSocketServer } from "./WebSocketServer"; +export declare class HttpServer { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected httpServerHelper: HttpServerHelper; + protected localisationService: LocalisationService; + protected httpListeners: IHttpListener[]; + protected configServer: ConfigServer; + protected applicationContext: ApplicationContext; + protected webSocketServer: WebSocketServer; + constructor(logger: ILogger, databaseServer: DatabaseServer, httpServerHelper: HttpServerHelper, localisationService: LocalisationService, httpListeners: IHttpListener[], configServer: ConfigServer, applicationContext: ApplicationContext, webSocketServer: WebSocketServer); + protected httpConfig: IHttpConfig; + getCookies(req: http.IncomingMessage): any; + handleRequest(req: IncomingMessage, resp: ServerResponse): void; + load(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/servers/RagfairServer.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/servers/RagfairServer.d.ts new file mode 100644 index 0000000..f49654a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/servers/RagfairServer.d.ts @@ -0,0 +1,43 @@ +import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator"; +import { TraderAssortHelper } from "../helpers/TraderAssortHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { RagfairCategoriesService } from "../services/RagfairCategoriesService"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { RagfairRequiredItemsService } from "../services/RagfairRequiredItemsService"; +import { ConfigServer } from "./ConfigServer"; +export declare class RagfairServer { + protected logger: ILogger; + protected ragfairOfferGenerator: RagfairOfferGenerator; + protected ragfairOfferService: RagfairOfferService; + protected ragfairCategoriesService: RagfairCategoriesService; + protected ragfairRequiredItemsService: RagfairRequiredItemsService; + protected localisationService: LocalisationService; + protected traderHelper: TraderHelper; + protected traderAssortHelper: TraderAssortHelper; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, ragfairOfferGenerator: RagfairOfferGenerator, ragfairOfferService: RagfairOfferService, ragfairCategoriesService: RagfairCategoriesService, ragfairRequiredItemsService: RagfairRequiredItemsService, localisationService: LocalisationService, traderHelper: TraderHelper, traderAssortHelper: TraderAssortHelper, configServer: ConfigServer); + load(): Promise; + update(): Promise; + /** + * Get traders who need to be periodically refreshed + * @returns string array of traders + */ + protected getUpdateableTraders(): string[]; + getAllCategories(): Record; + getBespokeCategories(offers: IRagfairOffer[]): Record; + /** + * Disable/Hide an offer from flea + * @param offerId + */ + hideOffer(offerId: string): void; + getOffer(offerID: string): IRagfairOffer; + getOffers(): IRagfairOffer[]; + removeOfferStack(offerID: string, amount: number): void; + doesOfferExist(offerId: string): boolean; + addPlayerOffers(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/servers/SaveServer.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/servers/SaveServer.d.ts new file mode 100644 index 0000000..402befc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/servers/SaveServer.d.ts @@ -0,0 +1,84 @@ +import { SaveLoadRouter } from "../di/Router"; +import { IAkiProfile, Info } from "../models/eft/profile/IAkiProfile"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +export declare class SaveServer { + protected vfs: VFS; + protected saveLoadRouters: SaveLoadRouter[]; + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected localisationService: LocalisationService; + protected logger: ILogger; + protected profileFilepath: string; + protected profiles: {}; + protected onBeforeSaveCallbacks: {}; + protected saveMd5: {}; + constructor(vfs: VFS, saveLoadRouters: SaveLoadRouter[], jsonUtil: JsonUtil, hashUtil: HashUtil, localisationService: LocalisationService, logger: ILogger); + /** + * Add callback to occur prior to saving profile changes + * @param id Id for save callback + * @param callback Callback to execute prior to running SaveServer.saveProfile() + */ + addBeforeSaveCallback(id: string, callback: (profile: Partial) => Partial): void; + /** + * Remove a callback from being executed prior to saving profile in SaveServer.saveProfile() + * @param id Id of callback to remove + */ + removeBeforeSaveCallback(id: string): void; + /** + * Load all profiles in /user/profiles folder into memory (this.profiles) + */ + load(): void; + /** + * Save changes for each profile from memory into user/profiles json + */ + save(): void; + /** + * Get a player profile from memory + * @param sessionId Session id + * @returns IAkiProfile + */ + getProfile(sessionId: string): IAkiProfile; + /** + * Get all profiles from memory + * @returns Dictionary of IAkiProfile + */ + getProfiles(): Record; + /** + * Delete a profile by id + * @param sessionID Id of profile to remove + * @returns true when deleted, false when profile not found + */ + deleteProfileById(sessionID: string): boolean; + /** + * Create a new profile in memory with empty pmc/scav objects + * @param profileInfo Basic profile data + */ + createProfile(profileInfo: Info): void; + /** + * Add full profile in memory by key (info.id) + * @param profileDetails Profile to save + */ + addProfile(profileDetails: IAkiProfile): void; + /** + * Look up profile json in user/profiles by id and store in memory + * Execute saveLoadRouters callbacks after being loaded into memory + * @param sessionID Id of profile to store in memory + */ + loadProfile(sessionID: string): void; + /** + * Save changes from in-memory profile to user/profiles json + * Execute onBeforeSaveCallbacks callbacks prior to being saved to json + * @param sessionID profile id (user/profiles/id.json) + */ + saveProfile(sessionID: string): void; + /** + * Remove a physical profile json from user/profiles + * @param sessionID Profile id to remove + * @returns true if file no longer exists + */ + removeProfile(sessionID: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/servers/WebSocketServer.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/servers/WebSocketServer.d.ts new file mode 100644 index 0000000..5d40e6e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/servers/WebSocketServer.d.ts @@ -0,0 +1,27 @@ +/// +import http, { IncomingMessage } from "http"; +import WebSocket from "ws"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { INotification } from "../models/eft/notifier/INotifier"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ConfigServer } from "./ConfigServer"; +export declare class WebSocketServer { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected configServer: ConfigServer; + protected localisationService: LocalisationService; + protected httpServerHelper: HttpServerHelper; + constructor(logger: ILogger, randomUtil: RandomUtil, configServer: ConfigServer, localisationService: LocalisationService, httpServerHelper: HttpServerHelper); + protected httpConfig: IHttpConfig; + protected defaultNotification: INotification; + protected webSockets: Record; + protected websocketPingHandler: any; + setupWebSocket(httpServer: http.Server): void; + sendMessage(sessionID: string, output: INotification): void; + protected getRandomisedMessage(): string; + isConnectionWebSocket(sessionID: string): boolean; + protected wsOnConnection(ws: WebSocket.WebSocket, req: IncomingMessage): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/servers/http/AkiHttpListener.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/servers/http/AkiHttpListener.d.ts new file mode 100644 index 0000000..d02861e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/servers/http/AkiHttpListener.d.ts @@ -0,0 +1,30 @@ +/// +/// +import { IncomingMessage, ServerResponse } from "http"; +import { Serializer } from "../../di/Serializer"; +import { ILogger } from "../../models/spt/utils/ILogger"; +import { HttpRouter } from "../../routers/HttpRouter"; +import { LocalisationService } from "../../services/LocalisationService"; +import { HttpResponseUtil } from "../../utils/HttpResponseUtil"; +import { JsonUtil } from "../../utils/JsonUtil"; +import { HttpBufferHandler } from "./HttpBufferHandler"; +import { IHttpListener } from "./IHttpListener"; +export declare class AkiHttpListener implements IHttpListener { + protected httpRouter: HttpRouter; + protected serializers: Serializer[]; + protected logger: ILogger; + protected requestsLogger: ILogger; + protected jsonUtil: JsonUtil; + protected httpResponse: HttpResponseUtil; + protected localisationService: LocalisationService; + protected httpBufferHandler: HttpBufferHandler; + constructor(httpRouter: HttpRouter, // TODO: delay required + serializers: Serializer[], logger: ILogger, requestsLogger: ILogger, jsonUtil: JsonUtil, httpResponse: HttpResponseUtil, localisationService: LocalisationService, httpBufferHandler: HttpBufferHandler); + canHandle(_: string, req: IncomingMessage): boolean; + handle(sessionId: string, req: IncomingMessage, resp: ServerResponse): void; + sendResponse(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: Buffer, output: string): void; + getResponse(sessionID: string, req: IncomingMessage, body: Buffer): string; + protected getBodyInfo(body: Buffer): any; + sendJson(resp: ServerResponse, output: string, sessionID: string): void; + sendZlibJson(resp: ServerResponse, output: string, sessionID: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/servers/http/HttpBufferHandler.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/servers/http/HttpBufferHandler.d.ts new file mode 100644 index 0000000..fec4936 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/servers/http/HttpBufferHandler.d.ts @@ -0,0 +1,6 @@ +export declare class HttpBufferHandler { + protected buffers: {}; + resetBuffer(sessionID: string): void; + putInBuffer(sessionID: any, data: any, bufLength: number): boolean; + getFromBuffer(sessionID: string): any; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/servers/http/HttpMethods.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/servers/http/HttpMethods.d.ts new file mode 100644 index 0000000..96031e2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/servers/http/HttpMethods.d.ts @@ -0,0 +1,8 @@ +export declare enum HttpMethods { + OPTIONS = "OPTIONS", + GET = "GET", + POST = "POST", + PUT = "PUT", + PATCH = "PATCH", + DELETE = "DELETE" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/servers/http/IHttpListener.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/servers/http/IHttpListener.d.ts new file mode 100644 index 0000000..758bb5a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/servers/http/IHttpListener.d.ts @@ -0,0 +1,6 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +export interface IHttpListener { + canHandle(sessionId: string, req: IncomingMessage): boolean; + handle(sessionId: string, req: IncomingMessage, resp: ServerResponse): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/BotEquipmentFilterService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/BotEquipmentFilterService.d.ts new file mode 100644 index 0000000..089cfb5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/BotEquipmentFilterService.d.ts @@ -0,0 +1,97 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { MinMax } from "../models/common/MinMax"; +import { EquipmentChances, Generation, IBotType, ModsChances } from "../models/eft/common/tables/IBotType"; +import { BotGenerationDetails } from "../models/spt/bots/BotGenerationDetails"; +import { AdjustmentDetails, EquipmentFilterDetails, EquipmentFilters, IBotConfig, WeightingAdjustmentDetails } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class BotEquipmentFilterService { + protected logger: ILogger; + protected botHelper: BotHelper; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + protected botEquipmentConfig: Record; + constructor(logger: ILogger, botHelper: BotHelper, configServer: ConfigServer); + /** + * Filter a bots data to exclude equipment and cartridges defines in the botConfig + * @param baseBotNode bots json data to filter + * @param botLevel Level of the bot + * @param botGenerationDetails details on how to generate a bot + */ + filterBotEquipment(baseBotNode: IBotType, botLevel: number, botGenerationDetails: BotGenerationDetails): void; + /** + * Iterate over the changes passed in and alter data in baseValues + * @param equipmentChanges Changes to apply + * @param baseValues Values to update + */ + protected adjustChances(equipmentChanges: Record, baseValues: EquipmentChances | ModsChances): void; + /** + * Iterate over the Generation changes and alter data in baseValues.Generation + * @param generationChanges Changes to apply + * @param baseBotGeneration dictionary to update + */ + protected adjustGenerationChances(generationChanges: Record, baseBotGeneration: Generation): void; + /** + * Get equipment settings for bot + * @param botEquipmentRole equipment role to return + * @returns EquipmentFilters object + */ + getBotEquipmentSettings(botEquipmentRole: string): EquipmentFilters; + /** + * Get weapon sight whitelist for a specific bot type + * @param botEquipmentRole equipment role of bot to look up + * @returns Dictionary of weapon type and their whitelisted scope types + */ + getBotWeaponSightWhitelist(botEquipmentRole: string): Record; + /** + * Get an object that contains equipment and cartridge blacklists for a specified bot type + * @param botRole Role of the bot we want the blacklist for + * @param playerLevel Level of the player + * @returns EquipmentBlacklistDetails object + */ + getBotEquipmentBlacklist(botRole: string, playerLevel: number): EquipmentFilterDetails; + /** + * Get the whitelist for a specific bot type that's within the players level + * @param botRole Bot type + * @param playerLevel Players level + * @returns EquipmentFilterDetails object + */ + protected getBotEquipmentWhitelist(botRole: string, playerLevel: number): EquipmentFilterDetails; + /** + * Retrieve clothing weighting adjustments from bot.json config + * @param botRole Bot type to get adjustments for + * @param playerLevel level of player + * @returns Weighting adjustments for bots clothing + */ + protected getBotClothingAdjustments(botRole: string, playerLevel: number): WeightingAdjustmentDetails; + /** + * Retrieve item weighting adjustments from bot.json config + * @param botRole Bot type to get adjustments for + * @param playerLevel level of player + * @returns Weighting adjustments for bot items + */ + protected getBotWeightingAdjustments(botRole: string, playerLevel: number): WeightingAdjustmentDetails; + /** + * Filter bot equipment based on blacklist and whitelist from config/bot.json + * Prioritizes whitelist first, if one is found blacklist is ignored + * @param baseBotNode bot .json file to update + * @param blacklist equipment blacklist + * @returns Filtered bot file + */ + protected filterEquipment(baseBotNode: IBotType, blacklist: EquipmentFilterDetails, whitelist: EquipmentFilterDetails): void; + /** + * Filter bot cartridges based on blacklist and whitelist from config/bot.json + * Prioritizes whitelist first, if one is found blacklist is ignored + * @param baseBotNode bot .json file to update + * @param blacklist equipment on this list should be excluded from the bot + * @param whitelist equipment on this list should be used exclusively + * @returns Filtered bot file + */ + protected filterCartridges(baseBotNode: IBotType, blacklist: EquipmentFilterDetails, whitelist: EquipmentFilterDetails): void; + /** + * Add/Edit weighting changes to bot items using values from config/bot.json/equipment + * @param weightingAdjustments Weighting change to apply to bot + * @param botItemPool Bot item dictionary to adjust + */ + protected adjustWeighting(weightingAdjustments: AdjustmentDetails, botItemPool: Record, showEditWarnings?: boolean): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/BotEquipmentModPoolService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/BotEquipmentModPoolService.d.ts new file mode 100644 index 0000000..adf59ff --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/BotEquipmentModPoolService.d.ts @@ -0,0 +1,65 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Mods } from "../models/eft/common/tables/IBotType"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { VFS } from "../utils/VFS"; +/** Store a mapping between weapons, their slots and the items that fit those slots */ +export declare class BotEquipmentModPoolService { + protected logger: ILogger; + protected vfs: VFS; + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + protected weaponModPool: Mods; + protected gearModPool: Mods; + protected weaponPoolGenerated: boolean; + protected armorPoolGenerated: boolean; + constructor(logger: ILogger, vfs: VFS, itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Store dictionary of mods for each item passed in + * @param items items to find related mods and store in modPool + */ + protected generatePool(items: ITemplateItem[], poolType: string): void; + /** + * Empty the mod pool + */ + resetPool(): void; + /** + * Get array of compatible mods for an items mod slot (generate pool if it doesnt exist already) + * @param itemTpl item to look up + * @param slotName slot to get compatible mods for + * @returns tpls that fit the slot + */ + getCompatibleModsForWeaponSlot(itemTpl: string, slotName: string): string[]; + /** + * Get array of compatible mods for an items mod slot (generate pool if it doesnt exist already) + * @param itemTpl item to look up + * @param slotName slot to get compatible mods for + * @returns tpls that fit the slot + */ + getCompatibleModsFoGearSlot(itemTpl: string, slotName: string): string[]; + /** + * Get mods for a piece of gear by its tpl + * @param itemTpl items tpl to look up mods for + * @returns Dictionary of mods (keys are mod slot names) with array of compatible mod tpls as value + */ + getModsForGearSlot(itemTpl: string): Record; + /** + * Get mods for a weapon by its tpl + * @param itemTpl Weapons tpl to look up mods for + * @returns Dictionary of mods (keys are mod slot names) with array of compatible mod tpls as value + */ + getModsForWeaponSlot(itemTpl: string): Record; + /** + * Create weapon mod pool and set generated flag to true + */ + protected generateWeaponPool(): void; + /** + * Create gear mod pool and set generated flag to true + */ + protected generateGearPool(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/BotGenerationCacheService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/BotGenerationCacheService.d.ts new file mode 100644 index 0000000..a491b03 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/BotGenerationCacheService.d.ts @@ -0,0 +1,36 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { LocalisationService } from "./LocalisationService"; +export declare class BotGenerationCacheService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected localisationService: LocalisationService; + protected botHelper: BotHelper; + protected storedBots: Map; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, localisationService: LocalisationService, botHelper: BotHelper); + /** + * Store array of bots in cache, shuffle results before storage + * @param botsToStore Bots we want to store in the cache + */ + storeBots(key: string, botsToStore: IBotBase[]): void; + /** + * Find and return a bot based on its role + * Remove bot from internal array so it can't be retreived again + * @param key role to retreive (assault/bossTagilla etc) + * @returns IBotBase object + */ + getBot(key: string): IBotBase; + /** + * Remove all cached bot profiles + */ + clearStoredBots(): void; + /** + * Does cache have a bot with requested key + * @returns false if empty + */ + cacheHasBotOfRole(key: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/BotLootCacheService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/BotLootCacheService.d.ts new file mode 100644 index 0000000..dab7c6d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/BotLootCacheService.d.ts @@ -0,0 +1,95 @@ +import { PMCLootGenerator } from "../generators/PMCLootGenerator"; +import { Items } from "../models/eft/common/tables/IBotType"; +import { ITemplateItem, Props } from "../models/eft/common/tables/ITemplateItem"; +import { BotLootCache, LootCacheType } from "../models/spt/bots/BotLootCache"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { JsonUtil } from "../utils/JsonUtil"; +import { LocalisationService } from "./LocalisationService"; +import { RagfairPriceService } from "./RagfairPriceService"; +export declare class BotLootCacheService { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected pmcLootGenerator: PMCLootGenerator; + protected localisationService: LocalisationService; + protected ragfairPriceService: RagfairPriceService; + protected lootCache: Record; + constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, pmcLootGenerator: PMCLootGenerator, localisationService: LocalisationService, ragfairPriceService: RagfairPriceService); + /** + * Remove all cached bot loot data + */ + clearCache(): void; + /** + * Get the fully created loot array, ordered by price low to high + * @param botRole bot to get loot for + * @param isPmc is the bot a pmc + * @param lootType what type of loot is needed (backpack/pocket/stim/vest etc) + * @param lootPool the full pool of loot (needed when cache is empty) + * @returns ITemplateItem array + */ + getLootFromCache(botRole: string, isPmc: boolean, lootType: LootCacheType, lootPool: Items): ITemplateItem[]; + /** + * Generate loot for a bot and store inside a private class property + * @param botRole bots role (assault / pmcBot etc) + * @param lootPool the full pool of loot we use to create the various sub-categories with + * @param isPmc Is the bot a PMC (alteres what loot is cached) + */ + protected addLootToCache(botRole: string, isPmc: boolean, lootPool: Items): void; + /** + * Sort a pool of item objects by its flea price + * @param poolToSort pool of items to sort + */ + protected sortPoolByRagfairPrice(poolToSort: ITemplateItem[]): void; + /** + * Add unique items into combined pool + * @param combinedItemPool Pool of items to add to + * @param itemsToAdd items to add to combined pool if unique + */ + protected addUniqueItemsToPool(combinedItemPool: ITemplateItem[], itemsToAdd: ITemplateItem[]): void; + /** + * Ammo/grenades have this property + * @param props + * @returns + */ + protected isBulletOrGrenade(props: Props): boolean; + /** + * Internal and external magazine have this property + * @param props + * @returns + */ + protected isMagazine(props: Props): boolean; + /** + * Medical use items (e.g. morphine/lip balm/grizzly) + * @param props + * @returns + */ + protected isMedicalItem(props: Props): boolean; + /** + * Grenades have this property (e.g. smoke/frag/flash grenades) + * @param props + * @returns + */ + protected isGrenade(props: Props): boolean; + /** + * Check if a bot type exists inside the loot cache + * @param botRole role to check for + * @returns true if they exist + */ + protected botRoleExistsInCache(botRole: string): boolean; + /** + * If lootcache is null, init with empty property arrays + * @param botRole Bot role to hydrate + */ + protected initCacheForBotRole(botRole: string): void; + /** + * Compares two item prices by their flea (or handbook if that doesnt exist) price + * -1 when a < b + * 0 when a === b + * 1 when a > b + * @param itemAPrice + * @param itemBPrice + * @returns + */ + protected compareByValue(itemAPrice: number, itemBPrice: number): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/BotWeaponModLimitService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/BotWeaponModLimitService.d.ts new file mode 100644 index 0000000..f8ebc2f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/BotWeaponModLimitService.d.ts @@ -0,0 +1,54 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class BotModLimits { + scope: ItemCount; + scopeMax: number; + scopeBaseTypes: string[]; + flashlightLaser: ItemCount; + flashlightLaserMax: number; + flashlgihtLaserBaseTypes: string[]; +} +export declare class ItemCount { + count: number; +} +export declare class BotWeaponModLimitService { + protected logger: ILogger; + protected configServer: ConfigServer; + protected itemHelper: ItemHelper; + protected botConfig: IBotConfig; + constructor(logger: ILogger, configServer: ConfigServer, itemHelper: ItemHelper); + /** + * Initalise mod limits to be used when generating a weapon + * @param botRole "assault", "bossTagilla" or "pmc" + * @returns BotModLimits object + */ + getWeaponModLimits(botRole: string): BotModLimits; + /** + * Check if weapon mod item is on limited list + has surpassed the limit set for it + * Exception: Always allow ncstar backup mount + * Exception: Always allow scopes with a scope for a parent + * Exception: Always disallow mounts that hold only scopes once scope limit reached + * Exception: Always disallow mounts that hold only flashlights once flashlight limit reached + * @param botRole role the bot has e.g. assault + * @param modTemplate mods template data + * @param modLimits limits set for weapon being generated for this bot + * @param modsParent The parent of the mod to be checked + * @returns true if over item limit + */ + weaponModHasReachedLimit(botRole: string, modTemplate: ITemplateItem, modLimits: BotModLimits, modsParent: ITemplateItem, weapon: Item[]): boolean; + /** + * Check if the specific item type on the weapon has reached the set limit + * @param modTpl log mod tpl if over type limit + * @param currentCount current number of this item on gun + * @param maxLimit mod limit allowed + * @param botRole role of bot we're checking weapon of + * @returns true if limit reached + */ + protected weaponModLimitReached(modTpl: string, currentCount: { + count: number; + }, maxLimit: number, botRole: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/CustomLocationWaveService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/CustomLocationWaveService.d.ts new file mode 100644 index 0000000..7d14f07 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/CustomLocationWaveService.d.ts @@ -0,0 +1,42 @@ +import { BossLocationSpawn, Wave } from "../models/eft/common/ILocationBase"; +import { ILocationConfig } from "../models/spt/config/ILocationConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class CustomLocationWaveService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected locationConfig: ILocationConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Add a boss wave to a map + * @param locationId e.g. factory4_day, bigmap + * @param waveToAdd Boss wave to add to map + */ + addBossWaveToMap(locationId: string, waveToAdd: BossLocationSpawn): void; + /** + * Add a normal bot wave to a map + * @param locationId e.g. factory4_day, bigmap + * @param waveToAdd Wave to add to map + */ + addNormalWaveToMap(locationId: string, waveToAdd: Wave): void; + /** + * Clear all custom boss waves from a map + * @param locationId e.g. factory4_day, bigmap + */ + clearBossWavesForMap(locationId: string): void; + /** + * Clear all custom normal waves from a map + * @param locationId e.g. factory4_day, bigmap + */ + clearNormalWavesForMap(locationId: string): void; + /** + * Add custom boss and normal waves to maps found in config/location.json to db + */ + applyWaveChangesToAllMaps(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/FenceService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/FenceService.d.ts new file mode 100644 index 0000000..d143380 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/FenceService.d.ts @@ -0,0 +1,184 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { FenceLevel, Preset } from "../models/eft/common/IGlobals"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { ItemFilterService } from "./ItemFilterService"; +import { LocalisationService } from "./LocalisationService"; +/** + * Handle actions surrounding Fence + * e.g. generating or refreshing assorts / get next refresh time + */ +export declare class FenceService { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected timeUtil: TimeUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected itemHelper: ItemHelper; + protected presetHelper: PresetHelper; + protected itemFilterService: ItemFilterService; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + /** Main assorts you see at all rep levels */ + protected fenceAssort: ITraderAssort; + /** Assorts shown on a separte tab when you max out fence rep */ + protected fenceDiscountAssort: ITraderAssort; + protected traderConfig: ITraderConfig; + protected nextMiniRefreshTimestamp: number; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, timeUtil: TimeUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, presetHelper: PresetHelper, itemFilterService: ItemFilterService, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Replace main fence assort with new assort + * @param assort New assorts to replace old with + */ + protected setFenceAssort(assort: ITraderAssort): void; + /** + * Replace high rep level fence assort with new assort + * @param assort New assorts to replace old with + */ + protected setFenceDiscountAssort(assort: ITraderAssort): void; + /** + * Get assorts player can purchase + * Adjust prices based on fence level of player + * @param pmcProfile Player profile + * @returns ITraderAssort + */ + getFenceAssorts(pmcProfile: IPmcData): ITraderAssort; + /** + * Adjust all items contained inside an assort by a multiplier + * @param assort Assort that contains items with prices to adjust + * @param itemMultipler multipler to use on items + * @param presetMultiplier preset multipler to use on presets + */ + protected adjustAssortItemPrices(assort: ITraderAssort, itemMultipler: number, presetMultiplier: number): void; + /** + * Merge two trader assort files together + * @param firstAssort assort 1# + * @param secondAssort assort #2 + * @returns merged assort + */ + protected mergeAssorts(firstAssort: ITraderAssort, secondAssort: ITraderAssort): ITraderAssort; + /** + * Adjust assorts price by a modifier + * @param item assort item details + * @param assort assort to be modified + * @param modifier value to multiply item price by + * @param presetModifier value to multiply preset price by + */ + protected adjustItemPriceByModifier(item: Item, assort: ITraderAssort, modifier: number, presetModifier: number): void; + /** + * Get fence assorts with no price adjustments based on fence rep + * @returns ITraderAssort + */ + getRawFenceAssorts(): ITraderAssort; + /** + * Does fence need to perform a partial refresh because its passed the refresh timer defined in trader.json + * @returns true if it needs a partial refresh + */ + needsPartialRefresh(): boolean; + /** + * Replace a percentage of fence assorts with freshly generated items + */ + performPartialRefresh(): void; + /** + * Increment fence next refresh timestamp by current timestamp + partialRefreshTimeSeconds from config + */ + protected incrementPartialRefreshTime(): void; + /** + * Compare the current fence offer count to what the config wants it to be, + * If value is lower add extra count to value to generate more items to fill gap + * @param existingItemCountToReplace count of items to generate + * @returns number of items to generate + */ + protected getCountOfItemsToGenerate(existingItemCountToReplace: number): number; + /** + * Choose an item (not mod) at random and remove from assorts + */ + protected removeRandomItemFromAssorts(assort: ITraderAssort): void; + /** + * Get an integer rounded count of items to replace based on percentrage from traderConfig value + * @param totalItemCount total item count + * @returns rounded int of items to replace + */ + protected getCountOfItemsToReplace(totalItemCount: number): number; + /** + * Get the count of items fence offers + * @returns number + */ + getOfferCount(): number; + /** + * Create trader assorts for fence and store in fenceService cache + */ + generateFenceAssorts(): void; + /** + * Create skeleton to hold assort items + * @returns ITraderAssort object + */ + protected createBaseTraderAssortItem(): ITraderAssort; + /** + * Hydrate assorts parameter object with generated assorts + * @param assortCount Number of assorts to generate + * @param assorts object to add created assorts to + */ + protected createAssorts(assortCount: number, assorts: ITraderAssort, loyaltyLevel: number): void; + protected addItemAssorts(assortCount: number, fenceAssortIds: string[], assorts: ITraderAssort, fenceAssort: ITraderAssort, itemTypeCounts: Record, loyaltyLevel: number): void; + /** + * Add preset weapons to fence presets + * @param assortCount how many assorts to add to assorts + * @param defaultWeaponPresets a dictionary of default weapon presets + * @param assorts object to add presets to + * @param loyaltyLevel loyalty level to requre item at + */ + protected addPresets(desiredPresetCount: number, defaultWeaponPresets: Record, assorts: ITraderAssort, loyaltyLevel: number): void; + /** + * Randomise items' upd properties e.g. med packs/weapons/armor + * @param itemDetails Item being randomised + * @param itemToAdjust Item being edited + */ + protected randomiseItemUpdProperties(itemDetails: ITemplateItem, itemToAdjust: Item): void; + /** + * Construct item limit record to hold max and current item count + * @param limits limits as defined in config + * @returns record, key: item tplId, value: current/max item count allowed + */ + protected initItemLimitCounter(limits: Record): Record; + /** + * Get the next update timestamp for fence + * @returns future timestamp + */ + getNextFenceUpdateTimestamp(): number; + /** + * Get fence refresh time in seconds + */ + protected getFenceRefreshTime(): number; + /** + * Get fence level the passed in profile has + * @param pmcData Player profile + * @returns FenceLevel object + */ + getFenceInfo(pmcData: IPmcData): FenceLevel; + /** + * Remove an assort from fence by id + * @param assortIdToRemove assort id to remove from fence assorts + */ + removeFenceOffer(assortIdToRemove: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/HashCacheService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/HashCacheService.d.ts new file mode 100644 index 0000000..5320f28 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/HashCacheService.d.ts @@ -0,0 +1,19 @@ +import { ILogger } from "../models/spt/utils/ILogger"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +export declare class HashCacheService { + protected vfs: VFS; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected logger: ILogger; + protected jsonHashes: any; + protected modHashes: any; + protected readonly modCachePath = "./user/cache/modCache.json"; + constructor(vfs: VFS, hashUtil: HashUtil, jsonUtil: JsonUtil, logger: ILogger); + getStoredModHash(modName: string): string; + modContentMatchesStoredHash(modName: string, modContent: string): boolean; + hashMatchesStoredHash(modName: string, modHash: string): boolean; + storeModContent(modName: string, modContent: string): void; + storeModHash(modName: string, modHash: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/InsuranceService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/InsuranceService.d.ts new file mode 100644 index 0000000..886a298 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/InsuranceService.d.ts @@ -0,0 +1,78 @@ +import { ITraderBase } from "../models/eft/common/tables/ITrader"; +import { DialogueHelper } from "../helpers/DialogueHelper"; +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { SecureContainerHelper } from "../helpers/SecureContainerHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { InsuredItem } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; +import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { LocalisationService } from "./LocalisationService"; +export declare class InsuranceService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected secureContainerHelper: SecureContainerHelper; + protected randomUtil: RandomUtil; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected traderHelper: TraderHelper; + protected dialogueHelper: DialogueHelper; + protected handbookHelper: HandbookHelper; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected insured: Record>; + protected insuranceConfig: IInsuranceConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, secureContainerHelper: SecureContainerHelper, randomUtil: RandomUtil, timeUtil: TimeUtil, saveServer: SaveServer, traderHelper: TraderHelper, dialogueHelper: DialogueHelper, handbookHelper: HandbookHelper, localisationService: LocalisationService, configServer: ConfigServer); + insuranceExists(sessionId: string): boolean; + insuranceTraderArrayExists(sessionId: string, traderId: string): boolean; + getInsurance(sessionId: string): Record; + getInsuranceItems(sessionId: string, traderId: string): Item[]; + resetInsurance(sessionId: string): void; + resetInsuranceTraderArray(sessionId: string, traderId: string): void; + addInsuranceItemToArray(sessionId: string, traderId: string, itemToAdd: any): void; + /** + * Get the rouble price for an item by templateId + * @param itemTpl item tpl to get handbook price for + * @returns handbook price in roubles, Return 0 if not found + */ + getItemPrice(itemTpl: string): number; + /** + * Sends stored insured items as message to player + * @param pmcData profile to modify + * @param sessionID SessionId of current player + * @param mapId Id of the map player died/exited that caused the insurance to be issued on + */ + sendInsuredItems(pmcData: IPmcData, sessionID: string, mapId: string): void; + /** + * Get a timestamp of what insurance items should be sent to player based on the type of trader used to insure + * @param pmcData Player profile + * @param trader Trader used to insure items + * @returns Timestamp to return items to player in seconds + */ + protected getInsuranceReturnTimestamp(pmcData: IPmcData, trader: ITraderBase): number; + /** + * Store lost gear post-raid inside profile + * @param pmcData player profile to store gear in + * @param offraidData post-raid request object + * @param preRaidGear gear player wore prior to raid + * @param sessionID Session id + */ + storeLostGear(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; + storeInsuredItemsForReturn(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; + /** + * Add gear item to InsuredItems array in player profile + * @param pmcData profile to store item in + * @param insuredItem Item to store in profile + * @param actualItem item to store + * @param sessionID Session id + */ + protected addGearToSend(pmcData: IPmcData, insuredItem: InsuredItem, actualItem: Item, sessionID: string): void; + getPremium(pmcData: IPmcData, inventoryItem: Item, traderId: string): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/ItemBaseClassService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/ItemBaseClassService.d.ts new file mode 100644 index 0000000..d7bc4bc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/ItemBaseClassService.d.ts @@ -0,0 +1,39 @@ +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "./LocalisationService"; +/** + * Cache the baseids for each item in the tiems db inside a dictionary + */ +export declare class ItemBaseClassService { + protected logger: ILogger; + protected localisationService: LocalisationService; + protected databaseServer: DatabaseServer; + protected itemBaseClassesCache: Record; + protected cacheGenerated: boolean; + constructor(logger: ILogger, localisationService: LocalisationService, databaseServer: DatabaseServer); + /** + * Create cache and store inside ItemBaseClassService + */ + hydrateItemBaseClassCache(): void; + /** + * Helper method, recursivly iterate through items parent items, finding and adding ids to dictionary + * @param itemIdToUpdate item tpl to store base ids against in dictionary + * @param item item being checked + * @param allDbItems all items in db + */ + protected addBaseItems(itemIdToUpdate: string, item: ITemplateItem, allDbItems: Record): void; + /** + * Does item tpl inherit from the requested base class + * @param itemTpl item to check base classes of + * @param baseClass base class to check for + * @returns true if item inherits from base class passed in + */ + itemHasBaseClass(itemTpl: string, baseClasses: string[]): boolean; + /** + * Get base classes item inherits from + * @param itemTpl item to get base classes for + * @returns array of base classes + */ + getItemBaseClasses(itemTpl: string): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/ItemFilterService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/ItemFilterService.d.ts new file mode 100644 index 0000000..b830d74 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/ItemFilterService.d.ts @@ -0,0 +1,24 @@ +import { IItemConfig } from "../models/spt/config/IItemConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +/** Centralise the handling of blacklisting items, uses blacklist found in config/item.json, stores items that should not be used by players / broken items */ +export declare class ItemFilterService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected blacklist: string[]; + protected itemConfig: IItemConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Check if the provided template id is blacklisted in config/item.json + * @param tpl template id + * @returns true if blacklisted + */ + isItemBlacklisted(tpl: string): boolean; + /** + * Return every template id blacklisted in config/item.json + * @returns string array of blacklisted tempalte ids + */ + getBlacklistedItems(): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/LocaleService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/LocaleService.d.ts new file mode 100644 index 0000000..09c658b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/LocaleService.d.ts @@ -0,0 +1,41 @@ +import { ILocaleConfig } from "../models/spt/config/ILocaleConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +/** + * Handles getting locales from config or users machine + */ +export declare class LocaleService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected localeConfig: ILocaleConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Get the eft globals db file based on the configured locale in config/locale.json, if not found, fall back to 'en' + * @returns dictionary + */ + getLocaleDb(): Record; + /** + * Gets the game locale key from the locale.json file, + * if value is 'system' get system locale + * @returns locale e.g en/ge/cz/cn + */ + getDesiredGameLocale(): string; + /** + * Gets the game locale key from the locale.json file, + * if value is 'system' get system locale + * @returns locale e.g en/ge/cz/cn + */ + getDesiredServerLocale(): string; + /** + * Get array of languages supported for localisation + * @returns array of locales e.g. en/fr/cn + */ + getServerSupportedLocales(): string[]; + /** + * Get the locale of the computer running the server + * @returns langage part of locale e.g. 'en' part of 'en-US' + */ + protected getPlatformLocale(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/LocalisationService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/LocalisationService.d.ts new file mode 100644 index 0000000..519325d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/LocalisationService.d.ts @@ -0,0 +1,21 @@ +import { I18n } from "i18n"; +import { ILocaleConfig } from "../models/spt/config/ILocaleConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocaleService } from "./LocaleService"; +/** + * Handles translating server text into different langauges + */ +export declare class LocalisationService { + protected logger: ILogger; + protected localeService: LocaleService; + protected localeConfig: ILocaleConfig; + protected i18n: I18n; + constructor(logger: ILogger, localeService: LocaleService); + /** + * Get a localised value using the passed in key + * @param key Key to loop up locale for + * @param args optional arguments + * @returns Localised string + */ + getText(key: string, args?: any): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/MatchLocationService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/MatchLocationService.d.ts new file mode 100644 index 0000000..c027bec --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/MatchLocationService.d.ts @@ -0,0 +1,9 @@ +import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class MatchLocationService { + protected timeUtil: TimeUtil; + protected locations: {}; + constructor(timeUtil: TimeUtil); + createGroup(sessionID: string, info: ICreateGroupRequestData): any; + deleteGroup(info: any): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/ModCompilerService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/ModCompilerService.d.ts new file mode 100644 index 0000000..a4bf3c8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/ModCompilerService.d.ts @@ -0,0 +1,14 @@ +import { CompilerOptions } from "typescript"; +import type { ILogger } from "../models/spt/utils/ILogger"; +import { HashCacheService } from "./HashCacheService"; +import { VFS } from "../utils/VFS"; +export declare class ModCompilerService { + protected logger: ILogger; + protected hashCacheService: HashCacheService; + protected vfs: VFS; + constructor(logger: ILogger, hashCacheService: HashCacheService, vfs: VFS); + compileMod(modName: string, modPath: string, modTypeScriptFiles: string[]): Promise; + protected compile(fileNames: string[], options: CompilerOptions): Promise; + protected areFilesReady(fileNames: string[]): boolean; + protected delay(ms: number): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/NotificationService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/NotificationService.d.ts new file mode 100644 index 0000000..65a84dd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/NotificationService.d.ts @@ -0,0 +1,21 @@ +import { INotification } from "../models/eft/notifier/INotifier"; +export declare class NotificationService { + protected messageQueue: Record; + getMessageQueue(): Record; + getMessageFromQueue(sessionId: string): any[]; + updateMessageOnQueue(sessionId: string, value: any[]): void; + has(sessionID: string): boolean; + /** + * Pop first message from queue. + */ + pop(sessionID: string): any; + /** + * Add message to queue + */ + add(sessionID: string, message: INotification): void; + /** + * Get message queue for session + * @param sessionID + */ + get(sessionID: string): any[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/OpenZoneService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/OpenZoneService.d.ts new file mode 100644 index 0000000..8e70b94 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/OpenZoneService.d.ts @@ -0,0 +1,28 @@ +import { ILocationConfig } from "../models/spt/config/ILocationConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { LocalisationService } from "./LocalisationService"; +/** Service for adding new zones to a maps OpenZones property */ +export declare class OpenZoneService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected locationConfig: ILocationConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Add open zone to specified map + * @param locationId map location (e.g. factory4_day) + * @param zoneToAdd zone to add + */ + addZoneToMap(locationId: string, zoneToAdd: string): void; + /** + * Add open zones to all maps found in config/location.json to db + */ + applyZoneChangesToAllMaps(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/PaymentService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/PaymentService.d.ts new file mode 100644 index 0000000..ac131ea --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/PaymentService.d.ts @@ -0,0 +1,76 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBuyTradeRequestData } from "../models/eft/trade/IProcessBuyTradeRequestData"; +import { IProcessSellTradeRequestData } from "../models/eft/trade/IProcessSellTradeRequestData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { LocalisationService } from "./LocalisationService"; +export declare class PaymentService { + protected logger: ILogger; + protected httpResponse: HttpResponseUtil; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected traderHelper: TraderHelper; + protected itemHelper: ItemHelper; + protected inventoryHelper: InventoryHelper; + protected localisationService: LocalisationService; + protected paymentHelper: PaymentHelper; + constructor(logger: ILogger, httpResponse: HttpResponseUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, traderHelper: TraderHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, localisationService: LocalisationService, paymentHelper: PaymentHelper); + /** + * Take money and insert items into return to server request + * @param {IPmcData} pmcData Player profile + * @param {IProcessBuyTradeRequestData} request + * @param {string} sessionID + * @returns Object + */ + payMoney(pmcData: IPmcData, request: IProcessBuyTradeRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse; + /** + * Receive money back after selling + * @param {IPmcData} pmcData + * @param {number} amount + * @param {IProcessSellTradeRequestData} body + * @param {IItemEventRouterResponse} output + * @param {string} sessionID + * @returns IItemEventRouterResponse + */ + getMoney(pmcData: IPmcData, amount: number, body: IProcessSellTradeRequestData, output: IItemEventRouterResponse, sessionID: string): IItemEventRouterResponse; + /** + * Recursively checks if the given item is + * inside the stash, that is it has the stash as + * ancestor with slotId=hideout + */ + protected isItemInStash(pmcData: IPmcData, item: Item): boolean; + /** + * Remove currency from player stash/inventory + * @param pmcData Player profile to find and remove currency from + * @param currencyTpl Type of currency to pay + * @param amountToPay money value to pay + * @param sessionID Session id + * @param output output object to send to client + * @returns IItemEventRouterResponse + */ + addPaymentToOutput(pmcData: IPmcData, currencyTpl: string, amountToPay: number, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse; + /** + * Prioritise player stash first over player inventory + * Post-raid healing would often take money out of the players pockets/secure container + * @param a First money stack item + * @param b Second money stack item + * @param inventoryItems players inventory items + * @returns sort order + */ + protected prioritiseStashSort(a: Item, b: Item, inventoryItems: Item[]): number; + /** + * Recursivly check items parents to see if it is inside the players inventory, not stash + * @param itemId item id to check + * @param inventoryItems player inventory + * @returns true if its in inventory + */ + protected isInInventory(itemId: string, inventoryItems: Item[]): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/PlayerService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/PlayerService.d.ts new file mode 100644 index 0000000..1195b93 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/PlayerService.d.ts @@ -0,0 +1,22 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "./LocalisationService"; +export declare class PlayerService { + protected logger: ILogger; + protected localisationService: LocalisationService; + protected databaseServer: DatabaseServer; + constructor(logger: ILogger, localisationService: LocalisationService, databaseServer: DatabaseServer); + /** + * increases the profile skill and updates any output + * @param {Object} pmcData + * @param {String} skillName + * @param {Number} amount + */ + incrementSkillLevel(pmcData: IPmcData, skillName: string, amount: number): void; + /** + * @param {Object} pmcData + * @returns number + */ + calculateLevel(pmcData: IPmcData): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/ProfileFixerService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/ProfileFixerService.d.ts new file mode 100644 index 0000000..8d23ebc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/ProfileFixerService.d.ts @@ -0,0 +1,112 @@ +import { HideoutHelper } from "../helpers/HideoutHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Bonus, HideoutSlot } from "../models/eft/common/tables/IBotBase"; +import { IPmcDataRepeatableQuest, IRepeatableQuest } from "../models/eft/common/tables/IRepeatableQuests"; +import { StageBonus } from "../models/eft/hideout/IHideoutArea"; +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { HideoutAreas } from "../models/enums/HideoutAreas"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { TimeUtil } from "../utils/TimeUtil"; +import { Watermark } from "../utils/Watermark"; +import { LocalisationService } from "./LocalisationService"; +export declare class ProfileFixerService { + protected logger: ILogger; + protected watermark: Watermark; + protected hideoutHelper: HideoutHelper; + protected localisationService: LocalisationService; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, localisationService: LocalisationService, timeUtil: TimeUtil, databaseServer: DatabaseServer); + /** + * Find issues in the pmc profile data that may cause issues and fix them + * @param pmcProfile profile to check and fix + */ + checkForAndFixPmcProfileIssues(pmcProfile: IPmcData): void; + /** + * Add tag to profile to indicate when it was made + * @param fullProfile + */ + addMissingAkiVersionTagToProfile(fullProfile: IAkiProfile): void; + /** + * TODO - make this non-public - currently used by RepeatableQuestController + * Remove unused condition counters + * @param pmcProfile profile to remove old counters from + */ + removeDanglingConditionCounters(pmcProfile: IPmcData): void; + addLighthouseKeeperIfMissing(pmcProfile: IPmcData): void; + protected addUnlockedInfoObjectIfMissing(pmcProfile: IPmcData): void; + protected removeDanglingBackendCounters(pmcProfile: IPmcData): void; + protected getActiveRepeatableQuests(repeatableQuests: IPmcDataRepeatableQuest[]): IRepeatableQuest[]; + protected fixNullTraderSalesSums(pmcProfile: IPmcData): void; + protected addMissingBonusesProperty(pmcProfile: IPmcData): void; + /** + * Adjust profile quest status and statusTimers object values + * quest.status is numeric e.g. 2 + * quest.statusTimers keys are numeric as strings e.g. "2" + * @param pmcProfile profile to update + */ + protected updateProfileQuestDataValues(pmcProfile: IPmcData): void; + protected addMissingRepeatableQuestsProperty(pmcProfile: IPmcData): void; + protected addMissingWorkbenchWeaponSkills(pmcProfile: IPmcData): void; + /** + * Some profiles have hideout maxed and therefore no improvements + * @param pmcProfile Profile to add improvement data to + */ + protected addMissingWallImprovements(pmcProfile: IPmcData): void; + /** + * A new property was added to slot items "locationIndex", if this is missing, the hideout slot item must be removed + * @param pmcProfile Profile to find and remove slots from + */ + protected removeResourcesFromSlotsInHideoutWithoutLocationIndexValue(pmcProfile: IPmcData): void; + /** + * Hideout slots need to be in a specific order, locationIndex in ascending order + * @param pmcProfile profile to edit + */ + protected reorderHideoutAreasWithResouceInputs(pmcProfile: IPmcData): void; + /** + * add in objects equal to the number of slots + * @param areaType area to check + * @param pmcProfile profile to update + */ + protected addEmptyObjectsToHideoutAreaSlots(areaType: HideoutAreas, emptyItemCount: number, pmcProfile: IPmcData): void; + protected addObjectsToArray(count: number, slots: HideoutSlot[]): HideoutSlot[]; + /** + * In 18876 bsg changed the pockets tplid to be one that has 3 additional special slots + * @param pmcProfile + */ + protected updateProfilePocketsToNewId(pmcProfile: IPmcData): void; + addMissingArmorRepairSkill(pmcProfile: IPmcData): void; + /** + * Iterate over players hideout areas and find what's build, look for missing bonuses those areas give and add them if missing + * @param pmcProfile Profile to update + */ + addMissingHideoutBonusesToProfile(pmcProfile: IPmcData): void; + /** + * + * @param profileBonuses bonuses from profile + * @param bonus bonus to find + * @returns matching bonus + */ + protected getBonusFromProfile(profileBonuses: Bonus[], bonus: StageBonus): Bonus; + /** + * Checks profile inventiory for items that do not exist inside the items db + * @param pmcProfile Profile to check inventory of + */ + checkForOrphanedModdedItems(pmcProfile: IPmcData): void; + /** + * Add `Improvements` object to hideout if missing - added in eft 13.0.21469 + * @param pmcProfile profile to update + */ + addMissingUpgradesPropertyToHideout(pmcProfile: IPmcData): void; + /** + * Iterate over associated profile template and check all hideout areas exist, add if not + * @param fullProfile Profile to update + */ + addMissingHideoutAreasToProfile(fullProfile: IAkiProfile): void; + /** + * These used to be used for storing scav case rewards, rewards are now generated on pickup + * @param pmcProfile Profile to update + */ + removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/ProfileSnapshotService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/ProfileSnapshotService.d.ts new file mode 100644 index 0000000..445ffd0 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/ProfileSnapshotService.d.ts @@ -0,0 +1,30 @@ +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class ProfileSnapshotService { + protected jsonUtil: JsonUtil; + protected storedProfileSnapshots: Record; + constructor(jsonUtil: JsonUtil); + /** + * Store a profile into an in-memory object + * @param sessionID session id - acts as the key + * @param profile - profile to save + */ + storeProfileSnapshot(sessionID: string, profile: IAkiProfile): void; + /** + * Retreve a stored profile + * @param sessionID key + * @returns A player profile object + */ + getProfileSnapshot(sessionID: string): IAkiProfile; + /** + * Does a profile exists against the provided key + * @param sessionID key + * @returns true if exists + */ + hasProfileSnapshot(sessionID: string): boolean; + /** + * Remove a stored profile by key + * @param sessionID key + */ + clearProfileSnapshot(sessionID: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairCategoriesService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairCategoriesService.d.ts new file mode 100644 index 0000000..83910e5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairCategoriesService.d.ts @@ -0,0 +1,40 @@ +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { ILogger } from "../models/spt/utils/ILogger"; +export declare class RagfairCategoriesService { + protected logger: ILogger; + protected categories: Record; + constructor(logger: ILogger); + /** + * Get all flea categories and their count of offers + * @returns item categories and count + */ + getAllCategories(): Record; + /** + * With the supplied items, get custom categories + * @returns a custom list of categories + */ + getBespokeCategories(offers: IRagfairOffer[]): Record; + /** + * Take an array of ragfair offers and create a dictionary of items with thier corrisponding offer count + * @param offers ragfair offers + * @returns categories and count + */ + protected processOffersIntoCategories(offers: IRagfairOffer[]): Record; + /** + * Increment or decrement a category array + * @param offer offer to process + * @param categories categories to update + * @param increment should item be incremented or decremented + */ + protected addOrIncrementCategory(offer: IRagfairOffer, categories: Record, increment?: boolean): void; + /** + * Increase category count by 1 + * @param offer + */ + incrementCategory(offer: IRagfairOffer): void; + /** + * Reduce category count by 1 + * @param offer + */ + decrementCategory(offer: IRagfairOffer): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairLinkedItemService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairLinkedItemService.d.ts new file mode 100644 index 0000000..51511f9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairLinkedItemService.d.ts @@ -0,0 +1,21 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { DatabaseServer } from "../servers/DatabaseServer"; +export declare class RagfairLinkedItemService { + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected linkedItemsCache: Record>; + constructor(databaseServer: DatabaseServer, itemHelper: ItemHelper); + getLinkedItems(linkedSearchId: string): Iterable; + /** + * Create Dictionary of every item and the items associated with it + */ + protected buildLinkedItemTable(): void; + /** + * Add ammo to revolvers linked item dictionary + * @param cylinder Revolvers cylinder + * @param applyLinkedItems + */ + protected addRevolverCylinderAmmoToLinkedItems(cylinder: ITemplateItem, applyLinkedItems: (items: string[]) => void): void; + protected getFilters(item: ITemplateItem, slot: string): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairOfferService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairOfferService.d.ts new file mode 100644 index 0000000..fc08d39 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairOfferService.d.ts @@ -0,0 +1,82 @@ +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { RagfairServerHelper } from "../helpers/RagfairServerHelper"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { RagfairOfferHolder } from "../utils/RagfairOfferHolder"; +import { TimeUtil } from "../utils/TimeUtil"; +import { LocalisationService } from "./LocalisationService"; +import { RagfairCategoriesService } from "./RagfairCategoriesService"; +export declare class RagfairOfferService { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected saveServer: SaveServer; + protected ragfairServerHelper: RagfairServerHelper; + protected ragfairCategoriesService: RagfairCategoriesService; + protected profileHelper: ProfileHelper; + protected eventOutputHolder: EventOutputHolder; + protected httpResponse: HttpResponseUtil; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected playerOffersLoaded: boolean; + protected expiredOffers: Record; + protected ragfairConfig: IRagfairConfig; + protected ragfairOfferHandler: RagfairOfferHolder; + constructor(logger: ILogger, timeUtil: TimeUtil, databaseServer: DatabaseServer, saveServer: SaveServer, ragfairServerHelper: RagfairServerHelper, ragfairCategoriesService: RagfairCategoriesService, profileHelper: ProfileHelper, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Get all offers + * @returns IRagfairOffer array + */ + getOffers(): IRagfairOffer[]; + getOfferByOfferId(offerId: string): IRagfairOffer; + getOffersOfType(templateId: string): IRagfairOffer[]; + addOffer(offer: IRagfairOffer): void; + addOfferToExpired(staleOffer: IRagfairOffer): void; + getExpiredOfferCount(): number; + /** + * Get an array of expired items not yet processed into new offers + * @returns items that need to be turned into offers + */ + getExpiredOfferItems(): Item[]; + resetExpiredOffers(): void; + /** + * Does the offer exist on the ragfair + * @param offerId offer id to check for + * @returns offer exists - true + */ + doesOfferExist(offerId: string): boolean; + /** + * Remove an offer from ragfair by offer id + * @param offerId Offer id to remove + */ + removeOfferById(offerId: string): void; + /** + * Reduce size of an offer stack by specified amount + * @param offerId Offer to adjust stack size of + * @param amount How much to deduct from offers stack size + */ + removeOfferStack(offerId: string, amount: number): void; + removeAllOffersByTrader(traderId: string): void; + /** + * Do the trader offers on flea need to be refreshed + * @param traderID Trader to check + * @returns true if they do + */ + traderOffersNeedRefreshing(traderID: string): boolean; + addPlayerOffers(): void; + expireStaleOffers(): void; + /** + * Remove stale offer from flea + * @param staleOffer Stale offer to process + */ + protected processStaleOffer(staleOffer: IRagfairOffer): void; + protected returnPlayerOffer(offer: IRagfairOffer): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairPriceService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairPriceService.d.ts new file mode 100644 index 0000000..8b68bc4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairPriceService.d.ts @@ -0,0 +1,129 @@ +import { OnLoad } from "../di/OnLoad"; +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { Preset } from "../models/eft/common/IGlobals"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IBarterScheme } from "../models/eft/common/tables/ITrader"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { IRagfairServerPrices } from "../models/spt/ragfair/IRagfairServerPrices"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RandomUtil } from "../utils/RandomUtil"; +/** + * Stores flea prices for items as well as methods to interact with them + */ +export declare class RagfairPriceService implements OnLoad { + protected handbookHelper: HandbookHelper; + protected databaseServer: DatabaseServer; + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected presetHelper: PresetHelper; + protected traderHelper: TraderHelper; + protected randomUtil: RandomUtil; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + protected generatedDynamicPrices: boolean; + protected generatedStaticPrices: boolean; + protected prices: IRagfairServerPrices; + constructor(handbookHelper: HandbookHelper, databaseServer: DatabaseServer, logger: ILogger, itemHelper: ItemHelper, presetHelper: PresetHelper, traderHelper: TraderHelper, randomUtil: RandomUtil, configServer: ConfigServer); + /** + * Generate static (handbook) and dynamic (prices.json) flea prices, store inside class as dictionaries + */ + onLoad(): Promise; + getRoute(): string; + /** + * Iterate over all items of type "Item" in db and get template price, store in cache + */ + generateStaticPrices(): void; + /** + * Create a dictionary and store prices from prices.json in it + */ + protected generateDynamicPrices(): void; + /** + * Get the dynamic price for an item. If value doesn't exist, use static (handbook) value. + * if no static value, return 1 + * @param tplId Item tpl id to get price for + * @returns price in roubles + */ + getFleaPriceForItem(tplId: string): number; + /** + * get the dynamic (flea) price for an item + * Grabs prices from prices.json and stores in class if none currently exist + * @param itemTpl item template id to look up + * @returns price in roubles + */ + getDynamicPriceForItem(itemTpl: string): number; + /** + * Grab the static (handbook) for an item by its tplId + * @param itemTpl item template id to look up + * @returns price in roubles + */ + getStaticPriceForItem(itemTpl: string): number; + /** + * Get prices for all items on flea, priorities dynamic prices from prices.json, use handbook prices if missing + * @returns Dictionary of item tpls and rouble cost + */ + getAllFleaPrices(): Record; + getAllStaticPrices(): Record; + /** + * Get the percentage difference between two values + * @param a numerical value a + * @param b numerical value b + * @returns different in percent + */ + protected getPriceDifference(a: number, b: number): number; + /** + * Get the rouble price for an assorts barter scheme + * @param barterScheme + * @returns Rouble price + */ + getBarterPrice(barterScheme: IBarterScheme[]): number; + /** + * Generate a currency cost for an item and its mods + * @param items Item with mods to get price for + * @param desiredCurrency Currency price desired in + * @returns cost of item in desired currency + */ + getDynamicOfferPrice(items: Item[], desiredCurrency: string): number; + /** + * Check to see if an items price is below its handbook price and adjust accoring to values set to config/ragfair.json + * @param itemPrice price of item + * @param itemTpl item template Id being checked + * @returns adjusted price value in roubles + */ + protected adjustPriceIfBelowHandbook(itemPrice: number, itemTpl: string): number; + /** + * Multiply the price by a randomised curve where n = 2, shift = 2 + * @param existingPrice price to alter + * @param isPreset is the item we're multiplying a preset + * @returns multiplied price + */ + protected randomisePrice(existingPrice: number, isPreset: boolean): number; + /** + * Calculate the cost of a weapon preset by adding together the price of its mods + base price of default weapon preset + * @param item base weapon + * @param items weapon plus mods + * @param existingPrice price of existing base weapon + * @returns + */ + protected getWeaponPresetPrice(item: Item, items: Item[], existingPrice: number): number; + /** + * Get the highest price for an item that is stored in handbook or trader assorts + * @param itemTpl Item to get highest price of + * @returns rouble cost + */ + protected getHighestHandbookOrTraderPriceAsRouble(itemTpl: string): number; + /** + * Attempt to get the default preset for a weapon, failing that get the first preset in the array + * (assumes default = has encyclopedia entry) + * @param presets weapon presets to choose from + * @returns Default preset object + */ + protected getWeaponPreset(presets: Preset[], weapon: Item): { + isDefault: boolean; + preset: Preset; + }; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairRequiredItemsService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairRequiredItemsService.d.ts new file mode 100644 index 0000000..95c3ddb --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/RagfairRequiredItemsService.d.ts @@ -0,0 +1,12 @@ +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { ILogger } from "../models/spt/utils/ILogger"; +export declare class RagfairRequiredItemsService { + protected logger: ILogger; + protected paymentHelper: PaymentHelper; + protected ragfairOfferService: RagfairOfferService; + protected requiredItemsCache: {}; + constructor(logger: ILogger, paymentHelper: PaymentHelper, ragfairOfferService: RagfairOfferService); + getRequiredItemsById(searchId: string): any; + buildRequiredItemTable(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/RepairService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/RepairService.d.ts new file mode 100644 index 0000000..a3c6c7a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/RepairService.d.ts @@ -0,0 +1,128 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { QuestHelper } from "../helpers/QuestHelper"; +import { RepairHelper } from "../helpers/RepairHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { RepairKitsInfo } from "../models/eft/repair/IRepairActionDataRequest"; +import { RepairItem } from "../models/eft/repair/ITraderRepairActionDataRequest"; +import { BonusSettings, IRepairConfig } from "../models/spt/config/IRepairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { PaymentService } from "./PaymentService"; +export declare class RepairService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected randomUtil: RandomUtil; + protected itemHelper: ItemHelper; + protected traderHelper: TraderHelper; + protected weightedRandomHelper: WeightedRandomHelper; + protected paymentService: PaymentService; + protected repairHelper: RepairHelper; + protected configServer: ConfigServer; + protected repairConfig: IRepairConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, questHelper: QuestHelper, randomUtil: RandomUtil, itemHelper: ItemHelper, traderHelper: TraderHelper, weightedRandomHelper: WeightedRandomHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + /** + * Use trader to repair an items durability + * @param sessionID Session id + * @param pmcData profile to find item to repair in + * @param repairItemDetails details of the item to repair + * @param traderId Trader being used to repair item + * @returns RepairDetails object + */ + repairItemByTrader(sessionID: string, pmcData: IPmcData, repairItemDetails: RepairItem, traderId: string): RepairDetails; + /** + * + * @param sessionID Session id + * @param pmcData profile to take money from + * @param repairedItemId Repaired item id + * @param repairCost Cost to repair item in roubles + * @param traderId Id of the trader who repaired the item / who is paid + * @param output + */ + payForRepair(sessionID: string, pmcData: IPmcData, repairedItemId: string, repairCost: number, traderId: string, output: IItemEventRouterResponse): void; + /** + * Add skill points to profile after repairing an item + * @param sessionId Session id + * @param repairDetails details of item repaired, cost/item + * @param pmcData Profile to add points to + */ + addRepairSkillPoints(sessionId: string, repairDetails: RepairDetails, pmcData: IPmcData): void; + /** + * + * @param sessionId Session id + * @param pmcData Profile to update repaired item in + * @param repairKits Array of Repair kits to use + * @param itemToRepairId Item id to repair + * @param output IItemEventRouterResponse + * @returns Details of repair, item/price + */ + repairItemByKit(sessionId: string, pmcData: IPmcData, repairKits: RepairKitsInfo[], itemToRepairId: string, output: IItemEventRouterResponse): RepairDetails; + /** + * Calculate value repairkit points need to be divided by to get the durability points to be added to an item + * @param itemToRepairDetails Item to repair details + * @param isArmor Is the item being repaired armor + * @param pmcData Player profile + * @returns Number to divide kit points by + */ + protected getKitDivisor(itemToRepairDetails: ITemplateItem, isArmor: boolean, pmcData: IPmcData): number; + /** + * Get the bonus multiplier for a skill from a player profile + * @param skillBonusName Name of bonus to get multipler of + * @param pmcData Player profile to look in for skill + * @returns Multiplier value + */ + protected getBonusMultiplierValue(skillBonusName: string, pmcData: IPmcData): number; + /** + * Update repair kits Resource object if it doesn't exist + * @param repairKitDetails Repair kit details from db + * @param repairKitInInventory Repair kit to update + */ + protected addMaxResourceToKitIfMissing(repairKitDetails: ITemplateItem, repairKitInInventory: Item): void; + /** + * Chance to apply buff to an item (Armor/weapon) if repaired by armor kit + * @param repairDetails Repair details of item + * @param pmcData Player profile + */ + addBuffToItem(repairDetails: RepairDetails, pmcData: IPmcData): void; + /** + * Add buff to item + * @param itemConfig weapon/armor config + * @param repairDetails Details for item to repair + */ + protected addBuff(itemConfig: BonusSettings, repairDetails: RepairDetails): void; + /** + * Check if item should be buffed by checking the item type and relevant player skill level + * @param repairDetails Item that was repaired + * @param itemTpl tpl of item to be buffed + * @param pmcData Player profile + * @returns True if item should have buff applied + */ + protected shouldBuffItem(repairDetails: RepairDetails, pmcData: IPmcData): boolean; + /** + * Based on item, what underlying skill does this item use for buff settings + * @param itemTemplate Item to check for skill + * @returns Skill name + */ + protected getItemSkillType(itemTemplate: ITemplateItem): string; + /** + * Ensure multiplier is between 1 and 0.01 + * @param receiveDurabilityMaxPercent Max durabiltiy percent + * @param receiveDurabilityPercent current durability percent + * @returns durability multipler value + */ + protected getDurabilityMultiplier(receiveDurabilityMaxPercent: number, receiveDurabilityPercent: number): number; +} +export declare class RepairDetails { + repairCost?: number; + repairedItem: Item; + repairedItemIsArmor: boolean; + repairAmount: number; + repairedByKit: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/SeasonalEventService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/SeasonalEventService.d.ts new file mode 100644 index 0000000..7474018 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/SeasonalEventService.d.ts @@ -0,0 +1,114 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { Config } from "../models/eft/common/IGlobals"; +import { Inventory } from "../models/eft/common/tables/IBotType"; +import { ISeasonalEvent, ISeasonalEventConfig } from "../models/spt/config/ISeasonalEventConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "./LocalisationService"; +export declare class SeasonalEventService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected localisationService: LocalisationService; + protected botHelper: BotHelper; + protected configServer: ConfigServer; + protected seasonalEventConfig: ISeasonalEventConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, localisationService: LocalisationService, botHelper: BotHelper, configServer: ConfigServer); + protected get events(): Record; + protected get christmasEventItems(): string[]; + protected get halloweenEventItems(): string[]; + /** + * Get an array of christmas items found in bots inventories as loot + * @returns array + */ + getChristmasEventItems(): string[]; + /** + * Get an array of halloween items found in bots inventories as loot + * @returns array + */ + getHalloweenEventItems(): string[]; + itemIsChristmasRelated(itemTpl: string): boolean; + itemIsHalloweenRelated(itemTpl: string): boolean; + /** + * Check if item id exists in christmas or halloween event arrays + * @param itemTpl item tpl to check for + * @returns + */ + itemIsSeasonalRelated(itemTpl: string): boolean; + /** + * Get an array of items that appear during a seasonal event + * returns multiple seasonal event items if they are both active + * @returns array of tpl strings + */ + getAllSeasonalEventItems(): string[]; + /** + * Get an array of seasonal items that should be blocked as seasonal is not active + * @returns Array of tpl strings + */ + getSeasonalEventItemsToBlock(): string[]; + /** + * Is a seasonal event currently active + * @returns true if event is active + */ + seasonalEventEnabled(): boolean; + /** + * is christmas event active + * @returns true if active + */ + christmasEventEnabled(): boolean; + /** + * is christmas event active + * @returns true if active + */ + halloweenEventEnabled(): boolean; + /** + * Is detection of seasonal events enabled (halloween / christmas) + * @returns true if seasonal events should be checked for + */ + isAutomaticEventDetectionEnabled(): boolean; + /** + * Get a dictionary of gear changes to apply to bots for a specific event e.g. Christmas/Halloween + * @param eventName Name of event to get gear changes for + * @returns bots with equipment changes + */ + protected getEventBotGear(eventName: string): Record>>; + /** + * Get the dates each seasonal event starts and ends at + * @returns Record with event name + start/end date + */ + getEventDetails(): ISeasonalEvent[]; + /** + * Check if current date falls inside any of the seasons events pased in, if so, handle them + */ + checkForAndEnableSeasonalEvents(): void; + /** + * Iterate through bots inventory and loot to find and remove christmas items (as defined in SeasonalEventService) + * @param nodeInventory Bots inventory to iterate over + * @param botRole the role of the bot being processed + */ + removeChristmasItemsFromBotInventory(nodeInventory: Inventory, botRole: string): void; + /** + * Make adjusted to server code based on the name of the event passed in + * @param globalConfig globals.json + * @param eventName Name of the event to enable. e.g. Christmas + */ + protected updateGlobalEvents(globalConfig: Config, eventName: string): void; + /** + * Add lootble items from backpack into patrol.ITEMS_TO_DROP difficulty property + */ + protected addLootItemsToGifterDropItemsList(): void; + /** + * Read in data from seasonalEvents.json and add found equipment items to bots + * @param eventName Name of the event to read equipment in from config + */ + protected addEventGearToBots(eventName: string): void; + protected addPumpkinsToScavBackpacks(): void; + /** + * Set Khorovod(dancing tree) chance to 100% on all maps that support it + */ + protected enableDancingTree(): void; + /** + * Add santa to maps + */ + protected addGifterBotToMaps(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/TraderAssortService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/TraderAssortService.d.ts new file mode 100644 index 0000000..03b4e12 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/TraderAssortService.d.ts @@ -0,0 +1,11 @@ +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +export declare class TraderAssortService { + protected pristineTraderAssorts: Record; + getPristineTraderAssort(traderId: string): ITraderAssort; + /** + * Store trader assorts inside a class property + * @param traderId Traderid to store assorts against + * @param assort Assorts to store + */ + setPristineTraderAssort(traderId: string, assort: ITraderAssort): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/TraderPurchasePersisterService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/TraderPurchasePersisterService.d.ts new file mode 100644 index 0000000..7e7c88f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/TraderPurchasePersisterService.d.ts @@ -0,0 +1,34 @@ +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { TraderPurchaseData } from "../models/eft/profile/IAkiProfile"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { TimeUtil } from "../utils/TimeUtil"; +/** + * Help with storing limited item purchases from traders in profile to persist them over server restarts + */ +export declare class TraderPurchasePersisterService { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected profileHelper: ProfileHelper; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + constructor(logger: ILogger, timeUtil: TimeUtil, profileHelper: ProfileHelper, configServer: ConfigServer); + /** + * Get the purchases made from a trader for this profile before the last trader reset + * @param sessionId Session id + * @param traderId Trader to loop up purchases for + * @returns Dict of assort id and count purchased + */ + getProfileTraderPurchases(sessionId: string, traderId: string): Record; + /** + * Remove all trader purchase records from all profiles that exist + * @param traderId Traders id + */ + resetTraderPurchasesStoredInProfile(traderId: string): void; + /** + * Iterate over all server profiles and remove specific trader purchase data that has passed the trader refesh time + * @param traderId Trader id + */ + removeStalePurchasesFromProfiles(traderId: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/mod/CustomItemService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/CustomItemService.d.ts new file mode 100644 index 0000000..87bda40 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/CustomItemService.d.ts @@ -0,0 +1,80 @@ +import { ITemplateItem, Props } from "../../models/eft/common/tables/ITemplateItem"; +import { CreateItemResult, LocaleDetails, NewItemDetails, NewItemFromCloneDetails } from "../../models/spt/mod/NewItemDetails"; +import { IDatabaseTables } from "../../models/spt/server/IDatabaseTables"; +import { ILogger } from "../../models/spt/utils/ILogger"; +import { DatabaseServer } from "../../servers/DatabaseServer"; +import { HashUtil } from "../../utils/HashUtil"; +import { JsonUtil } from "../../utils/JsonUtil"; +export declare class CustomItemService { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected tables: IDatabaseTables; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer); + /** + * Create a new item from a cloned item base + * WARNING - If no item id is supplied, an id will be generated, this id will be random every time you add an item and will not be the same on each subsequent server start + * Add to the items db + * Add to the flea market + * Add to the handbook + * Add to the locales + * @param newItemDetails Item details for the new item to be created + * @returns tplId of the new item created + */ + createItemFromClone(newItemDetails: NewItemFromCloneDetails): CreateItemResult; + /** + * Create a new item without using an existing item as a template + * Add to the items db + * Add to the flea market + * Add to the handbook + * Add to the locales + * @param newItemDetails Details on what the item to be created + * @returns CreateItemResult containing the completed items Id + */ + createItem(newItemDetails: NewItemDetails): CreateItemResult; + /** + * If the id provided is an empty string, return a randomly generated guid, otherwise return the newId parameter + * @param newId id supplied to code + * @returns item id + */ + protected getOrGenerateIdForItem(newId: string): string; + /** + * Iterates through supplied properties and updates the cloned items properties with them + * Complex objects cannot have overrides, they must be fully hydrated with values if they are to be used + * @param overrideProperties new properties to apply + * @param itemClone item to update + */ + protected updateBaseItemPropertiesWithOverrides(overrideProperties: Props, itemClone: ITemplateItem): void; + /** + * Addd a new item object to the in-memory representation of items.json + * @param newItemId id of the item to add to items.json + * @param itemToAdd Item to add against the new id + */ + protected addToItemsDb(newItemId: string, itemToAdd: ITemplateItem): void; + /** + * Add a handbook price for an item + * @param newItemId id of the item being added + * @param parentId parent id of the item being added + * @param priceRoubles price of the item being added + */ + protected addToHandbookDb(newItemId: string, parentId: string, priceRoubles: number): void; + /** + * Iterate through the passed in locale data and add to each locale in turn + * If data is not provided for each langauge eft uses, the first object will be used in its place + * e.g. + * en[0] + * fr[1] + * + * No jp provided, so english will be used as a substitute + * @param localeDetails key is language, value are the new locale details + * @param newItemId id of the item being created + */ + protected addToLocaleDbs(localeDetails: Record, newItemId: string): void; + /** + * Add a price to the in-memory representation of prices.json, used to inform the flea of an items price on the market + * @param newItemId id of the new item + * @param fleaPriceRoubles Price of the new item + */ + protected addToFleaPriceDb(newItemId: string, fleaPriceRoubles: number): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/mod/dynamicRouter/DynamicRouterMod.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/dynamicRouter/DynamicRouterMod.d.ts new file mode 100644 index 0000000..abfe237 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/dynamicRouter/DynamicRouterMod.d.ts @@ -0,0 +1,6 @@ +import { DynamicRouter, RouteAction } from "../../../di/Router"; +export declare class DynamicRouterMod extends DynamicRouter { + private topLevelRoute; + constructor(routes: RouteAction[], topLevelRoute: string); + getTopLevelRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/mod/dynamicRouter/DynamicRouterModService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/dynamicRouter/DynamicRouterModService.d.ts new file mode 100644 index 0000000..6742fc6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/dynamicRouter/DynamicRouterModService.d.ts @@ -0,0 +1,7 @@ +import { DependencyContainer } from "tsyringe"; +import { RouteAction } from "../../../di/Router"; +export declare class DynamicRouterModService { + private container; + constructor(container: DependencyContainer); + registerDynamicRouter(name: string, routes: RouteAction[], topLevelRoute: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/mod/httpListener/HttpListenerMod.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/httpListener/HttpListenerMod.d.ts new file mode 100644 index 0000000..2cdfbda --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/httpListener/HttpListenerMod.d.ts @@ -0,0 +1,10 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { IHttpListener } from "../../../servers/http/IHttpListener"; +export declare class HttpListenerMod implements IHttpListener { + private canHandleOverride; + private handleOverride; + constructor(canHandleOverride: (sessionId: string, req: IncomingMessage) => boolean, handleOverride: (sessionId: string, req: IncomingMessage, resp: ServerResponse) => void); + canHandle(sessionId: string, req: IncomingMessage): boolean; + handle(sessionId: string, req: IncomingMessage, resp: ServerResponse): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/mod/httpListener/HttpListenerModService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/httpListener/HttpListenerModService.d.ts new file mode 100644 index 0000000..9dd3473 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/httpListener/HttpListenerModService.d.ts @@ -0,0 +1,8 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { DependencyContainer } from "tsyringe"; +export declare class HttpListenerModService { + protected container: DependencyContainer; + constructor(container: DependencyContainer); + registerHttpListener(name: string, canHandleOverride: (sessionId: string, req: IncomingMessage) => boolean, handleOverride: (sessionId: string, req: IncomingMessage, resp: ServerResponse) => void): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/mod/image/ImageRouteService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/image/ImageRouteService.d.ts new file mode 100644 index 0000000..29569b2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/image/ImageRouteService.d.ts @@ -0,0 +1,6 @@ +export declare class ImageRouteService { + protected routes: Record; + addRoute(urlKey: string, route: string): void; + getByKey(urlKey: string): string; + existsByKey(urlKey: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/mod/onLoad/OnLoadMod.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/onLoad/OnLoadMod.d.ts new file mode 100644 index 0000000..a4b58b5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/onLoad/OnLoadMod.d.ts @@ -0,0 +1,8 @@ +import { OnLoad } from "../../../di/OnLoad"; +export declare class OnLoadMod implements OnLoad { + private onLoadOverride; + private getRouteOverride; + constructor(onLoadOverride: () => void, getRouteOverride: () => string); + onLoad(): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/mod/onLoad/OnLoadModService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/onLoad/OnLoadModService.d.ts new file mode 100644 index 0000000..f402103 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/onLoad/OnLoadModService.d.ts @@ -0,0 +1,6 @@ +import { DependencyContainer } from "tsyringe"; +export declare class OnLoadModService { + protected container: DependencyContainer; + constructor(container: DependencyContainer); + registerOnLoad(name: string, onLoad: () => void, getRoute: () => string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/mod/onUpdate/OnUpdateMod.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/onUpdate/OnUpdateMod.d.ts new file mode 100644 index 0000000..8dfe6dd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/onUpdate/OnUpdateMod.d.ts @@ -0,0 +1,8 @@ +import { OnUpdate } from "../../../di/OnUpdate"; +export declare class OnUpdateMod implements OnUpdate { + private onUpdateOverride; + private getRouteOverride; + constructor(onUpdateOverride: (timeSinceLastRun: number) => boolean, getRouteOverride: () => string); + onUpdate(timeSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/mod/onUpdate/OnUpdateModService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/onUpdate/OnUpdateModService.d.ts new file mode 100644 index 0000000..05d735b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/onUpdate/OnUpdateModService.d.ts @@ -0,0 +1,6 @@ +import { DependencyContainer } from "tsyringe"; +export declare class OnUpdateModService { + protected container: DependencyContainer; + constructor(container: DependencyContainer); + registerOnUpdate(name: string, onUpdate: (timeSinceLastRun: number) => boolean, getRoute: () => string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/mod/staticRouter/StaticRouterMod.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/staticRouter/StaticRouterMod.d.ts new file mode 100644 index 0000000..1e62747 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/staticRouter/StaticRouterMod.d.ts @@ -0,0 +1,6 @@ +import { RouteAction, StaticRouter } from "../../../di/Router"; +export declare class StaticRouterMod extends StaticRouter { + private topLevelRoute; + constructor(routes: RouteAction[], topLevelRoute: string); + getTopLevelRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/services/mod/staticRouter/StaticRouterModService.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/staticRouter/StaticRouterModService.d.ts new file mode 100644 index 0000000..f28fd45 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/services/mod/staticRouter/StaticRouterModService.d.ts @@ -0,0 +1,7 @@ +import { DependencyContainer } from "tsyringe"; +import { RouteAction } from "../../../di/Router"; +export declare class StaticRouterModService { + protected container: DependencyContainer; + constructor(container: DependencyContainer); + registerStaticRouter(name: string, routes: RouteAction[], topLevelRoute: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/App.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/App.d.ts new file mode 100644 index 0000000..b947c83 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/App.d.ts @@ -0,0 +1,17 @@ +import { OnLoad } from "../di/OnLoad"; +import { OnUpdate } from "../di/OnUpdate"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { TimeUtil } from "./TimeUtil"; +export declare class App { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected localisationService: LocalisationService; + protected onLoadComponents: OnLoad[]; + protected onUpdateComponents: OnUpdate[]; + protected onUpdateLastRun: {}; + constructor(logger: ILogger, timeUtil: TimeUtil, localisationService: LocalisationService, onLoadComponents: OnLoad[], onUpdateComponents: OnUpdate[]); + load(): Promise; + protected update(onUpdateComponents: OnUpdate[]): Promise; + protected logUpdateException(err: any, updateable: OnUpdate): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/AyncQueue.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/AyncQueue.d.ts new file mode 100644 index 0000000..da6ab18 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/AyncQueue.d.ts @@ -0,0 +1,7 @@ +import { IAsyncQueue } from "../models/spt/utils/IAsyncQueue"; +import { ICommand } from "../models/spt/utils/ICommand"; +export declare class AsyncQueue implements IAsyncQueue { + protected commandsQueue: ICommand[]; + constructor(); + waitFor(command: ICommand): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/DatabaseImporter.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/DatabaseImporter.d.ts new file mode 100644 index 0000000..c09d63a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/DatabaseImporter.d.ts @@ -0,0 +1,35 @@ +import { OnLoad } from "../di/OnLoad"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ImageRouter } from "../routers/ImageRouter"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { EncodingUtil } from "./EncodingUtil"; +import { HashUtil } from "./HashUtil"; +import { ImporterUtil } from "./ImporterUtil"; +import { JsonUtil } from "./JsonUtil"; +import { VFS } from "./VFS"; +export declare class DatabaseImporter implements OnLoad { + protected logger: ILogger; + protected vfs: VFS; + protected jsonUtil: JsonUtil; + protected localisationService: LocalisationService; + protected databaseServer: DatabaseServer; + protected imageRouter: ImageRouter; + protected encodingUtil: EncodingUtil; + protected hashUtil: HashUtil; + protected importerUtil: ImporterUtil; + private hashedFile; + private valid; + private filepath; + constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, localisationService: LocalisationService, databaseServer: DatabaseServer, imageRouter: ImageRouter, encodingUtil: EncodingUtil, hashUtil: HashUtil, importerUtil: ImporterUtil); + onLoad(): Promise; + /** + * Read all json files in database folder and map into a json object + * @param filepath path to database folder + */ + protected hydrateDatabase(filepath: string): Promise; + private onReadValidate; + getRoute(): string; + private validateFile; + loadImages(filepath: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/EncodingUtil.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/EncodingUtil.d.ts new file mode 100644 index 0000000..dabb97a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/EncodingUtil.d.ts @@ -0,0 +1,15 @@ +export declare class EncodingUtil { + encode(value: string, encode: EncodeType): string; + decode(value: string, encode: EncodeType): string; + fromBase64(value: string): string; + toBase64(value: string): string; + fromHex(value: string): string; + toHex(value: string): string; +} +export declare enum EncodeType { + BASE64 = "base64", + HEX = "hex", + ASCII = "ascii", + BINARY = "binary", + UTF8 = "utf8" +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/HashUtil.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/HashUtil.d.ts new file mode 100644 index 0000000..a8500e1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/HashUtil.d.ts @@ -0,0 +1,21 @@ +/// +import crypto from "crypto"; +import { TimeUtil } from "./TimeUtil"; +export declare class HashUtil { + protected timeUtil: TimeUtil; + constructor(timeUtil: TimeUtil); + /** + * Create a 24 character id using the sha256 algorithm + current timestamp + * @returns 24 character hash + */ + generate(): string; + generateMd5ForData(data: string): string; + generateSha1ForData(data: string): string; + /** + * Create a hash for the data parameter + * @param algorithm algorithm to use to hash + * @param data data to be hashed + * @returns hash value + */ + generateHashForData(algorithm: string, data: crypto.BinaryLike): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/HttpFileUtil.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/HttpFileUtil.d.ts new file mode 100644 index 0000000..afc8409 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/HttpFileUtil.d.ts @@ -0,0 +1,8 @@ +/// +import { ServerResponse } from "http"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +export declare class HttpFileUtil { + protected httpServerHelper: HttpServerHelper; + constructor(httpServerHelper: HttpServerHelper); + sendFile(resp: ServerResponse, file: any): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/HttpResponseUtil.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/HttpResponseUtil.d.ts new file mode 100644 index 0000000..3a78618 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/HttpResponseUtil.d.ts @@ -0,0 +1,19 @@ +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { BackendErrorCodes } from "../models/enums/BackendErrorCodes"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "./JsonUtil"; +export declare class HttpResponseUtil { + protected jsonUtil: JsonUtil; + protected localisationService: LocalisationService; + constructor(jsonUtil: JsonUtil, localisationService: LocalisationService); + protected clearString(s: string): any; + noBody(data: any): any; + getBody(data: T, err?: number, errmsg?: any): IGetBodyResponseData; + getUnclearedBody(data: any, err?: number, errmsg?: any): string; + emptyResponse(): IGetBodyResponseData; + nullResponse(): INullResponseData; + emptyArrayResponse(): IGetBodyResponseData; + appendErrorToOutput(output: IItemEventRouterResponse, message?: string, errorCode?: BackendErrorCodes): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/ImporterUtil.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/ImporterUtil.d.ts new file mode 100644 index 0000000..75aaf54 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/ImporterUtil.d.ts @@ -0,0 +1,21 @@ +import { JsonUtil } from "./JsonUtil"; +import { VFS } from "./VFS"; +export declare class ImporterUtil { + protected vfs: VFS; + protected jsonUtil: JsonUtil; + constructor(vfs: VFS, jsonUtil: JsonUtil); + /** + * Load files into js objects recursively (asynchronous) + * @param filepath Path to folder with files + * @returns Promise return T type associated with this class + */ + loadRecursiveAsync(filepath: string, onReadCallback?: (fileWithPath: string, data: string) => void, onObjectDeserialized?: (fileWithPath: string, object: any) => void): Promise; + /** + * Load files into js objects recursively (synchronous) + * @param filepath Path to folder with files + * @returns + */ + loadRecursive(filepath: string, onReadCallback?: (fileWithPath: string, data: string) => void, onObjectDeserialized?: (fileWithPath: string, object: any) => void): T; + loadAsync(filepath: string, strippablePath?: string, onReadCallback?: (fileWithPath: string, data: string) => void, onObjectDeserialized?: (fileWithPath: string, object: any) => void): Promise; + protected placeObject(fileDeserialized: any, strippedFilePath: string, result: T, strippablePath: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/JsonUtil.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/JsonUtil.d.ts new file mode 100644 index 0000000..229dc26 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/JsonUtil.d.ts @@ -0,0 +1,27 @@ +import { ILogger } from "../models/spt/utils/ILogger"; +import { HashUtil } from "./HashUtil"; +import { VFS } from "./VFS"; +export declare class JsonUtil { + protected vfs: VFS; + protected hashUtil: HashUtil; + protected logger: ILogger; + protected fileHashes: any; + protected jsonCacheExists: boolean; + constructor(vfs: VFS, hashUtil: HashUtil, logger: ILogger); + /** + * From object to string + * @param data object to turn into JSON + * @param prettify Should output be prettified? + * @returns string + */ + serialize(data: T, prettify?: boolean): string; + /** + * From string to object + * @param jsonString json string to turn into object + * @returns object + */ + deserialize(jsonString: string, filename?: string): T; + deserializeWithCacheCheckAsync(jsonString: string, filePath: string): Promise; + deserializeWithCacheCheck(jsonString: string, filePath: string): T; + clone(data: T): T; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/MathUtil.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/MathUtil.d.ts new file mode 100644 index 0000000..ea5fd69 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/MathUtil.d.ts @@ -0,0 +1,53 @@ +export declare class MathUtil { + /** + * Helper to create the sum of all array elements + * @param {array} values The array with numbers of which to calculate the sum + * @return {number} sum(values) + */ + arraySum(values: number[]): number; + /** + * Helper to create the cumulative sum of all array elements + * arrayCumsum([1, 2, 3, 4]) = [1, 3, 6, 10] + * @param {array} values The array with numbers of which to calculate the cumulative sum + * @return {array} cumsum(values) + */ + arrayCumsum(values: number[]): number[]; + /** + * Helper to create the product of each element times factor + * @param {array} values The array of numbers which shall be multiplied by the factor + * @return {array} array times factor + */ + arrayProd(values: number[], factor: number): number[]; + /** + * Helper to add a constant to all array elements + * @param {array} values The array of numbers to which the summand should be added + * @return {array} array plus summand + */ + arrayAdd(values: number[], summand: number): number[]; + /** + * Map a value from an input range to an output range linearly + * + * Example: + * a_min = 0; a_max=1; + * b_min = 1; b_max=3; + * MathUtil.mapToRange(0.5, a_min, a_max, b_min, b_max) // returns 2 + * + * @param {number} x The value from input range to be mapped to output range + * @param {number} minIn min of input range + * @param {number} maxIn max of input range + * @param {number} minOut min of output range + * @param {number} maxOut max of outout range + * @return {number} the result of the mapping + */ + mapToRange(x: number, minIn: number, maxIn: number, minOut: number, maxOut: number): number; + /** + * Linear interpolation + * e.g. used to do a continuous integration for quest rewards which are defined for specific support centers of pmcLevel + * + * @param {string} xp the point of x at which to interpolate + * @param {array} x support points in x (of same length as y) + * @param {array} y support points in y (of same length as x) + * @return {number} y(xp) + */ + interp1(xp: number, x: number[], y: number[]): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/ObjectId.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/ObjectId.d.ts new file mode 100644 index 0000000..03aae56 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/ObjectId.d.ts @@ -0,0 +1,14 @@ +/// +import { TimeUtil } from "./TimeUtil"; +export declare class ObjectId { + protected timeUtil: TimeUtil; + constructor(timeUtil: TimeUtil); + protected randomBytes: Buffer; + protected constglobalCounter: number; + protected consttime: number; + protected globalCounter: number; + protected time: number; + incGlobalCounter(): number; + toHexString(byteArray: string | any[] | Buffer): string; + generate(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/RagfairOfferHolder.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/RagfairOfferHolder.d.ts new file mode 100644 index 0000000..46d9e23 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/RagfairOfferHolder.d.ts @@ -0,0 +1,24 @@ +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +export declare class RagfairOfferHolder { + private offersById; + private offersByTemplate; + private offersByTrader; + constructor(); + getOfferById(id: string): IRagfairOffer; + getOffersByTemplate(templateId: string): Array; + getOffersByTrader(traderId: string): Array; + getOffers(): Array; + addOffers(offers: Array): void; + addOffer(offer: IRagfairOffer): void; + removeOffer(offer: IRagfairOffer): void; + removeOffers(offers: Array): void; + removeOfferByTrader(traderId: string): void; + /** + * Get an array of stale offers that are still shown to player + * @returns IRagfairOffer array + */ + getStaleOffers(time: number): Array; + private addOfferByTemplates; + private addOfferByTrader; + protected isStale(offer: IRagfairOffer, time: number): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/RandomUtil.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/RandomUtil.d.ts new file mode 100644 index 0000000..fc0b05d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/RandomUtil.d.ts @@ -0,0 +1,166 @@ +import { ILogger } from "../models/spt/utils/ILogger"; +import { JsonUtil } from "./JsonUtil"; +import { MathUtil } from "./MathUtil"; +/** + * Array of ProbabilityObjectArray which allow to randomly draw of the contained objects + * based on the relative probability of each of its elements. + * The probabilities of the contained element is not required to be normalized. + * + * Example: + * po = new ProbabilityObjectArray( + * new ProbabilityObject("a", 5), + * new ProbabilityObject("b", 1), + * new ProbabilityObject("c", 1) + * ); + * res = po.draw(10000); + * // count the elements which should be distributed according to the relative probabilities + * res.filter(x => x==="b").reduce((sum, x) => sum + 1 , 0) + */ +export declare class ProbabilityObjectArray extends Array> { + private mathUtil; + constructor(mathUtil: MathUtil, ...items: ProbabilityObject[]); + filter(callbackfn: (value: ProbabilityObject, index: number, array: ProbabilityObject[]) => any): ProbabilityObjectArray; + /** + * Calculates the normalized cumulative probability of the ProbabilityObjectArray's elements normalized to 1 + * @param {array} probValues The relative probability values of which to calculate the normalized cumulative sum + * @returns {array} Cumulative Sum normalized to 1 + */ + cumulativeProbability(probValues: number[]): number[]; + /** + * Clone this ProbabilitObjectArray + * @returns {ProbabilityObjectArray} Deep Copy of this ProbabilityObjectArray + */ + clone(): ProbabilityObjectArray; + /** + * Drop an element from the ProbabilityObjectArray + * + * @param {string} key The key of the element to drop + * @returns {ProbabilityObjectArray} ProbabilityObjectArray without the dropped element + */ + drop(key: K): ProbabilityObjectArray; + /** + * Return the data field of a element of the ProbabilityObjectArray + * @param {string} key The key of the element whose data shall be retrieved + * @returns {object} The data object + */ + data(key: K): V; + /** + * Get the relative probability of an element by its key + * + * Example: + * po = new ProbabilityObjectArray(new ProbabilityObject("a", 5), new ProbabilityObject("b", 1)) + * po.maxProbability() // returns 5 + * + * @param {string} key The key of the element whose relative probability shall be retrieved + * @return {number} The relative probability + */ + probability(key: K): number; + /** + * Get the maximum relative probability out of a ProbabilityObjectArray + * + * Example: + * po = new ProbabilityObjectArray(new ProbabilityObject("a", 5), new ProbabilityObject("b", 1)) + * po.maxProbability() // returns 5 + * + * @return {number} the maximum value of all relative probabilities in this ProbabilityObjectArray + */ + maxProbability(): number; + /** + * Get the minimum relative probability out of a ProbabilityObjectArray + * + * Example: + * po = new ProbabilityObjectArray(new ProbabilityObject("a", 5), new ProbabilityObject("b", 1)) + * po.minProbability() // returns 1 + * + * @return {number} the minimum value of all relative probabilities in this ProbabilityObjectArray + */ + minProbability(): number; + /** + * Draw random element of the ProbabilityObject N times to return an array of N keys. + * Drawing can be with or without replacement + * + * @param {integer} count The number of times we want to draw + * @param {boolean} replacement Draw with or without replacement from the input dict + * @param {array} locklist list keys which shall be replaced even if drawing without replacement + * @return {array} Array consisting of N random keys for this ProbabilityObjectArray + */ + draw(count?: number, replacement?: boolean, locklist?: Array): K[]; +} +/** + * A ProbabilityObject which is use as an element to the ProbabilityObjectArray array + * It contains a key, the relative probability as well as optional data. + */ +export declare class ProbabilityObject { + key: K; + relativeProbability: number; + data: V; + /** + * Constructor for the ProbabilityObject + * @param {string} key The key of the element + * @param {number} relativeProbability The relative probability of this element + * @param {any} data Optional data attached to the element + */ + constructor(key: K, relativeProbability: number, data?: V); +} +export declare class RandomUtil { + protected jsonUtil: JsonUtil; + protected logger: ILogger; + constructor(jsonUtil: JsonUtil, logger: ILogger); + getInt(min: number, max: number): number; + getIntEx(max: number): number; + getFloat(min: number, max: number): number; + getBool(): boolean; + getPercentOfValue(percent: number, number: number, toFixed?: number): number; + /** + * Check if number passes a check out of 100 + * @param chancePercent value check needs to be above + * @returns true if value passes check + */ + getChance100(chancePercent: number): boolean; + getStringArrayValue(arr: string[]): string; + getArrayValue(arr: T[]): T; + getKey(node: any): string; + getKeyValue(node: { + [x: string]: any; + }): any; + /** + * Draw from normal distribution + * @param {number} mu Mean of the normal distribution + * @param {number} sigma Standard deviation of the normal distribution + * @returns {number} The value drawn + */ + randn(mu: number, sigma: number): number; + /** + * Draw Random integer low inclusive, high exclusive + * if high is not set we draw from 0 to low (exclusive) + * @param {integer} low Lower bound inclusive, when high is not set, this is high + * @param {integer} high Higher bound exclusive + * @returns {integer} The random integer in [low, high) + */ + randInt(low: number, high?: number): number; + /** + * Draw a random element of the provided list N times to return an array of N random elements + * Drawing can be with or without replacement + * @param {array} list The array we want to draw randomly from + * @param {integer} count The number of times we want to draw + * @param {boolean} replacement Draw with or without replacement from the input array + * @return {array} Array consisting of N random elements + */ + drawRandomFromList(list: Array, count?: number, replacement?: boolean): Array; + /** + * Draw a random (top level) element of the provided dictionary N times to return an array of N random dictionary keys + * Drawing can be with or without replacement + * @param {any} dict The dictionary we want to draw randomly from + * @param {integer} count The number of times we want to draw + * @param {boolean} replacement Draw with ot without replacement from the input dict + * @return {array} Array consisting of N random keys of the dictionary + */ + drawRandomFromDict(dict: any, count?: number, replacement?: boolean): any[]; + getBiasedRandomNumber(min: number, max: number, shift: number, n: number): number; + /** + * Fisher-Yates shuffle an array + * @param array Array to shuffle + * @returns Shuffled array + */ + shuffle(array: Array): Array; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/TimeUtil.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/TimeUtil.d.ts new file mode 100644 index 0000000..1367e26 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/TimeUtil.d.ts @@ -0,0 +1,31 @@ +/** + * Utility class to handle time related problems + */ +export declare class TimeUtil { + static readonly oneHourAsSeconds = 3600; + formatTime(date: Date): string; + formatDate(date: Date): string; + getDate(): string; + getTime(): string; + /** + * Get timestamp in seconds + * @returns + */ + getTimestamp(): number; + /** + * mail in eft requires time be in a specific format + * @returns current time in format: 00:00 (hh:mm) + */ + getTimeMailFormat(): string; + /** + * Mail in eft requires date be in a specific format + * @returns current date in format: 00.00.0000 (dd.mm.yyyy) + */ + getDateMailFormat(): string; + /** + * Convert hours into seconds + * @param hours hours to convert to seconds + * @returns number + */ + getHoursAsSeconds(hours: number): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/UUidGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/UUidGenerator.d.ts new file mode 100644 index 0000000..000b719 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/UUidGenerator.d.ts @@ -0,0 +1,4 @@ +import { IUUidGenerator } from "../models/spt/utils/IUuidGenerator"; +export declare class UUidGenerator implements IUUidGenerator { + generate: () => string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/VFS.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/VFS.d.ts new file mode 100644 index 0000000..267b10f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/VFS.d.ts @@ -0,0 +1,56 @@ +/// +/// +import fs from "fs"; +import "reflect-metadata"; +import { IAsyncQueue } from "../models/spt/utils/IAsyncQueue"; +import { IUUidGenerator } from "../models/spt/utils/IUuidGenerator"; +export declare class VFS { + protected asyncQueue: IAsyncQueue; + protected uuidGenerator: IUUidGenerator; + accessFilePromisify: (path: fs.PathLike, mode?: number) => Promise; + copyFilePromisify: (src: fs.PathLike, dst: fs.PathLike, flags?: number) => Promise; + mkdirPromisify: (path: fs.PathLike, options: fs.MakeDirectoryOptions & { + recursive: true; + }) => Promise; + readFilePromisify: (path: fs.PathLike) => Promise; + writeFilePromisify: (path: fs.PathLike, data: string, options?: any) => Promise; + readdirPromisify: (path: fs.PathLike, options?: BufferEncoding | { + encoding: BufferEncoding; + withFileTypes?: false; + }) => Promise; + statPromisify: (path: fs.PathLike, options?: fs.StatOptions & { + bigint?: false; + }) => Promise; + unlinkPromisify: (path: fs.PathLike) => Promise; + rmdirPromisify: (path: fs.PathLike) => Promise; + constructor(asyncQueue: IAsyncQueue, uuidGenerator: IUUidGenerator); + exists(filepath: fs.PathLike): boolean; + existsAsync(filepath: fs.PathLike): Promise; + copyFile(filepath: fs.PathLike, target: fs.PathLike): void; + copyAsync(filepath: fs.PathLike, target: fs.PathLike): Promise; + createDir(filepath: string): void; + createDirAsync(filepath: string): Promise; + copyDir(filepath: string, target: string, fileExtensions?: string | string[]): void; + copyDirAsync(filepath: string, target: string, fileExtensions: string | string[]): Promise; + readFile(...args: Parameters): string; + readFileAsync(path: fs.PathLike): Promise; + private isBuffer; + writeFile(filepath: any, data?: string, append?: boolean, atomic?: boolean): void; + writeFileAsync(filepath: any, data?: string, append?: boolean, atomic?: boolean): Promise; + getFiles(filepath: string): string[]; + getFilesAsync(filepath: string): Promise; + getDirs(filepath: string): string[]; + getDirsAsync(filepath: string): Promise; + removeFile(filepath: string): void; + removeFileAsync(filepath: string): Promise; + removeDir(filepath: string): void; + removeDirAsync(filepath: string): Promise; + private lockFileSync; + private checkFileSync; + private unlockFileSync; + getFileExtension(filepath: string): string; + stripExtension(filepath: string): string; + minifyAllJsonInDirRecursive(filepath: string): Promise; + minifyAllJsonInDirRecursiveAsync(filepath: string): Promise; + getFilesOfType(directory: string, fileType: string, files?: string[]): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/Watermark.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/Watermark.d.ts new file mode 100644 index 0000000..f870cf1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/Watermark.d.ts @@ -0,0 +1,46 @@ +import { ICoreConfig } from "../models/spt/config/ICoreConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { LocalisationService } from "../services/LocalisationService"; +export declare class WatermarkLocale { + protected localisationService: LocalisationService; + constructor(localisationService: LocalisationService); + protected watermark: { + description: string[]; + warning: string[]; + modding: string[]; + }; + getDescription(): string[]; + getWarning(): string[]; + getModding(): string[]; +} +export declare class Watermark { + protected logger: ILogger; + protected configServer: ConfigServer; + protected localisationService: LocalisationService; + protected watermarkLocale?: WatermarkLocale; + protected akiConfig: ICoreConfig; + constructor(logger: ILogger, configServer: ConfigServer, localisationService: LocalisationService, watermarkLocale?: WatermarkLocale); + protected text: string[]; + protected versionLabel: string; + initialize(): void; + /** + * Get a version string (x.x.x) or (x.x.x-BLEEDINGEDGE) OR (X.X.X (18xxx)) + * @param withEftVersion Include the eft version this spt version was made for + * @returns string + */ + getVersionTag(withEftVersion?: boolean): string; + /** + * Get text shown in game on screen, can't be translated as it breaks bsgs client when certian characters are used + * @returns string + */ + getInGameVersionLabel(): string; + /** Set window title */ + setTitle(): void; + /** Reset console cursor to top */ + resetCursor(): void; + /** Draw the watermark */ + draw(): void; + /** Caculate text length */ + protected textLength(s: string): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/collections/lists/LinkedList.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/collections/lists/LinkedList.d.ts new file mode 100644 index 0000000..aca0659 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/collections/lists/LinkedList.d.ts @@ -0,0 +1,30 @@ +export declare class LinkedList { + private head; + private tail; + add(t: T): void; + addRange(list: T[]): void; + getHead(): LinkedListNode; + getTail(): LinkedListNode; + isEmpty(): boolean; + getSize(): number; + removeFirst(): LinkedListNode; + removeLast(): LinkedListNode; + indexOf(func: (t: T) => boolean): number; + contains(func: (t: T) => boolean): boolean; + forEachNode(func: (t: LinkedListNode) => void): void; + forEachValue(func: (t: T) => void): void; + findFirstNode(func: (t: LinkedListNode) => boolean): LinkedListNode; + findFirstValue(func: (t: T) => boolean): T; + toList(): T[]; +} +export declare class LinkedListNode { + private previous; + private value; + private next; + constructor(value: T, previous?: LinkedListNode, next?: LinkedListNode); + getValue(): T; + getNextNode(): LinkedListNode; + setNextNode(node: LinkedListNode): void; + getPreviousNode(): LinkedListNode; + setPreviousNode(node: LinkedListNode): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/collections/queue/Queue.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/collections/queue/Queue.d.ts new file mode 100644 index 0000000..645d462 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/collections/queue/Queue.d.ts @@ -0,0 +1,12 @@ +export declare class Queue { + private elements; + private head; + private tail; + constructor(); + enqueue(element: T): void; + enqueueAll(elements: T[]): void; + dequeue(): T; + peek(): T; + getLength(): number; + isEmpty(): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/logging/AbstractWinstonLogger.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/logging/AbstractWinstonLogger.d.ts new file mode 100644 index 0000000..1ae1100 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/logging/AbstractWinstonLogger.d.ts @@ -0,0 +1,69 @@ +/// +import fs from "fs"; +import winston from "winston"; +import { Daum } from "../../models/eft/itemEvent/IItemEventRouterRequest"; +import { LogBackgroundColor } from "../../models/spt/logging/LogBackgroundColor"; +import { LogTextColor } from "../../models/spt/logging/LogTextColor"; +import { SptLogger } from "../../models/spt/logging/SptLogger"; +import { IAsyncQueue } from "../../models/spt/utils/IAsyncQueue"; +import { ILogger } from "../../models/spt/utils/ILogger"; +import { IUUidGenerator } from "../../models/spt/utils/IUuidGenerator"; +export declare abstract class AbstractWinstonLogger implements ILogger { + protected asyncQueue: IAsyncQueue; + protected uuidGenerator: IUUidGenerator; + protected showDebugInConsole: boolean; + protected filePath: string; + protected logLevels: { + levels: { + error: number; + warn: number; + succ: number; + info: number; + custom: number; + debug: number; + }; + colors: { + error: string; + warn: string; + succ: string; + info: string; + custom: string; + debug: string; + }; + bgColors: { + default: string; + blackBG: string; + redBG: string; + greenBG: string; + yellowBG: string; + blueBG: string; + magentaBG: string; + cyanBG: string; + whiteBG: string; + }; + }; + protected logger: winston.Logger & SptLogger; + protected writeFilePromisify: (path: fs.PathLike, data: string, options?: any) => Promise; + constructor(asyncQueue: IAsyncQueue, uuidGenerator: IUUidGenerator); + protected abstract isLogToFile(): boolean; + protected abstract isLogToConsole(): boolean; + protected abstract isLogExceptions(): boolean; + protected abstract getFilePath(): string; + protected abstract getFileName(): string; + protected getLogMaxSize(): string; + protected getLogMaxFiles(): string; + writeToLogFile(data: string | Daum): Promise; + log(data: string | Error | Record, color: string, backgroundColor?: string): Promise; + error(data: string | Record): Promise; + warning(data: string | Record): Promise; + success(data: string | Record): Promise; + info(data: string | Record): Promise; + /** + * Log to console text with a customisable text and background color. Background defaults to black + * @param data text to log + * @param textColor color of text + * @param backgroundColor color of background + */ + logWithColor(data: string | Record, textColor: LogTextColor, backgroundColor?: LogBackgroundColor): Promise; + debug(data: string | Record, onlyShowInConsole?: boolean): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/logging/WinstonMainLogger.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/logging/WinstonMainLogger.d.ts new file mode 100644 index 0000000..3c67902 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/logging/WinstonMainLogger.d.ts @@ -0,0 +1,13 @@ +import { IAsyncQueue } from "../../models/spt/utils/IAsyncQueue"; +import { IUUidGenerator } from "../../models/spt/utils/IUuidGenerator"; +import { AbstractWinstonLogger } from "./AbstractWinstonLogger"; +export declare class WinstonMainLogger extends AbstractWinstonLogger { + protected asyncQueue: IAsyncQueue; + protected uuidGenerator: IUUidGenerator; + constructor(asyncQueue: IAsyncQueue, uuidGenerator: IUUidGenerator); + protected isLogExceptions(): boolean; + protected isLogToFile(): boolean; + protected isLogToConsole(): boolean; + protected getFilePath(): string; + protected getFileName(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency1/types/utils/logging/WinstonRequestLogger.d.ts b/TypeScript/17AsyncImporterWithDependency1/types/utils/logging/WinstonRequestLogger.d.ts new file mode 100644 index 0000000..1475e43 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency1/types/utils/logging/WinstonRequestLogger.d.ts @@ -0,0 +1,14 @@ +import { IAsyncQueue } from "../../models/spt/utils/IAsyncQueue"; +import { IUUidGenerator } from "../../models/spt/utils/IUuidGenerator"; +import { AbstractWinstonLogger } from "./AbstractWinstonLogger"; +export declare class WinstonRequestLogger extends AbstractWinstonLogger { + protected asyncQueue: IAsyncQueue; + protected uuidGenerator: IUUidGenerator; + constructor(asyncQueue: IAsyncQueue, uuidGenerator: IUUidGenerator); + protected isLogExceptions(): boolean; + protected isLogToFile(): boolean; + protected isLogToConsole(): boolean; + protected getFilePath(): string; + protected getFileName(): string; + protected getLogMaxSize(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/.eslintignore b/TypeScript/17AsyncImporterWithDependency2/.eslintignore new file mode 100644 index 0000000..9922d9a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/.eslintignore @@ -0,0 +1,9 @@ +# Exclude these folders from linting +node_modules +dist/ +types/ + +# Exclude these filetypes from linting +*.json +*.txt +*.exe \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency2/.eslintrc.json b/TypeScript/17AsyncImporterWithDependency2/.eslintrc.json new file mode 100644 index 0000000..98e7a0c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/.eslintrc.json @@ -0,0 +1,81 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "plugins": [ + "@typescript-eslint" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/eslint-recommended", + "plugin:@typescript-eslint/recommended" + ], + "rules": { + "max-len": [ + "warn", + { + "code":100 + } + ], + "@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 + } + ] + } +} \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency2/README.md b/TypeScript/17AsyncImporterWithDependency2/README.md new file mode 100644 index 0000000..9e3b8bc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/README.md @@ -0,0 +1,64 @@ + +This project was created to automate most parts of building and setting up an environment. + +## **NodeJS:** + +The first step would be to install nodejs on your pc, the version you NEED is **16.17.1** + +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/dist/v16.17.1/node-v16.17.1-x64.msi + +A system reboot may be needed after install. + +## **IDE:** + +The second step is having an IDE ready. We've setup a VSCodium workspace file to help with this. + +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 Workspace 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. \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency2/config/config.json b/TypeScript/17AsyncImporterWithDependency2/config/config.json new file mode 100644 index 0000000..2cc3a9f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/config/config.json @@ -0,0 +1,3 @@ +{ + "myProperty": "wow" +} \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency2/config/db/config.json b/TypeScript/17AsyncImporterWithDependency2/config/db/config.json new file mode 100644 index 0000000..9fc7661 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/config/db/config.json @@ -0,0 +1,3 @@ +{ + "myProperty": "wow inside db" +} \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency2/config/db/moredb/config.json b/TypeScript/17AsyncImporterWithDependency2/config/db/moredb/config.json new file mode 100644 index 0000000..9a6d9e3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/config/db/moredb/config.json @@ -0,0 +1,3 @@ +{ + "myProperty": "wow inside db inside moredb" +} \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency2/mod.code-workspace b/TypeScript/17AsyncImporterWithDependency2/mod.code-workspace new file mode 100644 index 0000000..6732c67 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/mod.code-workspace @@ -0,0 +1,12 @@ +{ + "folders": [ + { + "path": "." + } + ], + "extensions": { + "recommendations": [ + "dbaeumer.vscode-eslint" + ] + } +} \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency2/package.json b/TypeScript/17AsyncImporterWithDependency2/package.json new file mode 100644 index 0000000..2cbee77 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/package.json @@ -0,0 +1,23 @@ +{ + "name": "AsyncWithDependency2", + "version": "1.0.0", + "main": "src/mod.js", + "license": "MIT", + "author": "Chomp", + "akiVersion": "~3.5", + "scripts": { + "setup": "npm i", + "build": "node ./packageBuild.ts" + }, + "devDependencies": { + "@types/node": "16.18.10", + "@typescript-eslint/eslint-plugin": "5.46.1", + "@typescript-eslint/parser": "5.46.1", + "bestzip": "2.2.1", + "eslint": "8.30.0", + "fs-extra": "11.1.0", + "glob": "8.0.3", + "tsyringe": "4.7.0", + "typescript": "4.9.4" + } +} \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency2/packageBuild.ts b/TypeScript/17AsyncImporterWithDependency2/packageBuild.ts new file mode 100644 index 0000000..c829979 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/packageBuild.ts @@ -0,0 +1,72 @@ +#!/usr/bin/env node + +// This is a simple script used to build a mod package. The script will copy necessary files to the build directory +// and compress the build directory into a zip file that can be easily shared. + +const fs = require("fs-extra"); +const glob = require("glob"); +const zip = require('bestzip'); +const path = require("path"); + +// Load the package.json file to get some information about the package so we can name things appropriately. This is +// atypical, and you would never do this in a production environment, but this script is only used for development so +// it's fine in this case. Some of these values are stored in environment variables, but those differ between node +// versions; the 'author' value is not available after node v14. +const { author, name:packageName, version } = require("./package.json"); + +// Generate the name of the package, stripping out all non-alphanumeric characters in the 'author' and 'name'. +const modName = `${author.replace(/[^a-z0-9]/gi, "")}-${packageName.replace(/[^a-z0-9]/gi, "")}-${version}`; +console.log(`Generated package name: ${modName}`); + +// Delete the old build directory and compressed package file. +fs.rmSync(`${__dirname}/dist`, { force: true, recursive: true }); +console.log("Previous build files deleted."); + +// Generate a list of files that should not be copied over into the distribution directory. This is a blacklist to ensure +// we always copy over additional files and directories that authors may have added to their project. This may need to be +// expanded upon by the mod author to allow for node modules that are used within the mod; example commented out below. +const ignoreList = [ + "node_modules/", + // "node_modules/!(weighted|glob)", // Instead of excluding the entire node_modules directory, allow two node modules. + "src/**/*.js", + "types/", + ".git/", + ".gitea/", + ".eslintignore", + ".eslintrc.json", + ".gitignore", + ".DS_Store", + "packageBuild.ts", + "mod.code-workspace", + "package-lock.json", + "tsconfig.json" +]; +const exclude = glob.sync(`{${ignoreList.join(",")}}`, { realpath: true, dot: true }); + +// For some reason these basic-bitch functions won't allow us to copy a directory into itself, so we have to resort to +// using a temporary directory, like an idiot. Excuse the normalize spam; some modules cross-platform, some don't... +fs.copySync(__dirname, path.normalize(`${__dirname}/../~${modName}`), {filter:(filePath) => +{ + return !exclude.includes(filePath); +}}); +fs.moveSync(path.normalize(`${__dirname}/../~${modName}`), path.normalize(`${__dirname}/${modName}`), { overwrite: true }); +fs.copySync(path.normalize(`${__dirname}/${modName}`), path.normalize(`${__dirname}/dist`)); +console.log("Build files copied."); + +// Compress the files for easy distribution. The compressed file is saved into the dist directory. When uncompressed we +// need to be sure that it includes a directory that the user can easily copy into their game mods directory. +zip({ + source: modName, + destination: `dist/${modName}.zip`, + cwd: __dirname +}).catch(function(err) +{ + console.error("A bestzip error has occurred: ", err.stack); +}).then(function() +{ + console.log(`Compressed mod package to: /dist/${modName}.zip`); + + // Now that we're done with the compression we can delete the temporary build directory. + fs.rmSync(`${__dirname}/${modName}`, { force: true, recursive: true }); + console.log("Build successful! your zip file has been created and is ready to be uploaded to hub.sp-tarkov.com/files/"); +}); \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency2/src/mod.ts b/TypeScript/17AsyncImporterWithDependency2/src/mod.ts new file mode 100644 index 0000000..4fa385d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/src/mod.ts @@ -0,0 +1,30 @@ +import { PreAkiModLoader } from "@spt-aki/loaders/PreAkiModLoader"; +import { IPreAkiLoadModAsync } from "@spt-aki/models/external/IPreAkiLoadModAsync"; +import { ILogger } from "@spt-aki/models/spt/utils/ILogger"; +import { ImporterUtil } from "@spt-aki/utils/ImporterUtil"; +import { DependencyContainer } from "tsyringe"; +import { ConfigsModelBase } from "./model/ConfigsModel"; + +class Mod implements IPreAkiLoadModAsync { + public async preAkiLoadAsync(container: DependencyContainer): Promise { + // get logger + const logger = container.resolve("WinstonLogger"); + + const importerUtil = container.resolve("ImporterUtil"); + const modImporter = container.resolve("PreAkiModLoader"); + const path = modImporter.getModPath("16ImporterUtil"); + + const configPath = `${path}config/`; + return importerUtil + .loadAsync(configPath) + .then((configs) => { + logger.info( + `17ImporterWithDependency2 Configurations found: ${JSON.stringify( + configs, + )}`, + ); + }); + } +} + +module.exports = { mod: new Mod() }; diff --git a/TypeScript/17AsyncImporterWithDependency2/src/model/ConfigsModel.ts b/TypeScript/17AsyncImporterWithDependency2/src/model/ConfigsModel.ts new file mode 100644 index 0000000..07c5138 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/src/model/ConfigsModel.ts @@ -0,0 +1,17 @@ +export class ConfigsModelBase { + db: ConfigsModelDb; + config: ConfigModel; +} + +export class ConfigsModelDb { + moredb: ConfigsModelMoreDb; + config: ConfigModel; +} + +export class ConfigsModelMoreDb { + config: ConfigModel; +} + +export class ConfigModel { + myProperty: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/tsconfig.json b/TypeScript/17AsyncImporterWithDependency2/tsconfig.json new file mode 100644 index 0000000..8151310 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "allowJs": true, + "module": "CommonJS", + "target": "es2020", + "moduleResolution": "node", + "esModuleInterop": true, + "downlevelIteration": true, + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "resolveJsonModule": true, + "outDir": "tmp", + "baseUrl": ".", + "paths": { + "@spt-aki/*": ["./types/*"] + } + }, + "lib": [ + "es2020" + ], + "include": [ + "src/*", + "src/**/*" + ] +} \ No newline at end of file diff --git a/TypeScript/17AsyncImporterWithDependency2/types/ErrorHandler.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/ErrorHandler.d.ts new file mode 100644 index 0000000..69b0bcd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/ErrorHandler.d.ts @@ -0,0 +1,6 @@ +export declare class ErrorHandler { + private logger; + private readLine; + constructor(); + handleCriticalError(err: any): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/Program.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/Program.d.ts new file mode 100644 index 0000000..afe5216 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/Program.d.ts @@ -0,0 +1,5 @@ +export declare class Program { + private errorHandler; + constructor(); + start(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/TYPES.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/TYPES.d.ts new file mode 100644 index 0000000..6407c3a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/TYPES.d.ts @@ -0,0 +1,3 @@ +export declare const TYPES: { + [name: string]: symbol; +}; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/BotCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/BotCallbacks.d.ts new file mode 100644 index 0000000..827015e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/BotCallbacks.d.ts @@ -0,0 +1,36 @@ +import { BotController } from "../controllers/BotController"; +import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class BotCallbacks { + protected botController: BotController; + protected httpResponse: HttpResponseUtil; + constructor(botController: BotController, httpResponse: HttpResponseUtil); + /** + * Handle singleplayer/settings/bot/limit + * @returns string + */ + getBotLimit(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handle singleplayer/settings/bot/difficulty + * @returns string + */ + getBotDifficulty(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handle client/game/bot/generate + * @returns IGetBodyResponseData + */ + generateBots(url: string, info: IGenerateBotsRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle singleplayer/settings/bot/maxCap + * @returns string + */ + getBotCap(): string; + /** + * Handle singleplayer/settings/bot/getBotBehaviours + * @returns string + */ + getBotBehaviours(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/BundleCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/BundleCallbacks.d.ts new file mode 100644 index 0000000..b7e1703 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/BundleCallbacks.d.ts @@ -0,0 +1,18 @@ +import { BundleLoader } from "../loaders/BundleLoader"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { HttpFileUtil } from "../utils/HttpFileUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class BundleCallbacks { + protected logger: ILogger; + protected httpResponse: HttpResponseUtil; + protected httpFileUtil: HttpFileUtil; + protected bundleLoader: BundleLoader; + protected configServer: ConfigServer; + protected httpConfig: IHttpConfig; + constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpFileUtil: HttpFileUtil, 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; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/CustomizationCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/CustomizationCallbacks.d.ts new file mode 100644 index 0000000..75d5701 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/CustomizationCallbacks.d.ts @@ -0,0 +1,29 @@ +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 { IGetSuitsResponse } from "../models/eft/customization/IGetSuitsResponse"; +import { IWearClothingRequestData } from "../models/eft/customization/IWearClothingRequestData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { SaveServer } from "../servers/SaveServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class CustomizationCallbacks { + protected customizationController: CustomizationController; + protected saveServer: SaveServer; + protected httpResponse: HttpResponseUtil; + constructor(customizationController: CustomizationController, saveServer: SaveServer, httpResponse: HttpResponseUtil); + /** + * Handles client/trading/customization/storage + * @returns + */ + getSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/trading/customization + * @returns ISuit[] + */ + getTraderSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse; + buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/DataCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/DataCallbacks.d.ts new file mode 100644 index 0000000..26f5899 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/DataCallbacks.d.ts @@ -0,0 +1,74 @@ +import { HideoutController } from "../controllers/HideoutController"; +import { RagfairController } from "../controllers/RagfairController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IGlobals } from "../models/eft/common/IGlobals"; +import { ICustomizationItem } from "../models/eft/common/tables/ICustomizationItem"; +import { IHandbookBase } from "../models/eft/common/tables/IHandbookBase"; +import { IQuest } from "../models/eft/common/tables/IQuest"; +import { IGetItemPricesResponse } from "../models/eft/game/IGetItemPricesResponse"; +import { IHideoutArea } from "../models/eft/hideout/IHideoutArea"; +import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction"; +import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase"; +import { IHideoutSettingsBase } from "../models/eft/hideout/IHideoutSettingsBase"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { ISettingsBase } from "../models/spt/server/ISettingsBase"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +/** + * Handle client requests + */ +export declare class DataCallbacks { + protected httpResponse: HttpResponseUtil; + protected databaseServer: DatabaseServer; + protected ragfairController: RagfairController; + protected hideoutController: HideoutController; + constructor(httpResponse: HttpResponseUtil, databaseServer: DatabaseServer, ragfairController: RagfairController, hideoutController: HideoutController); + /** + * Handles client/settings + * @returns ISettingsBase + */ + getSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/globals + * @returns IGlobals + */ + getGlobals(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/items + * @returns string + */ + getTemplateItems(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handles client/handbook/templates + * @returns IHandbookBase + */ + getTemplateHandbook(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/customization + * @returns Record>; + /** + * Handles client/account/customization + * @returns string[] + */ + getTemplateCharacter(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateQuests(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutAreas(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + gethideoutProduction(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutScavcase(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocalesLanguages(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + getLocalesMenu(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocalesGlobal(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handle client/hideout/qte/list + */ + getQteList(url: string, info: IEmptyRequestData, sessionID: string): string; + /** + * Handle client/items/prices/ + * Called when viewing a traders assorts + * TODO - fully implement this + */ + getItemPrices(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/DialogueCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/DialogueCallbacks.d.ts new file mode 100644 index 0000000..63d7163 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/DialogueCallbacks.d.ts @@ -0,0 +1,58 @@ +import { DialogueController } from "../controllers/DialogueController"; +import { OnUpdate } from "../di/OnUpdate"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IChatServer } from "../models/eft/dialog/IChatServer"; +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 implements OnUpdate { + protected hashUtil: HashUtil; + protected timeUtil: TimeUtil; + protected httpResponse: HttpResponseUtil; + protected dialogueController: DialogueController; + constructor(hashUtil: HashUtil, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, dialogueController: DialogueController); + /** + * Handles client/friend/list + * @returns IGetFriendListDataResponse + */ + getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/chatServer/list + * @returns + */ + getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData; + removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData; + pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData; + unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData; + setRead(url: string, info: ISetDialogReadRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handles client/mail/dialog/getAllAttachments + * @returns IGetAllAttachmentsResponse + */ + getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData; + listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; + sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData; + onUpdate(timeSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/GameCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/GameCallbacks.d.ts new file mode 100644 index 0000000..3a6b7e6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/GameCallbacks.d.ts @@ -0,0 +1,55 @@ +import { GameController } from "../controllers/GameController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { ICheckVersionResponse } from "../models/eft/game/ICheckVersionResponse"; +import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse"; +import { IGameEmptyCrcRequestData } from "../models/eft/game/IGameEmptyCrcRequestData"; +import { IGameKeepAliveResponse } from "../models/eft/game/IGameKeepAliveResponse"; +import { IGameLogoutResponseData } from "../models/eft/game/IGameLogoutResponseData"; +import { IGameStartResponse } from "../models/eft/game/IGameStartResponse"; +import { IReportNicknameRequestData } from "../models/eft/game/IReportNicknameRequestData"; +import { IServerDetails } from "../models/eft/game/IServerDetails"; +import { IVersionValidateRequestData } from "../models/eft/game/IVersionValidateRequestData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { Watermark } from "../utils/Watermark"; +declare class GameCallbacks { + protected httpResponse: HttpResponseUtil; + protected watermark: Watermark; + protected gameController: GameController; + constructor(httpResponse: HttpResponseUtil, watermark: Watermark, gameController: GameController); + /** + * Handle client/game/version/validate + * @returns INullResponseData + */ + versionValidate(url: string, info: IVersionValidateRequestData, sessionID: string): INullResponseData; + /** + * Handle client/game/start + * @returns IGameStartResponse + */ + gameStart(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/logout + * @returns IGameLogoutResponseData + */ + gameLogout(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/config + * @returns IGameConfigResponse + */ + getGameConfig(url: string, info: IGameEmptyCrcRequestData, sessionID: string): IGetBodyResponseData; + getServer(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + validateGameVersion(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/keepalive + * @returns IGameKeepAliveResponse + */ + gameKeepalive(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle singleplayer/settings/version + * @returns string + */ + getVersion(url: string, info: IEmptyRequestData, sessionID: string): string; + reportNickname(url: string, info: IReportNicknameRequestData, sessionID: string): INullResponseData; +} +export { GameCallbacks }; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/HandbookCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/HandbookCallbacks.d.ts new file mode 100644 index 0000000..6bd3909 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/HandbookCallbacks.d.ts @@ -0,0 +1,8 @@ +import { HandbookController } from "../controllers/HandbookController"; +import { OnLoad } from "../di/OnLoad"; +export declare class HandbookCallbacks implements OnLoad { + protected handbookController: HandbookController; + constructor(handbookController: HandbookController); + onLoad(): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/HealthCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/HealthCallbacks.d.ts new file mode 100644 index 0000000..bd3e507 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/HealthCallbacks.d.ts @@ -0,0 +1,48 @@ +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 { IWorkoutData } from "../models/eft/health/IWorkoutData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class HealthCallbacks { + protected httpResponse: HttpResponseUtil; + protected profileHelper: ProfileHelper; + protected healthController: HealthController; + constructor(httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, healthController: HealthController); + /** + * Custom aki server request found in modules/HealthSynchronizer.cs + * @param url + * @param info HealthListener.Instance.CurrentHealth class + * @param sessionID session id + * @returns empty response, no data sent back to client + */ + syncHealth(url: string, info: ISyncHealthRequestData, sessionID: string): IGetBodyResponseData; + /** + * Custom aki server request found in modules/QTEPatch.cs + * @param url + * @param info HealthListener.Instance.CurrentHealth class + * @param sessionID session id + * @returns empty response, no data sent back to client + */ + handleWorkoutEffects(url: string, info: IWorkoutData, sessionID: string): IGetBodyResponseData; + /** + * Handle Eat + * @returns IItemEventRouterResponse + */ + offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle Heal + * @returns IItemEventRouterResponse + */ + offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle RestoreHealth + * @returns IItemEventRouterResponse + */ + healthTreatment(pmcData: IPmcData, info: IHealthTreatmentRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/HideoutCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/HideoutCallbacks.d.ts new file mode 100644 index 0000000..d0247f9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/HideoutCallbacks.d.ts @@ -0,0 +1,75 @@ +import { HideoutController } from "../controllers/HideoutController"; +import { OnUpdate } from "../di/OnUpdate"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IHandleQTEEventRequestData } from "../models/eft/hideout/IHandleQTEEventRequestData"; +import { IHideoutContinuousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinuousProductionStartRequestData"; +import { IHideoutImproveAreaRequestData } from "../models/eft/hideout/IHideoutImproveAreaRequestData"; +import { 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 { IRecordShootingRangePoints } from "../models/eft/hideout/IRecordShootingRangePoints"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IHideoutConfig } from "../models/spt/config/IHideoutConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class HideoutCallbacks implements OnUpdate { + protected hideoutController: HideoutController; + protected configServer: ConfigServer; + protected hideoutConfig: IHideoutConfig; + constructor(hideoutController: HideoutController, // TODO: delay needed + configServer: ConfigServer); + /** + * Handle HideoutUpgrade + */ + upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutUpgradeComplete + */ + upgradeComplete(pmcData: IPmcData, body: IHideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutPutItemsInAreaSlots + */ + putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutTakeItemsFromAreaSlots + */ + takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutToggleArea + */ + toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutSingleProductionStart + */ + singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutScavCaseProductionStart + */ + scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutContinuousProductionStart + */ + continuousProductionStart(pmcData: IPmcData, body: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutTakeProduction + */ + takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutQuickTimeEvent + */ + handleQTEEvent(pmcData: IPmcData, request: IHandleQTEEventRequestData, sessionId: string): IItemEventRouterResponse; + /** + * Handle client/game/profile/items/moving - RecordShootingRangePoints + */ + recordShootingRangePoints(pmcData: IPmcData, request: IRecordShootingRangePoints, sessionId: string): IItemEventRouterResponse; + /** + * Handle client/game/profile/items/moving - RecordShootingRangePoints + */ + improveArea(pmcData: IPmcData, request: IHideoutImproveAreaRequestData, sessionId: string): IItemEventRouterResponse; + onUpdate(timeSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/HttpCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/HttpCallbacks.d.ts new file mode 100644 index 0000000..10794fa --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/HttpCallbacks.d.ts @@ -0,0 +1,9 @@ +import { OnLoad } from "../di/OnLoad"; +import { HttpServer } from "../servers/HttpServer"; +export declare class HttpCallbacks implements OnLoad { + protected httpServer: HttpServer; + constructor(httpServer: HttpServer); + onLoad(): Promise; + getRoute(): string; + getImage(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/InraidCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/InraidCallbacks.d.ts new file mode 100644 index 0000000..918bfaf --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/InraidCallbacks.d.ts @@ -0,0 +1,49 @@ +import { InraidController } from "../controllers/InraidController"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData"; +import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +/** + * Handle client requests + */ +export declare class InraidCallbacks { + protected inraidController: InraidController; + protected httpResponse: HttpResponseUtil; + constructor(inraidController: InraidController, httpResponse: HttpResponseUtil); + /** + * Handle client/location/getLocalloot + * @param url + * @param info register player request + * @param sessionID Session id + * @returns Null http response + */ + registerPlayer(url: string, info: IRegisterPlayerRequestData, sessionID: string): INullResponseData; + /** + * Handle raid/profile/save + * @param url + * @param info Save progress request + * @param sessionID Session id + * @returns Null http response + */ + saveProgress(url: string, info: ISaveProgressRequestData, sessionID: string): INullResponseData; + /** + * Handle singleplayer/settings/raid/endstate + * @returns + */ + getRaidEndState(): string; + /** + * Handle singleplayer/settings/raid/menu + * @returns JSON as string + */ + getRaidMenuSettings(): string; + /** + * Handle singleplayer/settings/weapon/durability + * @returns + */ + getWeaponDurability(): string; + /** + * Handle singleplayer/airdrop/config + * @returns JSON as string + */ + getAirdropConfig(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/InsuranceCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/InsuranceCallbacks.d.ts new file mode 100644 index 0000000..aea0756 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/InsuranceCallbacks.d.ts @@ -0,0 +1,32 @@ +import { InsuranceController } from "../controllers/InsuranceController"; +import { OnUpdate } from "../di/OnUpdate"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IGetInsuranceCostRequestData } from "../models/eft/insurance/IGetInsuranceCostRequestData"; +import { IGetInsuranceCostResponseData } from "../models/eft/insurance/IGetInsuranceCostResponseData"; +import { IInsureRequestData } from "../models/eft/insurance/IInsureRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { InsuranceService } from "../services/InsuranceService"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class InsuranceCallbacks implements OnUpdate { + protected insuranceController: InsuranceController; + protected insuranceService: InsuranceService; + protected httpResponse: HttpResponseUtil; + protected configServer: ConfigServer; + protected insuranceConfig: IInsuranceConfig; + constructor(insuranceController: InsuranceController, insuranceService: InsuranceService, httpResponse: HttpResponseUtil, configServer: ConfigServer); + /** + * Handle client/insurance/items/list/cost + * @returns IGetInsuranceCostResponseData + */ + getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle Insure + * @returns IItemEventRouterResponse + */ + insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse; + onUpdate(secondsSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/InventoryCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/InventoryCallbacks.d.ts new file mode 100644 index 0000000..46bf6fd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/InventoryCallbacks.d.ts @@ -0,0 +1,41 @@ +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 { IOpenRandomLootContainerRequestData } from "../models/eft/inventory/IOpenRandomLootContainerRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class InventoryCallbacks { + protected inventoryController: InventoryController; + constructor(inventoryController: InventoryController); + moveItem(pmcData: IPmcData, body: IInventoryMoveRequestData, sessionID: string): IItemEventRouterResponse; + removeItem(pmcData: IPmcData, body: IInventoryRemoveRequestData, sessionID: string): IItemEventRouterResponse; + splitItem(pmcData: IPmcData, body: IInventorySplitRequestData, sessionID: string): IItemEventRouterResponse; + mergeItem(pmcData: IPmcData, body: IInventoryMergeRequestData, sessionID: string): IItemEventRouterResponse; + transferItem(pmcData: IPmcData, body: IInventoryTransferRequestData, sessionID: string): IItemEventRouterResponse; + swapItem(pmcData: IPmcData, body: IInventorySwapRequestData, sessionID: string): IItemEventRouterResponse; + foldItem(pmcData: IPmcData, body: IInventoryFoldRequestData, sessionID: string): IItemEventRouterResponse; + toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse; + tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse; + bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse; + examineItem(pmcData: IPmcData, body: IInventoryExamineRequestData, sessionID: string): IItemEventRouterResponse; + readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse; + sortInventory(pmcData: IPmcData, body: IInventorySortRequestData, sessionID: string): IItemEventRouterResponse; + createMapMarker(pmcData: IPmcData, body: IInventoryCreateMarkerRequestData, sessionID: string): IItemEventRouterResponse; + deleteMapMarker(pmcData: IPmcData, body: IInventoryDeleteMarkerRequestData, sessionID: string): IItemEventRouterResponse; + editMapMarker(pmcData: IPmcData, body: IInventoryEditMarkerRequestData, sessionID: string): IItemEventRouterResponse; + openRandomLootContainer(pmcData: IPmcData, body: IOpenRandomLootContainerRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/ItemEventCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/ItemEventCallbacks.d.ts new file mode 100644 index 0000000..fbb0b5f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/ItemEventCallbacks.d.ts @@ -0,0 +1,13 @@ +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { Warning } from "../models/eft/itemEvent/IItemEventRouterBase"; +import { IItemEventRouterRequest } from "../models/eft/itemEvent/IItemEventRouterRequest"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ItemEventRouter } from "../routers/ItemEventRouter"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class ItemEventCallbacks { + protected httpResponse: HttpResponseUtil; + protected itemEventRouter: ItemEventRouter; + constructor(httpResponse: HttpResponseUtil, itemEventRouter: ItemEventRouter); + handleEvents(url: string, info: IItemEventRouterRequest, sessionID: string): IGetBodyResponseData; + protected getErrorCode(warnings: Warning[]): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/LauncherCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/LauncherCallbacks.d.ts new file mode 100644 index 0000000..c022325 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/LauncherCallbacks.d.ts @@ -0,0 +1,28 @@ +import { LauncherController } from "../controllers/LauncherController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IChangeRequestData } from "../models/eft/launcher/IChangeRequestData"; +import { ILoginRequestData } from "../models/eft/launcher/ILoginRequestData"; +import { IRegisterData } from "../models/eft/launcher/IRegisterData"; +import { IRemoveProfileData } from "../models/eft/launcher/IRemoveProfileData"; +import { SaveServer } from "../servers/SaveServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { Watermark } from "../utils/Watermark"; +declare class LauncherCallbacks { + protected httpResponse: HttpResponseUtil; + protected launcherController: LauncherController; + protected saveServer: SaveServer; + protected watermark: Watermark; + constructor(httpResponse: HttpResponseUtil, launcherController: LauncherController, saveServer: SaveServer, watermark: Watermark); + connect(): string; + login(url: string, info: ILoginRequestData, sessionID: string): string; + register(url: string, info: IRegisterData, sessionID: string): "FAILED" | "OK"; + get(url: string, info: ILoginRequestData, sessionID: string): string; + changeUsername(url: string, info: IChangeRequestData, sessionID: string): "FAILED" | "OK"; + changePassword(url: string, info: IChangeRequestData, sessionID: string): "FAILED" | "OK"; + wipe(url: string, info: IRegisterData, sessionID: string): "FAILED" | "OK"; + getServerVersion(): string; + ping(url: string, info: IEmptyRequestData, sessionID: string): string; + removeProfile(url: string, info: IRemoveProfileData, sessionID: string): string; + getCompatibleTarkovVersion(): string; +} +export { LauncherCallbacks }; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/LocationCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/LocationCallbacks.d.ts new file mode 100644 index 0000000..6e0b538 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/LocationCallbacks.d.ts @@ -0,0 +1,15 @@ +import { LocationController } from "../controllers/LocationController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { ILocationBase } from "../models/eft/common/ILocationBase"; +import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IGetLocationRequestData } from "../models/eft/location/IGetLocationRequestData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class LocationCallbacks { + protected httpResponse: HttpResponseUtil; + protected locationController: LocationController; + constructor(httpResponse: HttpResponseUtil, locationController: LocationController); + getLocationData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData; + getAirdropLoot(url: string, info: IEmptyRequestData, sessionID: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/MatchCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/MatchCallbacks.d.ts new file mode 100644 index 0000000..52e3290 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/MatchCallbacks.d.ts @@ -0,0 +1,46 @@ +import { MatchController } from "../controllers/MatchController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData"; +import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData"; +import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData"; +import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestData"; +import { IGetRaidConfigurationRequestData } from "../models/eft/match/IGetRaidConfigurationRequestData"; +import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; +import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; +import { IPutMetricsRequestData } from "../models/eft/match/IPutMetricsRequestData"; +import { IUpdatePingRequestData } from "../models/eft/match/IUpdatePingRequestData"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class MatchCallbacks { + protected httpResponse: HttpResponseUtil; + protected jsonUtil: JsonUtil; + protected matchController: MatchController; + protected databaseServer: DatabaseServer; + constructor(httpResponse: HttpResponseUtil, jsonUtil: JsonUtil, matchController: MatchController, databaseServer: DatabaseServer); + updatePing(url: string, info: IUpdatePingRequestData, sessionID: string): INullResponseData; + exitMatch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; + exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; + startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; + stopGroupSearch(url: string, info: IEmptyRequestData, 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: IPutMetricsRequestData, sessionID: string): INullResponseData; + getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData; + serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData | IGetBodyResponseData; + joinMatch(url: string, info: IJoinMatchRequestData, sessionID: string): IGetBodyResponseData; + getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData; + /** + * Handle client/match/group/status + * @returns + */ + getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData; + createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData; + deleteGroup(url: string, info: any, sessionID: string): INullResponseData; + endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData; + getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/ModCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/ModCallbacks.d.ts new file mode 100644 index 0000000..d1ec7f7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/ModCallbacks.d.ts @@ -0,0 +1,21 @@ +import { OnLoad } from "../di/OnLoad"; +import { PostAkiModLoader } from "../loaders/PostAkiModLoader"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HttpFileUtil } from "../utils/HttpFileUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +declare class ModCallbacks implements OnLoad { + protected logger: ILogger; + protected httpResponse: HttpResponseUtil; + protected httpFileUtil: HttpFileUtil; + protected postAkiModLoader: PostAkiModLoader; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected httpConfig: IHttpConfig; + constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpFileUtil: HttpFileUtil, postAkiModLoader: PostAkiModLoader, localisationService: LocalisationService, configServer: ConfigServer); + onLoad(): Promise; + getRoute(): string; +} +export { ModCallbacks }; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/NoteCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/NoteCallbacks.d.ts new file mode 100644 index 0000000..d39d400 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/NoteCallbacks.d.ts @@ -0,0 +1,11 @@ +import { NoteController } from "../controllers/NoteController"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { INoteActionData } from "../models/eft/notes/INoteActionData"; +export declare class NoteCallbacks { + protected noteController: NoteController; + constructor(noteController: NoteController); + addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/NotifierCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/NotifierCallbacks.d.ts new file mode 100644 index 0000000..fab325b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/NotifierCallbacks.d.ts @@ -0,0 +1,29 @@ +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 { ISelectProfileResponse } from "../models/eft/notifier/ISelectProfileResponse"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class NotifierCallbacks { + protected httpServerHelper: HttpServerHelper; + protected httpResponse: HttpResponseUtil; + protected notifierController: NotifierController; + constructor(httpServerHelper: HttpServerHelper, httpResponse: HttpResponseUtil, notifierController: NotifierController); + /** + * If we don't have anything to send, it's ok to not send anything back + * because notification requests can be long-polling. In fact, we SHOULD wait + * until we actually have something to send because otherwise we'd spam the client + * and the client would abort the connection due to spam. + */ + sendNotification(sessionID: string, req: any, resp: any, data: any): void; + getNotifier(url: string, info: any, sessionID: string): IGetBodyResponseData; + createNotifierChannel(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/profile/select + * @returns ISelectProfileResponse + */ + selectProfile(url: string, info: ISelectProfileRequestData, sessionID: string): IGetBodyResponseData; + notify(url: string, info: any, sessionID: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/PresetBuildCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/PresetBuildCallbacks.d.ts new file mode 100644 index 0000000..541715a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/PresetBuildCallbacks.d.ts @@ -0,0 +1,16 @@ +import { PresetBuildController } from "../controllers/PresetBuildController"; +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 { IPresetBuildActionRequestData } from "../models/eft/presetBuild/IPresetBuildActionRequestData"; +import { WeaponBuild } from "../models/eft/profile/IAkiProfile"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class PresetBuildCallbacks { + protected httpResponse: HttpResponseUtil; + protected presetBuildController: PresetBuildController; + constructor(httpResponse: HttpResponseUtil, presetBuildController: PresetBuildController); + getHandbookUserlist(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; + removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/PresetCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/PresetCallbacks.d.ts new file mode 100644 index 0000000..37bf4e8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/PresetCallbacks.d.ts @@ -0,0 +1,8 @@ +import { PresetController } from "../controllers/PresetController"; +import { OnLoad } from "../di/OnLoad"; +export declare class PresetCallbacks implements OnLoad { + protected presetController: PresetController; + constructor(presetController: PresetController); + onLoad(): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/ProfileCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/ProfileCallbacks.d.ts new file mode 100644 index 0000000..183bb0a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/ProfileCallbacks.d.ts @@ -0,0 +1,70 @@ +import { ProfileController } from "../controllers/ProfileController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { IGetMiniProfileRequestData } from "../models/eft/launcher/IGetMiniProfileRequestData"; +import { GetProfileStatusResponseData } from "../models/eft/profile/GetProfileStatusResponseData"; +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"; +/** Handle profile related client events */ +export declare class ProfileCallbacks { + protected httpResponse: HttpResponseUtil; + protected timeUtil: TimeUtil; + protected profileController: ProfileController; + constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, profileController: ProfileController); + createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData; + /** + * Get the complete player profile (scav + pmc character) + * @param url + * @param info Empty + * @param sessionID Session id + * @returns Profile object + */ + getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle the creation of a scav profile for player + * Occurs post-raid and when profile first created immediately after character details are confirmed by player + * @param url + * @param info empty + * @param sessionID Session id + * @returns Profile object + */ + regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/game/profile/voice/change event + * @param url + * @param info Change voice request object + * @param sessionID Session id + * @returns Client response + */ + changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData; + /** + * Handle client/game/profile/nickname/change event + * Client allows player to adjust their profile name + * @param url + * @param info Change nickname request object + * @param sessionID Session id + * @returns client response + */ + changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData; + validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData; + getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Called when creating a character when choosing a character face/voice + * @param url + * @param info response (empty) + * @param sessionID + * @returns + */ + getProfileStatus(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + searchFriend(url: string, info: ISearchFriendRequestData, sessionID: string): IGetBodyResponseData; + getMiniProfile(url: string, info: IGetMiniProfileRequestData, sessionID: string): string; + getAllMiniProfiles(url: string, info: any, sessionID: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/QuestCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/QuestCallbacks.d.ts new file mode 100644 index 0000000..2a3eb20 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/QuestCallbacks.d.ts @@ -0,0 +1,33 @@ +import { QuestController } from "../controllers/QuestController"; +import { RepeatableQuestController } from "../controllers/RepeatableQuestController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IQuest } from "../models/eft/common/tables/IQuest"; +import { IPmcDataRepeatableQuest } from "../models/eft/common/tables/IRepeatableQuests"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData"; +import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData"; +import { IHandoverQuestRequestData } from "../models/eft/quests/IHandoverQuestRequestData"; +import { IListQuestsRequestData } from "../models/eft/quests/IListQuestsRequestData"; +import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class QuestCallbacks { + protected httpResponse: HttpResponseUtil; + protected questController: QuestController; + protected repeatableQuestController: RepeatableQuestController; + constructor(httpResponse: HttpResponseUtil, questController: QuestController, repeatableQuestController: RepeatableQuestController); + changeRepeatableQuest(pmcData: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse; + acceptQuest(pmcData: IPmcData, body: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; + completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse; + handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle client/quest/list + * @param url + * @param info + * @param sessionID + * @returns + */ + listQuests(url: string, info: IListQuestsRequestData, sessionID: string): IGetBodyResponseData; + activityPeriods(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/RagfairCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/RagfairCallbacks.d.ts new file mode 100644 index 0000000..97713e7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/RagfairCallbacks.d.ts @@ -0,0 +1,47 @@ +import { OnLoad } from "../di/OnLoad"; +import { OnUpdate } from "../di/OnUpdate"; +import { RagfairController } from "../controllers/RagfairController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAddOfferRequestData } from "../models/eft/ragfair/IAddOfferRequestData"; +import { IExtendOfferRequestData } from "../models/eft/ragfair/IExtendOfferRequestData"; +import { IGetItemPriceResult } from "../models/eft/ragfair/IGetItemPriceResult"; +import { IGetMarketPriceRequestData } from "../models/eft/ragfair/IGetMarketPriceRequestData"; +import { IGetOffersResult } from "../models/eft/ragfair/IGetOffersResult"; +import { IRemoveOfferRequestData } from "../models/eft/ragfair/IRemoveOfferRequestData"; +import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData"; +import { ISendRagfairReportRequestData } from "../models/eft/ragfair/ISendRagfairReportRequestData"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RagfairServer } from "../servers/RagfairServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +/** + * Handle ragfair related callback events + */ +export declare class RagfairCallbacks implements OnLoad, OnUpdate { + protected httpResponse: HttpResponseUtil; + protected jsonUtil: JsonUtil; + protected ragfairServer: RagfairServer; + protected ragfairController: RagfairController; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(httpResponse: HttpResponseUtil, jsonUtil: JsonUtil, ragfairServer: RagfairServer, ragfairController: RagfairController, configServer: ConfigServer); + onLoad(): Promise; + getRoute(): string; + search(url: string, info: ISearchRequestData, sessionID: string): IGetBodyResponseData; + getMarketPrice(url: string, info: IGetMarketPriceRequestData, sessionID: string): IGetBodyResponseData; + addOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse; + removeOffer(pmcData: IPmcData, info: IRemoveOfferRequestData, sessionID: string): IItemEventRouterResponse; + extendOffer(pmcData: IPmcData, info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle /client/items/prices + * Called when clicking an item to list on flea + */ + getFleaPrices(url: string, request: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + onUpdate(timeSinceLastRun: number): Promise; + sendReport(url: string, info: ISendRagfairReportRequestData, sessionID: string): INullResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/RepairCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/RepairCallbacks.d.ts new file mode 100644 index 0000000..14edeeb --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/RepairCallbacks.d.ts @@ -0,0 +1,25 @@ +import { RepairController } from "../controllers/RepairController"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRepairActionDataRequest } from "../models/eft/repair/IRepairActionDataRequest"; +import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepairActionDataRequest"; +export declare class RepairCallbacks { + protected repairController: RepairController; + constructor(repairController: RepairController); + /** + * use trader to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ + traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + /** + * Use repair kit to repair item + * @param pmcData + * @param body + * @param sessionID + * @returns + */ + repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/SaveCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/SaveCallbacks.d.ts new file mode 100644 index 0000000..93ffd96 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/SaveCallbacks.d.ts @@ -0,0 +1,10 @@ +import { OnLoad } from "../di/OnLoad"; +import { OnUpdate } from "../di/OnUpdate"; +import { SaveServer } from "../servers/SaveServer"; +export declare class SaveCallbacks implements OnLoad, OnUpdate { + protected saveServer: SaveServer; + constructor(saveServer: SaveServer); + onLoad(): Promise; + getRoute(): string; + onUpdate(secondsSinceLastRun: number): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/TradeCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/TradeCallbacks.d.ts new file mode 100644 index 0000000..4291da8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/TradeCallbacks.d.ts @@ -0,0 +1,14 @@ +import { TradeController } from "../controllers/TradeController"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTradeRequestData"; +import { IProcessRagfairTradeRequestData } from "../models/eft/trade/IProcessRagfairTradeRequestData"; +export declare class TradeCallbacks { + protected tradeController: TradeController; + constructor(tradeController: TradeController); + /** + * Handle client/game/profile/items/moving TradingConfirm + */ + processTrade(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse; + processRagfairTrade(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/TraderCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/TraderCallbacks.d.ts new file mode 100644 index 0000000..8df1049 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/TraderCallbacks.d.ts @@ -0,0 +1,23 @@ +import { OnLoad } from "../di/OnLoad"; +import { OnUpdate } from "../di/OnUpdate"; +import { TraderController } from "../controllers/TraderController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class TraderCallbacks implements OnLoad, OnUpdate { + protected httpResponse: HttpResponseUtil; + protected traderController: TraderController; + constructor(httpResponse: HttpResponseUtil, traderController: TraderController); + onLoad(): Promise; + onUpdate(): Promise; + getRoute(): string; + getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + /** + * Handle client/trading/api/getUserAssortPrice/trader + * @returns + */ + getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/WeatherCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/WeatherCallbacks.d.ts new file mode 100644 index 0000000..f9d2002 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/WeatherCallbacks.d.ts @@ -0,0 +1,15 @@ +import { WeatherController } from "../controllers/WeatherController"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { IWeatherData } from "../models/eft/weather/IWeatherData"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +export declare class WeatherCallbacks { + protected httpResponse: HttpResponseUtil; + protected weatherController: WeatherController; + constructor(httpResponse: HttpResponseUtil, weatherController: WeatherController); + /** + * Handle client/weather + * @returns IWeatherData + */ + getWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/callbacks/WishlistCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/WishlistCallbacks.d.ts new file mode 100644 index 0000000..c2cc2a8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/callbacks/WishlistCallbacks.d.ts @@ -0,0 +1,10 @@ +import { WishlistController } from "../controllers/WishlistController"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData"; +export declare class WishlistCallbacks { + protected wishlistController: WishlistController; + constructor(wishlistController: WishlistController); + addToWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; + removeFromWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/context/ApplicationContext.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/context/ApplicationContext.d.ts new file mode 100644 index 0000000..28bbdf7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/context/ApplicationContext.d.ts @@ -0,0 +1,18 @@ +import { ContextVariable } from "./ContextVariable"; +import { ContextVariableType } from "./ContextVariableType"; +export declare class ApplicationContext { + private variables; + private static holderMaxSize; + /** + * Called like: + * + * const registerPlayerInfo = this.applicationContext.getLatestValue(ContextVariableType.REGISTER_PLAYER_REQUEST).getValue(); + * + * const matchInfo = this.applicationContext.getLatestValue(ContextVariableType.MATCH_INFO).getValue(); + * @param type + * @returns + */ + getLatestValue(type: ContextVariableType): ContextVariable; + getValues(type: ContextVariableType): ContextVariable[]; + addValue(type: ContextVariableType, value: any): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/context/ContextVariable.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/context/ContextVariable.d.ts new file mode 100644 index 0000000..0fe0a63 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/context/ContextVariable.d.ts @@ -0,0 +1,10 @@ +import { ContextVariableType } from "./ContextVariableType"; +export declare class ContextVariable { + private value; + private timestamp; + private type; + constructor(value: any, type: ContextVariableType); + getValue(): T; + getTimestamp(): Date; + getType(): ContextVariableType; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/context/ContextVariableType.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/context/ContextVariableType.d.ts new file mode 100644 index 0000000..49f3267 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/context/ContextVariableType.d.ts @@ -0,0 +1,10 @@ +export declare enum ContextVariableType { + /** Logged in users session id */ + SESSION_ID = 0, + /** Currently acive raid information */ + RAID_CONFIGURATION = 1, + /** Timestamp when client first connected */ + CLIENT_START_TIMESTAMP = 2, + /** When player is loading into map and loot is requested */ + REGISTER_PLAYER_REQUEST = 3 +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/BotController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/BotController.d.ts new file mode 100644 index 0000000..1d7eb9d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/BotController.d.ts @@ -0,0 +1,71 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { BotGenerator } from "../generators/BotGenerator"; +import { BotDifficultyHelper } from "../helpers/BotDifficultyHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { IBotCore } from "../models/eft/common/tables/IBotCore"; +import { Difficulty } from "../models/eft/common/tables/IBotType"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class BotController { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected botGenerator: BotGenerator; + protected botHelper: BotHelper; + protected botDifficultyHelper: BotDifficultyHelper; + protected botGenerationCacheService: BotGenerationCacheService; + protected localisationService: LocalisationService; + protected profileHelper: ProfileHelper; + protected configServer: ConfigServer; + protected applicationContext: ApplicationContext; + protected jsonUtil: JsonUtil; + protected botConfig: IBotConfig; + static readonly pmcTypeLabel = "PMC"; + constructor(logger: ILogger, databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, botGenerationCacheService: BotGenerationCacheService, localisationService: LocalisationService, profileHelper: ProfileHelper, configServer: ConfigServer, applicationContext: ApplicationContext, jsonUtil: JsonUtil); + /** + * Return the number of bot loadout varieties to be generated + * @param type bot Type we want the loadout gen count for + * @returns number of bots to generate + */ + getBotPresetGenerationLimit(type: string): number; + /** + * Get the core.json difficulty settings from database\bots + * @returns IBotCore + */ + getBotCoreDifficulty(): IBotCore; + /** + * Get bot difficulty settings + * adjust PMC settings to ensure they engage the correct bot types + * @param type what bot the server is requesting settings for + * @param difficulty difficulty level server requested settings for + * @returns Difficulty object + */ + getBotDifficulty(type: string, difficulty: string): Difficulty; + /** + * Generate bot profiles and store in cache + * @param sessionId Session id + * @param info bot generation request info + * @returns IBotBase array + */ + generate(sessionId: string, info: IGenerateBotsRequestData): IBotBase[]; + /** + * Get the difficulty passed in, if its not "asoline", get selected difficulty from config + * @param requestedDifficulty + * @returns + */ + getPMCDifficulty(requestedDifficulty: string): string; + /** + * Get the max number of bots allowed on a map + * Looks up location player is entering when getting cap value + * @returns cap number + */ + getBotCap(): number; + getPmcBotTypes(): Record>>; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/CustomizationController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/CustomizationController.d.ts new file mode 100644 index 0000000..a4ef8cf --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/CustomizationController.d.ts @@ -0,0 +1,24 @@ +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ISuit } from "../models/eft/common/tables/ITrader"; +import { IBuyClothingRequestData } from "../models/eft/customization/IBuyClothingRequestData"; +import { IWearClothingRequestData } from "../models/eft/customization/IWearClothingRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocalisationService } from "../services/LocalisationService"; +export declare class CustomizationController { + protected logger: ILogger; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected saveServer: SaveServer; + protected localisationService: LocalisationService; + protected profileHelper: ProfileHelper; + constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, saveServer: SaveServer, localisationService: LocalisationService, profileHelper: ProfileHelper); + getTraderSuits(traderID: string, sessionID: string): ISuit[]; + wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse; + buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse; + protected getAllTraderSuits(sessionID: string): ISuit[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/DialogueController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/DialogueController.d.ts new file mode 100644 index 0000000..98d3d52 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/DialogueController.d.ts @@ -0,0 +1,79 @@ +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 { DialogueInfo, Message } from "../models/eft/profile/IAkiProfile"; +import { SaveServer } from "../servers/SaveServer"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class DialogueController { + protected saveServer: SaveServer; + protected timeUtil: TimeUtil; + protected dialogueHelper: DialogueHelper; + constructor(saveServer: SaveServer, timeUtil: TimeUtil, dialogueHelper: DialogueHelper); + update(): void; + getFriendList(sessionID: string): IGetFriendListDataResponse; + /** + * Create array holding trader dialogs and mail interactions with player + * Set the content of the dialogue on the list tab. + * @param sessionID Session Id + * @returns array of dialogs + */ + generateDialogueList(sessionID: string): DialogueInfo[]; + /** + * Get the content of a dialogue + * @param dialogueID Dialog id + * @param sessionID Session Id + * @returns DialogueInfo + */ + getDialogueInfo(dialogueID: string, sessionID: string): DialogueInfo; + /** + * Handle player clicking 'messenger' and seeing all the messages they've recieved + * Set the content of the dialogue on the details panel, showing all the messages + * for the specified dialogue. + * @param dialogueID Dialog id + * @param sessionID Session id + * @returns IGetMailDialogViewResponseData object + */ + generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData; + /** + * Get a count of messages with attachments from a particular dialog + * @param sessionID Session id + * @param dialogueID Dialog id + * @returns Count of messages with attachments + */ + protected getUnreadMessagesWithAttachmentsCount(sessionID: string, dialogueID: string): number; + /** + * Does array have messages with uncollected rewards (includes expired rewards) + * @param messages Messages to check + * @returns true if uncollected rewards found + */ + protected messagesHaveUncollectedRewards(messages: Message[]): boolean; + removeDialogue(dialogueID: string, sessionID: string): void; + setDialoguePin(dialogueID: string, shouldPin: boolean, sessionID: string): void; + setRead(dialogueIDs: string[], sessionID: string): void; + /** + * Get all uncollected items attached to mail in a particular dialog + * @param dialogueID Dialog to get mail attachments from + * @param sessionID Session id + * @returns + */ + getAllAttachments(dialogueID: string, sessionID: string): IGetAllAttachmentsResponse; + /** + * Get messages from a specific dialog that have items not expired + * @param sessionId Session id + * @param dialogueId Dialog to get mail attachments from + * @returns Message array + */ + protected getActiveMessagesFromDialog(sessionId: string, dialogueId: string): Message[]; + /** + * Return array of messages with uncollected items (includes expired) + * @param messages Messages to parse + * @returns messages with items to collect + */ + protected getMessagesWithAttachments(messages: Message[]): Message[]; + /** + * Delete expired items. triggers when updating traders. + * @param sessionID Session id + */ + protected removeExpiredItems(sessionID: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/GameController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/GameController.d.ts new file mode 100644 index 0000000..44264dc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/GameController.d.ts @@ -0,0 +1,80 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { HideoutHelper } from "../helpers/HideoutHelper"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { PreAkiModLoader } from "../loaders/PreAkiModLoader"; +import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ICheckVersionResponse } from "../models/eft/game/ICheckVersionResponse"; +import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse"; +import { IServerDetails } from "../models/eft/game/IServerDetails"; +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { ICoreConfig } from "../models/spt/config/ICoreConfig"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILocationConfig } from "../models/spt/config/ILocationConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { CustomLocationWaveService } from "../services/CustomLocationWaveService"; +import { LocalisationService } from "../services/LocalisationService"; +import { OpenZoneService } from "../services/OpenZoneService"; +import { ProfileFixerService } from "../services/ProfileFixerService"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class GameController { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected timeUtil: TimeUtil; + protected preAkiModLoader: PreAkiModLoader; + protected httpServerHelper: HttpServerHelper; + protected hideoutHelper: HideoutHelper; + protected profileHelper: ProfileHelper; + protected profileFixerService: ProfileFixerService; + protected localisationService: LocalisationService; + protected customLocationWaveService: CustomLocationWaveService; + protected openZoneService: OpenZoneService; + protected seasonalEventService: SeasonalEventService; + protected applicationContext: ApplicationContext; + protected configServer: ConfigServer; + protected httpConfig: IHttpConfig; + protected coreConfig: ICoreConfig; + protected locationConfig: ILocationConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, applicationContext: ApplicationContext, configServer: ConfigServer); + gameStart(_url: string, _info: IEmptyRequestData, sessionID: string, startTimeStampMS: number): void; + /** + * When player logs in, iterate over all active effects and reduce timer + * TODO - add body part HP regen + * @param pmcProfile + */ + protected updateProfileHealthValues(pmcProfile: IPmcData): void; + /** + * Waves with an identical min/max values spawn nothing, the number of bots that spawn is the difference between min and max + */ + protected fixBrokenOfflineMapWaves(): void; + /** + * Make Rogues spawn later to allow for scavs to spawn first instead of rogues filling up all spawn positions + */ + protected fixRoguesSpawningInstantlyOnLighthouse(): void; + /** + * Get a list of installed mods and save their details to the profile being used + * @param fullProfile Profile to add mod details to + */ + protected saveActiveModsToProfile(fullProfile: IAkiProfile): void; + /** + * Add the logged in players name to PMC name pool + * @param pmcProfile + */ + protected addPlayerToPMCNames(pmcProfile: IPmcData): void; + /** + * Blank out the "test" mail message from prapor + */ + protected removePraporTestMessage(): void; + /** + * Make non-trigger-spawned raiders spawn earlier + always + */ + protected adjustLabsRaiderSpawnRate(): void; + protected logProfileDetails(fullProfile: IAkiProfile): void; + getGameConfig(sessionID: string): IGameConfigResponse; + getServer(): IServerDetails[]; + getValidGameVersion(): ICheckVersionResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/HandbookController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/HandbookController.d.ts new file mode 100644 index 0000000..52d2dd8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/HandbookController.d.ts @@ -0,0 +1,8 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { DatabaseServer } from "../servers/DatabaseServer"; +export declare class HandbookController { + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + constructor(databaseServer: DatabaseServer, handbookHelper: HandbookHelper); + load(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/HealthController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/HealthController.d.ts new file mode 100644 index 0000000..7c149cc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/HealthController.d.ts @@ -0,0 +1,73 @@ +import { HealthHelper } from "../helpers/HealthHelper"; +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +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 { IWorkoutData } from "../models/eft/health/IWorkoutData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { LocalisationService } from "../services/LocalisationService"; +import { PaymentService } from "../services/PaymentService"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class HealthController { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected eventOutputHolder: EventOutputHolder; + protected itemHelper: ItemHelper; + protected paymentService: PaymentService; + protected inventoryHelper: InventoryHelper; + protected localisationService: LocalisationService; + protected healthHelper: HealthHelper; + constructor(logger: ILogger, jsonUtil: JsonUtil, eventOutputHolder: EventOutputHolder, itemHelper: ItemHelper, paymentService: PaymentService, inventoryHelper: InventoryHelper, localisationService: LocalisationService, healthHelper: HealthHelper); + /** + * stores in-raid player health + * @param pmcData Player profile + * @param info Request data + * @param sessionID + * @param addEffects Should effects found be added or removed from profile + */ + saveVitality(pmcData: IPmcData, info: ISyncHealthRequestData, sessionID: string, addEffects?: boolean, deleteExistingEffects?: boolean): void; + /** + * When healing in menu + * @param pmcData + * @param body + * @param sessionID + * @returns + */ + offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Consume food/water outside of a raid + * @param pmcData Player profile + * @param body request Object + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Occurs on post-raid healing page + * @param pmcData player profile + * @param healthTreatmentRequest Request data from client + * @param sessionID Session id + * @returns + */ + healthTreatment(pmcData: IPmcData, healthTreatmentRequest: IHealthTreatmentRequestData, sessionID: string): IItemEventRouterResponse; + /** + * applies skills from hideout workout. + * @param pmcData Player profile + * @param info Request data + * @param sessionID + */ + applyWorkoutChanges(pmcData: IPmcData, info: IWorkoutData, sessionId: string): void; + /** + * Iterate over treatment request diff and find effects to remove from player limbs + * @param sessionId + * @param profile Profile to update + * @param treatmentRequest client request + * @param output response to send to client + */ + protected removeEffectsAfterPostRaidHeal(sessionId: string, profile: IPmcData, treatmentRequest: IHealthTreatmentRequestData, output: IItemEventRouterResponse): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/HideoutController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/HideoutController.d.ts new file mode 100644 index 0000000..e6e0243 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/HideoutController.d.ts @@ -0,0 +1,220 @@ +import { ScavCaseRewardGenerator } from "../generators/ScavCaseRewardGenerator"; +import { HideoutHelper } from "../helpers/HideoutHelper"; +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { HideoutArea, Product } from "../models/eft/common/tables/IBotBase"; +import { HideoutUpgradeCompleteRequestData } from "../models/eft/hideout/HideoutUpgradeCompleteRequestData"; +import { IHandleQTEEventRequestData } from "../models/eft/hideout/IHandleQTEEventRequestData"; +import { IHideoutContinuousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinuousProductionStartRequestData"; +import { IHideoutImproveAreaRequestData } from "../models/eft/hideout/IHideoutImproveAreaRequestData"; +import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction"; +import { IHideoutPutItemInRequestData } from "../models/eft/hideout/IHideoutPutItemInRequestData"; +import { IHideoutScavCaseStartRequestData } from "../models/eft/hideout/IHideoutScavCaseStartRequestData"; +import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData"; +import { IHideoutTakeItemOutRequestData } from "../models/eft/hideout/IHideoutTakeItemOutRequestData"; +import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideoutTakeProductionRequestData"; +import { IHideoutToggleAreaRequestData } from "../models/eft/hideout/IHideoutToggleAreaRequestData"; +import { IHideoutUpgradeRequestData } from "../models/eft/hideout/IHideoutUpgradeRequestData"; +import { IQteData } from "../models/eft/hideout/IQteData"; +import { IRecordShootingRangePoints } from "../models/eft/hideout/IRecordShootingRangePoints"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IHideoutConfig } from "../models/spt/config/IHideoutConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { PlayerService } from "../services/PlayerService"; +import { HashUtil } from "../utils/HashUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class HideoutController { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected inventoryHelper: InventoryHelper; + protected saveServer: SaveServer; + protected playerService: PlayerService; + protected presetHelper: PresetHelper; + protected paymentHelper: PaymentHelper; + protected eventOutputHolder: EventOutputHolder; + protected httpResponse: HttpResponseUtil; + protected profileHelper: ProfileHelper; + protected hideoutHelper: HideoutHelper; + protected scavCaseRewardGenerator: ScavCaseRewardGenerator; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected jsonUtil: JsonUtil; + protected fenceService: FenceService; + protected static nameBackendCountersCrafting: string; + protected hideoutConfig: IHideoutConfig; + constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, localisationService: LocalisationService, configServer: ConfigServer, jsonUtil: JsonUtil, fenceService: FenceService); + /** + * Start a hideout area upgrade + * @param pmcData Player profile + * @param request upgrade start request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + startUpgrade(pmcData: IPmcData, request: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Complete a hideout area upgrade + * @param pmcData Player profile + * @param request Completed upgrade request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + upgradeComplete(pmcData: IPmcData, request: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle HideoutPutItemsInAreaSlots + * Create item in hideout slot item array, remove item from player inventory + * @param pmcData Profile data + * @param addItemToHideoutRequest reqeust from client to place item in area slot + * @param sessionID Session id + * @returns IItemEventRouterResponse object + */ + putItemsInAreaSlots(pmcData: IPmcData, addItemToHideoutRequest: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Remove item from hideout area and place into player inventory + * @param pmcData Player profile + * @param request Take item out of area request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + takeItemsFromAreaSlots(pmcData: IPmcData, request: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Find resource item in hideout area, add copy to player inventory, remove Item from hideout slot + * @param sessionID Session id + * @param pmcData Profile to update + * @param removeResourceRequest client request + * @param output response to send to client + * @param hideoutArea Area fuel is being removed from + * @returns IItemEventRouterResponse response + */ + protected removeResourceFromArea(sessionID: string, pmcData: IPmcData, removeResourceRequest: IHideoutTakeItemOutRequestData, output: IItemEventRouterResponse, hideoutArea: HideoutArea): IItemEventRouterResponse; + /** + * Toggle area on/off + * @param pmcData Player profile + * @param request Toggle area request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + toggleArea(pmcData: IPmcData, request: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Start production for an item from hideout area + * @param pmcData Player profile + * @param body Start prodution of single item request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handles event after clicking 'start' on the scav case hideout page + * @param pmcData player profile + * @param body client request object + * @param sessionID session id + * @returns item event router response + */ + scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Adjust scav case time based on fence standing + * + * @param pmcData Player profile + * @param productionTime Time to complete scav case in seconds + * @returns Adjusted scav case time in seconds + */ + protected getScavCaseTime(pmcData: IPmcData, productionTime: number): number; + /** + * Add generated scav case rewards to player profile + * @param pmcData player profile to add rewards to + * @param rewards reward items to add to profile + * @param recipieId recipie id to save into Production dict + */ + protected addScavCaseRewardsToProfile(pmcData: IPmcData, rewards: Product[], recipieId: string): void; + /** + * Start production of continuously created item + * @param pmcData Player profile + * @param request Continious production request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + continuousProductionStart(pmcData: IPmcData, request: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Take completed item out of hideout area and place into player inventory + * @param pmcData Player profile + * @param request Remove production from area request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + takeProduction(pmcData: IPmcData, request: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Take recipie-type production out of hideout area and place into player inventory + * @param sessionID Session id + * @param recipe Completed recipie of item + * @param pmcData Player profile + * @param request Remove production from area request + * @param output Output object to update + * @returns IItemEventRouterResponse + */ + protected handleRecipie(sessionID: string, recipe: IHideoutProduction, pmcData: IPmcData, request: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse; + /** + * Handles giving rewards stored in player profile to player after clicking 'get rewards' + * @param sessionID Session id + * @param pmcData Player profile + * @param request Get rewards from scavcase craft request + * @param output Output object to update + * @returns IItemEventRouterResponse + */ + protected handleScavCase(sessionID: string, pmcData: IPmcData, request: IHideoutTakeProductionRequestData, output: IItemEventRouterResponse): IItemEventRouterResponse; + /** + * Start area production for item + * @param pmcData Player profile + * @param request Start production request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + registerProduction(pmcData: IPmcData, request: IHideoutSingleProductionStartRequestData | IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Get quick time event list for hideout + * // TODO - implement this + * @param sessionId Session id + * @returns IQteData array + */ + getQteList(sessionId: string): IQteData[]; + /** + * Handle HideoutQuickTimeEvent on client/game/profile/items/moving + * Called after completing workout at gym + * @param sessionId Session id + * @param pmcData Profile to adjust + * @param request QTE result object + */ + handleQTEEventOutcome(sessionId: string, pmcData: IPmcData, request: IHandleQTEEventRequestData): IItemEventRouterResponse; + /** + * Record a high score from the shooting range into a player profiles overallcounters + * @param sessionId Session id + * @param pmcData Profile to update + * @param request shooting range score request + * @returns IItemEventRouterResponse + */ + recordShootingRangePoints(sessionId: string, pmcData: IPmcData, request: IRecordShootingRangePoints): IItemEventRouterResponse; + /** + * Handle client/game/profile/items/moving - HideoutImproveArea + * @param sessionId Session id + * @param pmcData profile to improve area in + * @param request improve area request data + */ + improveArea(sessionId: string, pmcData: IPmcData, request: IHideoutImproveAreaRequestData): IItemEventRouterResponse; + /** + * Function called every x seconds as part of onUpdate event + */ + update(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/InraidController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/InraidController.d.ts new file mode 100644 index 0000000..f954eff --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/InraidController.d.ts @@ -0,0 +1,132 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { PlayerScavGenerator } from "../generators/PlayerScavGenerator"; +import { HealthHelper } from "../helpers/HealthHelper"; +import { InRaidHelper } from "../helpers/InRaidHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { QuestHelper } from "../helpers/QuestHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData"; +import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; +import { IAirdropConfig } from "../models/spt/config/IAirdropConfig"; +import { IInRaidConfig } from "../models/spt/config/IInRaidConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { InsuranceService } from "../services/InsuranceService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +/** + * Logic for handling In Raid callbacks + */ +export declare class InraidController { + protected logger: ILogger; + protected saveServer: SaveServer; + protected jsonUtil: JsonUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected itemHelper: ItemHelper; + protected profileHelper: ProfileHelper; + protected playerScavGenerator: PlayerScavGenerator; + protected healthHelper: HealthHelper; + protected traderHelper: TraderHelper; + protected insuranceService: InsuranceService; + protected inRaidHelper: InRaidHelper; + protected applicationContext: ApplicationContext; + protected configServer: ConfigServer; + protected airdropConfig: IAirdropConfig; + protected inraidConfig: IInRaidConfig; + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, applicationContext: ApplicationContext, configServer: ConfigServer); + /** + * Save locationId to active profiles inraid object AND app context + * @param sessionID Session id + * @param info Register player request + */ + addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void; + /** + * Save profile state to disk + * Handles pmc/pscav + * @param offraidData post-raid request data + * @param sessionID Session id + */ + savePostRaidProgress(offraidData: ISaveProgressRequestData, sessionID: string): void; + /** + * Handle updating player profile post-pmc raid + * @param sessionID session id + * @param offraidData post-raid data + */ + protected savePmcProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; + /** + * Make changes to pmc profile after they left raid dead, + * alter bodypart hp, handle insurance, delete inventory items, remove carried quest items + * @param postRaidSaveRequest post-raid save request + * @param pmcData pmc profile + * @param insuranceEnabled is insurance enabled + * @param preRaidGear gear player had before raid + * @param sessionID Session id + * @returns Updated profile object + */ + protected performPostRaidActionsWhenDead(postRaidSaveRequest: ISaveProgressRequestData, pmcData: IPmcData, insuranceEnabled: boolean, preRaidGear: Item[], sessionID: string): IPmcData; + /** + * Adjust player characters bodypart hp if they left raid early + * @param postRaidSaveRequest post raid data + * @param pmcData player profile + */ + protected updatePmcHealthPostRaid(postRaidSaveRequest: ISaveProgressRequestData, pmcData: IPmcData): void; + /** + * Reduce body part hp to % of max + * @param pmcData profile to edit + * @param multipler multipler to apply to max health + */ + protected reducePmcHealthToPercent(pmcData: IPmcData, multipler: number): void; + /** + * Handle updating the profile post-pscav raid + * @param sessionID session id + * @param offraidData post-raid data of raid + */ + protected savePlayerScavProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; + /** + * Is the player dead after a raid - dead is anything other than "survived" / "runner" + * @param statusOnExit exit value from offraidData object + * @returns true if dead + */ + protected isPlayerDead(statusOnExit: string): boolean; + /** + * Mark inventory items as FiR if player survived raid, otherwise remove FiR from them + * @param offraidData Save Progress Request + * @param pmcData player profile + * @param isPlayerScav Was the player a pScav + */ + protected markOrRemoveFoundInRaidItems(offraidData: ISaveProgressRequestData, pmcData: IPmcData, isPlayerScav: boolean): void; + /** + * Update profile after player completes scav raid + * @param scavData Scav profile + * @param sessionID Session id + * @param offraidData Post-raid save request + * @param pmcData Pmc profile + * @param isDead Is player dead + */ + protected handlePostRaidPlayerScavProcess(scavData: IPmcData, sessionID: string, offraidData: ISaveProgressRequestData, pmcData: IPmcData, isDead: boolean): void; + /** + * Update profile with scav karma values based on in-raid actions + * @param pmcData Pmc profile + * @param offraidData Post-raid save request + * @param scavData Scav profile + * @param sessionID Session id + */ + protected handlePostRaidPlayerScavKarmaChanges(pmcData: IPmcData, offraidData: ISaveProgressRequestData, scavData: IPmcData, sessionID: string): void; + /** + * Get the inraid config from configs/inraid.json + * @returns InRaid Config + */ + getInraidConfig(): IInRaidConfig; + /** + * Get airdrop config from configs/airdrop.json + * @returns Airdrop config + */ + getAirdropConfig(): IAirdropConfig; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/InsuranceController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/InsuranceController.d.ts new file mode 100644 index 0000000..af6e68d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/InsuranceController.d.ts @@ -0,0 +1,53 @@ +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 { IGetInsuranceCostResponseData } from "../models/eft/insurance/IGetInsuranceCostResponseData"; +import { IInsureRequestData } from "../models/eft/insurance/IInsureRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { InsuranceService } from "../services/InsuranceService"; +import { PaymentService } from "../services/PaymentService"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class InsuranceController { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected eventOutputHolder: EventOutputHolder; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected profileHelper: ProfileHelper; + protected dialogueHelper: DialogueHelper; + protected paymentService: PaymentService; + protected insuranceService: InsuranceService; + protected configServer: ConfigServer; + protected insuranceConfig: IInsuranceConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, eventOutputHolder: EventOutputHolder, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileHelper: ProfileHelper, dialogueHelper: DialogueHelper, paymentService: PaymentService, insuranceService: InsuranceService, configServer: ConfigServer); + /** + * Process insurance items prior to being given to player in mail + */ + processReturn(): void; + /** + * Add insurance to an item + * @param pmcData Player profile + * @param body Insurance request + * @param sessionID Session id + * @returns IItemEventRouterResponse object to send to client + */ + insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Calculate insurance cost + * @param info request object + * @param sessionID session id + * @returns IGetInsuranceCostResponseData object to send to client + */ + cost(info: IGetInsuranceCostRequestData, sessionID: string): IGetInsuranceCostResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/InventoryController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/InventoryController.d.ts new file mode 100644 index 0000000..129ede3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/InventoryController.d.ts @@ -0,0 +1,151 @@ +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +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 { IOpenRandomLootContainerRequestData } from "../models/eft/inventory/IOpenRandomLootContainerRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { HashUtil } from "../utils/HashUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class InventoryController { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected fenceService: FenceService; + protected presetHelper: PresetHelper; + protected inventoryHelper: InventoryHelper; + protected ragfairOfferService: RagfairOfferService; + protected profileHelper: ProfileHelper; + protected weightedRandomHelper: WeightedRandomHelper; + protected paymentHelper: PaymentHelper; + protected localisationService: LocalisationService; + protected eventOutputHolder: EventOutputHolder; + protected httpResponseUtil: HttpResponseUtil; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, fenceService: FenceService, presetHelper: PresetHelper, inventoryHelper: InventoryHelper, ragfairOfferService: RagfairOfferService, profileHelper: ProfileHelper, weightedRandomHelper: WeightedRandomHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, eventOutputHolder: EventOutputHolder, httpResponseUtil: HttpResponseUtil); + /** + * 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. + * @param pmcData Profile + * @param moveRequest Move request data + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + moveItem(pmcData: IPmcData, moveRequest: 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; + /** + * Add a tag to an inventory item + * @param pmcData profile with item to add tag to + * @param body tag request data + * @param sessionID session id + * @returns client response object + */ + tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse; + bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handles examining an item + * @param pmcData player profile + * @param body request object + * @param sessionID session id + * @returns response + */ + examineItem(pmcData: IPmcData, body: IInventoryExamineRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Get the tplid of an item from the examine request object + * @param body response request + * @returns tplid + */ + protected getExaminedItemTpl(body: IInventoryExamineRequestData): string; + readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Handle ApplyInventoryChanges + * Sorts supplied items. + * @param pmcData Player profile + * @param request sort request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + sortInventory(pmcData: IPmcData, request: 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; + /** + * Handle event fired when a container is unpacked (currently only the halloween pumpkin) + * @param pmcData Profile data + * @param body open loot container request data + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + openRandomLootContainer(pmcData: IPmcData, body: IOpenRandomLootContainerRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/LauncherController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/LauncherController.d.ts new file mode 100644 index 0000000..1af1f56 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/LauncherController.d.ts @@ -0,0 +1,28 @@ +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { IChangeRequestData } from "../models/eft/launcher/IChangeRequestData"; +import { ILoginRequestData } from "../models/eft/launcher/ILoginRequestData"; +import { IRegisterData } from "../models/eft/launcher/IRegisterData"; +import { Info } from "../models/eft/profile/IAkiProfile"; +import { ICoreConfig } from "../models/spt/config/ICoreConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { HashUtil } from "../utils/HashUtil"; +export declare class LauncherController { + protected hashUtil: HashUtil; + protected saveServer: SaveServer; + protected httpServerHelper: HttpServerHelper; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected coreConfig: ICoreConfig; + constructor(hashUtil: HashUtil, saveServer: SaveServer, httpServerHelper: HttpServerHelper, databaseServer: DatabaseServer, configServer: ConfigServer); + connect(): any; + find(sessionIdKey: string): Info; + login(info: ILoginRequestData): string; + register(info: IRegisterData): string; + protected createAccount(info: IRegisterData): string; + changeUsername(info: IChangeRequestData): string; + changePassword(info: IChangeRequestData): string; + wipe(info: IRegisterData): string; + getCompatibleTarkovVersion(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/LocationController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/LocationController.d.ts new file mode 100644 index 0000000..b6feba8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/LocationController.d.ts @@ -0,0 +1,35 @@ +import { LocationGenerator } from "../generators/LocationGenerator"; +import { LootGenerator } from "../generators/LootGenerator"; +import { ILocationBase } from "../models/eft/common/ILocationBase"; +import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase"; +import { IAirdropConfig } from "../models/spt/config/IAirdropConfig"; +import { LootItem } from "../models/spt/services/LootItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class LocationController { + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected logger: ILogger; + protected locationGenerator: LocationGenerator; + protected localisationService: LocalisationService; + protected lootGenerator: LootGenerator; + protected databaseServer: DatabaseServer; + protected timeUtil: TimeUtil; + protected configServer: ConfigServer; + protected airdropConfig: IAirdropConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer); + get(location: string): ILocationBase; + generate(name: string): ILocationBase; + generateAll(): ILocationsGenerateAllResponse; + /** + * Get loot for an airdop container + * Generates it randomly based on config/airdrop.json values + * @returns Array of LootItem + */ + getAirdropLoot(): LootItem[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/MatchController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/MatchController.d.ts new file mode 100644 index 0000000..cb0c755 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/MatchController.d.ts @@ -0,0 +1,57 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData"; +import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData"; +import { IGetGroupStatusRequestData } from "../models/eft/match/IGetGroupStatusRequestData"; +import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestData"; +import { IGetRaidConfigurationRequestData } from "../models/eft/match/IGetRaidConfigurationRequestData"; +import { IJoinMatchRequestData } from "../models/eft/match/IJoinMatchRequestData"; +import { IJoinMatchResult } from "../models/eft/match/IJoinMatchResult"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { IInRaidConfig } from "../models/spt/config/IInRaidConfig"; +import { IMatchConfig } from "../models/spt/config/IMatchConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { SaveServer } from "../servers/SaveServer"; +import { BotGenerationCacheService } from "../services/BotGenerationCacheService"; +import { BotLootCacheService } from "../services/BotLootCacheService"; +import { MatchLocationService } from "../services/MatchLocationService"; +import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; +export declare class MatchController { + protected logger: ILogger; + protected saveServer: SaveServer; + protected profileHelper: ProfileHelper; + protected matchLocationService: MatchLocationService; + protected traderHelper: TraderHelper; + protected botLootCacheService: BotLootCacheService; + protected configServer: ConfigServer; + protected profileSnapshotService: ProfileSnapshotService; + protected botGenerationCacheService: BotGenerationCacheService; + protected applicationContext: ApplicationContext; + protected matchConfig: IMatchConfig; + protected inraidConfig: IInRaidConfig; + protected botConfig: IBotConfig; + constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, botGenerationCacheService: BotGenerationCacheService, applicationContext: ApplicationContext); + getEnabled(): boolean; + getProfile(info: IGetProfileRequestData): IPmcData[]; + createGroup(sessionID: string, info: ICreateGroupRequestData): any; + deleteGroup(info: any): void; + joinMatch(info: IJoinMatchRequestData, sessionID: string): IJoinMatchResult[]; + protected getMatch(location: string): any; + getGroupStatus(info: IGetGroupStatusRequestData): any; + /** + * Handle /client/raid/configuration + * @param request + * @param sessionID + */ + startOfflineRaid(request: IGetRaidConfigurationRequestData, sessionID: string): void; + /** + * Convert a difficulty value from pre-raid screen to a bot difficulty + * @param botDifficulty dropdown difficulty value + * @returns bot difficulty + */ + protected convertDifficultyDropdownIntoBotDifficulty(botDifficulty: string): string; + endOfflineRaid(info: IEndOfflineRaidRequestData, sessionID: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/NoteController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/NoteController.d.ts new file mode 100644 index 0000000..9e2e250 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/NoteController.d.ts @@ -0,0 +1,11 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { INoteActionData } from "../models/eft/notes/INoteActionData"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +export declare class NoteController { + protected eventOutputHolder: EventOutputHolder; + constructor(eventOutputHolder: EventOutputHolder); + addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/NotifierController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/NotifierController.d.ts new file mode 100644 index 0000000..31d7bfe --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/NotifierController.d.ts @@ -0,0 +1,22 @@ +import { NotifierHelper } from "../helpers/NotifierHelper"; +import { NotificationService } from "../services/NotificationService"; +import { INotifierChannel } from "../models/eft/notifier/INotifier"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +export declare class NotifierController { + protected notifierHelper: NotifierHelper; + protected httpServerHelper: HttpServerHelper; + protected notificationService: NotificationService; + protected pollInterval: number; + protected timeout: number; + constructor(notifierHelper: NotifierHelper, httpServerHelper: HttpServerHelper, notificationService: NotificationService); + /** + * Resolve an array of session notifications. + * + * If no notifications are currently queued then intermittently check for new notifications until either + * one or more appear or when a timeout expires. + * If no notifications are available after the timeout, use a default message. + */ + notifyAsync(sessionID: string): Promise; + getServer(sessionID: string): string; + getChannel(sessionID: string): INotifierChannel; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/PresetBuildController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/PresetBuildController.d.ts new file mode 100644 index 0000000..65ae0c4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/PresetBuildController.d.ts @@ -0,0 +1,18 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IPresetBuildActionRequestData } from "../models/eft/presetBuild/IPresetBuildActionRequestData"; +import { WeaponBuild } from "../models/eft/profile/IAkiProfile"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { SaveServer } from "../servers/SaveServer"; +import { HashUtil } from "../utils/HashUtil"; +export declare class PresetBuildController { + protected hashUtil: HashUtil; + protected eventOutputHolder: EventOutputHolder; + protected itemHelper: ItemHelper; + protected saveServer: SaveServer; + constructor(hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, itemHelper: ItemHelper, saveServer: SaveServer); + getUserBuilds(sessionID: string): WeaponBuild[]; + saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; + removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/PresetController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/PresetController.d.ts new file mode 100644 index 0000000..ca1af1a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/PresetController.d.ts @@ -0,0 +1,8 @@ +import { PresetHelper } from "../helpers/PresetHelper"; +import { DatabaseServer } from "../servers/DatabaseServer"; +export declare class PresetController { + protected presetHelper: PresetHelper; + protected databaseServer: DatabaseServer; + constructor(presetHelper: PresetHelper, databaseServer: DatabaseServer); + initialize(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/ProfileController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/ProfileController.d.ts new file mode 100644 index 0000000..e76785a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/ProfileController.d.ts @@ -0,0 +1,46 @@ +import { PlayerScavGenerator } from "../generators/PlayerScavGenerator"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { QuestHelper } from "../helpers/QuestHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IMiniProfile } from "../models/eft/launcher/IMiniProfile"; +import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData"; +import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData"; +import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData"; +import { ISearchFriendRequestData } from "../models/eft/profile/ISearchFriendRequestData"; +import { ISearchFriendResponse } from "../models/eft/profile/ISearchFriendResponse"; +import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { ProfileFixerService } from "../services/ProfileFixerService"; +import { HashUtil } from "../utils/HashUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class ProfileController { + protected hashUtil: HashUtil; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected profileFixerService: ProfileFixerService; + protected playerScavGenerator: PlayerScavGenerator; + protected traderHelper: TraderHelper; + protected questHelper: QuestHelper; + protected profileHelper: ProfileHelper; + constructor(hashUtil: HashUtil, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileFixerService: ProfileFixerService, playerScavGenerator: PlayerScavGenerator, traderHelper: TraderHelper, questHelper: QuestHelper, profileHelper: ProfileHelper); + getMiniProfiles(): IMiniProfile[]; + getMiniProfile(sessionID: string): any; + getCompleteProfile(sessionID: string): IPmcData[]; + createProfile(info: IProfileCreateRequestData, sessionID: string): void; + /** + * Generate a player scav object + * pmc profile MUST exist first before pscav can be generated + * @param sessionID + * @returns IPmcData object + */ + 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[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/QuestController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/QuestController.d.ts new file mode 100644 index 0000000..fe1754d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/QuestController.d.ts @@ -0,0 +1,136 @@ +import { DialogueHelper } from "../helpers/DialogueHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { QuestConditionHelper } from "../helpers/QuestConditionHelper"; +import { QuestHelper } from "../helpers/QuestHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IQuest, Reward } from "../models/eft/common/tables/IQuest"; +import { IRepeatableQuest } from "../models/eft/common/tables/IRepeatableQuests"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData"; +import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData"; +import { IHandoverQuestRequestData } from "../models/eft/quests/IHandoverQuestRequestData"; +import { IQuestConfig } from "../models/spt/config/IQuestConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocaleService } from "../services/LocaleService"; +import { LocalisationService } from "../services/LocalisationService"; +import { PlayerService } from "../services/PlayerService"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class QuestController { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected httpResponseUtil: HttpResponseUtil; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected dialogueHelper: DialogueHelper; + protected profileHelper: ProfileHelper; + protected questHelper: QuestHelper; + protected questConditionHelper: QuestConditionHelper; + protected playerService: PlayerService; + protected localeService: LocaleService; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected questConfig: IQuestConfig; + constructor(logger: ILogger, timeUtil: TimeUtil, httpResponseUtil: HttpResponseUtil, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, itemHelper: ItemHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, questHelper: QuestHelper, questConditionHelper: QuestConditionHelper, playerService: PlayerService, localeService: LocaleService, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Get all quests visible to player + * Exclude quests with incomplete preconditions (level/loyalty) + * @param sessionID session id + * @returns array of IQuest + */ + getClientQuests(sessionID: string): IQuest[]; + /** + * Is the quest for the opposite side the player is on + * @param side player side (usec/bear) + * @param questId questId to check + */ + protected questIsForOtherSide(side: string, questId: string): boolean; + /** + * Handle the client accepting a quest and starting it + * Send starting rewards if any to player and + * Send start notification if any to player + * @param pmcData Profile to update + * @param acceptedQuest Quest accepted + * @param sessionID Session id + * @returns client response + */ + acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Get a quests startedMessageText key from db, if no startedMessageText key found, use description key instead + * @param startedMessageTextId startedMessageText property from IQuest + * @param questDescriptionId description property from IQuest + * @returns message id + */ + protected getMessageIdForQuestStart(startedMessageTextId: string, questDescriptionId: string): string; + /** + * Handle the client accepting a repeatable quest and starting it + * Send starting rewards if any to player and + * Send start notification if any to player + * @param pmcData Profile to update with new quest + * @param acceptedQuest Quest being accepted + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + acceptRepeatableQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Look for an accepted quest inside player profile, return matching + * @param pmcData Profile to search through + * @param acceptedQuest Quest to search for + * @returns IRepeatableQuest + */ + protected getRepeatableQuestFromProfile(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData): IRepeatableQuest; + /** + * Update completed quest in profile + * Add newly unlocked quests to profile + * Also recalculate thier level due to exp rewards + * @param pmcData Player profile + * @param body Completed quest request + * @param sessionID Session id + * @returns ItemEvent client response + */ + completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Send a popup to player on successful completion of a quest + * @param sessionID session id + * @param pmcData Player profile + * @param completedQuestId Completed quest id + * @param questRewards Rewards given to player + */ + protected sendSuccessDialogMessageOnQuestComplete(sessionID: string, pmcData: IPmcData, completedQuestId: string, questRewards: Reward[]): void; + /** + * Look for newly available quests after completing a quest with a requirement to wait x minutes (time-locked) before being available and add data to profile + * @param pmcData Player profile to update + * @param quests Quests to look for wait conditions in + * @param completedQuestId Quest just completed + */ + protected addTimeLockedQuestsToProfile(pmcData: IPmcData, quests: IQuest[], completedQuestId: string): void; + /** + * Returns a list of quests that should be failed when a quest is completed + * @param completedQuestId quest completed id + * @returns array of quests + */ + protected getQuestsFailedByCompletingQuest(completedQuestId: string): IQuest[]; + /** + * Fail the quests provided + * Update quest in profile, otherwise add fresh quest object with failed status + * @param sessionID session id + * @param pmcData player profile + * @param questsToFail quests to fail + */ + protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[]): void; + handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Increment a backend counter stored value by an amount, + * Create counter if it does not exist + * @param pmcData Profile to find backend counter in + * @param conditionId backend counter id to update + * @param questId quest id counter is associated with + * @param counterValue value to increment the backend counter with + */ + protected updateProfileBackendCounterValue(pmcData: IPmcData, conditionId: string, questId: string, counterValue: number): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/RagfairController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/RagfairController.d.ts new file mode 100644 index 0000000..fffcaa3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/RagfairController.d.ts @@ -0,0 +1,126 @@ +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 { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { IAddOfferRequestData, Requirement } from "../models/eft/ragfair/IAddOfferRequestData"; +import { IExtendOfferRequestData } from "../models/eft/ragfair/IExtendOfferRequestData"; +import { IGetItemPriceResult } from "../models/eft/ragfair/IGetItemPriceResult"; +import { IGetMarketPriceRequestData } from "../models/eft/ragfair/IGetMarketPriceRequestData"; +import { IGetOffersResult } from "../models/eft/ragfair/IGetOffersResult"; +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RagfairServer } from "../servers/RagfairServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocalisationService } from "../services/LocalisationService"; +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"; +/** + * Handle RagfairCallback events + */ +export declare class RagfairController { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected httpResponse: HttpResponseUtil; + protected eventOutputHolder: EventOutputHolder; + protected ragfairServer: RagfairServer; + protected ragfairPriceService: RagfairPriceService; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected saveServer: SaveServer; + protected ragfairSellHelper: RagfairSellHelper; + protected ragfairTaxHelper: RagfairTaxHelper; + protected ragfairSortHelper: RagfairSortHelper; + protected ragfairOfferHelper: RagfairOfferHelper; + protected profileHelper: ProfileHelper; + protected paymentService: PaymentService; + protected handbookHelper: HandbookHelper; + protected paymentHelper: PaymentHelper; + protected inventoryHelper: InventoryHelper; + protected traderHelper: TraderHelper; + protected ragfairHelper: RagfairHelper; + protected ragfairOfferService: RagfairOfferService; + protected ragfairRequiredItemsService: RagfairRequiredItemsService; + protected ragfairOfferGenerator: RagfairOfferGenerator; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, eventOutputHolder: EventOutputHolder, 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, traderHelper: TraderHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, ragfairOfferGenerator: RagfairOfferGenerator, localisationService: LocalisationService, configServer: ConfigServer); + getOffers(sessionID: string, searchRequest: ISearchRequestData): IGetOffersResult; + /** + * Get offers for the client based on type of search being performed + * @param searchRequest Client search request data + * @param itemsToAdd + * @param traderAssorts Trader assorts + * @param pmcProfile Player profile + * @returns array of offers + */ + protected getOffersForSearchType(searchRequest: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; + /** + * Get categories for the type of search being performed, linked/required/all + * @param searchRequest Client search request data + * @param offers ragfair offers to get categories for + * @returns record with tpls + counts + */ + protected getSpecificCategories(searchRequest: ISearchRequestData, offers: IRagfairOffer[]): Record; + /** + * Add Required offers to offers result + * @param searchRequest Client search request data + * @param assorts + * @param pmcProfile Player profile + * @param result Result object being sent back to client + */ + protected addRequiredOffersToResult(searchRequest: ISearchRequestData, assorts: Record, pmcProfile: IPmcData, result: IGetOffersResult): void; + /** + * Add index to all offers passed in (0-indexed) + * @param offers Offers to add index value to + */ + protected addIndexValueToOffers(offers: IRagfairOffer[]): void; + /** + * Update a trader flea offer with buy restrictions stored in the traders assort + * @param offer flea offer to update + * @param profile full profile of player + */ + protected setTraderOfferPurchaseLimits(offer: IRagfairOffer, profile: IAkiProfile): void; + /** + * Adjust ragfair offer stack count to match same value as traders assort stack count + * @param offer Flea offer to adjust + */ + protected setTraderOfferStackSize(offer: IRagfairOffer): void; + protected isLinkedSearch(info: ISearchRequestData): boolean; + protected isRequiredSearch(info: ISearchRequestData): boolean; + update(): void; + /** + * Called when creating an offer on flea, fills values in top right corner + * @param getPriceRequest + * @returns min/avg/max values for an item based on flea offers available + */ + getItemMinAvgMaxFleaPriceValues(getPriceRequest: IGetMarketPriceRequestData): IGetItemPriceResult; + addPlayerOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse; + createPlayerOffer(profile: IAkiProfile, requirements: Requirement[], items: Item[], sellInOnePiece: boolean, amountToSend: number): IRagfairOffer; + getAllFleaPrices(): Record; + getStaticPrices(): Record; + removeOffer(offerId: string, sessionID: string): IItemEventRouterResponse; + extendOffer(info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/RepairController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/RepairController.d.ts new file mode 100644 index 0000000..fd8ff72 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/RepairController.d.ts @@ -0,0 +1,41 @@ +import { QuestHelper } from "../helpers/QuestHelper"; +import { RepairHelper } from "../helpers/RepairHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRepairActionDataRequest } from "../models/eft/repair/IRepairActionDataRequest"; +import { ITraderRepairActionDataRequest } from "../models/eft/repair/ITraderRepairActionDataRequest"; +import { IRepairConfig } from "../models/spt/config/IRepairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { PaymentService } from "../services/PaymentService"; +import { RepairService } from "../services/RepairService"; +export declare class RepairController { + protected logger: ILogger; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected traderHelper: TraderHelper; + protected paymentService: PaymentService; + protected repairHelper: RepairHelper; + protected repairService: RepairService; + protected repairConfig: IRepairConfig; + constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, repairService: RepairService); + /** + * Repair with trader + * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile + * @returns item event router action + */ + traderRepair(sessionID: string, body: ITraderRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; + /** + * Repair with repair kit + * @param sessionID session id + * @param body endpoint request data + * @param pmcData player profile + * @returns item event router action + */ + repairWithKit(sessionID: string, body: IRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/RepeatableQuestController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/RepeatableQuestController.d.ts new file mode 100644 index 0000000..dd8dc40 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/RepeatableQuestController.d.ts @@ -0,0 +1,256 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +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 } from "../models/eft/common/IPmcData"; +import { TraderInfo } from "../models/eft/common/tables/IBotBase"; +import { ICompletion, ICompletionAvailableFor, IElimination, IEliminationCondition, IExploration, IExplorationCondition, IPmcDataRepeatableQuest, IRepeatableQuest, IReward, IRewards } from "../models/eft/common/tables/IRepeatableQuests"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest"; +import { ELocationName } from "../models/enums/ELocationName"; +import { IQuestConfig, IRepeatableQuestConfig } from "../models/spt/config/IQuestConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { LocalisationService } from "../services/LocalisationService"; +import { PaymentService } from "../services/PaymentService"; +import { ProfileFixerService } from "../services/ProfileFixerService"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +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>; +} +export interface IEliminationPool { + targets: IEliminationTargetPool; +} +export interface IEliminationTargetPool { + Savage?: ITargetLocation; + AnyPmc?: ITargetLocation; + bossBully?: ITargetLocation; + bossGluhar?: ITargetLocation; + bossKilla?: ITargetLocation; + bossSanitar?: ITargetLocation; + bossTagilla?: ITargetLocation; + bossKojaniy?: ITargetLocation; +} +export interface ITargetLocation { + locations: string[]; +} +export declare class RepeatableQuestController { + protected timeUtil: TimeUtil; + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected httpResponse: HttpResponseUtil; + protected mathUtil: MathUtil; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected presetHelper: PresetHelper; + protected profileHelper: ProfileHelper; + protected profileFixerService: ProfileFixerService; + protected handbookHelper: HandbookHelper; + protected ragfairServerHelper: RagfairServerHelper; + protected eventOutputHolder: EventOutputHolder; + protected localisationService: LocalisationService; + protected paymentService: PaymentService; + protected objectId: ObjectId; + protected itemFilterService: ItemFilterService; + protected configServer: ConfigServer; + protected questConfig: IQuestConfig; + constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, httpResponse: HttpResponseUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, handbookHelper: HandbookHelper, ragfairServerHelper: RagfairServerHelper, eventOutputHolder: EventOutputHolder, localisationService: LocalisationService, paymentService: PaymentService, objectId: ObjectId, itemFilterService: ItemFilterService, configServer: ConfigServer); + /** + * 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[]; + /** + * Get repeatable quest data from profile from name (daily/weekly), creates base repeatable quest object if none exists + * @param repeatableConfig daily/weekly config + * @param pmcData Profile to search + * @returns IPmcDataRepeatableQuest + */ + protected getRepeatableQuestSubTypeFromProfile(repeatableConfig: IRepeatableQuestConfig, pmcData: IPmcData): 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, 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: number): any; + /** + * Generates the base object of quest type format given as templates in assets/database/templates/repeatableQuests.json + * The templates include Elimination, Completion and Extraction quest types + * + * @param {string} type quest type: "Elimination", "Completion" or "Extraction" + * @param {string} traderId trader from which the quest will be provided + * @param {string} side scav daily or pmc daily/weekly quest + * @returns {object} a object which contains the base elements for repeatable quests of the requests type + * (needs to be filled with reward and conditions by called to make a valid quest) + */ + generateRepeatableTemplate(type: string, traderId: string, side: string): IRepeatableQuest; + /** + * 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; + /** + * Cpnvert a location into an quest code can read (e.g. factory4_day into 55f2d3fd4bdc2d5f408b4567) + * @param locationKey e.g factory4_day + * @returns guid + */ + protected getQuestLocationByMapId(locationKey: string): string; + /** + * 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(configArrayInput: ProbabilityObject[]): ProbabilityObjectArray; + changeRepeatableQuest(pmcData: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse; + /** + * Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable) + * @param repeatableQuestConfig config file + * @returns a list of rewardable items [[_tpl, itemTemplate],...] + */ + protected getRewardableItems(repeatableQuestConfig: IRepeatableQuestConfig): [string, ITemplateItem][]; + /** + * Checks if an id is a valid item. Valid meaning that it's an item that may be a reward + * or content of bot loot. Items that are tested as valid may be in a player backpack or stash. + * @param {string} tpl template id of item to check + * @returns boolean: true if item is valid reward + */ + isValidRewardItem(tpl: string, repeatableQuestConfig: IRepeatableQuestConfig): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/TradeController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/TradeController.d.ts new file mode 100644 index 0000000..dc7de19 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/TradeController.d.ts @@ -0,0 +1,31 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { TradeHelper } from "../helpers/TradeHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Upd } from "../models/eft/common/tables/IItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTradeRequestData"; +import { IProcessRagfairTradeRequestData } from "../models/eft/trade/IProcessRagfairTradeRequestData"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RagfairServer } from "../servers/RagfairServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +declare class TradeController { + protected logger: ILogger; + protected eventOutputHolder: EventOutputHolder; + protected tradeHelper: TradeHelper; + protected itemHelper: ItemHelper; + protected profileHelper: ProfileHelper; + protected ragfairServer: RagfairServer; + protected httpResponse: HttpResponseUtil; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, tradeHelper: TradeHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, ragfairServer: RagfairServer, httpResponse: HttpResponseUtil, localisationService: LocalisationService, configServer: ConfigServer); + confirmTrading(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string, foundInRaid?: boolean, upd?: Upd): IItemEventRouterResponse; + confirmRagfairTrading(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse; +} +export { TradeController }; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/TraderController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/TraderController.d.ts new file mode 100644 index 0000000..b67aec9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/TraderController.d.ts @@ -0,0 +1,48 @@ +import { FenceBaseAssortGenerator } from "../generators/FenceBaseAssortGenerator"; +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 { FenceService } from "../services/FenceService"; +import { TraderAssortService } from "../services/TraderAssortService"; +import { TraderPurchasePersisterService } from "../services/TraderPurchasePersisterService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class TraderController { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected traderAssortHelper: TraderAssortHelper; + protected profileHelper: ProfileHelper; + protected traderHelper: TraderHelper; + protected timeUtil: TimeUtil; + protected traderAssortService: TraderAssortService; + protected traderPurchasePersisterService: TraderPurchasePersisterService; + protected fenceService: FenceService; + protected fenceBaseAssortGenerator: FenceBaseAssortGenerator; + protected jsonUtil: JsonUtil; + constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, traderPurchasePersisterService: TraderPurchasePersisterService, fenceService: FenceService, fenceBaseAssortGenerator: FenceBaseAssortGenerator, jsonUtil: JsonUtil); + /** + * Runs when onLoad event is fired + * Iterate over traders, ensure an unmolested copy of their assorts is stored in traderAssortService + * Store timestamp of next assort refresh in nextResupply property of traders .base object + */ + load(): void; + /** + * Runs when onUpdate is fired + * If current time is > nextResupply(expire) time of trader, refresh traders assorts and + * Fence is handled slightly differently + * @returns has run + */ + update(): boolean; + /** + * Return an array of all traders + * @param sessionID Session id + * @returns array if ITraderBase objects + */ + getAllTraders(sessionID: string): ITraderBase[]; + getTrader(sessionID: string, traderID: string): ITraderBase; + getAssort(sessionId: string, traderId: string): ITraderAssort; + getPurchasesData(sessionID: string, traderID: string): Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/WeatherController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/WeatherController.d.ts new file mode 100644 index 0000000..631a90c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/WeatherController.d.ts @@ -0,0 +1,18 @@ +import { WeatherGenerator } from "../generators/WeatherGenerator"; +import { IWeatherData } from "../models/eft/weather/IWeatherData"; +import { IWeatherConfig } from "../models/spt/config/IWeatherConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class WeatherController { + protected weatherGenerator: WeatherGenerator; + protected logger: ILogger; + protected configServer: ConfigServer; + protected weatherConfig: IWeatherConfig; + constructor(weatherGenerator: WeatherGenerator, logger: ILogger, configServer: ConfigServer); + generate(): IWeatherData; + /** + * Get the current in-raid time (MUST HAVE PLAYER LOGGED INTO CLIENT TO WORK) + * @returns Date object + */ + getCurrentInRaidTime(): Date; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/controllers/WishlistController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/controllers/WishlistController.d.ts new file mode 100644 index 0000000..60c4a15 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/controllers/WishlistController.d.ts @@ -0,0 +1,10 @@ +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData"; +export declare class WishlistController { + protected eventOutputHolder: EventOutputHolder; + constructor(eventOutputHolder: EventOutputHolder); + addToWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; + removeFromWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/di/Container.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/di/Container.d.ts new file mode 100644 index 0000000..e339a3b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/di/Container.d.ts @@ -0,0 +1,18 @@ +import { DependencyContainer } from "tsyringe"; +/** + * Handle the registration of classes to be used by the Dependency Injection code + */ +export declare class Container { + static registerPostLoadTypes(container: DependencyContainer, childContainer: DependencyContainer): void; + 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; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/di/OnLoad.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/di/OnLoad.d.ts new file mode 100644 index 0000000..a5cdea3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/di/OnLoad.d.ts @@ -0,0 +1,4 @@ +export interface OnLoad { + onLoad(): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/di/OnUpdate.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/di/OnUpdate.d.ts new file mode 100644 index 0000000..e1ce375 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/di/OnUpdate.d.ts @@ -0,0 +1,4 @@ +export interface OnUpdate { + onUpdate(timeSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/di/Router.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/di/Router.d.ts new file mode 100644 index 0000000..2fb98e0 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/di/Router.d.ts @@ -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); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/di/Serializer.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/di/Serializer.d.ts new file mode 100644 index 0000000..2617007 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/di/Serializer.d.ts @@ -0,0 +1,6 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +export declare class Serializer { + serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void; + canHandle(something: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/BotEquipmentModGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/BotEquipmentModGenerator.d.ts new file mode 100644 index 0000000..6703a36 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/BotEquipmentModGenerator.d.ts @@ -0,0 +1,200 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProbabilityHelper } from "../helpers/ProbabilityHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { Mods, ModsChances } from "../models/eft/common/tables/IBotType"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem, Slot } from "../models/eft/common/tables/ITemplateItem"; +import { EquipmentFilterDetails, IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { BotEquipmentModPoolService } from "../services/BotEquipmentModPoolService"; +import { BotModLimits, BotWeaponModLimitService } from "../services/BotWeaponModLimitService"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotEquipmentModGenerator { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected probabilityHelper: ProbabilityHelper; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected botEquipmentFilterService: BotEquipmentFilterService; + protected itemFilterService: ItemFilterService; + protected profileHelper: ProfileHelper; + protected botWeaponModLimitService: BotWeaponModLimitService; + protected botHelper: BotHelper; + protected botGeneratorHelper: BotGeneratorHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected localisationService: LocalisationService; + protected botEquipmentModPoolService: BotEquipmentModPoolService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, itemHelper: ItemHelper, botEquipmentFilterService: BotEquipmentFilterService, itemFilterService: ItemFilterService, profileHelper: ProfileHelper, botWeaponModLimitService: BotWeaponModLimitService, botHelper: BotHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, localisationService: LocalisationService, botEquipmentModPoolService: BotEquipmentModPoolService, configServer: ConfigServer); + /** + * Check mods are compatible and add to array + * @param equipment Equipment item to add mods to + * @param modPool Mod list to choose frm + * @param parentId parentid of item to add mod to + * @param parentTemplate template objet of item to add mods to + * @param modSpawnChances dictionary of mod items and their chance to spawn for this bot type + * @param botRole the bot role being generated for + * @param forceSpawn should this mod be forced to spawn + * @returns Item + compatible mods as an array + */ + generateModsForEquipment(equipment: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances, botRole: string, forceSpawn?: boolean): Item[]; + /** + * Add mods to a weapon using the provided mod pool + * @param sessionId session id + * @param weapon Weapon to add mods to + * @param modPool Pool of compatible mods to attach to weapon + * @param weaponParentId parentId of weapon + * @param parentTemplate Weapon which mods will be generated on + * @param modSpawnChances Mod spawn chances + * @param ammoTpl Ammo tpl to use when generating magazines/cartridges + * @param botRole Role of bot weapon is generated for + * @param botLevel lvel of the bot weapon is being generated for + * @param modLimits limits placed on certian mod types per gun + * @param botEquipmentRole role of bot when accessing bot.json equipment config settings + * @returns Weapon + mods array + */ + generateModsForWeapon(sessionId: string, weapon: Item[], modPool: Mods, weaponParentId: string, parentTemplate: ITemplateItem, modSpawnChances: ModsChances, ammoTpl: string, botRole: string, botLevel: number, modLimits: BotModLimits, botEquipmentRole: string): Item[]; + /** + * Is this modslot a front or rear sight + * @param modSlot Slot to check + * @returns true if it's a front/rear sight + */ + protected modIsFrontOrRearSight(modSlot: string): boolean; + /** + * Does the provided mod details show the mod can hold a scope + * @param modSlot e.g. mod_scope, mod_mount + * @param modsParentId Parent id of mod item + * @returns true if it can hold a scope + */ + protected modSlotCanHoldScope(modSlot: string, modsParentId: string): boolean; + /** + * Set all scope mod chances to 100% + * @param modSpawnChances Chances objet to update + */ + protected setScopeSpawnChancesToFull(modSpawnChances: ModsChances): void; + protected sortModKeys(unsortedKeys: string[]): string[]; + /** + * Get a Slot property for an item (chamber/cartridge/slot) + * @param modSlot e.g patron_in_weapon + * @param parentTemplate item template + * @returns Slot item + */ + protected getModItemSlot(modSlot: string, parentTemplate: ITemplateItem): Slot; + /** + * randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot + * never return true for an item that has 0% spawn chance + * @param itemSlot slot the item sits in + * @param modSlot slot the mod sits in + * @param modSpawnChances Chances for various mod spawns + * @returns boolean true if it should spawn + */ + protected shouldModBeSpawned(itemSlot: Slot, modSlot: string, modSpawnChances: ModsChances): boolean; + /** + * + * @param modSlot Slot mod will fit into + * @param isRandomisableSlot Will generate a randomised mod pool if true + * @param modsParent Parent slot the item will be a part of + * @param botEquipBlacklist Blacklist to prevent mods from being picked + * @param itemModPool Pool of items to pick from + * @param weapon array with only weapon tpl in it, ready for mods to be added + * @param ammoTpl ammo tpl to use if slot requires a cartridge to be added (e.g. mod_magazine) + * @param parentTemplate Parent item the mod will go into + * @returns ITemplateItem + */ + protected chooseModToPutIntoSlot(modSlot: string, isRandomisableSlot: boolean, botWeaponSightWhitelist: Record, botEquipBlacklist: EquipmentFilterDetails, itemModPool: Record, weapon: Item[], ammoTpl: string, parentTemplate: ITemplateItem): [boolean, ITemplateItem]; + /** + * Create a mod item with parameters as properties + * @param modId _id + * @param modTpl _tpl + * @param parentId parentId + * @param modSlot slotId + * @param modTemplate Used to add additional properites in the upd object + * @returns Item object + */ + protected createModItem(modId: string, modTpl: string, parentId: string, modSlot: string, modTemplate: ITemplateItem, botRole: string): Item; + /** + * Get a list of containers that hold ammo + * e.g. mod_magazine / patron_in_weapon_000 + * @returns string array + */ + protected getAmmoContainers(): string[]; + /** + * Get a random mod from an items compatible mods Filter array + * @param modTpl ???? default value to return if nothing found + * @param parentSlot item mod will go into, used to get combatible items + * @param modSlot Slot to get mod to fill + * @param items items to ensure picked mod is compatible with + * @returns item tpl + */ + protected getModTplFromItemDb(modTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string; + /** + * Log errors if mod is not compatible with slot + * @param modToAdd template of mod to check + * @param itemSlot slot the item will be placed in + * @param modSlot slot the mod will fill + * @param parentTemplate template of the mods parent item + * @returns true if valid + */ + protected isModValidForSlot(modToAdd: [boolean, ITemplateItem], itemSlot: Slot, modSlot: string, parentTemplate: ITemplateItem): boolean; + /** + * Find mod tpls of a provided type and add to modPool + * @param desiredSlotName slot to look up and add we are adding tpls for (e.g mod_scope) + * @param modTemplate db object for modItem we get compatible mods from + * @param modPool Pool of mods we are adding to + */ + protected addCompatibleModsForProvidedMod(desiredSlotName: string, modTemplate: ITemplateItem, modPool: Mods, botEquipBlacklist: EquipmentFilterDetails): void; + /** + * Get the possible items that fit a slot + * @param parentItemId item tpl to get compatible items for + * @param modSlot Slot item should fit in + * @param botEquipBlacklist equipment that should not be picked + * @returns array of compatible items for that slot + */ + protected getDynamicModPool(parentItemId: string, modSlot: string, botEquipBlacklist: EquipmentFilterDetails): string[]; + /** + * Take a list of tpls and filter out blacklisted values using itemFilterService + botEquipmentBlacklist + * @param allowedMods base mods to filter + * @param botEquipBlacklist equipment blacklist + * @param modSlot slot mods belong to + * @returns Filtered array of mod tpls + */ + protected filterWeaponModsByBlacklist(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string): string[]; + /** + * 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 items The items where the CylinderMagazine's camora are appended to + * @param modPool modPool which should include available cartrigdes + * @param parentId The CylinderMagazine's UID + * @param parentTemplate The CylinderMagazine's template + */ + protected fillCamora(items: Item[], modPool: Mods, parentId: string, parentTemplate: ITemplateItem): void; + /** + * Take a record of camoras and merge the compatable shells into one array + * @param camorasWithShells camoras we want to merge into one array + * @returns string array of shells fro luitple camora sources + */ + protected mergeCamoraPoolsTogether(camorasWithShells: Record): string[]; + /** + * Filter out non-whitelisted weapon scopes + * @param weapon Weapon scopes will be added to + * @param scopes Full scope pool + * @param botWeaponSightWhitelist whitelist of scope types by weapon base type + * @returns array of scope tpls that have been filtered + */ + protected filterSightsByWeaponType(weapon: Item, scopes: string[], botWeaponSightWhitelist: Record): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/BotGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/BotGenerator.d.ts new file mode 100644 index 0000000..9581259 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/BotGenerator.d.ts @@ -0,0 +1,106 @@ +import { BotDifficultyHelper } from "../helpers/BotDifficultyHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { Health as PmcHealth, IBotBase, Info, Skills } from "../models/eft/common/tables/IBotBase"; +import { Health, IBotType } from "../models/eft/common/tables/IBotType"; +import { BotGenerationDetails } from "../models/spt/bots/BotGenerationDetails"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotInventoryGenerator } from "./BotInventoryGenerator"; +import { BotLevelGenerator } from "./BotLevelGenerator"; +export declare class BotGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected profileHelper: ProfileHelper; + protected databaseServer: DatabaseServer; + protected botInventoryGenerator: BotInventoryGenerator; + protected botLevelGenerator: BotLevelGenerator; + protected botEquipmentFilterService: BotEquipmentFilterService; + protected weightedRandomHelper: WeightedRandomHelper; + protected botHelper: BotHelper; + protected botDifficultyHelper: BotDifficultyHelper; + protected seasonalEventService: SeasonalEventService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, configServer: ConfigServer); + /** + * Generate a player scav bot object + * @param role e.g. assault / pmcbot + * @param difficulty easy/normal/hard/impossible + * @param botTemplate base bot template to use (e.g. assault/pmcbot) + * @returns + */ + generatePlayerScav(sessionId: string, role: string, difficulty: string, botTemplate: IBotType): IBotBase; + /** + * Create x number of bots of the type/side/difficulty defined in botGenerationDetails + * @param sessionId Session id + * @param botGenerationDetails details on how to generate bots + * @returns array of bots + */ + prepareAndGenerateBots(sessionId: string, botGenerationDetails: BotGenerationDetails): IBotBase[]; + /** + * Get a clone of the database\bots\base.json file + * @returns IBotBase object + */ + protected getCloneOfBotBase(): IBotBase; + /** + * Create a IBotBase object with equipment/loot/exp etc + * @param sessionId Session id + * @param bot bots base file + * @param botJsonTemplate Bot template from db/bots/x.json + * @param botGenerationDetails details on how to generate the bot + * @returns IBotBase object + */ + protected generateBot(sessionId: string, bot: IBotBase, botJsonTemplate: IBotType, botGenerationDetails: BotGenerationDetails): IBotBase; + /** + * Create a bot nickname + * @param botJsonTemplate x.json from database + * @param isPlayerScav Will bot be player scav + * @param botRole role of bot e.g. assault + * @returns Nickname for bot + */ + protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string): string; + /** + * Log the number of PMCs generated to the debug console + * @param output Generated bot array, ready to send to client + */ + protected logPmcGeneratedCount(output: IBotBase[]): void; + /** + * Converts health object to the required format + * @param healthObj health object from bot json + * @param playerScav Is a pscav bot being generated + * @returns PmcHealth object + */ + protected generateHealth(healthObj: Health, playerScav?: boolean): PmcHealth; + protected generateSkills(skillsObj: Skills): Skills; + /** + * Generate a random Id for a bot and apply to bots _id and aid value + * @param bot bot to update + * @returns updated IBotBase object + */ + protected generateId(bot: IBotBase): IBotBase; + protected generateInventoryID(profile: IBotBase): IBotBase; + /** + * Randomise a bots game version and account category + * Chooses from all the game versions (standard, eod etc) + * Chooses account type (default, Sherpa, etc) + * @param botInfo bot info object to update + */ + protected getRandomisedGameVersionAndCategory(botInfo: Info): void; + /** + * Add a side-specific (usec/bear) dogtag item to a bots inventory + * @param bot bot to add dogtag to + * @returns Bot with dogtag added + */ + protected generateDogtag(bot: IBotBase): IBotBase; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/BotInventoryGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/BotInventoryGenerator.d.ts new file mode 100644 index 0000000..83a548b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/BotInventoryGenerator.d.ts @@ -0,0 +1,112 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; +import { Chances, Generation, IBotType, Inventory, Mods } from "../models/eft/common/tables/IBotType"; +import { EquipmentSlots } from "../models/enums/EquipmentSlots"; +import { EquipmentFilterDetails, IBotConfig, RandomisationDetails } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotEquipmentModPoolService } from "../services/BotEquipmentModPoolService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotEquipmentModGenerator } from "./BotEquipmentModGenerator"; +import { BotLootGenerator } from "./BotLootGenerator"; +import { BotWeaponGenerator } from "./BotWeaponGenerator"; +export declare class BotInventoryGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected botWeaponGenerator: BotWeaponGenerator; + protected botLootGenerator: BotLootGenerator; + protected botGeneratorHelper: BotGeneratorHelper; + protected botHelper: BotHelper; + protected weightedRandomHelper: WeightedRandomHelper; + protected localisationService: LocalisationService; + protected botEquipmentModPoolService: BotEquipmentModPoolService; + protected botEquipmentModGenerator: BotEquipmentModGenerator; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, botHelper: BotHelper, weightedRandomHelper: WeightedRandomHelper, localisationService: LocalisationService, botEquipmentModPoolService: BotEquipmentModPoolService, botEquipmentModGenerator: BotEquipmentModGenerator, configServer: ConfigServer); + /** + * Add equipment/weapons/loot to bot + * @param sessionId Session id + * @param botJsonTemplate bot/x.json data from db + * @param botRole Role bot has (assault/pmcBot) + * @param isPmc Is bot being converted into a pmc + * @param botLevel Level of bot being generated + * @returns PmcInventory object with equipment/weapons/loot + */ + generateInventory(sessionId: string, botJsonTemplate: IBotType, botRole: string, isPmc: boolean, botLevel: number): PmcInventory; + /** + * Create a pmcInventory object with all the base/generic items needed + * @returns PmcInventory object + */ + protected generateInventoryBase(): PmcInventory; + /** + * Add equipment to a bot + * @param templateInventory bot/x.json data from db + * @param equipmentChances Chances items will be added to bot + * @param botRole Role bot has (assault/pmcBot) + * @param botInventory Inventory to add equipment to + * @param botLevel Level of bot + */ + protected generateAndAddEquipmentToBot(templateInventory: Inventory, equipmentChances: Chances, botRole: string, botInventory: PmcInventory, botLevel: number): void; + /** + * Add a piece of equipment with mods to inventory from the provided pools + * @param equipmentSlot Slot to select an item for + * @param equipmentPool Possible items to choose from + * @param modPool Possible mods to apply to item chosen + * @param spawnChances Chances items will be chosen to be added + * @param botRole Role of bot e.g. assault + * @param inventory Inventory to add item into + * @param randomisationDetails settings from bot.json to adjust how item is generated + */ + protected generateEquipment(equipmentSlot: string, equipmentPool: Record, modPool: Mods, spawnChances: Chances, botRole: string, inventory: PmcInventory, randomisationDetails: RandomisationDetails): void; + /** + * Get all possible mods for item and filter down based on equipment blacklist from bot.json config + * @param itemTpl Item mod pool is being retreived and filtered + * @param equipmentBlacklist blacklist to filter mod pool with + * @returns Filtered pool of mods + */ + protected getFilteredDynamicModsForItem(itemTpl: string, equipmentBlacklist: EquipmentFilterDetails[]): Record; + /** + * Work out what weapons bot should have equipped and add them to bot inventory + * @param templateInventory bot/x.json data from db + * @param equipmentChances Chances bot can have equipment equipped + * @param sessionId Session id + * @param botInventory Inventory to add weapons to + * @param botRole assault/pmcBot/bossTagilla etc + * @param isPmc Is the bot being generated as a pmc + * @param botLevel level of bot having weapon generated + * @param itemGenerationLimitsMinMax Limits for items the bot can have + */ + protected generateAndAddWeaponsToBot(templateInventory: Inventory, equipmentChances: Chances, sessionId: string, botInventory: PmcInventory, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: Generation, botLevel: number): void; + /** + * Calculate if the bot should have weapons in Primary/Secondary/Holster slots + * @param equipmentChances Chances bot has certain equipment + * @returns What slots bot should have weapons generated for + */ + protected getDesiredWeaponsForBot(equipmentChances: Chances): { + slot: EquipmentSlots; + shouldSpawn: boolean; + }[]; + /** + * Add weapon + spare mags/ammo to bots inventory + * @param sessionId Session id + * @param weaponSlot Weapon slot being generated + * @param templateInventory bot/x.json data from db + * @param botInventory Inventory to add weapon+mags/ammo to + * @param equipmentChances Chances bot can have equipment equipped + * @param botRole assault/pmcBot/bossTagilla etc + * @param isPmc Is the bot being generated as a pmc + * @param itemGenerationLimitsMinMax + */ + protected addWeaponAndMagazinesToInventory(sessionId: string, weaponSlot: { + slot: EquipmentSlots; + shouldSpawn: boolean; + }, templateInventory: Inventory, botInventory: PmcInventory, equipmentChances: Chances, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: Generation, botLevel: number): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/BotLevelGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/BotLevelGenerator.d.ts new file mode 100644 index 0000000..751e6e6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/BotLevelGenerator.d.ts @@ -0,0 +1,29 @@ +import { MinMax } from "../models/common/MinMax"; +import { IRandomisedBotLevelResult } from "../models/eft/bot/IRandomisedBotLevelResult"; +import { ExpTable } from "../models/eft/common/IGlobals"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { BotGenerationDetails } from "../models/spt/bots/BotGenerationDetails"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotLevelGenerator { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer); + /** + * Return a randomised bot level and exp value + * @param levelDetails min and max of level for bot + * @param botGenerationDetails Deatils to help generate a bot + * @param bot being level is being generated for + * @returns IRandomisedBotLevelResult object + */ + generateBotLevel(levelDetails: MinMax, botGenerationDetails: BotGenerationDetails, bot: IBotBase): IRandomisedBotLevelResult; + /** + * Get the highest level a bot can be relative to the players level, but no futher than the max size from globals.exp_table + * @param playerLevel Players current level + * @param relativeDeltaMax max delta above player level to go + * @returns highest level possible for bot + */ + protected getHighestRelativeBotLevel(playerLevel: number, relativeDeltaMax: number, levelDetails: MinMax, expTable: ExpTable[]): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/BotLootGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/BotLootGenerator.d.ts new file mode 100644 index 0000000..6273a11 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/BotLootGenerator.d.ts @@ -0,0 +1,139 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; +import { Chances, Inventory, ItemMinMax, ModsChances } from "../models/eft/common/tables/IBotType"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem, Props } from "../models/eft/common/tables/ITemplateItem"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotLootCacheService } from "../services/BotLootCacheService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotWeaponGenerator } from "./BotWeaponGenerator"; +export declare class BotLootGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected botGeneratorHelper: BotGeneratorHelper; + protected botWeaponGenerator: BotWeaponGenerator; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected botLootCacheService: BotLootCacheService; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botLootCacheService: BotLootCacheService, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Add loot to bots containers + * @param sessionId Session id + * @param templateInventory x.json from database/bots + * @param itemCounts Liits on item types to be added as loot + * @param isPmc Will bot be a pmc + * @param botRole Role of bot, e.g. asssult + * @param botInventory Inventory to add loot to + * @param equipmentChances + * @param botLevel Level of bot + */ + generateLoot(sessionId: string, templateInventory: Inventory, itemCounts: ItemMinMax, isPmc: boolean, botRole: string, botInventory: PmcInventory, equipmentChances: Chances, botLevel: number): void; + protected getRandomisedCount(min: number, max: number, nValue: number): number; + /** + * Take random items from a pool and add to an inventory until totalItemCount or totalValueLimit is reached + * @param pool pool of items to pick from + * @param equipmentSlots What equality slot will the loot items be added to + * @param totalItemCount Max count of items to add + * @param inventoryToAddItemsTo bot inventory loot will be added to + * @param botRole role of the bot loot is being generated for (assault/pmcbot) + * @param useLimits should item limit counts be used as defined in config/bot.json + * @param totalValueLimitRub total value of loot allowed in roubles + * @param isPmc is the bot being generated for a pmc + */ + protected addLootFromPool(pool: ITemplateItem[], equipmentSlots: string[], totalItemCount: number, inventoryToAddItemsTo: PmcInventory, botRole: string, useLimits?: boolean, totalValueLimitRub?: number, isPmc?: boolean): void; + /** + * Add generated weapons to inventory as loot + * @param botInventory inventory to add preset to + * @param equipmentSlot slot to place the preset in (backpack) + * @param templateInventory bots template, assault.json + * @param modChances chances for mods to spawn on weapon + * @param botRole bots role, .e.g. pmcBot + * @param isPmc are we generating for a pmc + */ + protected addLooseWeaponsToInventorySlot(sessionId: string, botInventory: PmcInventory, equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, botRole: string, isPmc: boolean, botLevel: number): void; + /** + * Get a random item from the pool parameter using the biasedRandomNumber system + * @param pool pool of items to pick an item from + * @param isPmc is the bot being created a pmc + * @returns ITemplateItem object + */ + protected getRandomItemFromPool(pool: ITemplateItem[], isPmc: boolean): ITemplateItem; + /** + * Get the loot nvalue from botconfig + * @param isPmc if true the pmc nvalue is returned + * @returns nvalue as number + */ + protected getBotLootNValue(isPmc: boolean): number; + /** + * Update item limit array to contain items that have a limit + * All values are set to 0 + * @param isPmc is the bot a pmc + * @param botRole role the bot has + * @param limitCount + */ + protected initItemLimitArray(isPmc: boolean, botRole: string, limitCount: Record): void; + /** + * Check if an item has reached its bot-specific spawn limit + * @param itemTemplate Item we check to see if its reached spawn limit + * @param botRole Bot type + * @param isPmc Is bot we're working with a pmc + * @param limitCount spawn limits for items on bot + * @param itemSpawnLimits the limits this bot is allowed to have + * @returns true if item has reached spawn limit + */ + protected itemHasReachedSpawnLimit(itemTemplate: ITemplateItem, botRole: string, isPmc: boolean, limitCount: Record, itemSpawnLimits: Record): boolean; + /** + * Is the item an ammo box + * @param props props of the item to check + * @returns true if item is an ammo box + */ + protected isAmmoBox(props: Props): boolean; + /** + * Create an object that contains the ammo stack for an ammo box + * @param parentId ammo box id + * @param props ammo box props + * @returns Item object + */ + protected createAmmoForAmmoBox(parentId: string, props: Props): Item; + /** + * Randomise the stack size of a money object, uses different values for pmc or scavs + * @param isPmc is this a PMC + * @param itemTemplate item details + * @param moneyItem Money stack to randomise + */ + protected randomiseMoneyStackSize(isPmc: boolean, itemTemplate: ITemplateItem, moneyItem: Item): void; + /** + * Randomise the size of an ammo stack + * @param isPmc is this a PMC + * @param itemTemplate item details + * @param ammoItem Ammo stack to randomise + */ + protected randomiseAmmoStackSize(isPmc: boolean, itemTemplate: ITemplateItem, ammoItem: Item): void; + /** + * Get spawn limits for a specific bot type from bot.json config + * If no limit found for a non pmc bot, fall back to defaults + * @param isPmc is the bot we want limits for a pmc + * @param botRole what role does the bot have + * @returns Dictionary of tplIds and limit + */ + protected getItemSpawnLimitsForBotType(isPmc: boolean, botRole: string): Record; + /** + * Get the parentId or tplId of item inside spawnLimits object if it exists + * @param itemTemplate item we want to look for in spawn limits + * @param spawnLimits Limits to check for item + * @returns id as string, otherwise undefined + */ + protected getMatchingIdFromSpawnLimits(itemTemplate: ITemplateItem, spawnLimits: Record): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/BotWeaponGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/BotWeaponGenerator.d.ts new file mode 100644 index 0000000..a68b82f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/BotWeaponGenerator.d.ts @@ -0,0 +1,170 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { MinMax } from "../models/common/MinMax"; +import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; +import { Inventory, ModsChances } from "../models/eft/common/tables/IBotType"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { GenerateWeaponResult } from "../models/spt/bots/GenerateWeaponResult"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { BotWeaponModLimitService } from "../services/BotWeaponModLimitService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotEquipmentModGenerator } from "./BotEquipmentModGenerator"; +import { IInventoryMagGen } from "./weapongen/IInventoryMagGen"; +export declare class BotWeaponGenerator { + protected jsonUtil: JsonUtil; + protected logger: ILogger; + protected hashUtil: HashUtil; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected weightedRandomHelper: WeightedRandomHelper; + protected botGeneratorHelper: BotGeneratorHelper; + protected randomUtil: RandomUtil; + protected configServer: ConfigServer; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected botWeaponModLimitService: BotWeaponModLimitService; + protected botEquipmentModGenerator: BotEquipmentModGenerator; + protected localisationService: LocalisationService; + protected inventoryMagGenComponents: IInventoryMagGen[]; + protected readonly modMagazineSlotId = "mod_magazine"; + protected botConfig: IBotConfig; + constructor(jsonUtil: JsonUtil, logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil, configServer: ConfigServer, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botWeaponModLimitService: BotWeaponModLimitService, botEquipmentModGenerator: BotEquipmentModGenerator, localisationService: LocalisationService, inventoryMagGenComponents: IInventoryMagGen[]); + /** + * Pick a random weapon based on weightings and generate a functional weapon + * @param equipmentSlot Primary/secondary/holster + * @param botTemplateInventory e.g. assault.json + * @param weaponParentId + * @param modChances + * @param botRole role of bot, e.g. assault/followerBully + * @param isPmc Is weapon generated for a pmc + * @returns GenerateWeaponResult object + */ + generateRandomWeapon(sessionId: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean, botLevel: number): GenerateWeaponResult; + /** + * Get a random weighted weapon from a bots pool of weapons + * @param equipmentSlot Primary/secondary/holster + * @param botTemplateInventory e.g. assault.json + * @returns weapon tpl + */ + pickWeightedWeaponTplFromPool(equipmentSlot: string, botTemplateInventory: Inventory): string; + /** + * Generated a weapon based on the supplied weapon tpl + * @param weaponTpl weapon tpl to generate (use pickWeightedWeaponTplFromPool()) + * @param equipmentSlot slot to fit into, primary/secondary/holster + * @param botTemplateInventory e.g. assault.json + * @param weaponParentId ParentId of the weapon being generated + * @param modChances Dictionary of item types and % chance weapon will have that mod + * @param botRole e.g. assault/exusec + * @param isPmc + * @returns GenerateWeaponResult object + */ + generateWeaponByTpl(sessionId: string, weaponTpl: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean, botLevel: number): GenerateWeaponResult; + /** + * Create array with weapon base as only element and + * add additional properties based on weapon type + * @param weaponTpl Weapon tpl to create item with + * @param weaponParentId Weapons parent id + * @param equipmentSlot e.g. primary/secondary/holster + * @param weaponItemTemplate db template for weapon + * @param botRole for durability values + * @returns Base weapon item in array + */ + protected constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; + /** + * Get the mods necessary to kit out a weapon to its preset level + * @param weaponTpl weapon to find preset for + * @param equipmentSlot the slot the weapon will be placed in + * @param weaponParentId Value used for the parentid + * @returns array of weapon mods + */ + protected getPresetWeaponMods(weaponTpl: string, equipmentSlot: string, weaponParentId: string, itemTemplate: ITemplateItem, botRole: string): Item[]; + /** + * Checks if all required slots are occupied on a weapon and all it's mods + * @param weaponItemArray Weapon + mods + * @param botRole role of bot weapon is for + * @returns true if valid + */ + protected isWeaponValid(weaponItemArray: Item[], botRole: string): boolean; + /** + * Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets. + * Additionally, adds extra bullets to SecuredContainer + * @param generatedWeaponResult object with properties for generated weapon (weapon mods pool / weapon template / ammo tpl) + * @param magCounts Magazine count to add to inventory + * @param inventory Inventory to add magazines to + * @param botRole The bot type we're getting generating extra mags for + */ + addExtraMagazinesToInventory(generatedWeaponResult: GenerateWeaponResult, magCounts: MinMax, inventory: PmcInventory, botRole: string): void; + /** + * Add Grendaes for UBGL to bots vest and secure container + * @param weaponMods Weapon array with mods + * @param generatedWeaponResult result of weapon generation + * @param inventory bot inventory to add grenades to + */ + protected addUbglGrenadesToBotInventory(weaponMods: Item[], generatedWeaponResult: GenerateWeaponResult, inventory: PmcInventory): void; + /** + * Add ammo to the secure container + * @param stackCount How many stacks of ammo to add + * @param ammoTpl Ammo type to add + * @param stackSize Size of the ammo stack to add + * @param inventory Player inventory + */ + protected addAmmoToSecureContainer(stackCount: number, ammoTpl: string, stackSize: number, inventory: PmcInventory): void; + /** + * Get a weapons magazine tpl from a weapon template + * @param weaponMods mods from a weapon template + * @param weaponTemplate Weapon to get magazine tpl for + * @param botRole the bot type we are getting the magazine for + * @returns magazine tpl string + */ + protected getMagazineTplFromWeaponTemplate(weaponMods: Item[], weaponTemplate: ITemplateItem, botRole: string): string; + /** + * Finds and return a compatible ammo tpl based on the bots ammo weightings (x.json/inventory/equipment/ammo) + * @param ammo a list of ammo tpls the weapon can use + * @param weaponTemplate the weapon we want to pick ammo for + * @returns an ammo tpl that works with the desired gun + */ + protected getWeightedCompatibleAmmo(ammo: Record>, weaponTemplate: ITemplateItem): string; + /** + * Get a weapons compatible cartridge caliber + * @param weaponTemplate Weapon to look up caliber of + * @returns caliber as string + */ + protected getWeaponCaliber(weaponTemplate: ITemplateItem): string; + /** + * Fill existing magazines to full, while replacing their contents with specified ammo + * @param weaponMods + * @param magazine + * @param ammoTpl + */ + protected fillExistingMagazines(weaponMods: Item[], magazine: Item, ammoTpl: string): void; + /** + * Add desired ammo tpl as item to weaponmods array, placed as child to UBGL + * @param weaponMods + * @param ubglMod + * @param ubglAmmoTpl + */ + protected fillUbgl(weaponMods: Item[], ubglMod: Item, ubglAmmoTpl: string): void; + /** + * Add cartridge item to weapon Item array, if it already exists, update + * @param weaponMods Weapon items array to amend + * @param magazine magazine item details we're adding cartridges to + * @param chosenAmmo cartridge to put into the magazine + * @param newStackSize how many cartridges should go into the magazine + */ + protected addOrUpdateMagazinesChildWithAmmo(weaponMods: Item[], magazine: Item, chosenAmmo: string, newStackSize: number): void; + /** + * Fill each Camora with a bullet + * @param weaponMods Weapon mods to find and update camora mod(s) from + * @param magazineId magazine id to find and add to + * @param ammoTpl ammo template id to hydate with + */ + protected fillCamorasWithAmmo(weaponMods: Item[], magazineId: string, ammoTpl: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/FenceBaseAssortGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/FenceBaseAssortGenerator.d.ts new file mode 100644 index 0000000..387df3a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/FenceBaseAssortGenerator.d.ts @@ -0,0 +1,28 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +export declare class FenceBaseAssortGenerator { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected itemHelper: ItemHelper; + protected itemFilterService: ItemFilterService; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, itemFilterService: ItemFilterService, configServer: ConfigServer); + /** + * Create base fence assorts dynamically and store in db + */ + generateFenceBaseAssorts(): void; + /** + * Check if item is valid for being added to fence assorts + * @param item Item to check + * @returns true if valid fence item + */ + protected isValidFenceItem(item: ITemplateItem): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/LocationGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/LocationGenerator.d.ts new file mode 100644 index 0000000..a617048 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/LocationGenerator.d.ts @@ -0,0 +1,56 @@ +import { ContainerHelper } from "../helpers/ContainerHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { RagfairServerHelper } from "../helpers/RagfairServerHelper"; +import { ILooseLoot, SpawnpointsForced, 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 { ILocationConfig } from "../models/spt/config/ILocationConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { MathUtil } from "../utils/MathUtil"; +import { ObjectId } from "../utils/ObjectId"; +import { RandomUtil } from "../utils/RandomUtil"; +export interface IContainerItem { + items: Item[]; + width: number; + height: number; +} +export declare class LocationGenerator { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected objectId: ObjectId; + protected randomUtil: RandomUtil; + protected ragfairServerHelper: RagfairServerHelper; + protected itemHelper: ItemHelper; + protected mathUtil: MathUtil; + protected seasonalEventService: SeasonalEventService; + protected containerHelper: ContainerHelper; + protected presetHelper: PresetHelper; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected locationConfig: ILocationConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, objectId: ObjectId, randomUtil: RandomUtil, ragfairServerHelper: RagfairServerHelper, itemHelper: ItemHelper, mathUtil: MathUtil, seasonalEventService: SeasonalEventService, containerHelper: ContainerHelper, presetHelper: PresetHelper, localisationService: LocalisationService, configServer: ConfigServer); + generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record, staticAmmoDist: Record, locationName: string): IStaticContainerProps; + protected getLooseLootMultiplerForLocation(location: string): number; + protected getStaticLootMultiplerForLocation(location: string): number; + /** + * Create array of loose + forced loot using probability system + * @param dynamicLootDist + * @param staticAmmoDist + * @param locationName Location to generate loot for + * @returns Array of spawn points with loot in them + */ + generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record, locationName: string): SpawnpointTemplate[]; + /** + * Add forced spawn point loot into loot parameter array + * @param loot array to add forced loot to + * @param forcedSpawnPoints forced loot to add + * @param name of map currently generating forced loot for + */ + protected addForcedLoot(loot: SpawnpointTemplate[], forcedSpawnPoints: SpawnpointsForced[], locationName: string): void; + protected createItem(tpl: string, staticAmmoDist: Record, parentId?: string): IContainerItem; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/LootGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/LootGenerator.d.ts new file mode 100644 index 0000000..0d2ef24 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/LootGenerator.d.ts @@ -0,0 +1,67 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { LootItem } from "../models/spt/services/LootItem"; +import { LootRequest } from "../models/spt/services/LootRequest"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class LootGenerator { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected itemHelper: ItemHelper; + protected localisationService: LocalisationService; + protected itemFilterService: ItemFilterService; + constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, itemHelper: ItemHelper, localisationService: LocalisationService, itemFilterService: ItemFilterService); + /** + * Generate a list of items based on configuration options parameter + * @param options parameters to adjust how loot is generated + * @returns An array of loot items + */ + createRandomloot(options: LootRequest): LootItem[]; + /** + * Construct item limit record to hold max and current item count + * @param limits limits as defined in config + * @returns record, key: item tplId, value: current/max item count allowed + */ + protected initItemLimitCounter(limits: Record): Record; + /** + * Find a random item in items.json and add to result array + * @param items items to choose from + * @param itemTypeCounts item limit counts + * @param options item filters + * @param result array to add found item to + * @returns true if item was valid and added to pool + */ + protected findAndAddRandomItemToLoot(items: [string, ITemplateItem][], itemTypeCounts: Record, options: LootRequest, result: LootItem[]): boolean; + /** + * Get a randomised stack count for an item between its StackMinRandom and StackMaxSize values + * @param item item to get stack count of + * @param options loot options + * @returns stack count + */ + protected getRandomisedStackCount(item: ITemplateItem, options: LootRequest): number; + /** + * Find a random item in items.json and add to result array + * @param globalDefaultPresets presets to choose from + * @param itemTypeCounts item limit counts + * @param itemBlacklist items to skip + * @param result array to add found preset to + * @returns true if preset was valid and added to pool + */ + protected findAndAddRandomPresetToLoot(globalDefaultPresets: [string, Preset][], itemTypeCounts: Record, itemBlacklist: string[], result: LootItem[]): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/PMCLootGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/PMCLootGenerator.d.ts new file mode 100644 index 0000000..10918e3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/PMCLootGenerator.d.ts @@ -0,0 +1,31 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +/** + * Handle the generation of dynamic PMC loot in pockets and backpacks + * and the removal of blacklisted items + */ +export declare class PMCLootGenerator { + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected itemFilterService: ItemFilterService; + protected seasonalEventService: SeasonalEventService; + protected pocketLootPool: string[]; + protected backpackLootPool: string[]; + protected botConfig: IBotConfig; + constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, seasonalEventService: SeasonalEventService); + /** + * Create an array of loot items a PMC can have in their pockets + * @returns string array of tpls + */ + generatePMCPocketLootPool(): string[]; + /** + * Create an array of loot items a PMC can have in their backpack + * @returns string array of tpls + */ + generatePMCBackpackLootPool(): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/PlayerScavGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/PlayerScavGenerator.d.ts new file mode 100644 index 0000000..3641268 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/PlayerScavGenerator.d.ts @@ -0,0 +1,79 @@ +import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; +import { BotHelper } from "../helpers/BotHelper"; +import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Skills, Stats } from "../models/eft/common/tables/IBotBase"; +import { IBotType } from "../models/eft/common/tables/IBotType"; +import { IPlayerScavConfig, KarmaLevel } from "../models/spt/config/IPlayerScavConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { BotLootCacheService } from "../services/BotLootCacheService"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotGenerator } from "./BotGenerator"; +export declare class PlayerScavGenerator { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected hashUtil: HashUtil; + protected itemHelper: ItemHelper; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + protected botGeneratorHelper: BotGeneratorHelper; + protected saveServer: SaveServer; + protected profileHelper: ProfileHelper; + protected botHelper: BotHelper; + protected jsonUtil: JsonUtil; + protected fenceService: FenceService; + protected botLootCacheService: BotLootCacheService; + protected localisationService: LocalisationService; + protected botGenerator: BotGenerator; + protected configServer: ConfigServer; + protected playerScavConfig: IPlayerScavConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer, hashUtil: HashUtil, itemHelper: ItemHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botGeneratorHelper: BotGeneratorHelper, saveServer: SaveServer, profileHelper: ProfileHelper, botHelper: BotHelper, jsonUtil: JsonUtil, fenceService: FenceService, botLootCacheService: BotLootCacheService, localisationService: LocalisationService, botGenerator: BotGenerator, configServer: ConfigServer); + /** + * Update a player profile to include a new player scav profile + * @param sessionID session id to specify what profile is updated + * @returns profile object + */ + generate(sessionID: string): IPmcData; + /** + * Get the scav karama level for a profile + * Is also the fence trader rep level + * @param pmcData pmc profile + * @returns karma level + */ + protected getScavKarmaLevel(pmcData: IPmcData): number; + /** + * Get a baseBot template + * If the parameter doesnt match "assault", take parts from the loot type and apply to the return bot template + * @param botTypeForLoot bot type to use for inventory/chances + * @returns IBotType object + */ + protected constructBotBaseTemplate(botTypeForLoot: string): IBotType; + /** + * Adjust equipment/mod/item generation values based on scav karma levels + * @param karmaSettings Values to modify the bot template with + * @param baseBotNode bot template to modify according to karama level settings + */ + protected adjustBotTemplateWithKarmaSpecificSettings(karmaSettings: KarmaLevel, baseBotNode: IBotType): void; + protected getScavSkills(scavProfile: IPmcData): Skills; + protected getDefaultScavSkills(): Skills; + protected getScavStats(scavProfile: IPmcData): Stats; + protected getScavLevel(scavProfile: IPmcData): number; + protected getScavExperience(scavProfile: IPmcData): number; + /** + * Set cooldown till pscav is playable + * take into account scav cooldown bonus + * @param scavData scav profile + * @param pmcData pmc profile + * @returns + */ + protected setScavCooldownTimer(scavData: IPmcData, pmcData: IPmcData): IPmcData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/RagfairAssortGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/RagfairAssortGenerator.d.ts new file mode 100644 index 0000000..630e863 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/RagfairAssortGenerator.d.ts @@ -0,0 +1,52 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Preset } from "../models/eft/common/IGlobals"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SeasonalEventService } from "../services/SeasonalEventService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class RagfairAssortGenerator { + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected seasonalEventService: SeasonalEventService; + protected configServer: ConfigServer; + protected generatedAssortItems: Item[]; + protected ragfairConfig: IRagfairConfig; + constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, seasonalEventService: SeasonalEventService, configServer: ConfigServer); + /** + * Get an array of unique items that can be sold on the flea + * @returns array of unique items + */ + getAssortItems(): Item[]; + /** + * Check internal generatedAssortItems array has objects + * @returns true if array has objects + */ + protected assortsAreGenerated(): boolean; + /** + * Generate an array of items the flea can sell + * @returns array of unique items + */ + protected generateRagfairAssortItems(): Item[]; + /** + * Get presets from globals.json + * @returns Preset object array + */ + protected getPresets(): Preset[]; + /** + * Get default presets from globals.json + * @returns Preset object array + */ + protected getDefaultPresets(): Preset[]; + /** + * Create a base assort item and return it with populated values + 999999 stack count + unlimited count = true + * @param tplId tplid to add to item + * @param id id to add to item + * @returns hydrated Item object + */ + protected createRagfairAssortItem(tplId: string, id?: string): Item; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/RagfairOfferGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/RagfairOfferGenerator.d.ts new file mode 100644 index 0000000..35fceff --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/RagfairOfferGenerator.d.ts @@ -0,0 +1,174 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { RagfairServerHelper } from "../helpers/RagfairServerHelper"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IBarterScheme } from "../models/eft/common/tables/ITrader"; +import { IRagfairOffer, OfferRequirement } from "../models/eft/ragfair/IRagfairOffer"; +import { Dynamic, IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { RagfairCategoriesService } from "../services/RagfairCategoriesService"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { RagfairPriceService } from "../services/RagfairPriceService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { RagfairAssortGenerator } from "./RagfairAssortGenerator"; +export declare class RagfairOfferGenerator { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected randomUtil: RandomUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected ragfairServerHelper: RagfairServerHelper; + protected handbookHelper: HandbookHelper; + protected saveServer: SaveServer; + protected presetHelper: PresetHelper; + protected ragfairAssortGenerator: RagfairAssortGenerator; + protected ragfairOfferService: RagfairOfferService; + protected ragfairPriceService: RagfairPriceService; + protected localisationService: LocalisationService; + protected paymentHelper: PaymentHelper; + protected ragfairCategoriesService: RagfairCategoriesService; + protected fenceService: FenceService; + protected itemHelper: ItemHelper; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + protected allowedFleaPriceItemsForBarter: { + tpl: string; + price: number; + }[]; + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, ragfairServerHelper: RagfairServerHelper, handbookHelper: HandbookHelper, saveServer: SaveServer, presetHelper: PresetHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferService: RagfairOfferService, ragfairPriceService: RagfairPriceService, localisationService: LocalisationService, paymentHelper: PaymentHelper, ragfairCategoriesService: RagfairCategoriesService, fenceService: FenceService, itemHelper: ItemHelper, configServer: ConfigServer); + createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer; + /** + * Calculate the offer price that's listed on the flea listing + * @param offerRequirements barter requirements for offer + * @returns rouble cost of offer + */ + protected calculateOfferListingPrice(offerRequirements: OfferRequirement[]): number; + /** + * Get avatar url from trader table in db + * @param isTrader Is user we're getting avatar for a trader + * @param userId persons id to get avatar of + * @returns url of avatar + */ + protected getAvatarUrl(isTrader: boolean, userId: string): string; + /** + * Convert a count of currency into roubles + * @param currencyCount amount of currency to convert into roubles + * @param currencyType Type of currency (euro/dollar/rouble) + * @returns count of roubles + */ + protected calculateRoublePrice(currencyCount: number, currencyType: string): number; + protected getTraderId(userID: string): string; + protected getRating(userID: string): number; + /** + * Is the offers user rating growing + * @param userID user to check rating of + * @returns true if its growing + */ + protected getRatingGrowing(userID: string): boolean; + /** + * Get number of section until offer should expire + * @param userID Id of the offer owner + * @param time Time the offer is posted + * @returns number of seconds until offer expires + */ + protected getOfferEndTime(userID: string, time: number): number; + /** + * Create multiple offers for items by using a unique list of items we've generated previously + * @param expiredOffers optional, expired offers to regenerate + */ + generateDynamicOffers(expiredOffers?: Item[]): Promise; + protected createOffersForItems(assortItemIndex: string, assortItemsToProcess: Item[], expiredOffers: Item[], config: Dynamic): Promise; + /** + * Create one flea offer for a specific item + * @param items Item to create offer for + * @param isPreset Is item a weapon preset + * @param itemDetails raw db item details + * @returns + */ + protected createSingleOfferForItem(items: Item[], isPreset: boolean, itemDetails: [boolean, ITemplateItem]): Promise; + /** + * Generate trader offers on flea using the traders assort data + * @param traderID Trader to generate offers for + */ + generateFleaOffersForTrader(traderID: string): void; + /** + * Get array of an item with its mods + condition properties (e.g durability) + * Apply randomisation adjustments to condition if item base is found in ragfair.json/dynamic/condition + * @param userID id of owner of item + * @param itemWithMods Item and mods, get condition of first item (only first array item is used) + * @param itemDetails db details of first item + * @returns + */ + protected getItemCondition(userID: string, itemWithMods: Item[], itemDetails: ITemplateItem): Item[]; + /** + * Get the relevant condition id if item tpl matches in ragfair.json/condition + * @param tpl Item to look for matching condition object + * @returns condition id + */ + protected getDynamicConditionIdForTpl(tpl: string): string; + /** + * Alter an items condition based on its item base type + * @param conditionSettingsId also the parentId of item being altered + * @param item Item to adjust condition details of + * @param itemDetails db item details of first item in array + */ + protected randomiseItemCondition(conditionSettingsId: string, item: Item, itemDetails: ITemplateItem): void; + /** + * Adjust an items durability/maxDurability value + * @param item item (weapon/armor) to adjust + * @param multiplier Value to multiple durability by + */ + protected randomiseDurabilityValues(item: Item, multiplier: number): void; + /** + * Add missing conditions to an item if needed + * Durabiltiy for repairable items + * HpResource for medical items + * @param item item to add conditions to + * @returns Item with conditions added + */ + protected addMissingConditions(item: Item): Item; + /** + * Create a barter-based barter scheme, if not possible, fall back to making barter scheme currency based + * @param offerItems Items for sale in offer + * @returns barter scheme + */ + protected createBarterRequirement(offerItems: Item[]): IBarterScheme[]; + /** + * Get an array of flea prices + item tpl, cached in generator class inside `allowedFleaPriceItemsForBarter` + * @returns array with tpl/price values + */ + protected getFleaPricesAsArray(): { + tpl: string; + price: number; + }[]; + /** + * Create a random currency-based barter scheme for an array of items + * @param offerItems Items on offer + * @returns Barter scheme for offer + */ + protected createCurrencyRequirement(offerItems: Item[]): IBarterScheme[]; + /** + * Create a flea offer and store it in the Ragfair server offers array + * @param userID owner of the offer + * @param time time offer is put up + * @param items items in the offer + * @param barterScheme cost of item (currency or barter) + * @param loyalLevel Loyalty level needed to buy item + * @param price price of offer + * @param sellInOnePiece + * @returns Ragfair offer + */ + createFleaOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/ScavCaseRewardGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/ScavCaseRewardGenerator.d.ts new file mode 100644 index 0000000..394eeb0 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/ScavCaseRewardGenerator.d.ts @@ -0,0 +1,103 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Product } from "../models/eft/common/tables/IBotBase"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase"; +import { IScavCaseConfig } from "../models/spt/config/IScavCaseConfig"; +import { RewardCountAndPriceDetails, ScavCaseRewardCountsAndPrices } from "../models/spt/hideout/ScavCaseRewardCountsAndPrices"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { RagfairPriceService } from "../services/RagfairPriceService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +/** + * Handle the creation of randomised scav case rewards + */ +export declare class ScavCaseRewardGenerator { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected ragfairPriceService: RagfairPriceService; + protected itemFilterService: ItemFilterService; + protected configServer: ConfigServer; + protected scavCaseConfig: IScavCaseConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, itemFilterService: ItemFilterService, configServer: ConfigServer); + /** + * Create an array of rewards that will be given to the player upon completing their scav case build + * @param recipeId recipe of the scav case craft + * @returns Product array + */ + generate(recipeId: string): Product[]; + /** + * Get all db items that are not blacklisted in scavcase config + * @returns filtered array of db items + */ + protected getDbItems(): ITemplateItem[]; + /** + * Pick a number of items to be rewards, the count is defined by the values in + * @param items item pool to pick rewards from + * @param itemFilters how the rewards should be filtered down (by item count) + * @returns + */ + protected pickRandomRewards(items: ITemplateItem[], itemFilters: RewardCountAndPriceDetails, rarity: string): ITemplateItem[]; + /** + * Choose if money should be a reward based on the moneyRewardChancePercent config chance in scavCaseConfig + * @returns true if reward should be money + */ + protected rewardShouldBeMoney(): boolean; + /** + * Choose if ammo should be a reward based on the ammoRewardChancePercent config chance in scavCaseConfig + * @returns true if reward should be ammo + */ + protected rewardShouldBeAmmo(): boolean; + /** + * Choose from rouble/dollar/euro at random + */ + protected getRandomMoney(): ITemplateItem; + /** + * Get a random ammo from items.json that is not in the ammo blacklist AND inside the price rage defined in scavcase.json config + * @param rarity The rarity this ammo reward is for + * @returns random ammo item from items.json + */ + protected getRandomAmmo(rarity: string): ITemplateItem; + /** + * Take all the rewards picked create the Product object array ready to return to calling code + * Also add a stack count to ammo and money + * @param rewardItems items to convert + * @returns Product array + */ + protected randomiseContainerItemRewards(rewardItems: ITemplateItem[], rarity: string): Product[]; + /** + * Add a randomised stack count to ammo or money items + * @param item money or ammo item + * @param resultItem money or ammo item with a randomise stack size + */ + protected addStackCountToAmmoAndMoney(item: ITemplateItem, resultItem: { + _id: string; + _tpl: string; + upd: any; + }, rarity: string): void; + /** + * + * @param dbItems all items from the items.json + * @param itemFilters controls how the dbItems will be filtered and returned (handbook price) + * @returns filtered dbItems array + */ + protected getFilteredItemsByPrice(dbItems: ITemplateItem[], itemFilters: RewardCountAndPriceDetails): ITemplateItem[]; + /** + * Gathers the reward options from config and scavcase.json into a single object + * @param scavCaseDetails scavcase.json values + * @returns ScavCaseRewardCountsAndPrices object + */ + protected getScavCaseRewardCountsAndPrices(scavCaseDetails: IHideoutScavCase): ScavCaseRewardCountsAndPrices; + /** + * Randomises the size of ammo and money stacks + * @param itemToCalculate ammo or money item + * @param rarity rarity (common/rare/superrare) + * @returns value to set stack count to + */ + protected getRandomAmountRewardForScavCase(itemToCalculate: ITemplateItem, rarity: string): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/WeatherGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/WeatherGenerator.d.ts new file mode 100644 index 0000000..65d2c76 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/WeatherGenerator.d.ts @@ -0,0 +1,54 @@ +import { ApplicationContext } from "../context/ApplicationContext"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { IWeather, IWeatherData } from "../models/eft/weather/IWeatherData"; +import { WindDirection } from "../models/enums/WindDirection"; +import { IWeatherConfig } from "../models/spt/config/IWeatherConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class WeatherGenerator { + protected weightedRandomHelper: WeightedRandomHelper; + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected timeUtil: TimeUtil; + protected applicationContext: ApplicationContext; + protected configServer: ConfigServer; + protected weatherConfig: IWeatherConfig; + constructor(weightedRandomHelper: WeightedRandomHelper, logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, applicationContext: ApplicationContext, configServer: ConfigServer); + calculateGameTime(data: IWeatherData): IWeatherData; + /** + * Get server uptime seconds multiplied by a multiplier and add to current time as seconds + * Format to BSGs requirements + * @param currentDate current date + * @returns formatted time + */ + protected getBsgFormattedInRaidTime(currentDate: Date): string; + /** + * Get the current in-raid time + * @param currentDate (new Date()) + * @returns Date object of current in-raid time + */ + getInRaidTime(currentDate: Date): Date; + /** + * Get current time formatted to fit BSGs requirement + * @param date date to format into bsg style + * @returns + */ + protected getBSGFormattedTime(date: Date): string; + /** + * Return randomised Weather data with help of config/weather.json + * @returns Randomised weather data + */ + generateWeather(): IWeather; + /** + * Set IWeather date/time/timestamp values to now + * @param weather Object to update + */ + protected setCurrentDateTime(weather: IWeather): void; + protected getWeightedWindDirection(): WindDirection; + protected getWeightedWindSpeed(): number; + protected getWeightedFog(): number; + protected getWeightedRain(): number; + protected getRandomFloat(node: string): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/IInventoryMagGen.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/IInventoryMagGen.d.ts new file mode 100644 index 0000000..792f510 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/IInventoryMagGen.d.ts @@ -0,0 +1,6 @@ +import { InventoryMagGen } from "./InventoryMagGen"; +export interface IInventoryMagGen { + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/InventoryMagGen.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/InventoryMagGen.d.ts new file mode 100644 index 0000000..30bf79f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/InventoryMagGen.d.ts @@ -0,0 +1,16 @@ +import { MinMax } from "../../models/common/MinMax"; +import { Inventory } from "../../models/eft/common/tables/IBotBase"; +import { ITemplateItem } from "../../models/eft/common/tables/ITemplateItem"; +export declare class InventoryMagGen { + private magCounts; + private magazineTemplate; + private weaponTemplate; + private ammoTemplate; + private pmcInventory; + constructor(magCounts: MinMax, magazineTemplate: ITemplateItem, weaponTemplate: ITemplateItem, ammoTemplate: ITemplateItem, pmcInventory: Inventory); + getMagCount(): MinMax; + getMagazineTemplate(): ITemplateItem; + getWeaponTemplate(): ITemplateItem; + getAmmoTemplate(): ITemplateItem; + getPmcInventory(): Inventory; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts new file mode 100644 index 0000000..b754d5f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/implementations/BarrelInventoryMagGen.d.ts @@ -0,0 +1,12 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { RandomUtil } from "../../../utils/RandomUtil"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class BarrelInventoryMagGen implements IInventoryMagGen { + protected randomUtil: RandomUtil; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(randomUtil: RandomUtil, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts new file mode 100644 index 0000000..1589707 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/implementations/ExternalInventoryMagGen.d.ts @@ -0,0 +1,16 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { ItemHelper } from "../../../helpers/ItemHelper"; +import { ILogger } from "../../../models/spt/utils/ILogger"; +import { LocalisationService } from "../../../services/LocalisationService"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class ExternalInventoryMagGen implements IInventoryMagGen { + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected localisationService: LocalisationService; + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(logger: ILogger, itemHelper: ItemHelper, localisationService: LocalisationService, botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts new file mode 100644 index 0000000..4548a04 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/implementations/InternalMagazineInventoryMagGen.d.ts @@ -0,0 +1,10 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class InternalMagazineInventoryMagGen implements IInventoryMagGen { + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/implementations/UbglExternalMagGen.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/implementations/UbglExternalMagGen.d.ts new file mode 100644 index 0000000..75395be --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/generators/weapongen/implementations/UbglExternalMagGen.d.ts @@ -0,0 +1,10 @@ +import { BotWeaponGeneratorHelper } from "../../../helpers/BotWeaponGeneratorHelper"; +import { IInventoryMagGen } from "../IInventoryMagGen"; +import { InventoryMagGen } from "../InventoryMagGen"; +export declare class UbglExternalMagGen implements IInventoryMagGen { + protected botWeaponGeneratorHelper: BotWeaponGeneratorHelper; + constructor(botWeaponGeneratorHelper: BotWeaponGeneratorHelper); + getPriority(): number; + canHandleInventoryMagGen(inventoryMagGen: InventoryMagGen): boolean; + process(inventoryMagGen: InventoryMagGen): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/AssortHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/AssortHelper.d.ts new file mode 100644 index 0000000..13512b2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/AssortHelper.d.ts @@ -0,0 +1,39 @@ +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 { LocalisationService } from "../services/LocalisationService"; +import { ItemHelper } from "./ItemHelper"; +import { QuestHelper } from "./QuestHelper"; +export declare class AssortHelper { + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected localisationService: LocalisationService; + protected questHelper: QuestHelper; + constructor(logger: ILogger, itemHelper: ItemHelper, databaseServer: DatabaseServer, localisationService: LocalisationService, questHelper: QuestHelper); + /** + * Remove assorts from a trader that have not been unlocked yet + * @param pmcProfile player profile + * @param traderId traders id + * @param assort assort items from a trader + * @param mergedQuestAssorts An object of quest assort to quest id unlocks for all traders + * @returns assort items minus locked quest assorts + */ + stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort, mergedQuestAssorts: Record>, flea?: boolean): ITraderAssort; + /** + * Remove assorts from a trader that have not been unlocked yet + * @param pmcProfile player profile + * @param traderId traders id + * @param assort traders assorts + * @returns traders assorts minus locked loyalty assorts + */ + stripLockedLoyaltyAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort): ITraderAssort; + /** + * Remove an item from an assort + * @param assort assort to modify + * @param itemID item id to remove from asort + * @returns Modified assort + */ + removeItemFromAssort(assort: ITraderAssort, itemID: string, flea?: boolean): ITraderAssort; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/BotDifficultyHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/BotDifficultyHelper.d.ts new file mode 100644 index 0000000..df2c269 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/BotDifficultyHelper.d.ts @@ -0,0 +1,46 @@ +import { Difficulty } from "../models/eft/common/tables/IBotType"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotHelper } from "./BotHelper"; +export declare class BotDifficultyHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected localisationService: LocalisationService; + protected botHelper: BotHelper; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, localisationService: LocalisationService, botHelper: BotHelper, configServer: ConfigServer); + getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string, usecType: string, bearType: string): Difficulty; + /** + * Get difficulty settings for desired bot type, if not found use assault bot types + * @param type bot type to retrieve difficulty of + * @param difficulty difficulty to get settings for (easy/normal etc) + * @returns Difficulty object + */ + getBotDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Get difficulty settings for a PMC + * @param type "usec" / "bear" + * @param difficulty what difficulty to retrieve + * @returns Difficulty object + */ + protected getDifficultySettings(type: string, difficulty: string): Difficulty; + /** + * Translate chosen value from pre-raid difficulty dropdown into bot difficulty value + * @param dropDownDifficulty Dropdown difficulty value to convert + * @returns bot difficulty + */ + convertBotDifficultyDropdownToBotDifficulty(dropDownDifficulty: string): string; + /** + * Choose a random difficulty from - easy/normal/hard/impossible + * @returns random difficulty + */ + chooseRandomDifficulty(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/BotGeneratorHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/BotGeneratorHelper.d.ts new file mode 100644 index 0000000..c7dd606 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/BotGeneratorHelper.d.ts @@ -0,0 +1,82 @@ +import { DurabilityLimitsHelper } from "../helpers/DurabilityLimitsHelper"; +import { Item, Repairable, Upd } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { EquipmentFilters, IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ItemHelper } from "./ItemHelper"; +export declare class BotGeneratorHelper { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected durabilityLimitsHelper: DurabilityLimitsHelper; + protected itemHelper: ItemHelper; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer, durabilityLimitsHelper: DurabilityLimitsHelper, itemHelper: ItemHelper, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Adds properties to an item + * e.g. Repairable / HasHinge / Foldable / MaxDurability + * @param itemTemplate Item extra properties are being generated for + * @param botRole Used by weapons to randomize the durability values. Null for non-equipped items + * @returns Item Upd object with extra properties + */ + generateExtraPropertiesForItem(itemTemplate: ITemplateItem, botRole?: string): { + upd?: Upd; + }; + /** + * Get the chance for the weapon attachment or helmet equipment to be set as activated + * @param botRole role of bot with weapon/helmet + * @param setting the setting of the weapon attachment/helmet equipment to be activated + * @param defaultValue default value for the chance of activation if the botrole or bot equipment role is null + * @returns Percent chance to be active + */ + protected getBotEquipmentSettingFromConfig(botRole: string, setting: keyof EquipmentFilters, defaultValue: number): number; + /** + * Create a repairable object for a weapon that containers durability + max durability properties + * @param itemTemplate weapon object being generated for + * @param botRole type of bot being generated for + * @returns Repairable object + */ + protected generateWeaponRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable; + /** + * Create a repairable object for an armor that containers durability + max durability properties + * @param itemTemplate weapon object being generated for + * @param botRole type of bot being generated for + * @returns Repairable object + */ + protected generateArmorRepairableProperties(itemTemplate: ITemplateItem, botRole: string): Repairable; + /** + * Can item be added to another item without conflict + * @param items Items to check compatibilities with + * @param tplToCheck Tpl of the item to check for incompatibilities + * @param equipmentSlot Slot the item will be placed into + * @returns false if no incompatibilities, also has incompatibility reason + */ + isItemIncompatibleWithCurrentItems(items: Item[], tplToCheck: string, equipmentSlot: string): { + incompatible: boolean; + reason: string; + }; + /** + * Convert a bots role to the equipment role used in config/bot.json + * @param botRole Role to convert + * @returns Equipment role (e.g. pmc / assault / bossTagilla) + */ + getBotEquipmentRole(botRole: string): string; +} +/** TODO - move into own class */ +export declare class ExhaustableArray { + private itemPool; + private randomUtil; + private jsonUtil; + private pool; + constructor(itemPool: T[], randomUtil: RandomUtil, jsonUtil: JsonUtil); + getRandomValue(): T; + getFirstValue(): T; + hasValues(): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/BotHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/BotHelper.d.ts new file mode 100644 index 0000000..3b49501 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/BotHelper.d.ts @@ -0,0 +1,88 @@ +import { MinMax } from "../models/common/MinMax"; +import { Difficulty, IBotType } from "../models/eft/common/tables/IBotType"; +import { EquipmentFilters, IBotConfig, RandomisationDetails } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class BotHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected randomUtil: RandomUtil; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Get a template object for the specified botRole from bots.types db + * @param role botRole to get template for + * @returns IBotType object + */ + getBotTemplate(role: string): IBotType; + /** + * Randomize the chance the PMC will attack their own side + * Look up value in bot.json/chanceSameSideIsHostilePercent + * @param difficultySettings pmc difficulty settings + */ + randomizePmcHostility(difficultySettings: Difficulty): void; + /** + * Is the passed in bot role a PMC (usec/bear/pmc) + * @param botRole bot role to check + * @returns true if is pmc + */ + isBotPmc(botRole: string): boolean; + isBotBoss(botRole: string): boolean; + isBotFollower(botRole: string): boolean; + /** + * Add a bot to the FRIENDLY_BOT_TYPES array + * @param difficultySettings bot settings to alter + * @param typeToAdd bot type to add to friendly list + */ + addBotToFriendlyList(difficultySettings: Difficulty, typeToAdd: string): void; + /** + * Add a bot to the ENEMY_BOT_TYPES array, do not add itself if its on the enemy list + * @param difficultySettings bot settings to alter + * @param typesToAdd bot type to add to enemy list + */ + addBotToEnemyList(difficultySettings: Difficulty, typesToAdd: string[], typeBeingEdited: string): void; + /** + * Add a bot to the REVENGE_BOT_TYPES array + * @param difficultySettings bot settings to alter + * @param typesToAdd bot type to add to revenge list + */ + addBotToRevengeList(difficultySettings: Difficulty, typesToAdd: string[]): void; + /** + * Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check + * @param botRole the bot role to check if should be a pmc + * @returns true if should be a pmc + */ + shouldBotBePmc(botRole: string): boolean; + rollChanceToBePmc(role: string, botConvertMinMax: MinMax): boolean; + botRoleIsPmc(botRole: string): boolean; + /** + * Get randomization settings for bot from config/bot.json + * @param botLevel level of bot + * @param botEquipConfig bot equipment json + * @returns RandomisationDetails + */ + getBotRandomizationDetails(botLevel: number, botEquipConfig: EquipmentFilters): RandomisationDetails; + /** + * Choose between sptBear and sptUsec at random based on the % defined in botConfig.pmc.isUsec + * @returns pmc role + */ + getRandomizedPmcRole(): string; + /** + * Get the corresponding side when sptBear or sptUsec is passed in + * @param botRole role to get side for + * @returns side (usec/bear) + */ + getPmcSideByRole(botRole: string): string; + /** + * Get a randomized PMC side based on bot config value 'isUsec' + * @returns pmc side as string + */ + protected getRandomizedPmcSide(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/BotWeaponGeneratorHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/BotWeaponGeneratorHelper.d.ts new file mode 100644 index 0000000..cefc3bd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/BotWeaponGeneratorHelper.d.ts @@ -0,0 +1,83 @@ +import { MinMax } from "../models/common/MinMax"; +import { Inventory } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { Grid, ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { EquipmentSlots } from "../models/enums/EquipmentSlots"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ContainerHelper } from "./ContainerHelper"; +import { InventoryHelper } from "./InventoryHelper"; +import { ItemHelper } from "./ItemHelper"; +export declare class BotWeaponGeneratorHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected inventoryHelper: InventoryHelper; + protected localisationService: LocalisationService; + protected containerHelper: ContainerHelper; + constructor(logger: ILogger, databaseServer: DatabaseServer, itemHelper: ItemHelper, randomUtil: RandomUtil, hashUtil: HashUtil, inventoryHelper: InventoryHelper, localisationService: LocalisationService, containerHelper: ContainerHelper); + /** + * Get a randomized number of bullets for a specific magazine + * @param magCounts min and max count of magazines + * @param magTemplate magazine to generate bullet count for + * @returns bullet count number + */ + getRandomizedBulletCount(magCounts: MinMax, magTemplate: ITemplateItem): number; + /** + * Get a randomized count of magazines + * @param magCounts min and max value returned value can be between + * @returns numerical value of magazine count + */ + getRandomizedMagazineCount(magCounts: MinMax): number; + /** + * Is this magazine cylinder related (revolvers and grenade launchers) + * @param magazineParentName the name of the magazines parent + * @returns true if it is cylinder related + */ + magazineIsCylinderRelated(magazineParentName: string): boolean; + /** + * Create a magazine using the parameters given + * @param magazineTpl Tpl of the magazine to create + * @param ammoTpl Ammo to add to magazine + * @param magTemplate template object of magazine + * @returns Item array + */ + createMagazine(magazineTpl: string, ammoTpl: string, magTemplate: ITemplateItem): Item[]; + /** + * Add a specific number of cartridges to a bots inventory (defaults to vest and pockets) + * @param ammoTpl Ammo tpl to add to vest/pockets + * @param cartridgeCount number of cartridges to add to vest/pockets + * @param inventory bot inventory to add cartridges to + * @param equipmentSlotsToAddTo what equipment slots should bullets be added into + */ + addAmmoIntoEquipmentSlots(ammoTpl: string, cartridgeCount: number, inventory: Inventory, equipmentSlotsToAddTo?: EquipmentSlots[]): void; + /** + * Get a weapons default magazine template id + * @param weaponTemplate weapon to get default magazine for + * @returns tpl of magazine + */ + getWeaponsDefaultMagazineTpl(weaponTemplate: ITemplateItem): string; + /** + * TODO - move into BotGeneratorHelper, this is not the class for it + * Adds an item with all its children into specified equipmentSlots, wherever it fits. + * @param equipmentSlots + * @param parentId + * @param parentTpl + * @param itemWithChildren + * @param inventory + * @returns a `boolean` indicating item was added + */ + addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: Inventory): boolean; + /** + * is the provided item allowed inside a container + * @param slot location item wants to be placed in + * @param itemTpl item being placed + * @returns true if allowed + */ + protected itemAllowedInContainer(slot: Grid, itemTpl: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/ContainerHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/ContainerHelper.d.ts new file mode 100644 index 0000000..3c2ee93 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/ContainerHelper.d.ts @@ -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 { + protected locateSlot(container2D: number[][], containerX: number, containerY: number, x: number, y: number, itemW: number, itemH: number): boolean; + findSlotForItem(container2D: number[][], itemWidth: number, itemHeight: number): FindSlotResult; + fillContainerMapWithItem(container2D: number[][], x: number, y: number, itemW: number, itemH: number, rotate: boolean): any; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/DialogueHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/DialogueHelper.d.ts new file mode 100644 index 0000000..8f03b81 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/DialogueHelper.d.ts @@ -0,0 +1,45 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { Dialogue, MessageContent, MessagePreview } from "../models/eft/profile/IAkiProfile"; +import { MessageType } from "../models/enums/MessageType"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { ItemHelper } from "./ItemHelper"; +import { NotificationSendHelper } from "./NotificationSendHelper"; +import { NotifierHelper } from "./NotifierHelper"; +export declare class DialogueHelper { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected notifierHelper: NotifierHelper; + protected notificationSendHelper: NotificationSendHelper; + protected localisationService: LocalisationService; + protected itemHelper: ItemHelper; + constructor(logger: ILogger, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, notifierHelper: NotifierHelper, notificationSendHelper: NotificationSendHelper, localisationService: LocalisationService, itemHelper: ItemHelper); + createMessageContext(templateId: string, messageType: MessageType, maxStoreTime: number): MessageContent; + /** + * Add a templated message to the dialogue. + * @param dialogueID + * @param messageContent + * @param sessionID + * @param rewards + */ + addDialogueMessage(dialogueID: string, messageContent: MessageContent, sessionID: string, rewards?: Item[]): void; + /** + * Get the preview contents of the last message in a dialogue. + * @param dialogue + * @returns + */ + getMessagePreview(dialogue: Dialogue): MessagePreview; + /** + * Get the item contents for a particular message. + * @param messageID + * @param sessionID + * @param itemId Item being moved to inventory + * @returns + */ + getMessageItemContents(messageID: string, sessionID: string, itemId: string): Item[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/DurabilityLimitsHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/DurabilityLimitsHelper.d.ts new file mode 100644 index 0000000..7122376 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/DurabilityLimitsHelper.d.ts @@ -0,0 +1,28 @@ +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { BotHelper } from "./BotHelper"; +export declare class DurabilityLimitsHelper { + protected randomUtil: RandomUtil; + protected botHelper: BotHelper; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + constructor(randomUtil: RandomUtil, botHelper: BotHelper, configServer: ConfigServer); + getRandomizedMaxWeaponDurability(itemTemplate: ITemplateItem, botRole: string): number; + getRandomizedMaxArmorDurability(itemTemplate: ITemplateItem, botRole: string): number; + getRandomizedWeaponDurability(itemTemplate: ITemplateItem, botRole: string, maxDurability: number): number; + getRandomizedArmorDurability(itemTemplate: ITemplateItem, botRole: string, maxDurability: number): number; + protected generateMaxWeaponDurability(botRole: string): number; + protected generateMaxPmcArmorDurability(itemMaxDurability: number): number; + protected getLowestMaxWeaponFromConfig(botRole: string): number; + protected getHighestMaxWeaponDurabilityFromConfig(botRole: string): number; + protected generateWeaponDurability(botRole: string, maxDurability: number): number; + protected generateArmorDurability(botRole: string, maxDurability: number): number; + protected getMinWeaponDeltaFromConfig(botRole: string): number; + protected getMaxWeaponDeltaFromConfig(botRole: string): number; + protected getMinArmorDeltaFromConfig(botRole: string): number; + protected getMaxArmorDeltaFromConfig(botRole: string): number; + protected getMinArmorLimitPercentFromConfig(botRole: string): number; + protected getMinWeaponLimitPercentFromConfig(botRole: string): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/GameEventHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/GameEventHelper.d.ts new file mode 100644 index 0000000..f502c95 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/GameEventHelper.d.ts @@ -0,0 +1,9 @@ +import { ISeasonalEventConfig } from "../models/spt/config/ISeasonalEventConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +export declare class GameEventHelper { + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected seasonalEventConfig: ISeasonalEventConfig; + constructor(databaseServer: DatabaseServer, configServer: ConfigServer); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/HandbookHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/HandbookHelper.d.ts new file mode 100644 index 0000000..aa329a9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/HandbookHelper.d.ts @@ -0,0 +1,53 @@ +import { DatabaseServer } from "../servers/DatabaseServer"; +declare class LookupItem { + byId: Record; + byParent: Record; + constructor(); +} +export declare class LookupCollection { + items: LookupItem; + categories: LookupItem; + constructor(); +} +export declare class HandbookHelper { + protected databaseServer: DatabaseServer; + protected lookupCacheGenerated: boolean; + protected handbookPriceCache: LookupCollection; + constructor(databaseServer: DatabaseServer); + hydrateLookup(): void; + /** + * Get price from internal cache, if cache empty look up price directly in handbook (expensive) + * If no values found, return 1 + * @param tpl item tpl to look up price for + * @returns price in roubles + */ + getTemplatePrice(tpl: string): number; + /** + * all items in template with the given parent category + * @param x + * @returns string array + */ + templatesWithParent(x: string): string[]; + /** + * Does category exist in handbook cache + * @param category + * @returns true if exists in cache + */ + isCategory(category: string): boolean; + childrenCategories(x: string): string[]; + /** + * Convert non-roubles into roubles + * @param nonRoubleCurrencyCount Currency count to convert + * @param currencyTypeFrom What current currency is + * @returns Count in roubles + */ + inRUB(nonRoubleCurrencyCount: number, currencyTypeFrom: string): number; + /** + * Convert roubles into another currency + * @param roubleCurrencyCount roubles to convert + * @param currencyTypeTo Currency to convert roubles into + * @returns currency count in desired type + */ + fromRUB(roubleCurrencyCount: number, currencyTypeTo: string): number; +} +export {}; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/HealthHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/HealthHelper.d.ts new file mode 100644 index 0000000..7a6d41d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/HealthHelper.d.ts @@ -0,0 +1,57 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ISyncHealthRequestData } from "../models/eft/health/ISyncHealthRequestData"; +import { Effects, IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { IHealthConfig } from "../models/spt/config/IHealthConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { SaveServer } from "../servers/SaveServer"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class HealthHelper { + protected jsonUtil: JsonUtil; + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected configServer: ConfigServer; + protected healthConfig: IHealthConfig; + constructor(jsonUtil: JsonUtil, logger: ILogger, timeUtil: TimeUtil, saveServer: SaveServer, configServer: ConfigServer); + /** + * Resets the profiles vitality/health and vitality/effects properties to their defaults + * @param sessionID Session Id + * @returns updated profile + */ + resetVitality(sessionID: string): IAkiProfile; + /** + * Update player profile with changes from request object + * @param pmcData Player profile + * @param request Heal request + * @param sessionID Session id + * @param addEffects Should effects be added or removed (default - add) + */ + saveVitality(pmcData: IPmcData, request: ISyncHealthRequestData, sessionID: string, addEffects?: boolean, deleteExistingEffects?: boolean): void; + /** + * Adjust hydration/energy/temperate and body part hp values in player profile to values in profile.vitality + * @param pmcData Profile to update + * @param sessionId Session id + */ + protected saveHealth(pmcData: IPmcData, sessionID: string): void; + /** + * Save effects to profile + * Works by removing all effects and adding them back from profile + * Removes empty 'Effects' objects if found + * @param pmcData Player profile + * @param sessionId Session id + * @param bodyPartsWithEffects dict of body parts with effects that should be added to profile + * @param addEffects Should effects be added back to profile + */ + protected saveEffects(pmcData: IPmcData, sessionId: string, bodyPartsWithEffects: Effects, deleteExistingEffects?: boolean): void; + /** + * Add effect to body part in profile + * @param pmcData Player profile + * @param effectBodyPart body part to edit + * @param effectType Effect to add to body part + * @param duration How long the effect has left in seconds (-1 by default, no duration). + */ + protected addEffect(pmcData: IPmcData, effectBodyPart: string, effectType: string, duration?: number): void; + protected isEmpty(map: any): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/HideoutHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/HideoutHelper.d.ts new file mode 100644 index 0000000..a5849e3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/HideoutHelper.d.ts @@ -0,0 +1,186 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Common, HideoutArea, IHideoutImprovement, Production, Productive } from "../models/eft/common/tables/IBotBase"; +import { Upd } from "../models/eft/common/tables/IItem"; +import { StageBonus } from "../models/eft/hideout/IHideoutArea"; +import { IHideoutContinuousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinuousProductionStartRequestData"; +import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction"; +import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData"; +import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideoutTakeProductionRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IHideoutConfig } from "../models/spt/config/IHideoutConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { PlayerService } from "../services/PlayerService"; +import { HashUtil } from "../utils/HashUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { InventoryHelper } from "./InventoryHelper"; +import { ProfileHelper } from "./ProfileHelper"; +export declare class HideoutHelper { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected eventOutputHolder: EventOutputHolder; + protected httpResponse: HttpResponseUtil; + protected profileHelper: ProfileHelper; + protected inventoryHelper: InventoryHelper; + protected playerService: PlayerService; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + static bitcoinFarm: string; + static waterCollector: string; + static bitcoin: string; + static expeditionaryFuelTank: string; + static maxSkillPoint: number; + private static generatorOffMultipler; + protected hideoutConfig: IHideoutConfig; + constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, inventoryHelper: InventoryHelper, playerService: PlayerService, localisationService: LocalisationService, configServer: ConfigServer); + registerProduction(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData | IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + /** + * This convenience function initializes new Production Object + * with all the constants. + */ + initProduction(recipeId: string, productionTime: number): Production; + isProductionType(productive: Productive): productive is Production; + applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void; + /** + * TODO: + * After looking at the skills there doesnt seem to be a configuration per skill to boost + * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it) + * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure! + * @param pmcData + * @param bonus + */ + protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void; + /** + * Process a players hideout, update areas that use resources + increment production timers + * @param sessionID Session id + */ + updatePlayerHideout(sessionID: string): void; + /** + * Update progress timer for water collector + * @param pmcData profile to update + * @param productionId id of water collection production to update + * @param hideoutProperties Hideout properties + */ + protected updateWaterCollectorProductionTimer(pmcData: IPmcData, productionId: string, hideoutProperties: { + btcFarmCGs?: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + /** + * Iterate over productions and update their progress timers + * @param pmcData Profile to check for productions and update + * @param hideoutProperties Hideout properties + */ + protected updateProductionTimers(pmcData: IPmcData, hideoutProperties: { + btcFarmCGs: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + /** + * Update a productions progress value based on the amount of time that has passed + * @param pmcData Player profile + * @param prodId Production id being crafted + * @param recipe Recipe data being crafted + * @param hideoutProperties + */ + protected updateProductionProgress(pmcData: IPmcData, prodId: string, recipe: IHideoutProduction, hideoutProperties: { + btcFarmCGs?: number; + isGeneratorOn: boolean; + waterCollectorHasFilter?: boolean; + }): void; + /** + * Check if a productions progress value matches its corresponding recipes production time value + * @param pmcData Player profile + * @param prodId Production id + * @param recipe Recipe being crafted + * @returns progress matches productionTime from recipe + */ + protected doesProgressMatchProductionTime(pmcData: IPmcData, prodId: string): boolean; + /** + * Update progress timer for scav case + * @param pmcData Profile to update + * @param productionId Id of scav case production to update + */ + protected updateScavCaseProductionTimer(pmcData: IPmcData, productionId: string): void; + /** + * Iterate over hideout areas that use resources (fuel/filters etc) and update associated values + * @param sessionID Session id + * @param pmcData Profile to update areas of + * @param hideoutProperties hideout properties + */ + protected updateAreasWithResources(sessionID: string, pmcData: IPmcData, hideoutProperties: { + btcFarmCGs: number; + isGeneratorOn: boolean; + waterCollectorHasFilter: boolean; + }): void; + protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void; + protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean; + protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): void; + /** + * Adjust water filter objects resourceValue or delete when they reach 0 resource + * @param waterFilterArea water filter area to update + * @param production production object + * @param isGeneratorOn is generator enabled + * @param pmcData Player profile + * @returns Updated HideoutArea object + */ + protected updateWaterFilters(waterFilterArea: HideoutArea, production: Production, isGeneratorOn: boolean, pmcData: IPmcData): HideoutArea; + protected getAreaUpdObject(stackCount: number, resourceValue: number, resourceUnitsConsumed: number): Upd; + protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData): void; + protected updateBitcoinFarm(pmcData: IPmcData, btcFarmCGs: number, isGeneratorOn: boolean): Production; + /** + * Get a count of how many BTC can be gathered by the profile + * @param pmcData Profile to look up + * @returns coin slot count + */ + protected getBTCSlots(pmcData: IPmcData): number; + protected getManagementSkillsSlots(): number; + protected hasManagementSkillSlots(pmcData: IPmcData): boolean; + protected getHideoutManagementSkill(pmcData: IPmcData): Common; + protected getHideoutManagementConsumptionBonus(pmcData: IPmcData): number; + /** + * Get the crafting skill details from player profile + * @param pmcData Player profile + * @returns crafting skill, null if not found + */ + protected getCraftingSkill(pmcData: IPmcData): Common; + /** + * Adjust craft time based on crafting skill level found in player profile + * @param pmcData Player profile + * @param productionTime Time to complete hideout craft in seconds + * @returns Adjusted craft time in seconds + */ + protected getCraftingSkillProductionTimeReduction(pmcData: IPmcData, productionTime: number): number; + isProduction(productive: Productive): productive is Production; + /** + * Gather crafted BTC from hideout area and add to inventory + * Reset production start timestamp if hideout area at full coin capacity + * @param pmcData Player profile + * @param request Take production request + * @param sessionId Session id + * @returns IItemEventRouterResponse + */ + getBTC(pmcData: IPmcData, request: IHideoutTakeProductionRequestData, sessionId: string): IItemEventRouterResponse; + /** + * Upgrade hideout wall from starting level to interactable level if enough time has passed + * @param pmcProfile Profile to upgrade wall in + */ + unlockHideoutWallInProfile(pmcProfile: IPmcData): void; + /** + * Hideout improvement is flagged as complete + * @param improvement hideout improvement object + * @returns true if complete + */ + protected hideoutImprovementIsComplete(improvement: IHideoutImprovement): boolean; + /** + * Iterate over hideout improvements not completed and check if they need to be adjusted + * @param pmcProfile Profile to adjust + */ + setHideoutImprovementsToCompleted(pmcProfile: IPmcData): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/HttpServerHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/HttpServerHelper.d.ts new file mode 100644 index 0000000..c6e5296 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/HttpServerHelper.d.ts @@ -0,0 +1,23 @@ +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class HttpServerHelper { + protected configServer: ConfigServer; + protected httpConfig: IHttpConfig; + protected mime: { + css: string; + bin: string; + html: string; + jpg: string; + js: string; + json: string; + png: string; + svg: string; + txt: string; + }; + constructor(configServer: ConfigServer); + getMimeText(key: string): string; + buildUrl(): string; + getBackendUrl(): string; + getWebsocketUrl(): string; + sendTextJson(resp: any, output: any): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/InRaidHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/InRaidHelper.d.ts new file mode 100644 index 0000000..c69a810 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/InRaidHelper.d.ts @@ -0,0 +1,112 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Victim } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { ProfileFixerService } from "../services/ProfileFixerService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { InventoryHelper } from "./InventoryHelper"; +import { PaymentHelper } from "./PaymentHelper"; +export declare class InRaidHelper { + protected logger: ILogger; + protected saveServer: SaveServer; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected inventoryHelper: InventoryHelper; + protected paymentHelper: PaymentHelper; + protected localisationService: LocalisationService; + protected profileFixerService: ProfileFixerService; + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, profileFixerService: ProfileFixerService); + /** + * Check an array of items and add an upd object to money items with a stack count of 1 + * Single stack money items have no upd object and thus no StackObjectsCount, causing issues + * @param items Items array to check + */ + addUpdToMoneyFromRaid(items: Item[]): void; + /** + * Add karma changes up and return the new value + * @param existingFenceStanding Current fence standing level + * @param victims Array of kills player performed + * @returns adjusted karma level after kills are taken into account + */ + calculateFenceStandingChangeFromKills(existingFenceStanding: number, victims: Victim[]): number; + /** + * Reset a profile to a baseline, used post-raid + * Reset points earned during session property + * Increment exp + * Remove Labs keycard + * @param profileData Profile to update + * @param saveProgressRequest post raid save data request data + * @param sessionID Session id + * @returns Reset profile object + */ + updateProfileBaseStats(profileData: IPmcData, saveProgressRequest: ISaveProgressRequestData, sessionID: string): IPmcData; + /** + * Take body part effects from client profile and apply to server profile + * @param saveProgressRequest post-raid request + * @param profileData player profile on server + */ + protected transferPostRaidLimbEffectsToProfile(saveProgressRequest: ISaveProgressRequestData, profileData: IPmcData): void; + /** + * Some maps have one-time-use keys (e.g. Labs + * Remove the relevant key from an inventory based on the post-raid request data passed in + * @param offraidData post-raid data + * @param sessionID Session id + */ + protected removeMapAccessKey(offraidData: ISaveProgressRequestData, sessionID: string): void; + /** + * Set the SPT inraid location Profile property to 'none' + * @param sessionID Session id + */ + protected setPlayerInRaidLocationStatusToNone(sessionID: string): void; + /** + * Adds SpawnedInSession property to items found in a raid + * Removes SpawnedInSession for non-scav players if item was taken into raid with SpawnedInSession = true + * @param preRaidProfile profile to update + * @param postRaidProfile profile to update inventory contents of + * @param isPlayerScav Was this a p scav raid + * @returns + */ + addSpawnedInSessionPropertyToItems(preRaidProfile: IPmcData, postRaidProfile: IPmcData, isPlayerScav: boolean): IPmcData; + /** + * Iterate over inventory items and remove the property that defines an item as Found in Raid + * Only removes property if item had FiR when entering raid + * @param postRaidProfile profile to update items for + * @returns Updated profile with SpawnedInSession removed + */ + removeSpawnedInSessionPropertyFromItems(postRaidProfile: IPmcData): IPmcData; + /** + * Update a players inventory post-raid + * Remove equipped items from pre-raid + * Add new items found in raid to profile + * Store insurance items in profile + * @param sessionID + * @param pmcData Profile to update + * @param postRaidProfile Profile returned by client after a raid + * @returns Updated profile + */ + setInventory(sessionID: string, pmcData: IPmcData, postRaidProfile: IPmcData): IPmcData; + /** + * Clear pmc inventory of all items except those that are exempt + * Used post-raid to remove items after death + * @param pmcData Player profile + * @param sessionID Session id + * @returns Player profile with pmc inventory cleared + */ + deleteInventory(pmcData: IPmcData, sessionID: string): IPmcData; + /** + * Does the provided items slotId mean its kept on the player after death + * @param slotId slotid of item to check + * @returns true if item is kept after death + */ + isItemKeptAfterDeath(slotId: string): boolean; + /** + * Return the equipped items from a players inventory + * @param items Players inventory to search through + * @returns an array of equipped items + */ + getPlayerGear(items: Item[]): Item[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/InventoryHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/InventoryHelper.d.ts new file mode 100644 index 0000000..8855d1e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/InventoryHelper.d.ts @@ -0,0 +1,132 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { AddItem, IAddItemRequestData } from "../models/eft/inventory/IAddItemRequestData"; +import { IAddItemTempObject } from "../models/eft/inventory/IAddItemTempObject"; +import { IInventoryMergeRequestData } from "../models/eft/inventory/IInventoryMergeRequestData"; +import { IInventoryMoveRequestData } from "../models/eft/inventory/IInventoryMoveRequestData"; +import { IInventorySplitRequestData } from "../models/eft/inventory/IInventorySplitRequestData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IInventoryConfig, RewardDetails } from "../models/spt/config/IInventoryConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { ContainerHelper } from "./ContainerHelper"; +import { DialogueHelper } from "./DialogueHelper"; +import { ItemHelper } from "./ItemHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { ProfileHelper } from "./ProfileHelper"; +import { TraderAssortHelper } from "./TraderAssortHelper"; +export interface OwnerInventoryItems { + from: Item[]; + to: Item[]; + sameInventory: boolean; + isMail: boolean; +} +export declare class InventoryHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected httpResponse: HttpResponseUtil; + protected fenceService: FenceService; + protected databaseServer: DatabaseServer; + protected paymentHelper: PaymentHelper; + protected traderAssortHelper: TraderAssortHelper; + protected dialogueHelper: DialogueHelper; + protected itemHelper: ItemHelper; + protected containerHelper: ContainerHelper; + protected profileHelper: ProfileHelper; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected inventoryConfig: IInventoryConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, httpResponse: HttpResponseUtil, fenceService: FenceService, databaseServer: DatabaseServer, paymentHelper: PaymentHelper, traderAssortHelper: TraderAssortHelper, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, containerHelper: ContainerHelper, profileHelper: ProfileHelper, localisationService: LocalisationService, configServer: ConfigServer); + /** + * BUG: Passing the same item multiple times with a count of 1 will cause multiples of that item to be added (e.g. x3 separate objects of tar cola with count of 1 = 9 tarcolas being added to inventory) + * @param pmcData Profile to add items to + * @param request request data to add items + * @param output response to send back to client + * @param sessionID Session id + * @param callback Code to execute later (function) + * @param foundInRaid Will results added to inventory be set as found in raid + * @param addUpd Additional upd properties for items being added to inventory + * @returns IItemEventRouterResponse + */ + addItem(pmcData: IPmcData, request: IAddItemRequestData, output: IItemEventRouterResponse, sessionID: string, callback: { + (): void; + }, foundInRaid?: boolean, addUpd?: any): IItemEventRouterResponse; + /** + * Add ammo to ammo boxes + * @param itemToAdd Item to check is ammo box + * @param toDo + * @param output IItemEventRouterResponse object + * @param sessionID Session id + * @param pmcData Profile to add ammobox to + */ + protected hydrateAmmoBoxWithAmmo(pmcData: IPmcData, itemToAdd: IAddItemTempObject, toDo: string[][], sessionID: string, output: IItemEventRouterResponse): void; + /** + * + * @param assortItems Items to add to inventory + * @param requestItem Details of purchased item to add to inventory + * @param result Array split stacks are added to + */ + protected splitStackIntoSmallerStacks(assortItems: Item[], requestItem: AddItem, result: IAddItemTempObject[]): void; + /** + * Remove item from player inventory + * @param pmcData Profile to remove item from + * @param itemId Items id to remove + * @param sessionID Session id + * @param output Existing IItemEventRouterResponse object to append data to, creates new one by default if not supplied + * @returns IItemEventRouterResponse + */ + removeItem(pmcData: IPmcData, itemId: string, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse; + removeItemByCount(pmcData: IPmcData, itemId: string, count: number, sessionID: string, output?: IItemEventRouterResponse): IItemEventRouterResponse; + getItemSize(itemTpl: string, itemID: string, inventoryItem: Item[]): Record; + protected getSizeByInventoryItemHash(itemTpl: string, itemID: string, inventoryItemHash: InventoryHelper.InventoryItemHash): Record; + protected getInventoryItemHash(inventoryItem: Item[]): InventoryHelper.InventoryItemHash; + getContainerMap(containerW: number, containerH: number, itemList: Item[], containerId: string): number[][]; + /** + * Based on the item action, determine whose inventories we should be looking at for from and to. + */ + getOwnerInventoryItems(body: IInventoryMoveRequestData | IInventorySplitRequestData | IInventoryMergeRequestData, sessionID: string): OwnerInventoryItems; + /** + * Made a 2d array table with 0 - free slot and 1 - used slot + * @param {Object} pmcData + * @param {string} sessionID + * @returns Array + */ + protected getStashSlotMap(pmcData: IPmcData, sessionID: string): number[][]; + protected getStashType(sessionID: string): string; + protected getPlayerStashSize(sessionID: string): Record; + /** + * Internal helper function to transfer an item from one profile to another. + * fromProfileData: Profile of the source. + * toProfileData: Profile of the destination. + * body: Move request + */ + moveItemToProfile(fromItems: Item[], toItems: Item[], body: IInventoryMoveRequestData): void; + /** + * Internal helper function to move item within the same profile_f. + */ + moveItemInternal(inventoryItems: Item[], body: IInventoryMoveRequestData): void; + /** + * Internal helper function to handle cartridges in inventory if any of them exist. + */ + protected handleCartridges(items: Item[], body: IInventoryMoveRequestData): void; + /** + * Get details for how a random loot container should be handled, max rewards, possible reward tpls + * @param itemTpl Container being opened + * @returns Reward details + */ + getRandomLootContainerRewardDetails(itemTpl: string): RewardDetails; +} +declare namespace InventoryHelper { + interface InventoryItemHash { + byItemId: Record; + byParentId: Record; + } +} +export {}; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/ItemHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/ItemHelper.d.ts new file mode 100644 index 0000000..de424d2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/ItemHelper.d.ts @@ -0,0 +1,251 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { InsuredItem } from "../models/eft/common/tables/IBotBase"; +import { Item, Repairable } from "../models/eft/common/tables/IItem"; +import { IStaticAmmoDetails } from "../models/eft/common/tables/ILootBase"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { ItemBaseClassService } from "../services/ItemBaseClassService"; +import { LocaleService } from "../services/LocaleService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { MathUtil } from "../utils/MathUtil"; +import { ObjectId } from "../utils/ObjectId"; +import { RandomUtil } from "../utils/RandomUtil"; +import { HandbookHelper } from "./HandbookHelper"; +declare class ItemHelper { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected randomUtil: RandomUtil; + protected objectId: ObjectId; + protected mathUtil: MathUtil; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected itemBaseClassService: ItemBaseClassService; + protected localisationService: LocalisationService; + protected localeService: LocaleService; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, randomUtil: RandomUtil, objectId: ObjectId, mathUtil: MathUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemBaseClassService: ItemBaseClassService, localisationService: LocalisationService, localeService: LocaleService); + /** + * Checks if an id is a valid item. Valid meaning that it's an item that be stored in stash + * @param {string} tpl the template id / tpl + * @returns boolean; true for items that may be in player possession and not quest items + */ + isValidItem(tpl: string, invalidBaseTypes?: string[]): boolean; + /** + * Check if the tpl / template Id provided is a descendent of the baseclass + * + * @param {string} tpl the item template id to check + * @param {string} baseClassTpl the baseclass to check for + * @return {boolean} is the tpl a descendent? + */ + isOfBaseclass(tpl: string, baseClassTpl: string): boolean; + /** + * Check if item has any of the supplied base classes + * @param tpl Item to check base classes of + * @param baseClassTpls base classes to check for + * @returns true if any supplied base classes match + */ + isOfBaseclasses(tpl: string, baseClassTpls: string[]): boolean; + /** + * Returns the item price based on the handbook or as a fallback from the prices.json if the item is not + * found in the handbook. If the price can't be found at all return 0 + * + * @param {string} tpl the item template to check + * @returns {integer} The price of the item or 0 if not found + */ + getItemPrice(tpl: string): number; + fixItemStackCount(item: Item): Item; + /** + * AmmoBoxes contain StackSlots which need to be filled for the AmmoBox to have content. + * Here's what a filled AmmoBox looks like: + * { + * "_id": "b1bbe982daa00ac841d4ae4d", + * "_tpl": "57372c89245977685d4159b1", + * "parentId": "5fe49a0e2694b0755a504876", + * "slotId": "hideout", + * "location": { + * "x": 3, + * "y": 4, + * "r": 0 + * }, + * "upd": { + * "StackObjectsCount": 1 + * } + * }, + * { + * "_id": "b997b4117199033afd274a06", + * "_tpl": "56dff061d2720bb5668b4567", + * "parentId": "b1bbe982daa00ac841d4ae4d", + * "slotId": "cartridges", + * "location": 0, + * "upd": { + * "StackObjectsCount": 30 + * } + * } + * Given the AmmoBox Item (first object) this function generates the StackSlot (second object) and returns it. + * StackSlots are only used for AmmoBoxes which only have one element in StackSlots. However, it seems to be generic + * to possibly also have more than one StackSlot. As good as possible, without seeing items having more than one + * StackSlot, this function takes account of this and creates and returns an array of StackSlotItems + * + * @param {object} item The item template of the AmmoBox as given in items.json + * @param {string} parentId The id of the AmmoBox instance these StackSlotItems should be children of + * @returns {array} The array of StackSlotItems + */ + generateItemsFromStackSlot(item: ITemplateItem, parentId: string): Item[]; + /** + * Get cloned copy of all item data from items.json + * @returns array of ITemplateItem objects + */ + getItems(): ITemplateItem[]; + /** + * Gets item data from items.json + * @param tpl items template id to look up + * @returns bool - is valid + template item object as array + */ + getItem(tpl: string): [boolean, ITemplateItem]; + /** + * get normalized value (0-1) based on item condition + * @param item + * @returns number between 0 and 1 + */ + getItemQualityModifier(item: Item): number; + /** + * Get a quality value based on a repairable items (weapon/armor) current state between current and max durability + * @param itemDetails + * @param repairable repairable object + * @param item + * @returns a number between 0 and 1 + */ + protected getRepairableItemQualityValue(itemDetails: ITemplateItem, repairable: Repairable, item: Item): number; + /** + * Recursive function that looks at every item from parameter and gets their childrens Ids + * @param items + * @param itemID + * @returns an array of strings + */ + findAndReturnChildrenByItems(items: Item[], itemID: string): string[]; + /** + * A variant of findAndReturnChildren where the output is list of item objects instead of their ids. + * @param items + * @param baseItemId + * @returns An array of Item objects + */ + findAndReturnChildrenAsItems(items: Item[], baseItemId: string): Item[]; + /** + * Find children of the item in a given assort (weapons parts for example, need recursive loop function) + * @param itemIdToFind Template id of item to check for + * @param assort Array of items to check in + * @returns Array of children of requested item + */ + findAndReturnChildrenByAssort(itemIdToFind: string, assort: Item[]): Item[]; + /** + * Check if the passed in item has buy count restrictions + * @param itemToCheck Item to check + * @returns true if it has buy restrictions + */ + hasBuyRestrictions(itemToCheck: Item): boolean; + /** + * is the passed in template id a dog tag + * @param tpl Template id to check + * @returns true if it is a dogtag + */ + isDogtag(tpl: string): boolean; + /** + * Can the item passed in be sold to a trader because it is raw money + * @param tpl Item template id to check + * @returns true if unsellable + */ + isNotSellable(tpl: string): boolean; + /** + * Gets the identifier for a child using slotId, locationX and locationY. + * @param item + * @returns "slotId OR slotid,locationX,locationY" + */ + getChildId(item: Item): string; + /** + * Can the passed in item be stacked + * @param tpl item to check + * @returns true if it can be stacked + */ + isItemTplStackable(tpl: string): boolean; + /** + * split item stack if it exceeds StackMaxSize + */ + splitStack(item: Item): Item[]; + /** + * Find Barter items in the inventory + * @param {string} by + * @param {Object} pmcData + * @param {string} barterItemId + * @returns Array of Item objects + */ + findBarterItems(by: string, pmcData: IPmcData, barterItemId: string): Item[]; + /** + * + * @param pmcData + * @param items + * @param insuredItems insured items to not replace ids for + * @param fastPanel + * @returns + */ + replaceIDs(pmcData: IPmcData, items: Item[], insuredItems?: InsuredItem[], fastPanel?: any): any[]; + /** + * WARNING, SLOW. Recursively loop down through an items hierarchy to see if any of the ids match the supplied list, return true if any do + * @param {string} tpl + * @param {Array} tplsToCheck + * @returns boolean + */ + doesItemOrParentsIdMatch(tpl: string, tplsToCheck: string[]): boolean; + /** + * Return true if item is a quest item + * @param {string} tpl + * @returns boolean + */ + isQuestItem(tpl: string): boolean; + /** + * Get the inventory size of an item + * @param items + * @param rootItemId + * @returns ItemSize object (width and height) + */ + getItemSize(items: Item[], rootItemId: string): ItemHelper.ItemSize; + /** + * Get a random cartridge from an items Filter property + * @param item + * @returns + */ + getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string; + createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record, caliber?: string): Item; + protected getRandomValidCaliber(magTemplate: ITemplateItem): string; + protected drawAmmoTpl(caliber: string, staticAmmoDist: Record): string; + /** + * + * @param parentId container cartridges will be placed in + * @param ammoTpl Cartridge to insert + * @param stackCount Count of cartridges inside parent + * @param location Location inside parent (e.g. 0, 1) + * @returns Item + */ + createCartridges(parentId: string, ammoTpl: string, stackCount: number, location: number): Item; + /** + * Get the size of a stack, return 1 if no stack object count property found + * @param item Item to get stack size of + * @returns size of stack + */ + getItemStackSize(item: Item): number; + /** + * Get the name of an item from the locale file using the item tpl + * @param itemTpl Tpl of item to get name of + * @returns Name of item + */ + getItemName(itemTpl: string): string; +} +declare namespace ItemHelper { + interface ItemSize { + width: number; + height: number; + } +} +export { ItemHelper }; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/NotificationSendHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/NotificationSendHelper.d.ts new file mode 100644 index 0000000..c80f22d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/NotificationSendHelper.d.ts @@ -0,0 +1,12 @@ +import { INotification } from "../models/eft/notifier/INotifier"; +import { WebSocketServer } from "../servers/WebSocketServer"; +import { NotificationService } from "../services/NotificationService"; +export declare class NotificationSendHelper { + protected webSocketServer: WebSocketServer; + protected notificationService: NotificationService; + constructor(webSocketServer: WebSocketServer, notificationService: NotificationService); + /** + * Send notification message to the appropriate channel + */ + sendMessage(sessionID: string, notificationMessage: INotification): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/NotifierHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/NotifierHelper.d.ts new file mode 100644 index 0000000..738b69a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/NotifierHelper.d.ts @@ -0,0 +1,17 @@ +import { INotification } from "../models/eft/notifier/INotifier"; +import { Message, MessageContentRagfair } from "../models/eft/profile/IAkiProfile"; +import { HttpServerHelper } from "./HttpServerHelper"; +export declare class NotifierHelper { + protected httpServerHelper: HttpServerHelper; + /** + * The default notification sent when waiting times out. + */ + protected defaultNotification: INotification; + constructor(httpServerHelper: HttpServerHelper); + getDefaultNotification(): INotification; + /** Creates a new notification that displays the "Your offer was sold!" prompt and removes sold offer from "My Offers" on clientside */ + createRagfairOfferSoldNotification(dialogueMessage: Message, ragfairData: MessageContentRagfair): INotification; + /** Creates a new notification with the specified dialogueMessage object. */ + createNewMessageNotification(dialogueMessage: Message): INotification; + getWebSocketServer(sessionID: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/PaymentHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/PaymentHelper.d.ts new file mode 100644 index 0000000..2d068a4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/PaymentHelper.d.ts @@ -0,0 +1,14 @@ +export declare class PaymentHelper { + /** + * Check whether tpl is Money + * @param {string} tpl + * @returns void + */ + isMoneyTpl(tpl: string): boolean; + /** + * Gets currency TPL from TAG + * @param {string} currency + * @returns string + */ + getCurrency(currency: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/PresetHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/PresetHelper.d.ts new file mode 100644 index 0000000..cea210e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/PresetHelper.d.ts @@ -0,0 +1,18 @@ +import { Preset } from "../models/eft/common/IGlobals"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class PresetHelper { + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected lookup: Record; + protected defaultPresets: Record; + constructor(jsonUtil: JsonUtil, databaseServer: DatabaseServer); + hydratePresetStore(input: Record): void; + getDefaultPresets(): Record; + isPreset(id: string): boolean; + hasPreset(templateId: string): boolean; + getPreset(id: string): Preset; + getPresets(templateId: string): Preset[]; + getDefaultPreset(templateId: string): Preset; + getBaseItemTpl(presetId: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/ProbabilityHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/ProbabilityHelper.d.ts new file mode 100644 index 0000000..7a0676c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/ProbabilityHelper.d.ts @@ -0,0 +1,14 @@ +import { ILogger } from "../models/spt/utils/ILogger"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class ProbabilityHelper { + protected logger: ILogger; + protected randomUtil: RandomUtil; + constructor(logger: ILogger, randomUtil: RandomUtil); + /** + * Chance to roll a number out of 100 + * @param chance Percentage chance roll should success + * @param scale scale of chance to allow support of numbers > 1-100 + * @returns true if success + */ + rollChance(chance: number, scale?: number): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/ProfileHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/ProfileHelper.d.ts new file mode 100644 index 0000000..79652ad --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/ProfileHelper.d.ts @@ -0,0 +1,66 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Stats } from "../models/eft/common/tables/IBotBase"; +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { ProfileSnapshotService } from "../services/ProfileSnapshotService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { Watermark } from "../utils/Watermark"; +import { ItemHelper } from "./ItemHelper"; +export declare class ProfileHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected watermark: Watermark; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected profileSnapshotService: ProfileSnapshotService; + constructor(logger: ILogger, jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileSnapshotService: ProfileSnapshotService); + resetProfileQuestCondition(sessionID: string, conditionId: string): void; + /** + * Get all profiles from server + * @returns Dictionary of profiles + */ + getProfiles(): Record; + getCompleteProfile(sessionID: string): IPmcData[]; + /** + * Fix xp doubling on post-raid xp reward screen by sending a 'dummy' profile to the post-raid screen + * Server saves the post-raid changes prior to the xp screen getting the profile, this results in the xp screen using + * the now updated profile values as a base, meaning it shows x2 xp gained + * Instead, clone the post-raid profile (so we dont alter its values), apply the pre-raid xp values to the cloned objects and return + * Delete snapshot of pre-raid profile prior to returning profile data + * @param sessionId Session id + * @param output pmc and scav profiles array + * @param pmcProfile post-raid pmc profile + * @param scavProfile post-raid scav profile + * @returns updated profile array + */ + protected postRaidXpWorkaroundFix(sessionId: string, output: IPmcData[], pmcProfile: IPmcData, scavProfile: IPmcData): IPmcData[]; + isNicknameTaken(info: IValidateNicknameRequestData, sessionID: string): boolean; + /** + * Add experience to a PMC inside the players profile + * @param sessionID Session id + * @param experienceToAdd Experience to add to PMC character + */ + addExperienceToPmc(sessionID: string, experienceToAdd: number): void; + getProfileByPmcId(pmcId: string): IPmcData; + getExperience(level: number): number; + getMaxLevel(): number; + getDefaultAkiDataObject(): any; + getFullProfile(sessionID: string): IAkiProfile; + getPmcProfile(sessionID: string): IPmcData; + getScavProfile(sessionID: string): IPmcData; + getDefaultCounters(): Stats; + protected isWiped(sessionID: string): boolean; + protected getServerVersion(): string; + /** + * Iterate over player profile inventory items and find the secure container and remove it + * @param profile Profile to remove secure container from + * @returns profile without secure container + */ + removeSecureContainer(profile: IPmcData): IPmcData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/QuestConditionHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/QuestConditionHelper.d.ts new file mode 100644 index 0000000..90ee560 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/QuestConditionHelper.d.ts @@ -0,0 +1,7 @@ +import { AvailableForConditions } from "../models/eft/common/tables/IQuest"; +export declare class QuestConditionHelper { + getQuestConditions(q: AvailableForConditions[], furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[]; + getLevelConditions(q: AvailableForConditions[], furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[]; + getLoyaltyConditions(q: AvailableForConditions[], furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[]; + protected filterConditions(q: AvailableForConditions[], questType: string, furtherFilter?: (a: AvailableForConditions) => AvailableForConditions[]): AvailableForConditions[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/QuestHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/QuestHelper.d.ts new file mode 100644 index 0000000..de7cba2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/QuestHelper.d.ts @@ -0,0 +1,214 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Quest } from "../models/eft/common/tables/IBotBase"; +import { AvailableForConditions, AvailableForProps, IQuest, Reward } from "../models/eft/common/tables/IQuest"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData"; +import { IFailQuestRequestData } from "../models/eft/quests/IFailQuestRequestData"; +import { QuestStatus } from "../models/enums/QuestStatus"; +import { IQuestConfig } from "../models/spt/config/IQuestConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocaleService } from "../services/LocaleService"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { DialogueHelper } from "./DialogueHelper"; +import { ItemHelper } from "./ItemHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { ProfileHelper } from "./ProfileHelper"; +import { RagfairServerHelper } from "./RagfairServerHelper"; +import { TraderHelper } from "./TraderHelper"; +export declare class QuestHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected timeUtil: TimeUtil; + protected hashUtil: HashUtil; + protected itemHelper: ItemHelper; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected localeService: LocaleService; + protected ragfairServerHelper: RagfairServerHelper; + protected dialogueHelper: DialogueHelper; + protected profileHelper: ProfileHelper; + protected paymentHelper: PaymentHelper; + protected localisationService: LocalisationService; + protected traderHelper: TraderHelper; + protected configServer: ConfigServer; + protected questConfig: IQuestConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, traderHelper: TraderHelper, configServer: ConfigServer); + /** + * Get status of a quest by quest id + * @param pmcData Profile to search + * @param questID Quest id to look up + * @returns QuestStatus enum + */ + getQuestStatus(pmcData: IPmcData, questID: string): QuestStatus; + /** + * returns true is the level condition is satisfied + * @param playerLevel Players level + * @param condition Quest condition + * @returns true if player level is greater than or equal to quest + */ + doesPlayerLevelFulfilCondition(playerLevel: number, condition: AvailableForConditions): boolean; + /** + * Get the quests found in both arrays (inner join) + * @param before Array of quests #1 + * @param after Array of quests #2 + * @returns Reduction of cartesian product between two quest arrays + */ + getDeltaQuests(before: IQuest[], after: IQuest[]): IQuest[]; + /** + * Increase skill points of a skill on player profile + * @param sessionID Session id + * @param pmcData Player profile + * @param skillName Name of skill to increase skill points of + * @param progressAmount Amount of skill points to add to skill + */ + rewardSkillPoints(sessionID: string, pmcData: IPmcData, skillName: string, progressAmount: number): void; + /** + * Get quest name by quest id + * @param questId id to get + * @returns + */ + getQuestNameFromLocale(questId: string): string; + /** + * Check if trader has sufficient loyalty to fulfill quest requirement + * @param questProperties Quest props + * @param profile Player profile + * @returns true if loyalty is high enough to fulfill quest requirement + */ + traderStandingRequirementCheck(questProperties: AvailableForProps, profile: IPmcData): boolean; + protected processReward(reward: Reward): Reward[]; + /** + * Gets a flat list of reward items for the given quest at a specific state (e.g. Fail/Success) + * @param quest quest to get rewards for + * @param state Quest status that holds the items (Started, Success, Fail) + * @returns array of items with the correct maxStack + */ + getQuestRewardItems(quest: IQuest, state: QuestStatus): Reward[]; + /** + * Look up quest in db by accepted quest id and construct a profile-ready object ready to store in profile + * @param pmcData Player profile + * @param newState State the new quest should be in when returned + * @param acceptedQuest Details of accepted quest from client + */ + getQuestReadyForProfile(pmcData: IPmcData, newState: QuestStatus, acceptedQuest: IAcceptQuestRequestData): Quest; + /** + * TODO: what is going on here + * @param acceptedQuestId Quest to add to profile + * @param sessionID Session id + * @returns Array of quests in profile + quest passed in as param + */ + acceptedUnlocked(acceptedQuestId: string, sessionID: string): IQuest[]; + /** + * TODO: what is going on here + * @param failedQuestId + * @param sessionID Session id + * @returns + */ + failedUnlocked(failedQuestId: string, sessionID: string): IQuest[]; + /** + * Adjust quest money rewards by passed in multiplier + * @param quest Quest to multiple money rewards + * @param multiplier Value to adjust money rewards by + * @returns Updated quest + */ + applyMoneyBoost(quest: IQuest, multiplier: number): IQuest; + /** + * Sets the item stack to new value, or delete the item if value <= 0 + * // TODO maybe merge this function and the one from customization + * @param pmcData Profile + * @param itemId id of item to adjust stack size of + * @param newStackSize Stack size to adjust to + * @param sessionID Session id + * @param output ItemEvent router response + */ + changeItemStack(pmcData: IPmcData, itemId: string, newStackSize: number, sessionID: string, output: IItemEventRouterResponse): void; + /** + * Get quests, strip all requirement conditions except level + * @param quests quests to process + * @returns quest array without conditions + */ + protected getQuestsWithOnlyLevelRequirementStartCondition(quests: IQuest[]): IQuest[]; + /** + * Remove all quest conditions except for level requirement + * @param quest quest to clean + * @returns reset IQuest object + */ + getQuestWithOnlyLevelRequirementStartCondition(quest: IQuest): IQuest; + /** + * Fail a quest in a player profile + * @param pmcData Player profile + * @param failRequest Fail quest request data + * @param sessionID Session id + * @returns Item event router response + */ + failQuest(pmcData: IPmcData, failRequest: IFailQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Get List of All Quests from db + * NOT CLONED + * @returns Array of IQuest objects + */ + getQuestsFromDb(): IQuest[]; + /** + * Get quest by id from database (repeatables are stored in profile, check there if questId not found) + * @param questId Id of quest to find + * @param pmcData Player profile + * @returns IQuest object + */ + getQuestFromDb(questId: string, pmcData: IPmcData): IQuest; + /** + * Get the locale Id from locale db for a quest message + * @param questMessageId Quest message id to look up + * @returns Locale Id from locale db + */ + getQuestLocaleIdFromDb(questMessageId: string): string; + /** + * Alter a quests state + Add a record to its status timers object + * @param pmcData Profile to update + * @param newQuestState New state the quest should be in + * @param questId Id of the quest to alter the status of + */ + updateQuestState(pmcData: IPmcData, newQuestState: QuestStatus, questId: string): void; + /** + * Give player quest rewards - Skills/exp/trader standing/items/assort unlocks - Returns reward items player earned + * @param pmcData Player profile + * @param questId questId of quest to get rewards for + * @param state State of the quest to get rewards for + * @param sessionId Session id + * @param questResponse Response to send back to client + * @returns Array of reward objects + */ + applyQuestReward(pmcData: IPmcData, questId: string, state: QuestStatus, sessionId: string, questResponse: IItemEventRouterResponse): Reward[]; + /** + * WIP - Find hideout craft id and add to unlockedProductionRecipe array in player profile + * also update client response recipeUnlocked array with craft id + * @param pmcData Player profile + * @param craftUnlockReward Reward item from quest with craft unlock details + * @param questDetails Quest with craft unlock reward + * @param sessionID Session id + * @param response Response to send back to client + */ + protected findAndAddHideoutProductionIdToProfile(pmcData: IPmcData, craftUnlockReward: Reward, questDetails: IQuest, sessionID: string, response: IItemEventRouterResponse): void; + /** + * Get players intel center bonus from profile + * @param pmcData player profile + * @returns bonus as a percent + */ + protected getIntelCenterRewardBonus(pmcData: IPmcData): number; + /** + * Find quest with 'findItem' requirement that needs the item tpl be handed in + * @param itemTpl item tpl to look for + * @returns 'FindItem' condition id + */ + getFindItemIdForQuestHandIn(itemTpl: string): string; + /** + * Add all quests to a profile with the provided statuses + * @param pmcProfile profile to update + * @param statuses statuses quests should have + */ + addAllQuestsToProfile(pmcProfile: IPmcData, statuses: QuestStatus[]): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairHelper.d.ts new file mode 100644 index 0000000..2c8dbb5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairHelper.d.ts @@ -0,0 +1,43 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { IGetOffersResult } from "../models/eft/ragfair/IGetOffersResult"; +import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RagfairLinkedItemService } from "../services/RagfairLinkedItemService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { HandbookHelper } from "./HandbookHelper"; +import { ItemHelper } from "./ItemHelper"; +import { TraderAssortHelper } from "./TraderAssortHelper"; +import { UtilityHelper } from "./UtilityHelper"; +export declare class RagfairHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected traderAssortHelper: TraderAssortHelper; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected itemHelper: ItemHelper; + protected ragfairLinkedItemService: RagfairLinkedItemService; + protected utilityHelper: UtilityHelper; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, traderAssortHelper: TraderAssortHelper, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, ragfairLinkedItemService: RagfairLinkedItemService, utilityHelper: UtilityHelper, configServer: ConfigServer); + /** + * Gets currency TAG from TPL + * @param {string} currency + * @returns string + */ + getCurrencyTag(currency: string): string; + filterCategories(sessionID: string, info: ISearchRequestData): string[]; + getDisplayableAssorts(sessionID: string): Record; + protected getCategoryList(handbookId: string): string[]; + countCategories(result: IGetOffersResult): void; + /** + * Merges Root Items + * Ragfair allows abnormally large stacks. + */ + mergeStackable(items: Item[]): Item[]; + getCurrencySymbol(currencyTpl: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairOfferHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairOfferHelper.d.ts new file mode 100644 index 0000000..3d0d570 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairOfferHelper.d.ts @@ -0,0 +1,74 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { ISearchRequestData } from "../models/eft/ragfair/ISearchRequestData"; +import { IQuestConfig } from "../models/spt/config/IQuestConfig"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { LocaleService } from "../services/LocaleService"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { HashUtil } from "../utils/HashUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { DialogueHelper } from "./DialogueHelper"; +import { ItemHelper } from "./ItemHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { PresetHelper } from "./PresetHelper"; +import { ProfileHelper } from "./ProfileHelper"; +import { RagfairHelper } from "./RagfairHelper"; +import { RagfairServerHelper } from "./RagfairServerHelper"; +import { RagfairSortHelper } from "./RagfairSortHelper"; +import { TraderHelper } from "./TraderHelper"; +export declare class RagfairOfferHelper { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected hashUtil: HashUtil; + protected eventOutputHolder: EventOutputHolder; + protected databaseServer: DatabaseServer; + protected traderHelper: TraderHelper; + protected saveServer: SaveServer; + protected dialogueHelper: DialogueHelper; + protected itemHelper: ItemHelper; + protected paymentHelper: PaymentHelper; + protected presetHelper: PresetHelper; + protected profileHelper: ProfileHelper; + protected ragfairServerHelper: RagfairServerHelper; + protected ragfairSortHelper: RagfairSortHelper; + protected ragfairHelper: RagfairHelper; + protected ragfairOfferService: RagfairOfferService; + protected localeService: LocaleService; + protected configServer: ConfigServer; + protected static goodSoldTemplate: string; + protected ragfairConfig: IRagfairConfig; + protected questConfig: IQuestConfig; + constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, traderHelper: TraderHelper, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer); + getValidOffers(searchRequest: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; + getOffersForBuild(info: ISearchRequestData, itemsToAdd: string[], assorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; + /** + * Has a traders offer ran out of stock to sell to player + * @param offer Offer to check stock of + * @returns true if out of stock + */ + protected traderOutOfStock(offer: IRagfairOffer): boolean; + /** + * Check if trader offers' BuyRestrictionMax value has been reached + * @param offer offer to check restriction properties of + * @returns true if restriction reached, false if no restrictions/not reached + */ + protected traderBuyRestrictionReached(offer: IRagfairOffer): boolean; + /** + * Get an array of flea offers that are inaccessible to player due to their inadequate loyalty level + * @param offers Offers to check + * @param pmcProfile Players profile with trader loyalty levels + */ + protected getLoyaltyLockedOffers(offers: IRagfairOffer[], pmcProfile: IPmcData): string[]; + processOffersOnProfile(sessionID: string): boolean; + protected getProfileOffers(sessionID: string): IRagfairOffer[]; + protected deleteOfferByOfferId(sessionID: string, offerId: string): void; + protected completeOffer(sessionID: string, offer: IRagfairOffer, boughtAmount: number): IItemEventRouterResponse; + isDisplayableOffer(info: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record, offer: IRagfairOffer, pmcProfile: IPmcData): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairSellHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairSellHelper.d.ts new file mode 100644 index 0000000..bf7aeb6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairSellHelper.d.ts @@ -0,0 +1,36 @@ +import { SellResult } from "../models/eft/ragfair/IRagfairOffer"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class RagfairSellHelper { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected timeUtil: TimeUtil; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer); + /** + * Get the percent chance to sell an item based on its average listed price vs player chosen listing price + * @param baseChancePercent Base chance to sell item + * @param averageOfferPriceRub Price of average offer in roubles + * @param playerListedPriceRub Price player listed item for in roubles + * @returns percent value + */ + calculateSellChance(baseChancePercent: number, averageOfferPriceRub: number, playerListedPriceRub: number): number; + /** + * Get percent chance to sell an item when price is below items average listing price + * @param playerListedPriceRub Price player listed item for in roubles + * @param averageOfferPriceRub Price of average offer in roubles + * @returns percent value + */ + protected getSellMultiplierWhenPlayerPriceIsBelowAverageListingPrice(averageOfferPriceRub: number, playerListedPriceRub: number): number; + /** + * Determine if the offer being listed will be sold + * @param sellChancePercent chance item will sell + * @param itemSellCount count of items to sell + * @returns Array of purchases of item(s) listed + */ + rollForSale(sellChancePercent: number, itemSellCount: number): SellResult[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairServerHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairServerHelper.d.ts new file mode 100644 index 0000000..bfe6cc3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairServerHelper.d.ts @@ -0,0 +1,63 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { MemberCategory } from "../models/enums/MemberCategory"; +import { IQuestConfig } from "../models/spt/config/IQuestConfig"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { ItemFilterService } from "../services/ItemFilterService"; +import { LocaleService } from "../services/LocaleService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { DialogueHelper } from "./DialogueHelper"; +import { ItemHelper } from "./ItemHelper"; +import { ProfileHelper } from "./ProfileHelper"; +/** + * Helper class for common ragfair server actions + */ +export declare class RagfairServerHelper { + protected randomUtil: RandomUtil; + protected hashUtil: HashUtil; + protected saveServer: SaveServer; + protected databaseServer: DatabaseServer; + protected profileHelper: ProfileHelper; + protected itemHelper: ItemHelper; + protected localeService: LocaleService; + protected dialogueHelper: DialogueHelper; + protected jsonUtil: JsonUtil; + protected itemFilterService: ItemFilterService; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + protected questConfig: IQuestConfig; + protected static goodsReturnedTemplate: string; + constructor(randomUtil: RandomUtil, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, profileHelper: ProfileHelper, itemHelper: ItemHelper, localeService: LocaleService, dialogueHelper: DialogueHelper, jsonUtil: JsonUtil, itemFilterService: ItemFilterService, configServer: ConfigServer); + /** + * Is item valid / on blacklist / quest item + * @param itemDetails + * @returns boolean + */ + isItemValidRagfairItem(itemDetails: [boolean, ITemplateItem]): boolean; + protected isItemBlacklisted(itemTemplateId: string): boolean; + isTrader(userID: string): boolean; + isPlayer(userID: string): boolean; + returnItems(sessionID: string, items: Item[]): void; + calculateDynamicStackCount(tplId: string, isWeaponPreset: boolean): number; + /** + * Choose a currency at random with bias + * @returns currency tpl + */ + getDynamicOfferCurrency(): string; + getMemberType(userID: string): MemberCategory; + getNickname(userID: string): string; + getPresetItems(item: any): Item[]; + getPresetItemsByTpl(item: Item): Item[]; + /** + * Generate new unique ids for the children while preserving hierarchy + * @param item base item + * @param preset + * @returns Item array with new IDs + */ + reparentPresets(item: Item, preset: Item[]): Item[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairSortHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairSortHelper.d.ts new file mode 100644 index 0000000..6a06528 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairSortHelper.d.ts @@ -0,0 +1,28 @@ +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { RagfairSort } from "../models/enums/RagfairSort"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocaleService } from "../services/LocaleService"; +export declare class RagfairSortHelper { + protected databaseServer: DatabaseServer; + protected localeService: LocaleService; + constructor(databaseServer: DatabaseServer, localeService: LocaleService); + /** + * Sort a list of ragfair offers by something (id/rating/offer name/price/expiry time) + * @param offers Offers to sort + * @param type How to sort it + * @param direction Ascending/descending + * @returns Sorted offers + */ + sortOffers(offers: IRagfairOffer[], type: RagfairSort, direction?: number): IRagfairOffer[]; + protected sortOffersByID(a: IRagfairOffer, b: IRagfairOffer): number; + protected sortOffersByRating(a: IRagfairOffer, b: IRagfairOffer): number; + protected sortOffersByName(a: IRagfairOffer, b: IRagfairOffer): number; + /** + * Order two offers by rouble price value + * @param a Offer a + * @param b Offer b + * @returns + */ + protected sortOffersByPrice(a: IRagfairOffer, b: IRagfairOffer): number; + protected sortOffersByExpiry(a: IRagfairOffer, b: IRagfairOffer): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairTaxHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairTaxHelper.d.ts new file mode 100644 index 0000000..820facb --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/RagfairTaxHelper.d.ts @@ -0,0 +1,16 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RagfairPriceService } from "../services/RagfairPriceService"; +import { ItemHelper } from "./ItemHelper"; +import { ILogger } from "../models/spt/utils/ILogger"; +export declare class RagfairTaxHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected ragfairPriceService: RagfairPriceService; + protected itemHelper: ItemHelper; + constructor(logger: ILogger, databaseServer: DatabaseServer, ragfairPriceService: RagfairPriceService, itemHelper: ItemHelper); + calculateTax(item: Item, pmcData: IPmcData, requirementsValue: number, offerItemCount: number, sellInOnePiece: boolean): number; + protected calculateItemWorth(item: Item, itemTemplate: ITemplateItem, itemCount: number, pmcData: IPmcData, isRootItem?: boolean): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/RepairHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/RepairHelper.d.ts new file mode 100644 index 0000000..0d0257a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/RepairHelper.d.ts @@ -0,0 +1,35 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem, Props } from "../models/eft/common/tables/ITemplateItem"; +import { IRepairConfig } from "../models/spt/config/IRepairConfig"; +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 RepairHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected repairConfig: IRepairConfig; + constructor(logger: ILogger, jsonUtil: JsonUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Alter an items durability after a repair by trader/repair kit + * @param itemToRepair item to update durability details + * @param itemToRepairDetails db details of item to repair + * @param isArmor Is item being repaired a piece of armor + * @param amountToRepair how many unit of durability to repair + * @param useRepairKit Is item being repaired with a repair kit + * @param applyMaxDurabilityDegradation should item have max durability reduced + */ + updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit: boolean, traderQualityMultipler: number, applyMaxDurabilityDegradation?: boolean): void; + protected getRandomisedArmorRepairDegradationValue(armorMaterial: string, isRepairKit: boolean, armorMax: number, traderQualityMultipler: number): number; + protected getRandomisedWeaponRepairDegradationValue(itemProps: Props, isRepairKit: boolean, weaponMax: number, traderQualityMultipler: number): number; + /** + * Is the supplied tpl a weapon + * @param tpl tplId to check is a weapon + * @returns true if tpl is a weapon + */ + isWeaponTemplate(tpl: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/SecureContainerHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/SecureContainerHelper.d.ts new file mode 100644 index 0000000..9e2bc32 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/SecureContainerHelper.d.ts @@ -0,0 +1,13 @@ +import { Item } from "../models/eft/common/tables/IItem"; +import { ItemHelper } from "./ItemHelper"; +export interface OwnerInventoryItems { + from: Item[]; + to: Item[]; + sameInventory: boolean; + isMail: boolean; +} +export declare class SecureContainerHelper { + protected itemHelper: ItemHelper; + constructor(itemHelper: ItemHelper); + getSecureContainerItems(items: Item[]): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/TradeHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/TradeHelper.d.ts new file mode 100644 index 0000000..6811dd1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/TradeHelper.d.ts @@ -0,0 +1,54 @@ +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item, Upd } from "../models/eft/common/tables/IItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBuyTradeRequestData } from "../models/eft/trade/IProcessBuyTradeRequestData"; +import { IProcessSellTradeRequestData } from "../models/eft/trade/IProcessSellTradeRequestData"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { RagfairServer } from "../servers/RagfairServer"; +import { FenceService } from "../services/FenceService"; +import { PaymentService } from "../services/PaymentService"; +export declare class TradeHelper { + protected logger: ILogger; + protected eventOutputHolder: EventOutputHolder; + protected traderHelper: TraderHelper; + protected itemHelper: ItemHelper; + protected paymentService: PaymentService; + protected fenceService: FenceService; + protected inventoryHelper: InventoryHelper; + protected ragfairServer: RagfairServer; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, traderHelper: TraderHelper, itemHelper: ItemHelper, paymentService: PaymentService, fenceService: FenceService, inventoryHelper: InventoryHelper, ragfairServer: RagfairServer, configServer: ConfigServer); + /** + * Buy item from flea or trader + * @param pmcData Player profile + * @param buyRequestData data from client + * @param sessionID Session id + * @param foundInRaid Should item be found in raid + * @param upd optional item details used when buying from flea + * @returns + */ + buyItem(pmcData: IPmcData, buyRequestData: IProcessBuyTradeRequestData, sessionID: string, foundInRaid: boolean, upd: Upd): IItemEventRouterResponse; + /** + * Sell item to trader + * @param pmcData Profile to update + * @param sellRequest request data + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + sellItem(pmcData: IPmcData, sellRequest: IProcessSellTradeRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Increment the assorts buy count by number of items purchased + * Show error on screen if player attempts to buy more than what the buy max allows + * @param assortBeingPurchased assort being bought + * @param itemsPurchasedCount number of items being bought + */ + protected incrementAssortBuyCount(assortBeingPurchased: Item, itemsPurchasedCount: number): void; + protected checkPurchaseIsWithinTraderItemLimit(assortBeingPurchased: Item, assortId: string, count: number): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/TraderAssortHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/TraderAssortHelper.d.ts new file mode 100644 index 0000000..a0294a1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/TraderAssortHelper.d.ts @@ -0,0 +1,82 @@ +import { RagfairAssortGenerator } from "../generators/RagfairAssortGenerator"; +import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITrader, ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { TraderAssortService } from "../services/TraderAssortService"; +import { TraderPurchasePersisterService } from "../services/TraderPurchasePersisterService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { MathUtil } from "../utils/MathUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { AssortHelper } from "./AssortHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { ProfileHelper } from "./ProfileHelper"; +import { TraderHelper } from "./TraderHelper"; +export declare class TraderAssortHelper { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected mathUtil: MathUtil; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected profileHelper: ProfileHelper; + protected assortHelper: AssortHelper; + protected paymentHelper: PaymentHelper; + protected ragfairAssortGenerator: RagfairAssortGenerator; + protected ragfairOfferGenerator: RagfairOfferGenerator; + protected traderAssortService: TraderAssortService; + protected localisationService: LocalisationService; + protected traderPurchasePersisterService: TraderPurchasePersisterService; + protected traderHelper: TraderHelper; + protected fenceService: FenceService; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + protected mergedQuestAssorts: Record>; + protected createdMergedQuestAssorts: boolean; + constructor(logger: ILogger, jsonUtil: JsonUtil, mathUtil: MathUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, profileHelper: ProfileHelper, assortHelper: AssortHelper, paymentHelper: PaymentHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferGenerator: RagfairOfferGenerator, traderAssortService: TraderAssortService, localisationService: LocalisationService, traderPurchasePersisterService: TraderPurchasePersisterService, traderHelper: TraderHelper, fenceService: FenceService, configServer: ConfigServer); + /** + * Get a traders assorts + * Can be used for returning ragfair / fence assorts + * Filter out assorts not unlocked due to level OR quest completion + * @param sessionId session id + * @param traderId traders id + * @returns a traders' assorts + */ + getAssort(sessionId: string, traderId: string, flea?: boolean): ITraderAssort; + /** + * Create a dict of all assort id = quest id mappings used to work out what items should be shown to player based on the quests they've started/completed/failed + */ + protected hydrateMergedQuestAssorts(): void; + /** + * Reset a traders assorts and move nextResupply value to future + * Flag trader as needing a flea offer reset to be picked up by flea update() function + * @param trader trader details to alter + */ + resetExpiredTrader(trader: ITrader): void; + /** + * Does the supplied trader need its assorts refreshed + * @param traderID Trader to check + * @returns true they need refreshing + */ + traderAssortsHaveExpired(traderID: string): boolean; + /** + * Iterate over all assorts barter_scheme values, find barters selling for money and multiply by multipler in config + * @param traderAssort Assorts to multiple price of + */ + protected multiplyItemPricesByConfigMultiplier(traderAssort: ITraderAssort): void; + /** + * Get an array of pristine trader items prior to any alteration by player (as they were on server start) + * @param traderId trader id + * @returns array of Items + */ + protected getPristineTraderAssorts(traderId: string): Item[]; + /** + * Returns generated ragfair offers in a trader assort format + * @returns Trader assort object + */ + protected getRagfairDataAsTraderAssort(): ITraderAssort; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/TraderHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/TraderHelper.d.ts new file mode 100644 index 0000000..49aea28 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/TraderHelper.d.ts @@ -0,0 +1,158 @@ +import { FenceLevel } from "../models/eft/common/IGlobals"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IBarterScheme, ITraderAssort, ITraderBase, LoyaltyLevel } from "../models/eft/common/tables/ITrader"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { FenceService } from "../services/FenceService"; +import { LocalisationService } from "../services/LocalisationService"; +import { PlayerService } from "../services/PlayerService"; +import { TimeUtil } from "../utils/TimeUtil"; +import { HandbookHelper } from "./HandbookHelper"; +import { ItemHelper } from "./ItemHelper"; +import { PaymentHelper } from "./PaymentHelper"; +import { ProfileHelper } from "./ProfileHelper"; +export declare class TraderHelper { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected saveServer: SaveServer; + protected profileHelper: ProfileHelper; + protected paymentHelper: PaymentHelper; + protected itemHelper: ItemHelper; + protected handbookHelper: HandbookHelper; + protected playerService: PlayerService; + protected localisationService: LocalisationService; + protected fenceService: FenceService; + protected timeUtil: TimeUtil; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + /** Dictionary of item tpl and the highest trader rouble price */ + protected highestTraderPriceItems: Record; + constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemHelper: ItemHelper, handbookHelper: HandbookHelper, playerService: PlayerService, localisationService: LocalisationService, fenceService: FenceService, timeUtil: TimeUtil, configServer: ConfigServer); + getTrader(traderID: string, sessionID: string): ITraderBase; + getTraderAssortsById(traderId: string): ITraderAssort; + /** + * Reset a profiles trader data back to its initial state as seen by a level 1 player + * Does NOT take into account different profile levels + * @param sessionID session id + * @param traderID trader id to reset + */ + resetTrader(sessionID: string, traderID: string): void; + /** + * Alter a traders unlocked status + * @param traderId Trader to alter + * @param status New status to use + * @param sessionId Session id + */ + setTraderUnlockedState(traderId: string, status: boolean, sessionId: string): void; + /** + * Get a list of items and their prices from player inventory that can be sold to a trader + * @param traderID trader id being traded with + * @param sessionID session id + * @returns IBarterScheme[][] + */ + getPurchasesData(traderID: string, sessionID: string): Record; + /** + * Should item be skipped when selling to trader according to its sell categories and other checks + * @param pmcData Profile + * @param item Item to be checked is sellable to trader + * @param sellCategory categories trader will buy + * @param traderId Trader item is being checked can be sold to + * @returns true if should NOT be sold to trader + */ + protected isItemUnSellableToTrader(pmcData: IPmcData, item: Item, sellCategory: string[], traderId: string): boolean; + /** + * Check if item has durability so low it precludes it from being sold to the trader (inclusive) + * @param item Item to check durability of + * @param traderId Trader item is sold to + * @returns + */ + protected itemIsBelowSellableDurabilityThreshhold(item: Item, traderId: string): boolean; + /** + * Get the percentage threshold value a trader will buy armor/weapons above + * @param traderId Trader to look up + * @returns percentage + */ + protected getTraderDurabiltyPurchaseThreshold(traderId: string): number; + /** + * Get the price of passed in item and all of its attached children (mods) + * Take into account bonuses/adjustments e.g. discounts + * @param pmcData profile data + * @param item item to calculate price of + * @param buyPriceCoefficient + * @param fenceInfo fence data + * @param traderBase trader details + * @param currencyTpl Currency to get price as + * @returns price of item + children + */ + protected getAdjustedItemPrice(pmcData: IPmcData, item: Item, buyPriceCoefficient: number, fenceInfo: FenceLevel, traderBase: ITraderBase, currencyTpl: string): number; + /** + * Get the raw price of item+child items from handbook without any modification + * @param pmcData profile data + * @param item item to calculate price of + * @returns price as number + */ + protected getRawItemPrice(pmcData: IPmcData, item: Item): number; + /** + * Get discount modifier for desired trader + * @param trader Trader to get discount for + * @param buyPriceCoefficient + * @param fenceInfo fence info, needed if getting fence modifier value + * @returns discount modifier value + */ + protected getTraderDiscount(trader: ITraderBase, buyPriceCoefficient: number, fenceInfo: FenceLevel): number; + /** + * Add standing to a trader and level them up if exp goes over level threshold + * @param sessionId Session id + * @param traderId Traders id + * @param standingToAdd Standing value to add to trader + */ + addStandingToTrader(sessionId: string, traderId: string, standingToAdd: number): void; + /** + * Calculate traders level based on exp amount and increments level if over threshold + * @param traderID trader to process + * @param sessionID session id + */ + lvlUp(traderID: string, sessionID: string): void; + /** + * Get the next update timestamp for a trader + * @param traderID Trader to look up update value for + * @returns future timestamp + */ + getNextUpdateTimestamp(traderID: string): number; + /** + * Get the reset time between trader assort refreshes in seconds + * @param traderId Trader to look up + * @returns Time in seconds + */ + getTraderUpdateSeconds(traderId: string): number; + /** + * check if an item is allowed to be sold to a trader + * @param categoriesTraderBuys array of allowed categories + * @param tplToCheck itemTpl of inventory + * @returns boolean if item can be sold to trader + */ + doesTraderBuyItem(categoriesTraderBuys: string[], tplToCheck: string): boolean; + getLoyaltyLevel(traderID: string, pmcData: IPmcData): LoyaltyLevel; + /** + * Store the purchase of an assort from a trader in the player profile + * @param sessionID Session id + * @param newPurchaseDetails New item assort id + count + */ + addTraderPurchasesToPlayerProfile(sessionID: string, newPurchaseDetails: { + items: { + item_id: string; + count: number; + }[]; + tid: string; + }): void; + /** + * Get the highest rouble price for an item from traders + * @param tpl Item to look up highest pride for + * @returns highest rouble cost for item + */ + getHighestTraderPriceRouble(tpl: string): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/UtilityHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/UtilityHelper.d.ts new file mode 100644 index 0000000..5d9f482 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/UtilityHelper.d.ts @@ -0,0 +1,3 @@ +export declare class UtilityHelper { + arrayIntersect(a: T[], b: T[]): T[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/helpers/WeightedRandomHelper.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/helpers/WeightedRandomHelper.d.ts new file mode 100644 index 0000000..9aa0d29 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/helpers/WeightedRandomHelper.d.ts @@ -0,0 +1,28 @@ +export declare class WeightedRandomHelper { + /** + * Gets a tplId from a weighted dictionary + * @param {tplId: weighting[]} itemArray + * @returns tplId + */ + getWeightedInventoryItem(itemArray: { + [tplId: string]: unknown; + } | ArrayLike): string; + /** + * Picks the random item based on its weight. + * The items with higher weight will be picked more often (with a higher probability). + * + * For example: + * - items = ['banana', 'orange', 'apple'] + * - weights = [0, 0.2, 0.8] + * - weightedRandom(items, weights) in 80% of cases will return 'apple', in 20% of cases will return + * 'orange' and it will never return 'banana' (because probability of picking the banana is 0%) + * + * @param {any[]} items + * @param {number[]} weights + * @returns {{item: any, index: number}} + */ + weightedRandom(items: string | any[], weights: string | any[]): { + item: any; + index: number; + }; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/ide/BleedingEdgeEntry.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/ide/BleedingEdgeEntry.d.ts new file mode 100644 index 0000000..fded23a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/ide/BleedingEdgeEntry.d.ts @@ -0,0 +1 @@ +import "reflect-metadata"; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/ide/DebugEntry.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/ide/DebugEntry.d.ts new file mode 100644 index 0000000..fded23a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/ide/DebugEntry.d.ts @@ -0,0 +1 @@ +import "reflect-metadata"; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/ide/ReleaseEntry.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/ide/ReleaseEntry.d.ts new file mode 100644 index 0000000..fded23a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/ide/ReleaseEntry.d.ts @@ -0,0 +1 @@ +import "reflect-metadata"; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/ide/TestEntry.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/ide/TestEntry.d.ts new file mode 100644 index 0000000..fded23a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/ide/TestEntry.d.ts @@ -0,0 +1 @@ +import "reflect-metadata"; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/loaders/BundleLoader.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/loaders/BundleLoader.d.ts new file mode 100644 index 0000000..b88723c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/loaders/BundleLoader.d.ts @@ -0,0 +1,29 @@ +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +declare class BundleInfo { + modPath: string; + key: string; + path: string; + filepath: string; + dependencyKeys: string[]; + constructor(modpath: string, bundle: any, bundlePath: string, bundleFilepath: string); +} +export declare class BundleLoader { + protected httpServerHelper: HttpServerHelper; + protected vfs: VFS; + protected jsonUtil: JsonUtil; + protected bundles: Record; + constructor(httpServerHelper: HttpServerHelper, vfs: VFS, jsonUtil: JsonUtil); + getBundles(local: boolean): BundleInfo[]; + getBundle(key: string, local: boolean): BundleInfo; + addBundles(modpath: string): void; +} +export interface BundleManifest { + manifest: Array; +} +export interface BundleManifestEntry { + key: string; + path: string; +} +export {}; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/loaders/ModTypeCheck.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/loaders/ModTypeCheck.d.ts new file mode 100644 index 0000000..e907341 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/loaders/ModTypeCheck.d.ts @@ -0,0 +1,43 @@ +import { IPostAkiLoadMod } from "../models/external/IPostAkiLoadMod"; +import { IPostAkiLoadModAsync } from "../models/external/IPostAkiLoadModAsync"; +import { IPostDBLoadMod } from "../models/external/IPostDBLoadMod"; +import { IPostDBLoadModAsync } from "../models/external/IPostDBLoadModAsync"; +import { IPreAkiLoadMod } from "../models/external/IPreAkiLoadMod"; +import { IPreAkiLoadModAsync } from "../models/external/IPreAkiLoadModAsync"; +export declare class ModTypeCheck { + /** + * Use defined safe guard to check if the mod is a IPreAkiLoadMod + * @returns boolean + */ + isPreAkiLoad(mod: any): mod is IPreAkiLoadMod; + /** + * Use defined safe guard to check if the mod is a IPostAkiLoadMod + * @returns boolean + */ + isPostAkiLoad(mod: any): mod is IPostAkiLoadMod; + /** + * Use defined safe guard to check if the mod is a IPostDBLoadMod + * @returns boolean + */ + isPostDBAkiLoad(mod: any): mod is IPostDBLoadMod; + /** + * Use defined safe guard to check if the mod is a IPreAkiLoadModAsync + * @returns boolean + */ + isPreAkiLoadAsync(mod: any): mod is IPreAkiLoadModAsync; + /** + * Use defined safe guard to check if the mod is a IPostAkiLoadModAsync + * @returns boolean + */ + isPostAkiLoadAsync(mod: any): mod is IPostAkiLoadModAsync; + /** + * Use defined safe guard to check if the mod is a IPostDBLoadModAsync + * @returns boolean + */ + isPostDBAkiLoadAsync(mod: any): mod is IPostDBLoadModAsync; + /** + * Checks for mod to be compatible with 3.X+ + * @returns boolean + */ + isPostV3Compatible(mod: any): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/loaders/PostAkiModLoader.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/loaders/PostAkiModLoader.d.ts new file mode 100644 index 0000000..5df8c6c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/loaders/PostAkiModLoader.d.ts @@ -0,0 +1,17 @@ +import { DependencyContainer } from "tsyringe"; +import { IModLoader } from "../models/spt/mod/IModLoader"; +import { VFS } from "../utils/VFS"; +import { BundleLoader } from "./BundleLoader"; +import { ModTypeCheck } from "./ModTypeCheck"; +import { PreAkiModLoader } from "./PreAkiModLoader"; +export declare class PostAkiModLoader implements IModLoader { + protected bundleLoader: BundleLoader; + protected vfs: VFS; + protected preAkiModLoader: PreAkiModLoader; + protected modTypeCheck: ModTypeCheck; + constructor(bundleLoader: BundleLoader, vfs: VFS, preAkiModLoader: PreAkiModLoader, modTypeCheck: ModTypeCheck); + getModPath(mod: string): string; + load(): Promise; + protected executeMods(container: DependencyContainer): Promise; + protected addBundles(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/loaders/PostDBModLoader.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/loaders/PostDBModLoader.d.ts new file mode 100644 index 0000000..c4cda5c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/loaders/PostDBModLoader.d.ts @@ -0,0 +1,13 @@ +import { DependencyContainer } from "tsyringe"; +import { OnLoad } from "../di/OnLoad"; +import { ModTypeCheck } from "./ModTypeCheck"; +import { PreAkiModLoader } from "./PreAkiModLoader"; +export declare class PostDBModLoader implements OnLoad { + protected preAkiModLoader: PreAkiModLoader; + protected modTypeCheck: ModTypeCheck; + constructor(preAkiModLoader: PreAkiModLoader, modTypeCheck: ModTypeCheck); + onLoad(): Promise; + getRoute(): string; + getModPath(mod: string): string; + protected executeMods(container: DependencyContainer): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/loaders/PreAkiModLoader.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/loaders/PreAkiModLoader.d.ts new file mode 100644 index 0000000..1949696 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/loaders/PreAkiModLoader.d.ts @@ -0,0 +1,76 @@ +import { DependencyContainer } from "tsyringe"; +import { ICoreConfig } from "../models/spt/config/ICoreConfig"; +import { IModLoader } from "../models/spt/mod/IModLoader"; +import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { ModCompilerService } from "../services/ModCompilerService"; +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +import { BundleLoader } from "./BundleLoader"; +import { ModTypeCheck } from "./ModTypeCheck"; +export declare class PreAkiModLoader implements IModLoader { + protected logger: ILogger; + protected vfs: VFS; + protected jsonUtil: JsonUtil; + protected modCompilerService: ModCompilerService; + protected bundleLoader: BundleLoader; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected modTypeCheck: ModTypeCheck; + protected static container: DependencyContainer; + protected readonly basepath = "user/mods/"; + protected readonly modOrderPath = "user/mods/order.json"; + protected order: Record; + protected imported: Record; + protected akiConfig: ICoreConfig; + constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, modCompilerService: ModCompilerService, bundleLoader: BundleLoader, localisationService: LocalisationService, configServer: ConfigServer, modTypeCheck: ModTypeCheck); + load(container: DependencyContainer): Promise; + /** + * Returns a list of mods with preserved load order + * @returns Array of mod names in load order + */ + getImportedModsNames(): string[]; + getImportedModDetails(): Record; + getModPath(mod: string): string; + protected importMods(): Promise; + /** + * Check for duplciate mods loaded, show error if duplicate mod found + * @param modPackageData dictionary of mod package.json data + */ + protected checkForDuplicateMods(modPackageData: Record): void; + /** + * Check for and return duplicate strings inside an array + * @param stringArray Array to check for duplicates + * @returns string array of duplicates, empty if none found + */ + protected getDuplicates(stringArray: string[]): string[]; + /** + * Get an array of mods with errors that prevent them from working with SPT + * @param mods mods to validate + * @returns Mod names as array + */ + protected getBrokenMods(mods: string[]): string[]; + /** + * Get packageJson data for mods + * @param mods mods to get packageJson for + * @returns dictionary + */ + protected getModsPackageData(mods: string[]): Record; + protected isModCombatibleWithAki(mod: IPackageJsonData): boolean; + protected executeMods(container: DependencyContainer): Promise; + sortModsLoadOrder(): string[]; + protected addMod(mod: string): Promise; + protected areModDependenciesFulfilled(pkg: IPackageJsonData, loadedMods: Record): boolean; + protected isModCompatible(mod: IPackageJsonData, loadedMods: Record): boolean; + /** + * Validate a mod passes a number of checks + * @param modName name of mod in /mods/ to validate + * @returns true if valid + */ + protected validMod(modName: string): boolean; + protected getLoadOrderRecursive(mod: string, result: Record, visited: Record): void; + protected getLoadOrder(mods: Record): Record; + getContainer(): DependencyContainer; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/common/MinMax.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/common/MinMax.d.ts new file mode 100644 index 0000000..bc118a8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/common/MinMax.d.ts @@ -0,0 +1,4 @@ +export interface MinMax { + max: number; + min: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/bot/IGenerateBotsRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/bot/IGenerateBotsRequestData.d.ts new file mode 100644 index 0000000..f1f7013 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/bot/IGenerateBotsRequestData.d.ts @@ -0,0 +1,9 @@ +export interface IGenerateBotsRequestData { + conditions: Condition[]; +} +export interface Condition { + /** e.g. assault/pmcBot/bossKilla */ + Role: string; + Limit: number; + Difficulty: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/bot/IRandomisedBotLevelResult.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/bot/IRandomisedBotLevelResult.d.ts new file mode 100644 index 0000000..75bd936 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/bot/IRandomisedBotLevelResult.d.ts @@ -0,0 +1,4 @@ +export interface IRandomisedBotLevelResult { + level: number; + exp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/IEmptyRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/IEmptyRequestData.d.ts new file mode 100644 index 0000000..284d16e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/IEmptyRequestData.d.ts @@ -0,0 +1,2 @@ +export interface IEmptyRequestData { +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/IGlobals.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/IGlobals.d.ts new file mode 100644 index 0000000..b5ed401 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/IGlobals.d.ts @@ -0,0 +1,1305 @@ +import { Item } from "./tables/IItem"; +export interface IGlobals { + time: number; + config: Config; + bot_presets: BotPreset[]; + BotWeaponScatterings: BotWeaponScattering[]; + ItemPresets: Record; +} +export interface Config { + content: Content; + AimPunchMagnitude: number; + WeaponSkillProgressRate: number; + SkillAtrophy: boolean; + exp: Exp; + t_base_looting: number; + t_base_lockpicking: number; + armor: Armor; + SessionsToShowHotKeys: number; + MaxBotsAliveOnMap: number; + SavagePlayCooldown: number; + SavagePlayCooldownNdaFree: number; + MarksmanAccuracy: number; + SavagePlayCooldownDevelop: number; + TODSkyDate: string; + Mastering: Mastering[]; + GlobalItemPriceModifier: number; + TradingUnlimitedItems: boolean; + MaxLoyaltyLevelForAll: boolean; + GlobalLootChanceModifier: number; + TimeBeforeDeploy: number; + TimeBeforeDeployLocal: number; + TradingSetting: number; + TradingSettings: ITradingSettings; + ItemsCommonSettings: IItemsCommonSettings; + LoadTimeSpeedProgress: number; + BaseLoadTime: number; + BaseUnloadTime: number; + BaseCheckTime: number; + Customization: Customization; + UncheckOnShot: boolean; + BotsEnabled: boolean; + BufferZone: IBufferZone; + ArmorMaterials: ArmorMaterials; + LegsOverdamage: number; + HandsOverdamage: number; + StomachOverdamage: number; + Health: Health; + rating: Rating; + tournament: Tournament; + RagFair: RagFair; + handbook: Handbook; + FractureCausedByFalling: Probability; + FractureCausedByBulletHit: Probability; + WAVE_COEF_LOW: number; + WAVE_COEF_MID: number; + WAVE_COEF_HIGH: number; + WAVE_COEF_HORDE: number; + Stamina: Stamina; + StaminaRestoration: StaminaRestoration; + StaminaDrain: StaminaDrain; + RequirementReferences: RequirementReferences; + RestrictionsInRaid: RestrictionsInRaid[]; + SkillMinEffectiveness: number; + SkillFatiguePerPoint: number; + SkillFreshEffectiveness: number; + SkillFreshPoints: number; + SkillPointsBeforeFatigue: number; + SkillFatigueReset: number; + DiscardLimitsEnabled: boolean; + EventType: string[]; + WalkSpeed: xyz; + SprintSpeed: xyz; + SkillEnduranceWeightThreshold: number; + TeamSearchingTimeout: number; + Insurance: Insurance; + SkillExpPerLevel: number; + GameSearchingTimeout: number; + WallContusionAbsorption: xyz; + SkillsSettings: SkillsSettings; + AzimuthPanelShowsPlayerOrientation: boolean; + Aiming: Aiming; + Malfunction: Malfunction; + Overheat: Overheat; + FenceSettings: FenceSettings; + TestValue: number; + Inertia: Inertia; + Ballistic: Ballistic; + RepairSettings: RepairSettings; +} +export interface IBufferZone { + CustomerAccessTime: number; + CustomerCriticalTimeStart: number; + CustomerKickNotifTime: number; +} +export interface IItemsCommonSettings { + ItemRemoveAfterInterruptionTime: number; +} +export interface ITradingSettings { + BuyoutRestrictions: IBuyoutRestrictions; +} +export interface IBuyoutRestrictions { + MinDurability: number; + MinFoodDrinkResource: number; + MinMedsResource: number; +} +export interface Content { + ip: string; + port: number; + root: string; +} +export interface Exp { + heal: Heal; + match_end: MatchEnd; + kill: Kill; + level: Level; + loot_attempts: LootAttempt[]; + expForLockedDoorOpen: number; + expForLockedDoorBreach: number; + triggerMult: number; +} +export interface Heal { + expForHeal: number; + expForHydration: number; + expForEnergy: number; +} +export interface MatchEnd { + README: string; + survived_exp_requirement: number; + survived_seconds_requirement: number; + survived_exp_reward: number; + mia_exp_reward: number; + runner_exp_reward: number; + leftMult: number; + miaMult: number; + survivedMult: number; + runnerMult: number; + killedMult: number; +} +export interface Kill { + combo: Combo[]; + victimLevelExp: number; + headShotMult: number; + expOnDamageAllHealth: number; + longShotDistance: number; + bloodLossToLitre: number; + victimBotLevelExp: number; +} +export interface Combo { + percent: number; +} +export interface Level { + exp_table: ExpTable[]; + trade_level: number; + savage_level: number; + clan_level: number; + mastering1: number; + mastering2: number; +} +export interface ExpTable { + exp: number; +} +export interface LootAttempt { + k_exp: number; +} +export interface Armor { + class: Class[]; +} +export interface Class { + resistance: number; +} +export interface Mastering { + Name: string; + Templates: string[]; + Level2: number; + Level3: number; +} +export interface Customization { + SavageHead: SavageHead; + SavageBody: SavageBody; + SavageFeet: SavageFeet; + CustomizationVoice: CustomizationVoice[]; + BodyParts: BodyParts; +} +export interface SavageHead { + wild_head_1: WildHead; + wild_head_2: WildHead; + wild_head_3: WildHead; + Wild_Dealmaker_head: WildHead; + Wild_Killa_head: WildHead; + bear_head: WildHead; + bear_head_1: WildHead; + usec_head_1: WildHead; + Head_BOSS_Glukhar: WildHead; + Wild_Head_nonMesh: WildHead; + Head_BOSS_Sanitar: WildHead; + wild_head_drozd: WildHead; + wild_head_misha: WildHead; + head_cultist_01: WildHead; + head_cultist_02: WildHead; + head_cultist_03: WildHead; + DefaultUsecHead: WildHead; + usec_head_3: WildHead; + usec_head_4: WildHead; + usec_head_5: WildHead; +} +export interface WildHead { + head: string; + isNotRandom: boolean; + NotRandom: boolean; +} +export interface SavageBody { + wild_body: WildBody; + wild_body_1: WildBody; + wild_body_2: WildBody; + wild_body_3: WildBody; + Wild_Dealmaker_body: WildBody; + wild_security_body_1: WildBody; + wild_security_body_2: WildBody; + wild_Killa_body: WildBody; + wild_pmcBot_body: WildBody; + wild_Shturman_body: WildBody; + wild_Gluhar_body: WildBody; + Tshirt_security_TshirtTatu_01: WildBody; + Tshirt_security_TshirtTatu_02: WildBody; + Top_security_Husky: WildBody; + Top_security_Gorka4: WildBody; + scav_kit_upper_meteor: WildBody; + wild_body_russia1: WildBody; + Top_BOSS_Sanitar: WildBody; + wild_body_motocross: WildBody; + top_cultist_01: WildBody; + top_cultist_02: WildBody; + wild_body_rainparka: WildBody; + wild_body_underarmour: WildBody; + top_boss_tagilla: WildBody; + DefaultUsecBody: WildBody; + usec_upper_acu: WildBody; + usec_upper_commando: WildBody; + usec_upper_aggressor: WildBody; + usec_upper_hoody: WildBody; + usec_upper_pcuironsight: WildBody; + usec_top_beltstaff: WildBody; + usec_upper_flexion: WildBody; + usec_upper_tier3: WildBody; + usec_upper_pcsmulticam: WildBody; + usec_upper_tier_2: WildBody; + usec_upper_infiltrator: WildBody; + user_upper_NightPatrol: WildBody; + wild_body_bomber: WildBody; + wild_top_yellowcoat: WildBody; +} +export interface WildBody { + body: string; + hands: string; + isNotRandom: boolean; +} +export interface SavageFeet { + wild_feet: WildFeet; + wild_feet_1: WildFeet; + wild_feet_2: WildFeet; + Wild_Dealmaker_feet: WildFeet; + wild_security_feet_1: WildFeet; + Wild_Killa_feet: WildFeet; + wild_pmcBot_feet: WildFeet; + Pants_BOSS_Glukhar: WildFeet; + Pants_BOSS_Shturman: WildFeet; + Pants_security_Gorka4: WildFeet; + Pants_security_Flora: WildFeet; + scav_kit_lower_sklon: WildFeet; + Pants_BOSS_Sanitar: WildFeet; + wild_feet_sweatpants: WildFeet; + wild_feet_wasatch: WildFeet; + wild_feet_slimPants: WildFeet; + pants_cultist_01: WildFeet; + pants_cultist_02: WildFeet; + wild_feet_scavelite_taclite: WildFeet; + pants_boss_tagilla: WildFeet; + wild_feet_bomber: WildFeet; + wild_pants_yellowcoat: WildFeet; +} +export interface WildFeet { + feet: string; + isNotRandom: boolean; + NotRandom: boolean; +} +export interface CustomizationVoice { + voice: string; + side: string[]; + isNotRandom: boolean; +} +export interface BodyParts { + Head: string; + Body: string; + Feet: string; + Hands: string; +} +export interface ArmorMaterials { + UHMWPE: ArmorType; + Aramid: ArmorType; + Combined: ArmorType; + Titan: ArmorType; + Aluminium: ArmorType; + ArmoredSteel: ArmorType; + Ceramic: ArmorType; + Glass: ArmorType; +} +export interface ArmorType { + Destructibility: number; + MinRepairDegradation: number; + MaxRepairDegradation: number; + ExplosionDestructibility: number; + MinRepairKitDegradation: number; + MaxRepairKitDegradation: number; +} +export interface Health { + Falling: Falling; + Effects: Effects; + HealPrice: HealPrice; + ProfileHealthSettings: ProfileHealthSettings; +} +export interface Falling { + DamagePerMeter: number; + SafeHeight: number; +} +export interface Effects { + Existence: Existence; + Dehydration: Dehydration; + BreakPart: BreakPart; + Contusion: Contusion; + Disorientation: Disorientation; + Exhaustion: Exhaustion; + LowEdgeHealth: LowEdgeHealth; + RadExposure: RadExposure; + Stun: Stun; + Intoxication: Intoxication; + Regeneration: Regeneration; + Wound: Wound; + Berserk: Berserk; + Flash: Flash; + MedEffect: MedEffect; + Pain: Pain; + PainKiller: PainKiller; + SandingScreen: SandingScreen; + MildMusclePain: IMusclePainEffect; + SevereMusclePain: IMusclePainEffect; + Stimulator: Stimulator; + Tremor: Tremor; + ChronicStaminaFatigue: ChronicStaminaFatigue; + Fracture: Fracture2; + HeavyBleeding: HeavyBleeding2; + LightBleeding: LightBleeding2; + BodyTemperature: BodyTemperature; +} +export interface Existence { + EnergyLoopTime: number; + HydrationLoopTime: number; + EnergyDamage: number; + HydrationDamage: number; + DestroyedStomachEnergyTimeFactor: number; + DestroyedStomachHydrationTimeFactor: number; +} +export interface Dehydration { + DefaultDelay: number; + DefaultResidueTime: number; + BleedingHealth: number; + BleedingLoopTime: number; + BleedingLifeTime: number; + DamageOnStrongDehydration: number; + StrongDehydrationLoopTime: number; +} +export interface BreakPart { + DefaultDelay: number; + DefaultResidueTime: number; + HealExperience: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovePrice: number; + RemovedAfterDeath: boolean; + BulletHitProbability: Probability; + FallingProbability: Probability; +} +export interface Contusion { + Dummy: number; +} +export interface Disorientation { + Dummy: number; +} +export interface Exhaustion { + DefaultDelay: number; + DefaultResidueTime: number; + Damage: number; + DamageLoopTime: number; +} +export interface LowEdgeHealth { + DefaultDelay: number; + DefaultResidueTime: number; + StartCommonHealth: number; +} +export interface RadExposure { + Damage: number; + DamageLoopTime: number; +} +export interface Stun { + Dummy: number; +} +export interface Intoxication { + DefaultDelay: number; + DefaultResidueTime: number; + DamageHealth: number; + HealthLoopTime: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovedAfterDeath: boolean; + HealExperience: number; + RemovePrice: number; +} +export interface Regeneration { + LoopTime: number; + MinimumHealthPercentage: number; + Energy: number; + Hydration: number; + BodyHealth: BodyHealth; + Influences: Influences; +} +export interface BodyHealth { + Head: BodyHealthValue; + Chest: BodyHealthValue; + Stomach: BodyHealthValue; + LeftArm: BodyHealthValue; + RightArm: BodyHealthValue; + LeftLeg: BodyHealthValue; + RightLeg: BodyHealthValue; +} +export interface BodyHealthValue { + Value: number; +} +export interface Influences { + LightBleeding: Influence; + HeavyBleeding: Influence; + Fracture: Influence; + RadExposure: Influence; + Intoxication: Influence; +} +export interface Influence { + HealthSlowDownPercentage: number; + EnergySlowDownPercentage: number; + HydrationSlowDownPercentage: number; +} +export interface Wound { + WorkingTime: number; + ThresholdMin: number; + ThresholdMax: number; +} +export interface Berserk { + DefaultDelay: number; + WorkingTime: number; + DefaultResidueTime: number; +} +export interface Flash { + Dummy: number; +} +export interface MedEffect { + LoopTime: number; + StartDelay: number; + DrinkStartDelay: number; + FoodStartDelay: number; + DrugsStartDelay: number; + MedKitStartDelay: number; + MedicalStartDelay: number; + StimulatorStartDelay: number; +} +export interface Pain { + TremorDelay: number; + HealExperience: number; +} +export interface PainKiller { + Dummy: number; +} +export interface SandingScreen { + Dummy: number; +} +export interface IMusclePainEffect { + GymEffectivity: number; + OfflineDurationMax: number; + OfflineDurationMin: number; + TraumaChance: number; +} +export interface Stimulator { + BuffLoopTime: number; + Buffs: Buffs; +} +export interface Buffs { + BuffsSJ1TGLabs: Buff[]; + BuffsSJ6TGLabs: Buff[]; + BuffsPropital: Buff[]; + BuffsZagustin: Buff[]; + BuffseTGchange: Buff[]; + BuffsAdrenaline: Buff[]; + BuffsGoldenStarBalm: Buff[]; + Buffs_drink_aquamari: Buff[]; + Buffs_drink_maxenergy: Buff[]; + Buffs_drink_milk: Buff[]; + Buffs_drink_tarcola: Buff[]; + Buffs_drink_hotrod: Buff[]; + Buffs_drink_juice_army: Buff[]; + Buffs_drink_water: Buff[]; + Buffs_food_borodinskiye: Buff[]; + Buffs_food_condensed_milk: Buff[]; + Buffs_food_emelya: Buff[]; + Buffs_food_mayonez: Buff[]; + Buffs_food_mre: Buff[]; + Buffs_food_sugar: Buff[]; + Buffs_drink_vodka: Buff[]; + Buffs_drink_jack: Buff[]; + Buffs_drink_moonshine: Buff[]; + Buffs_drink_purewater: Buff[]; + Buffs_3bTG: Buff[]; + Buffs_AHF1M: Buff[]; + Buffs_L1: Buff[]; + Buffs_MULE: Buff[]; + Buffs_Meldonin: Buff[]; + Buffs_Obdolbos: Buff[]; + Buffs_P22: Buff[]; + Buffs_KultistsToxin: Buff[]; + Buffs_BodyTemperature: Buff[]; + Buffs_Antidote: Buff[]; + Buffs_melee_bleed: Buff[]; + Buffs_melee_blunt: Buff[]; + Buffs_hultafors: Buff[]; + Buffs_drink_vodka_BAD: Buff[]; + Buffs_food_alyonka: Buff[]; + Buffs_food_slippers: Buff[]; + Buffs_knife: Buff[]; +} +export interface Buff { + BuffType: string; + Chance: number; + Delay: number; + Duration: number; + Value: number; + AbsoluteValue: boolean; + SkillName: string; +} +export interface Tremor { + DefaultDelay: number; + DefaultResidueTime: number; +} +export interface ChronicStaminaFatigue { + EnergyRate: number; + WorkingTime: number; + TicksEvery: number; + EnergyRatePerStack: number; +} +export interface Fracture2 { + DefaultDelay: number; + DefaultResidueTime: number; + HealExperience: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovePrice: number; + RemovedAfterDeath: boolean; + BulletHitProbability: Probability; + FallingProbability: Probability; +} +export interface HeavyBleeding2 { + DefaultDelay: number; + DefaultResidueTime: number; + DamageEnergy: number; + DamageHealth: number; + EnergyLoopTime: number; + HealthLoopTime: number; + DamageHealthDehydrated: number; + HealthLoopTimeDehydrated: number; + LifeTimeDehydrated: number; + EliteVitalityDuration: number; + HealExperience: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovePrice: number; + RemovedAfterDeath: boolean; + Probability: Probability; +} +export interface Probability { + FunctionType: string; + K: number; + B: number; + Threshold: number; +} +export interface LightBleeding2 { + DefaultDelay: number; + DefaultResidueTime: number; + DamageEnergy: number; + DamageHealth: number; + EnergyLoopTime: number; + HealthLoopTime: number; + DamageHealthDehydrated: number; + HealthLoopTimeDehydrated: number; + LifeTimeDehydrated: number; + EliteVitalityDuration: number; + HealExperience: number; + OfflineDurationMin: number; + OfflineDurationMax: number; + RemovePrice: number; + RemovedAfterDeath: boolean; + Probability: Probability; +} +export interface BodyTemperature { + DefaultBuildUpTime: number; + DefaultResidueTime: number; + LoopTime: number; +} +export interface HealPrice { + HealthPointPrice: number; + HydrationPointPrice: number; + EnergyPointPrice: number; + TrialLevels: number; + TrialRaids: number; +} +export interface ProfileHealthSettings { + BodyPartsSettings: BodyPartsSettings; + HealthFactorsSettings: HealthFactorsSettings; + DefaultStimulatorBuff: string; +} +export interface BodyPartsSettings { + Head: BodyPartsSetting; + Chest: BodyPartsSetting; + Stomach: BodyPartsSetting; + LeftArm: BodyPartsSetting; + RightArm: BodyPartsSetting; + LeftLeg: BodyPartsSetting; + RightLeg: BodyPartsSetting; +} +export interface BodyPartsSetting { + Minimum: number; + Maximum: number; + Default: number; + OverDamageReceivedMultiplier: number; +} +export interface HealthFactorsSettings { + Energy: HealthFactorSetting; + Hydration: HealthFactorSetting; + Temperature: HealthFactorSetting; + Poisoning: HealthFactorSetting; + Radiation: HealthFactorSetting; +} +export interface HealthFactorSetting { + Minimum: number; + Maximum: number; + Default: number; +} +export interface Rating { + levelRequired: number; + limit: number; + categories: Categories; +} +export interface Categories { + experience: boolean; + kd: boolean; + surviveRatio: boolean; + avgEarnings: boolean; + kills: boolean; + raidCount: boolean; + longestShot: boolean; + timeOnline: boolean; + inventoryFullCost: boolean; + ragFairStanding: boolean; +} +export interface Tournament { + categories: Categories2; + limit: number; + levelRequired: number; +} +export interface Categories2 { + dogtags: boolean; +} +export interface RagFair { + enabled: boolean; + priceStabilizerEnabled: boolean; + includePveTraderSales: boolean; + priceStabilizerStartIntervalInHours: number; + minUserLevel: number; + communityTax: number; + communityItemTax: number; + communityRequirementTax: number; + offerPriorityCost: number; + offerDurationTimeInHour: number; + offerDurationTimeInHourAfterRemove: number; + priorityTimeModifier: number; + maxRenewOfferTimeInHour: number; + renewPricePerHour: number; + maxActiveOfferCount: MaxActiveOfferCount[]; + balancerRemovePriceCoefficient: number; + balancerMinPriceCount: number; + balancerAveragePriceCoefficient: number; + delaySinceOfferAdd: number; + uniqueBuyerTimeoutInDays: number; + ratingSumForIncrease: number; + ratingIncreaseCount: number; + ratingSumForDecrease: number; + ratingDecreaseCount: number; + maxSumForIncreaseRatingPerOneSale: number; + maxSumForDecreaseRatingPerOneSale: number; + maxSumForRarity: MaxSumForRarity; + ChangePriceCoef: number; + balancerUserItemSaleCooldownEnabled: boolean; + balancerUserItemSaleCooldown: number; + youSellOfferMaxStorageTimeInHour: number; + yourOfferDidNotSellMaxStorageTimeInHour: number; + isOnlyFoundInRaidAllowed: boolean; + sellInOnePiece: number; +} +export interface MaxActiveOfferCount { + from: number; + to: number; + count: number; +} +export interface MaxSumForRarity { + Common: RarityMaxSum; + Rare: RarityMaxSum; + Superrare: RarityMaxSum; + Not_exist: RarityMaxSum; +} +export interface RarityMaxSum { + value: number; +} +export interface Handbook { + defaultCategory: string; +} +export interface Stamina { + Capacity: number; + SprintDrainRate: number; + BaseRestorationRate: number; + JumpConsumption: number; + GrenadeHighThrow: number; + GrenadeLowThrow: number; + AimDrainRate: number; + AimRangeFinderDrainRate: number; + OxygenCapacity: number; + OxygenRestoration: number; + WalkOverweightLimits: xyz; + BaseOverweightLimits: xyz; + SprintOverweightLimits: xyz; + WalkSpeedOverweightLimits: xyz; + CrouchConsumption: xyz; + WalkConsumption: xyz; + StandupConsumption: xyz; + TransitionSpeed: xyz; + SprintAccelerationLowerLimit: number; + SprintSpeedLowerLimit: number; + SprintSensitivityLowerLimit: number; + AimConsumptionByPose: xyz; + RestorationMultiplierByPose: xyz; + OverweightConsumptionByPose: xyz; + AimingSpeedMultiplier: number; + WalkVisualEffectMultiplier: number; + HandsCapacity: number; + HandsRestoration: number; + ProneConsumption: number; + BaseHoldBreathConsumption: number; + SoundRadius: xyz; + ExhaustedMeleeSpeed: number; + FatigueRestorationRate: number; + FatigueAmountToCreateEffect: number; + ExhaustedMeleeDamageMultiplier: number; + FallDamageMultiplier: number; + SafeHeightOverweight: number; + SitToStandConsumption: number; + StaminaExhaustionCausesJiggle: boolean; + StaminaExhaustionStartsBreathSound: boolean; + StaminaExhaustionRocksCamera: boolean; + HoldBreathStaminaMultiplier: xyz; + PoseLevelIncreaseSpeed: xyz; + PoseLevelDecreaseSpeed: xyz; + PoseLevelConsumptionPerNotch: xyz; +} +export interface StaminaRestoration { + LowerLeftPoint: number; + LowerRightPoint: number; + LeftPlatoPoint: number; + RightPlatoPoint: number; + RightLimit: number; + ZeroValue: number; +} +export interface StaminaDrain { + LowerLeftPoint: number; + LowerRightPoint: number; + LeftPlatoPoint: number; + RightPlatoPoint: number; + RightLimit: number; + ZeroValue: number; +} +export interface RequirementReferences { + Alpinist: Alpinist[]; +} +export interface Alpinist { + Requirement: string; + Id: string; + Count: number; + RequiredSlot: string; + RequirementTip: string; +} +export interface RestrictionsInRaid { + TemplateId: string; + Value: number; +} +export interface Insurance { + MaxStorageTimeInHour: number; +} +export interface SkillsSettings { + SkillProgressRate: number; + WeaponSkillProgressRate: number; + WeaponSkillRecoilBonusPerLevel: number; + HideoutManagement: HideoutManagement; + Crafting: Crafting; + Metabolism: Metabolism; + Immunity: Immunity; + Endurance: Endurance; + Strength: Strength; + Vitality: Vitality; + Health: Health2; + StressResistance: StressResistance; + Throwing: Throwing; + RecoilControl: RecoilControl; + Pistol: WeaponSkills; + Revolver: WeaponSkills; + SMG: any[]; + Assault: WeaponSkills; + Shotgun: WeaponSkills; + Sniper: WeaponSkills; + LMG: any[]; + HMG: any[]; + Launcher: any[]; + AttachedLauncher: any[]; + Melee: IMeleeSkill; + DMR: WeaponSkills; + BearAssaultoperations: any[]; + BearAuthority: any[]; + BearAksystems: any[]; + BearHeavycaliber: any[]; + BearRawpower: any[]; + UsecArsystems: any[]; + UsecDeepweaponmodding_Settings: any[]; + UsecLongrangeoptics_Settings: any[]; + UsecNegotiations: any[]; + UsecTactics: any[]; + BotReload: any[]; + CovertMovement: CovertMovement; + FieldMedicine: any[]; + Search: Search; + Sniping: any[]; + ProneMovement: any[]; + FirstAid: any[]; + LightVests: ArmorSkills; + HeavyVests: ArmorSkills; + WeaponModding: any[]; + AdvancedModding: any[]; + NightOps: any[]; + SilentOps: any[]; + Lockpicking: any[]; + WeaponTreatment: WeaponTreatment; + MagDrills: MagDrills; + Freetrading: any[]; + Auctions: any[]; + Cleanoperations: any[]; + Barter: any[]; + Shadowconnections: any[]; + Taskperformance: any[]; + Perception: Perception; + Intellect: Intellect; + Attention: Attention; + Charisma: Charisma; + Memory: Memory; + Surgery: Surgery; + AimDrills: AimDrills; + BotSound: any[]; + TroubleShooting: TroubleShooting; +} +export interface IMeleeSkill { + BuffSettings: IBuffSettings; +} +export interface ArmorSkills { + BuffMaxCount: number; + BuffSettings: IBuffSettings; + Counters: IArmorCounters; + MoveSpeedPenaltyReductionHVestsReducePerLevel: number; + RicochetChanceHVestsCurrentDurabilityThreshold: number; + RicochetChanceHVestsEliteLevel: number; + RicochetChanceHVestsMaxDurabilityThreshold: number; + MeleeDamageLVestsReducePerLevel: number; + MoveSpeedPenaltyReductionLVestsReducePerLevel: number; + WearAmountRepairLVestsReducePerLevel: number; + WearChanceRepairLVestsReduceEliteLevel: number; +} +export interface IArmorCounters { + armorDurability: ISkillCounter; +} +export interface HideoutManagement { + SkillPointsPerAreaUpgrade: number; + SkillPointsPerCraft: number; + ConsumptionReductionPerLevel: number; + SkillBoostPercent: number; + SkillPointsRate: SkillPointsRate; + EliteSlots: EliteSlots; +} +export interface SkillPointsRate { + Generator: Generator; + AirFilteringUnit: SkillPointRate; + WaterCollector: SkillPointRate; + SolarPower: SkillPointRate; +} +export interface SkillPointRate { + ResourceSpent: number; + PointsGained: number; +} +export interface EliteSlots { + Generator: EliteSlot; + AirFilteringUnit: EliteSlot; + WaterCollector: EliteSlot; + BitcoinFarm: EliteSlot; +} +export interface EliteSlot { + Slots: number; + Container: number; +} +export interface Crafting { + PointsPerCraftingCycle: number; + CraftingCycleHours: number; + PointsPerUniqueCraftCycle: number; + UniqueCraftsPerCycle: number; + CraftTimeReductionPerLevel: number; + ProductionTimeReductionPerLevel: number; + EliteExtraProductions: number; + CraftingPointsToInteligence: number; +} +export interface Metabolism { + HydrationRecoveryRate: number; + EnergyRecoveryRate: number; + IncreasePositiveEffectDurationRate: number; + DecreaseNegativeEffectDurationRate: number; + DecreasePoisonDurationRate: number; +} +export interface Immunity { + ImmunityMiscEffects: number; + ImmunityPoisonBuff: number; + ImmunityPainKiller: number; + HealthNegativeEffect: number; + StimulatorNegativeBuff: number; +} +export interface Endurance { + MovementAction: number; + SprintAction: number; + GainPerFatigueStack: number; + QTELevelMultipliers: Record>; +} +export interface Strength { + SprintActionMin: number; + SprintActionMax: number; + MovementActionMin: number; + MovementActionMax: number; + PushUpMin: number; + PushUpMax: number; + QTELevelMultipliers: IQTELevelMultiplier[]; + FistfightAction: number; + ThrowAction: number; +} +export interface IQTELevelMultiplier { + Level: number; + Multiplier: number; +} +export interface Vitality { + DamageTakenAction: number; + HealthNegativeEffect: number; +} +export interface Health2 { + SkillProgress: number; +} +export interface StressResistance { + HealthNegativeEffect: number; + LowHPDuration: number; +} +export interface Throwing { + ThrowAction: number; +} +export interface RecoilControl { + RecoilAction: number; + RecoilBonusPerLevel: number; +} +export interface WeaponSkills { + WeaponReloadAction: number; + WeaponShotAction: number; + WeaponFixAction: number; + WeaponChamberAction: number; +} +export interface CovertMovement { + MovementAction: number; +} +export interface Search { + SearchAction: number; + FindAction: number; +} +export interface WeaponTreatment { + BuffMaxCount: number; + BuffSettings: IBuffSettings; + Counters: IWeaponTreatmentCounters; + DurLossReducePerLevel: number; + SkillPointsPerRepair: number; + Filter: any[]; + WearAmountRepairGunsReducePerLevel: number; + WearChanceRepairGunsReduceEliteLevel: number; +} +export interface IWeaponTreatmentCounters { + firearmsDurability: ISkillCounter; +} +export interface IBuffSettings { + CommonBuffChanceLevelBonus: number; + CommonBuffMinChanceValue: number; + CurrentDurabilityLossToRemoveBuff?: number; + MaxDurabilityLossToRemoveBuff?: number; + RareBuffChanceCoff: number; + ReceivedDurabilityMaxPercent: number; +} +export interface MagDrills { + RaidLoadedAmmoAction: number; + RaidUnloadedAmmoAction: number; + MagazineCheckAction: number; +} +export interface Perception { + DependentSkillRatios: ISkillRatio[]; + OnlineAction: number; + UniqueLoot: number; +} +export interface ISkillRatio { + Ratio: number; + SkillId: string; +} +export interface Intellect { + Counters: IIntellectCounters; + ExamineAction: number; + SkillProgress: number; + RepairAction: number; + WearAmountReducePerLevel: number; + WearChanceReduceEliteLevel: number; + RepairPointsCostReduction: number; +} +export interface IIntellectCounters { + armorDurability: ISkillCounter; + firearmsDurability: ISkillCounter; + meleeWeaponDurability: ISkillCounter; +} +export interface ISkillCounter { + divisor: number; + points: number; +} +export interface Attention { + DependentSkillRatios: ISkillRatio[]; + ExamineWithInstruction: number; + FindActionFalse: number; + FindActionTrue: number; +} +export interface Charisma { + BonusSettings: IBonusSettings; + Counters: ICharismaSkillCounters; + SkillProgressInt: number; + SkillProgressAtn: number; + SkillProgressPer: number; +} +export interface ICharismaSkillCounters { + insuranceCost: ISkillCounter; + repairCost: ISkillCounter; + repeatableQuestCompleteCount: ISkillCounter; + restoredHealthCost: ISkillCounter; + scavCaseCost: ISkillCounter; +} +export interface IBonusSettings { + EliteBonusSettings: IEliteBonusSettings; + LevelBonusSettings: ILevelBonusSettings; +} +export interface IEliteBonusSettings { + FenceStandingLossDiscount: number; + RepeatableQuestExtraCount: number; + ScavCaseDiscount: number; +} +export interface ILevelBonusSettings { + HealthRestoreDiscount: number; + HealthRestoreTraderDiscount: number; + InsuranceDiscount: number; + InsuranceTraderDiscount: number; + PaidExitDiscount: number; + RepeatableQuestChangeDiscount: number; +} +export interface Memory { + AnySkillUp: number; + SkillProgress: number; +} +export interface Surgery { + SurgeryAction: number; + SkillProgress: number; +} +export interface AimDrills { + WeaponShotAction: number; +} +export interface TroubleShooting { + MalfRepairSpeedBonusPerLevel: number; + SkillPointsPerMalfFix: number; + EliteDurabilityChanceReduceMult: number; + EliteAmmoChanceReduceMult: number; + EliteMagChanceReduceMult: number; +} +export interface Aiming { + ProceduralIntensityByPose: xyz; + AimProceduralIntensity: number; + HeavyWeight: number; + LightWeight: number; + MaxTimeHeavy: number; + MinTimeHeavy: number; + MaxTimeLight: number; + MinTimeLight: number; + RecoilScaling: number; + RecoilDamping: number; + CameraSnapGlobalMult: number; + RecoilXIntensityByPose: xyz; + RecoilYIntensityByPose: xyz; + RecoilZIntensityByPose: xyz; + RecoilCrank: boolean; + RecoilHandDamping: number; + RecoilConvergenceMult: number; + RecoilVertBonus: number; + RecoilBackBonus: number; +} +export interface Malfunction { + AmmoMalfChanceMult: number; + MagazineMalfChanceMult: number; + MalfRepairHardSlideMult: number; + MalfRepairOneHandBrokenMult: number; + MalfRepairTwoHandsBrokenMult: number; + AllowMalfForBots: boolean; + ShowGlowAttemptsCount: number; + OutToIdleSpeedMultForPistol: number; + IdleToOutSpeedMultOnMalf: number; + TimeToQuickdrawPistol: number; + DurRangeToIgnoreMalfs: xyz; + DurFeedWt: number; + DurMisfireWt: number; + DurJamWt: number; + DurSoftSlideWt: number; + DurHardSlideMinWt: number; + DurHardSlideMaxWt: number; + AmmoMisfireWt: number; + AmmoFeedWt: number; + AmmoJamWt: number; + OverheatFeedWt: number; + OverheatJamWt: number; + OverheatSoftSlideWt: number; + OverheatHardSlideMinWt: number; + OverheatHardSlideMaxWt: number; +} +export interface Overheat { + MinOverheat: number; + MaxOverheat: number; + OverheatProblemsStart: number; + ModHeatFactor: number; + ModCoolFactor: number; + MinWearOnOverheat: number; + MaxWearOnOverheat: number; + MinWearOnMaxOverheat: number; + MaxWearOnMaxOverheat: number; + OverheatWearLimit: number; + MaxCOIIncreaseMult: number; + MinMalfChance: number; + MaxMalfChance: number; + DurReduceMinMult: number; + DurReduceMaxMult: number; + BarrelMoveRndDuration: number; + BarrelMoveMaxMult: number; + FireratePitchMult: number; + FirerateReduceMinMult: number; + FirerateReduceMaxMult: number; + FirerateOverheatBorder: number; + EnableSlideOnMaxOverheat: boolean; + StartSlideOverheat: number; + FixSlideOverheat: number; + AutoshotMinOverheat: number; + AutoshotChance: number; + AutoshotPossibilityDuration: number; + MaxOverheatCoolCoef: number; +} +export interface FenceSettings { + FenceId: string; + Levels: Record; + paidExitStandingNumerator: number; +} +export interface FenceLevel { + SavageCooldownModifier: number; + ScavCaseTimeModifier: number; + PaidExitCostModifier: number; + BotFollowChance: number; + ScavEquipmentSpawnChanceModifier: number; + PriceModifier: number; + HostileBosses: boolean; + HostileScavs: boolean; + ScavAttackSupport: boolean; + ExfiltrationPriceModifier: number; + AvailableExits: number; +} +export interface Inertia { + InertiaLimits: xyz; + InertiaLimitsStep: number; + ExitMovementStateSpeedThreshold: xyz; + WalkInertia: xyz; + FallThreshold: number; + SpeedLimitAfterFallMin: xyz; + SpeedLimitAfterFallMax: xyz; + SpeedLimitDurationMin: xyz; + SpeedLimitDurationMax: xyz; + SpeedInertiaAfterJump: xyz; + BaseJumpPenaltyDuration: number; + DurationPower: number; + BaseJumpPenalty: number; + PenaltyPower: number; + InertiaTiltCurveMin: xyz; + InertiaTiltCurveMax: xyz; + InertiaBackwardCoef: xyz; + TiltInertiaMaxSpeed: xyz; + TiltStartSideBackSpeed: xyz; + TiltMaxSideBackSpeed: xyz; + TiltAcceleration: xyz; + AverageRotationFrameSpan: number; + SprintSpeedInertiaCurveMin: xyz; + SprintSpeedInertiaCurveMax: xyz; + SprintBrakeInertia: xyz; + SprintTransitionMotionPreservation: xyz; + WeaponFlipSpeed: xyz; + PreSprintAccelerationLimits: xyz; + SprintAccelerationLimits: xyz; + SideTime: xyz; + DiagonalTime: xyz; + MaxTimeWithoutInput: xyz; + MinDirectionBlendTime: number; + MoveTimeRange: xyz; + ProneDirectionAccelerationRange: xyz; + ProneSpeedAccelerationRange: xyz; + MinMovementAccelerationRangeRight: xyz; + MaxMovementAccelerationRangeRight: xyz; +} +export interface xyz { + x: number; + y: number; + z: number; +} +export interface Ballistic { + GlobalDamageDegradationCoefficient: number; +} +export interface RepairSettings { + ItemEnhancementSettings: IItemEnhancementSettings; + MinimumLevelToApplyBuff: number; + RepairStrategies: IRepairStrategies; + armorClassDivisor: number; + durabilityPointCostArmor: number; + durabilityPointCostGuns: number; +} +export interface IItemEnhancementSettings { + DamageReduction: IPriceModifier; + MalfunctionProtections: IPriceModifier; + WeaponSpread: IPriceModifier; +} +export interface IPriceModifier { + PriceModifier: number; +} +export interface IRepairStrategies { + Armor: IRepairStrategy; + Firearms: IRepairStrategy; +} +export interface IRepairStrategy { + BuffTypes: string[]; + Filter: string[]; +} +export interface BotPreset { + UseThis: boolean; + Role: string; + BotDifficulty: string; + VisibleAngle: number; + VisibleDistance: number; + ScatteringPerMeter: number; + HearingSense: number; + SCATTERING_DIST_MODIF: number; + MAX_AIMING_UPGRADE_BY_TIME: number; + FIRST_CONTACT_ADD_SEC: number; + COEF_IF_MOVE: number; +} +export interface BotWeaponScattering { + Name: string; + PriorityScatter1meter: number; + PriorityScatter10meter: number; + PriorityScatter100meter: number; +} +export interface Preset { + _id: string; + _type: string; + _changeWeaponName: boolean; + _name: string; + _parent: string; + _items: Item[]; + /** Default presets have this property */ + _encyclopedia?: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocation.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocation.d.ts new file mode 100644 index 0000000..42fac06 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocation.d.ts @@ -0,0 +1,6 @@ +import { ILocationBase } from "./ILocationBase"; +import { ILooseLoot } from "./ILooseLoot"; +export interface ILocation { + base: ILocationBase; + looseLoot: ILooseLoot; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocationBase.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocationBase.d.ts new file mode 100644 index 0000000..1c3a2fa --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocationBase.d.ts @@ -0,0 +1,212 @@ +export interface ILocationBase { + AccessKeys: string[]; + AirdropParameters: AirdropParameter[]; + Area: number; + AveragePlayTime: number; + AveragePlayerLevel: number; + Banners: Banner[]; + BossLocationSpawn: BossLocationSpawn[]; + BotAssault: number; + BotEasy: number; + BotHard: number; + BotImpossible: number; + BotLocationModifier: BotLocationModifier; + BotMarksman: number; + BotMax: number; + BotMaxPlayer: number; + BotMaxTimePlayer: number; + BotNormal: number; + BotSpawnTimeOffMax: number; + BotSpawnTimeOffMin: number; + BotSpawnTimeOnMax: number; + BotSpawnTimeOnMin: number; + BotStart: number; + BotStop: number; + Description: string; + DisabledForScav: boolean; + DisabledScavExits: string; + Enabled: boolean; + EnableCoop: boolean; + GlobalLootChanceModifier: number; + IconX: number; + IconY: number; + Id: string; + Insurance: boolean; + IsSecret: boolean; + Locked: boolean; + Loot: any[]; + MaxBotPerZone: number; + MaxDistToFreePoint: number; + MaxPlayers: number; + MinDistToExitPoint: number; + MinDistToFreePoint: number; + MinMaxBots: MinMaxBot[]; + MinPlayers: number; + MaxCoopGroup: number; + Name: string; + NewSpawn: boolean; + OcculsionCullingEnabled: boolean; + OldSpawn: boolean; + OpenZones: string; + Preview: Preview; + RequiredPlayerLevel: number; + PmcMaxPlayersInGroup: number; + ScavMaxPlayersInGroup: number; + Rules: string; + SafeLocation: boolean; + Scene: Scene; + SpawnPointParams: SpawnPointParam[]; + UnixDateTime: number; + _Id: string; + doors: any[]; + EscapeTimeLimit: number; + EscapeTimeLimitCoop: number; + exit_access_time: number; + exit_count: number; + exit_time: number; + exits: Exit[]; + filter_ex: string[]; + limits: ILimit[]; + matching_min_seconds: number; + GenerateLocalLootCache: boolean; + maxItemCountInLocation: MaxItemCountInLocation[]; + sav_summon_seconds: number; + tmp_location_field_remove_me: number; + users_gather_seconds: number; + users_spawn_seconds_n: number; + users_spawn_seconds_n2: number; + users_summon_seconds: number; + waves: Wave[]; +} +export interface ILimit { + min: number; + max: number; + items: any[]; +} +export interface AirdropParameter { + AirdropPointDeactivateDistance: number; + MinPlayersCountToSpawnAirdrop: number; + PlaneAirdropChance: number; + PlaneAirdropCooldownMax: number; + PlaneAirdropCooldownMin: number; + PlaneAirdropEnd: number; + PlaneAirdropMax: number; + PlaneAirdropStartMax: number; + PlaneAirdropStartMin: number; + UnsuccessfulTryPenalty: number; +} +export interface Banner { + id: string; + pic: Pic; +} +export interface Pic { + path: string; + rcid: string; +} +export interface BossLocationSpawn { + BossChance: number; + BossDifficult: string; + BossEscortAmount: string; + BossEscortDifficult: string; + BossEscortType: string; + BossName: string; + BossPlayer: boolean; + BossZone: string; + RandomTimeSpawn: boolean; + Time: number; + TriggerId: string; + TriggerName: string; + Delay?: number; + Supports?: BossSupport[]; + sptId?: string; +} +export interface BossSupport { + BossEscortAmount: string; + BossEscortDifficult: string[]; + BossEscortType: string; +} +export interface BotLocationModifier { + AccuracySpeed: number; + DistToActivate: number; + DistToPersueAxemanCoef: number; + DistToSleep: number; + GainSight: number; + KhorovodChance: number; + MagnetPower: number; + MarksmanAccuratyCoef: number; + Scattering: number; + VisibleDistance: number; +} +export interface MinMaxBot { + WildSpawnType: WildSpawnType; + max: number; + min: number; +} +export interface Preview { + path: string; + rcid: string; +} +export interface Scene { + path: string; + rcid: string; +} +export interface SpawnPointParam { + BotZoneName: string; + Categories: string[]; + ColliderParams: ColliderParams; + DelayToCanSpawnSec: number; + Id: string; + Infiltration: string; + Position: xyz; + Rotation: number; + Sides: string[]; +} +export interface ColliderParams { + _parent: string; + _props: Props; +} +export interface Props { + Center: xyz; + Radius: number; +} +export interface xyz { + x: number; + y: number; + z: number; +} +export interface Exit { + Chance: number; + Count: number; + EntryPoints: string; + ExfiltrationTime: number; + ExfiltrationType: string; + RequiredSlot?: string; + Id: string; + MaxTime: number; + MinTime: number; + Name: string; + PassageRequirement: string; + PlayersCount: number; + RequirementTip: string; +} +export interface MaxItemCountInLocation { + TemplateId: string; + Value: number; +} +export interface Wave { + BotPreset: string; + BotSide: string; + SpawnPoints: string; + WildSpawnType: WildSpawnType; + isPlayers: boolean; + number: number; + slots_max: number; + slots_min: number; + time_max: number; + time_min: number; + sptId?: string; +} +export declare enum WildSpawnType { + ASSAULT = "assault", + MARKSMAN = "marksman" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocationsSourceDestinationBase.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocationsSourceDestinationBase.d.ts new file mode 100644 index 0000000..7f8d915 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILocationsSourceDestinationBase.d.ts @@ -0,0 +1,9 @@ +import { ILocations } from "../../spt/server/ILocations"; +export interface ILocationsGenerateAllResponse { + locations: ILocations; + paths: Path[]; +} +export interface Path { + Source: string; + Destination: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILooseLoot.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILooseLoot.d.ts new file mode 100644 index 0000000..14b795e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/ILooseLoot.d.ts @@ -0,0 +1,45 @@ +export interface ILooseLoot { + spawnpointCount: SpawnpointCount; + spawnpointsForced: SpawnpointsForced[]; + spawnpoints: Spawnpoint[]; +} +export interface SpawnpointCount { + mean: number; + std: number; +} +export interface SpawnpointsForced { + locationId: string; + probability: number; + template: SpawnpointTemplate; +} +export interface SpawnpointTemplate { + Id: string; + IsStatic: boolean; + useGravity: boolean; + randomRotation: boolean; + Position: Xyz; + Rotation: Xyz; + IsGroupPosition: boolean; + GroupPositions: any[]; + Root: any; + Items: Item[]; +} +export interface Item { + _id: string; + _tpl?: string; +} +export interface Spawnpoint { + locationId: string; + probability: number; + template: SpawnpointTemplate; + itemDistribution: ItemDistribution[]; +} +export interface Xyz { + x: number; + y: number; + z: number; +} +export interface ItemDistribution { + tpl: string; + relativeProbability: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/IMetricsTableData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/IMetricsTableData.d.ts new file mode 100644 index 0000000..873ef82 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/IMetricsTableData.d.ts @@ -0,0 +1,7 @@ +export interface IMetricsTableData { + Keys: number[]; + NetProcessingBins: number[]; + RenderBins: number[]; + GameUpdateBins: number[]; + MemoryMeasureInterval: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/IPmcData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/IPmcData.d.ts new file mode 100644 index 0000000..5703e4b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/IPmcData.d.ts @@ -0,0 +1,3 @@ +import { IBotBase } from "./tables/IBotBase"; +export interface IPmcData extends IBotBase { +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/request/IBaseInteractionRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/request/IBaseInteractionRequestData.d.ts new file mode 100644 index 0000000..7303275 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/request/IBaseInteractionRequestData.d.ts @@ -0,0 +1,9 @@ +export interface IBaseInteractionRequestData { + Action: string; + fromOwner?: OwnerInfo; + toOwner?: OwnerInfo; +} +export interface OwnerInfo { + id: string; + type: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IBotBase.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IBotBase.d.ts new file mode 100644 index 0000000..dd7c478 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IBotBase.d.ts @@ -0,0 +1,378 @@ +import { HideoutAreas } from "../../../enums/HideoutAreas"; +import { MemberCategory } from "../../../enums/MemberCategory"; +import { QuestStatus } from "../../../enums/QuestStatus"; +import { IRagfairOffer } from "../../ragfair/IRagfairOffer"; +import { Item, Upd } from "./IItem"; +import { IPmcDataRepeatableQuest } from "./IRepeatableQuests"; +export interface IBotBase { + _id: string; + aid: string; + savage?: string; + Info: Info; + Customization: Customization; + Health: Health; + Inventory: Inventory; + Skills: Skills; + Stats: Stats; + Encyclopedia: Record; + ConditionCounters: ConditionCounters; + BackendCounters: Record; + InsuredItems: InsuredItem[]; + Hideout: Hideout; + Quests: Quest[]; + TradersInfo: Record; + UnlockedInfo: IUnlockedInfo; + RagfairInfo: RagfairInfo; + RepeatableQuests: IPmcDataRepeatableQuest[]; + Bonuses: Bonus[]; + Notes: Notes; + CarExtractCounts: CarExtractCounts; + SurvivorClass: SurvivorClass; + WishList: string[]; + /** SPT specific property used during bot generation in raid */ + sptIsPmc?: boolean; +} +export interface IUnlockedInfo { + unlockedProductionRecipe: string[]; +} +export interface Info { + EntryPoint: string; + Nickname: string; + LowerNickname: string; + Side: string; + Voice: string; + Level: number; + Experience: number; + RegistrationDate: number; + GameVersion: string; + AccountType: number; + MemberCategory: MemberCategory; + lockedMoveCommands: boolean; + SavageLockTime: number; + LastTimePlayedAsSavage: number; + Settings: Settings; + NicknameChangeDate: number; + NeedWipeOptions: any[]; + lastCompletedWipe: LastCompleted; + Bans: IBan[]; + BannedState: boolean; + BannedUntil: number; + IsStreamerModeAvailable: boolean; + lastCompletedEvent?: LastCompleted; +} +export interface Settings { + Role: string; + BotDifficulty: string; + Experience: number; + StandingForKill: number; + AggressorBonus: number; +} +export interface IBan { + type: BanType; + dateTime: number; +} +export declare enum BanType { + CHAT = 0, + RAGFAIR = 1, + VOIP = 2, + TRADING = 3, + ONLINE = 4, + FRIENDS = 5, + CHANGE_NICKNAME = 6 +} +export interface Customization { + Head: string; + Body: string; + Feet: string; + Hands: string; +} +export interface Health { + Hydration: CurrentMax; + Energy: CurrentMax; + Temperature: CurrentMax; + BodyParts: BodyPartsHealth; + UpdateTime: number; +} +export interface BodyPartsHealth { + Head: BodyPartHealth; + Chest: BodyPartHealth; + Stomach: BodyPartHealth; + LeftArm: BodyPartHealth; + RightArm: BodyPartHealth; + LeftLeg: BodyPartHealth; + RightLeg: BodyPartHealth; +} +export interface BodyPartHealth { + Health: CurrentMax; + Effects?: Record; +} +export interface BodyPartEffectProperties { + Time: number; +} +export interface CurrentMax { + Current: number; + Maximum: number; +} +export interface Inventory { + items: Item[]; + equipment: string; + stash: string; + sortingTable: string; + questRaidItems: string; + questStashItems: string; + fastPanel: FastPanel; +} +export interface FastPanel { +} +export interface Skills { + Common: Common[]; + Mastering: Mastering[]; + Points: number; +} +export interface Common { + Id: string; + Progress: number; + PointsEarnedDuringSession?: number; + LastAccess?: number; + max?: number; + min?: number; +} +export interface Mastering { + Id: string; + Progress: number; + max?: number; + min?: number; +} +export interface Stats { + CarriedQuestItems: string[]; + Victims: Victim[]; + TotalSessionExperience: number; + LastSessionDate: number; + SessionCounters: SessionCounters; + OverallCounters: OverallCounters; + SessionExperienceMult?: number; + ExperienceBonusMult?: number; + Aggressor?: Aggressor; + DroppedItems?: IDroppedItem[]; + FoundInRaidItems?: FoundInRaidItem[]; + DamageHistory?: DamageHistory; + DeathCause?: DeathCause; + LastPlayerState?: LastPlayerState; + TotalInGameTime: number; + SurvivorClass?: string; +} +export interface IDroppedItem { + QuestId: string; + ItemId: string; + ZoneId: string; +} +export interface FoundInRaidItem { + QuestId: string; + ItemId: string; +} +export interface Victim { + AccountId: string; + ProfileId: string; + Name: string; + Side: string; + BodyPart: string; + Time: string; + Distance: number; + Level: number; + Weapon: string; + Role: string; +} +export interface SessionCounters { + Items: CounterKeyValue[]; +} +export interface OverallCounters { + Items: CounterKeyValue[]; +} +export interface CounterKeyValue { + Key: string[]; + Value: number; +} +export interface ConditionCounters { + Counters: Counter[]; +} +export interface Counter { + id: string; + value: number; + qid: string; +} +export interface Aggressor { + AccountId: string; + ProfileId: string; + MainProfileNickname: string; + Name: string; + Side: string; + BodyPart: string; + HeadSegment: string; + WeaponName: string; + Category: string; +} +export interface DamageHistory { + LethalDamagePart: string; + LethalDamage: LethalDamage; + BodyParts: BodyPartsDamageHistory; +} +export interface LethalDamage { + Amount: number; + Type: string; + SourceId: string; + OverDamageFrom: string; + Blunt: boolean; + ImpactsCount: number; +} +export interface BodyPartsDamageHistory { + Head: DamageStats[]; + Chest: DamageStats[]; + Stomach: DamageStats[]; + LeftArm: DamageStats[]; + RightArm: DamageStats[]; + LeftLeg: DamageStats[]; + RightLeg: DamageStats[]; + Common: DamageStats[]; +} +export interface DamageStats { + Amount: number; + Type: string; + SourceId: string; + OverDamageFrom: string; + Blunt: boolean; + ImpactsCount: number; +} +export interface DeathCause { + DamageType: string; + Side: string; + Role: string; + WeaponId: string; +} +export interface LastPlayerState { + Info: LastPlayerStateInfo; + Customization: Record; + Equipment: any; +} +export interface LastPlayerStateInfo { + Nickname: string; + Side: string; + Level: number; + MemberCategory: string; +} +export interface BackendCounter { + id: string; + qid?: string; + value: number; +} +export interface InsuredItem { + tid: string; + itemId: string; +} +export interface Hideout { + Production: Record; + Areas: HideoutArea[]; + Improvements: Record; + sptUpdateLastRunTimestamp: number; +} +export interface IHideoutImprovement { + completed: boolean; + improveCompleteTimestamp: number; +} +export interface Productive { + Products: Product[]; + /** Seconds passed of production */ + Progress?: number; + /** Is craft in some state of being worked on by client (crafting/ready to pick up) */ + inProgress?: boolean; + StartTimestamp?: number; + SkipTime?: number; + /** Seconds needed to fully craft */ + ProductionTime?: number; + sptIsScavCase?: boolean; +} +export interface Production extends Productive { + RecipeId: string; + SkipTime: number; + ProductionTime: number; +} +export interface ScavCase extends Productive { + RecipeId: string; +} +export interface Product { + _id: string; + _tpl: string; + upd?: Upd; +} +export interface HideoutArea { + type: HideoutAreas; + level: number; + active: boolean; + passiveBonusesEnabled: boolean; + completeTime: number; + constructing: boolean; + slots: HideoutSlot[]; + lastRecipe: string; +} +export interface HideoutSlot { + /** SPT specific value to keep track of what index this slot is (0,1,2,3 etc) */ + locationIndex: number; + item?: HideoutItem[]; +} +export interface HideoutItem { + _id: string; + _tpl: string; + upd?: Upd; +} +export interface LastCompleted { + $oid: string; +} +export interface Notes { + Notes: Note[]; +} +export interface CarExtractCounts { +} +export declare enum SurvivorClass { + UNKNOWN = 0, + NEUTRALIZER = 1, + MARAUDER = 2, + PARAMEDIC = 3, + SURVIVOR = 4 +} +export interface Quest { + qid: string; + startTime: number; + status: QuestStatus; + statusTimers?: Record; + /** SPT specific property */ + completedConditions?: string[]; + availableAfter?: number; +} +export interface TraderInfo { + loyaltyLevel: number; + salesSum: number; + disabled: boolean; + standing: number; + nextResupply: number; + unlocked: boolean; +} +export interface RagfairInfo { + rating: number; + isRatingGrowing: boolean; + offers: IRagfairOffer[]; +} +export interface Bonus { + id?: string; + type: string; + templateId?: string; + passive?: boolean; + production?: boolean; + visible?: boolean; + value?: number; + icon?: string; + filter?: string[]; + skillType?: string; +} +export interface Note { + Time: number; + Text: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IBotCore.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IBotCore.d.ts new file mode 100644 index 0000000..16a782d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IBotCore.d.ts @@ -0,0 +1,133 @@ +export interface IBotCore { + SAVAGE_KILL_DIST: number; + SOUND_DOOR_BREACH_METERS: number; + SOUND_DOOR_OPEN_METERS: number; + STEP_NOISE_DELTA: number; + JUMP_NOISE_DELTA: number; + GUNSHOT_SPREAD: number; + GUNSHOT_SPREAD_SILENCE: number; + BASE_WALK_SPEREAD2: number; + MOVE_SPEED_COEF_MAX: number; + SPEED_SERV_SOUND_COEF_A: number; + SPEED_SERV_SOUND_COEF_B: number; + G: number; + STAY_COEF: number; + SIT_COEF: number; + LAY_COEF: number; + MAX_ITERATIONS: number; + START_DIST_TO_COV: number; + MAX_DIST_TO_COV: number; + STAY_HEIGHT: number; + CLOSE_POINTS: number; + COUNT_TURNS: number; + SIMPLE_POINT_LIFE_TIME_SEC: number; + DANGER_POINT_LIFE_TIME_SEC: number; + DANGER_POWER: number; + COVER_DIST_CLOSE: number; + GOOD_DIST_TO_POINT: number; + COVER_TOOFAR_FROM_BOSS: number; + COVER_TOOFAR_FROM_BOSS_SQRT: number; + MAX_Y_DIFF_TO_PROTECT: number; + FLARE_POWER: number; + MOVE_COEF: number; + PRONE_POSE: number; + LOWER_POSE: number; + MAX_POSE: number; + FLARE_TIME: number; + MAX_REQUESTS__PER_GROUP: number; + UPDATE_GOAL_TIMER_SEC: number; + DIST_NOT_TO_GROUP: number; + DIST_NOT_TO_GROUP_SQR: number; + LAST_SEEN_POS_LIFETIME: number; + DELTA_GRENADE_START_TIME: number; + DELTA_GRENADE_END_TIME: number; + DELTA_GRENADE_RUN_DIST: number; + DELTA_GRENADE_RUN_DIST_SQRT: number; + PATROL_MIN_LIGHT_DIST: number; + HOLD_MIN_LIGHT_DIST: number; + STANDART_BOT_PAUSE_DOOR: number; + ARMOR_CLASS_COEF: number; + SHOTGUN_POWER: number; + RIFLE_POWER: number; + PISTOL_POWER: number; + SMG_POWER: number; + SNIPE_POWER: number; + GESTUS_PERIOD_SEC: number; + GESTUS_AIMING_DELAY: number; + GESTUS_REQUEST_LIFETIME: number; + GESTUS_FIRST_STAGE_MAX_TIME: number; + GESTUS_SECOND_STAGE_MAX_TIME: number; + GESTUS_MAX_ANSWERS: number; + GESTUS_FUCK_TO_SHOOT: number; + GESTUS_DIST_ANSWERS: number; + GESTUS_DIST_ANSWERS_SQRT: number; + GESTUS_ANYWAY_CHANCE: number; + TALK_DELAY: number; + CAN_SHOOT_TO_HEAD: boolean; + CAN_TILT: boolean; + TILT_CHANCE: number; + MIN_BLOCK_DIST: number; + MIN_BLOCK_TIME: number; + COVER_SECONDS_AFTER_LOSE_VISION: number; + MIN_ARG_COEF: number; + MAX_ARG_COEF: number; + DEAD_AGR_DIST: number; + MAX_DANGER_CARE_DIST_SQRT: number; + MAX_DANGER_CARE_DIST: number; + MIN_MAX_PERSON_SEARCH: number; + PERCENT_PERSON_SEARCH: number; + LOOK_ANYSIDE_BY_WALL_SEC_OF_ENEMY: number; + CLOSE_TO_WALL_ROTATE_BY_WALL_SQRT: number; + SHOOT_TO_CHANGE_RND_PART_MIN: number; + SHOOT_TO_CHANGE_RND_PART_MAX: number; + SHOOT_TO_CHANGE_RND_PART_DELTA: number; + FORMUL_COEF_DELTA_DIST: number; + FORMUL_COEF_DELTA_SHOOT: number; + FORMUL_COEF_DELTA_FRIEND_COVER: number; + SUSPETION_POINT_DIST_CHECK: number; + MAX_BASE_REQUESTS_PER_PLAYER: number; + MAX_HOLD_REQUESTS_PER_PLAYER: number; + MAX_GO_TO_REQUESTS_PER_PLAYER: number; + MAX_COME_WITH_ME_REQUESTS_PER_PLAYER: number; + CORE_POINT_MAX_VALUE: number; + CORE_POINTS_MAX: number; + CORE_POINTS_MIN: number; + BORN_POISTS_FREE_ONLY_FAREST_BOT: boolean; + BORN_POINSTS_FREE_ONLY_FAREST_PLAYER: boolean; + SCAV_GROUPS_TOGETHER: boolean; + LAY_DOWN_ANG_SHOOT: number; + HOLD_REQUEST_TIME_SEC: number; + TRIGGERS_DOWN_TO_RUN_WHEN_MOVE: number; + MIN_DIST_TO_RUN_WHILE_ATTACK_MOVING: number; + MIN_DIST_TO_RUN_WHILE_ATTACK_MOVING_OTHER_ENEMIS: number; + MIN_DIST_TO_STOP_RUN: number; + JUMP_SPREAD_DIST: number; + LOOK_TIMES_TO_KILL: number; + COME_INSIDE_TIMES: number; + TOTAL_TIME_KILL: number; + TOTAL_TIME_KILL_AFTER_WARN: number; + MOVING_AIM_COEF: number; + VERTICAL_DIST_TO_IGNORE_SOUND: number; + DEFENCE_LEVEL_SHIFT: number; + MIN_DIST_CLOSE_DEF: number; + USE_ID_PRIOR_WHO_GO: boolean; + SMOKE_GRENADE_RADIUS_COEF: number; + GRENADE_PRECISION: number; + MAX_WARNS_BEFORE_KILL: number; + CARE_ENEMY_ONLY_TIME: number; + MIDDLE_POINT_COEF: number; + MAIN_TACTIC_ONLY_ATTACK: boolean; + LAST_DAMAGE_ACTIVE: number; + SHALL_DIE_IF_NOT_INITED: boolean; + CHECK_BOT_INIT_TIME_SEC: number; + WEAPON_ROOT_Y_OFFSET: number; + DELTA_SUPRESS_DISTANCE_SQRT: number; + DELTA_SUPRESS_DISTANCE: number; + WAVE_COEF_LOW: number; + WAVE_COEF_MID: number; + WAVE_COEF_HIGH: number; + WAVE_COEF_HORDE: number; + WAVE_ONLY_AS_ONLINE: boolean; + LOCAL_BOTS_COUNT: number; + AXE_MAN_KILLS_END: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IBotType.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IBotType.d.ts new file mode 100644 index 0000000..e02d990 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IBotType.d.ts @@ -0,0 +1,159 @@ +import { MinMax } from "../../../common/MinMax"; +import { Skills } from "./IBotBase"; +export interface IBotType { + appearance: Appearance; + chances: Chances; + difficulty: Difficulties; + experience: Experience; + firstName: string[]; + generation: Generation; + health: Health; + inventory: Inventory; + lastName: string[]; + skills: Skills; +} +export interface Appearance { + body: Record; + feet: Record; + hands: string[]; + head: string[]; + voice: string[]; +} +export interface Chances { + equipment: EquipmentChances; + mods: ModsChances; +} +export interface EquipmentChances { + ArmBand: number; + ArmorVest: number; + Backpack: number; + Earpiece: number; + Eyewear: number; + FaceCover: number; + FirstPrimaryWeapon: number; + Headwear: number; + Holster: number; + Pockets: number; + Scabbard: number; + SecondPrimaryWeapon: number; + SecuredContainer: number; + TacticalVest: number; +} +export interface ModsChances { + mod_charge: number; + mod_equipment: number; + mod_equipment_000: number; + mod_equipment_001: number; + mod_equipment_002: number; + mod_flashlight: number; + mod_foregrip: number; + mod_launcher: number; + mod_magazine: number; + mod_mount: number; + mod_mount_000: number; + mod_mount_001: number; + mod_muzzle: number; + mod_nvg: number; + mod_pistol_grip: number; + mod_reciever: number; + mod_scope: number; + mod_scope_000: number; + mod_scope_001: number; + mod_scope_002: number; + mod_scope_003: number; + mod_sight_front: number; + mod_sight_rear: number; + mod_stock: number; + mod_stock_000: number; + mod_stock_akms: number; + mod_tactical: number; + mod_tactical_000: number; + mod_tactical_001: number; + mod_tactical_002: number; + mod_tactical_003: number; +} +export interface Difficulties { + easy: Difficulty; + normal: Difficulty; + hard: Difficulty; + impossible: Difficulty; +} +export interface Difficulty { + Aiming: Record; + Boss: Record; + Change: Record; + Core: Record; + Cover: Record; + Grenade: Record; + Hearing: Record; + Lay: Record; + Look: Record; + Mind: Record; + Move: Record; + Patrol: Record; + Scattering: Record; + Shoot: Record; +} +export interface Experience { + aggressorBonus: number; + level: MinMax; + reward: MinMax; + standingForKill: number; +} +export interface Generation { + items: ItemMinMax; +} +export interface ItemMinMax { + grenades: MinMax; + healing: MinMax; + drugs: MinMax; + stims: MinMax; + looseLoot: MinMax; + magazines: MinMax; + specialItems: MinMax; +} +export interface Health { + BodyParts: BodyPart[]; + Energy: MinMax; + Hydration: MinMax; + Temperature: MinMax; +} +export interface BodyPart { + Chest: MinMax; + Head: MinMax; + LeftArm: MinMax; + LeftLeg: MinMax; + RightArm: MinMax; + RightLeg: MinMax; + Stomach: MinMax; +} +export interface Inventory { + equipment: Equipment; + Ammo: Record>; + items: Items; + mods: Mods; +} +export interface Equipment { + ArmBand: Record; + ArmorVest: Record; + Backpack: Record; + Earpiece: Record; + Eyewear: Record; + FaceCover: Record; + FirstPrimaryWeapon: Record; + Headwear: Record; + Holster: Record; + Pockets: Record; + Scabbard: Record; + SecondPrimaryWeapon: Record; + SecuredContainer: Record; + TacticalVest: Record; +} +export interface Items { + Backpack: string[]; + Pockets: string[]; + SecuredContainer: string[]; + SpecialLoot: string[]; + TacticalVest: string[]; +} +export type Mods = Record>; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ICustomizationItem.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ICustomizationItem.d.ts new file mode 100644 index 0000000..8bfeece --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ICustomizationItem.d.ts @@ -0,0 +1,33 @@ +export interface ICustomizationItem { + _id: string; + _name: string; + _parent: string; + _type: string; + _props: Props; + _proto: string; +} +export interface Props { + Name: string; + ShortName: string; + Description: string; + Side: string[]; + BodyPart: string; + AvailableAsDefault?: boolean; + Body: string; + Hands: string; + Feet: string; + Prefab: Prefab; + WatchPrefab: Prefab; + IntegratedArmorVest: boolean; + WatchPosition: Xyz; + WatchRotation: Xyz; +} +export interface Prefab { + path: string; + rcid: string; +} +export interface Xyz { + x: number; + y: number; + z: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IHandbookBase.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IHandbookBase.d.ts new file mode 100644 index 0000000..7d7db07 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IHandbookBase.d.ts @@ -0,0 +1,16 @@ +export interface IHandbookBase { + Categories: Category[]; + Items: HandbookItem[]; +} +export interface Category { + Id: string; + ParentId?: string; + Icon: string; + Color: string; + Order: string; +} +export interface HandbookItem { + Id: string; + ParentId: string; + Price: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IItem.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IItem.d.ts new file mode 100644 index 0000000..ce00ae9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IItem.d.ts @@ -0,0 +1,120 @@ +export interface Item { + _id: string; + _tpl: string; + parentId?: string; + slotId?: string; + location?: Location | number; + upd?: Upd; +} +export interface Upd { + Buff?: Buff; + OriginalStackObjectsCount?: number; + Togglable?: Togglable; + Map?: Map; + Tag?: Tag; + sptPresetId?: string; + FaceShield?: FaceShield; + StackObjectsCount?: number; + UnlimitedCount?: boolean; + Repairable?: Repairable; + RecodableComponent?: RecodableComponent; + FireMode?: FireMode; + SpawnedInSession?: boolean; + Light?: Light; + Key?: Key; + Resource?: Resource; + Sight?: Sight; + MedKit?: MedKit; + FoodDrink?: FoodDrink; + Dogtag?: Dogtag; + BuyRestrictionMax?: number; + BuyRestrictionCurrent?: number; + Foldable?: Foldable; + SideEffect?: SideEffect; + RepairKit?: RepairKit; +} +export interface Buff { + rarity: string; + buffType: string; + value: number; + thresholdDurability?: number; +} +export interface Togglable { + On: boolean; +} +export interface Map { + Markers: MapMarker[]; +} +export interface MapMarker { + X: number; + Y: number; +} +export interface Tag { + Color: number; + Name: string; +} +export interface FaceShield { + Hits: number; +} +export interface Repairable { + Durability: number; + MaxDurability: number; +} +export interface RecodableComponent { + IsEncoded: boolean; +} +export interface MedKit { + HpResource: number; +} +export interface Sight { + ScopesCurrentCalibPointIndexes: number[]; + ScopesSelectedModes: number[]; + SelectedScope: number; +} +export interface Foldable { + Folded: boolean; +} +export interface FireMode { + FireMode: string; +} +export interface FoodDrink { + HpPercent: number; +} +export interface Key { + NumberOfUsages: number; +} +export interface Resource { + Value: number; + UnitsConsumed: number; +} +export interface Light { + IsActive: boolean; + SelectedMode: number; +} +export interface Dogtag { + AccountId: string; + ProfileId: string; + Nickname: string; + Side: string; + Level: number; + Time: string; + Status: string; + KillerAccountId: string; + KillerProfileId: string; + KillerName: string; + WeaponName: string; +} +export interface Location { + x: number; + y: number; + r: string | number; + isSearched?: boolean; + /** SPT property? */ + rotation?: string | boolean; +} +export interface SideEffect { + Value: number; +} +export interface RepairKit { + Resource: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ILocationsBase.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ILocationsBase.d.ts new file mode 100644 index 0000000..2c96af3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ILocationsBase.d.ts @@ -0,0 +1,10 @@ +export interface ILocationsBase { + locations: Locations; + paths: Path[]; +} +export interface Locations { +} +export interface Path { + Source: string; + Destination: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ILootBase.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ILootBase.d.ts new file mode 100644 index 0000000..e4baac5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ILootBase.d.ts @@ -0,0 +1,64 @@ +import { Item } from "./IItem"; +export interface ILootBase { + staticAmmo: Record; + staticContainers: Record; + staticLoot: Record; +} +export interface IStaticAmmoDetails { + tpl: string; + relativeProbability: number; +} +export interface IStaticContainerDetails { + staticWeapons: IStaticWeaponProps[]; + staticContainers: IStaticContainerProps[]; + staticForced: IStaticForcedProps[]; +} +export interface IStaticWeaponProps { + Id: string; + IsStatic: boolean; + useGravity: boolean; + randomRotation: boolean; + Position: Xyz; + Rotation: Xyz; + IsGroupPosition: boolean; + GroupPositions: any[]; + Root: string; + Items: Item[]; +} +export interface IStaticContainerProps { + Id: string; + IsStatic: boolean; + useGravity: boolean; + randomRotation: boolean; + Position: Xyz; + Rotation: Xyz; + IsGroupPosition: boolean; + GroupPositions: any[]; + Root: any; + Items: StaticItem[]; +} +export interface Xyz { + x: number; + y: number; + z: number; +} +export interface StaticItem { + _id: any; + _tpl: string; +} +export interface IStaticForcedProps { + containerId: string; + itemTpl: string; +} +export interface IStaticLootDetails { + itemcountDistribution: ItemCountDistribution[]; + itemDistribution: ItemDistribution[]; +} +export interface ItemCountDistribution { + count: number; + relativeProbability: number; +} +export interface ItemDistribution { + tpl: string; + relativeProbability: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IMatch.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IMatch.d.ts new file mode 100644 index 0000000..c30cb48 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IMatch.d.ts @@ -0,0 +1,10 @@ +export interface IMatch { + metrics: Metrics; +} +export interface Metrics { + Keys: number[]; + NetProcessingBins: number[]; + RenderBins: number[]; + GameUpdateBins: number[]; + MemoryMeasureInterval: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IProfileTemplate.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IProfileTemplate.d.ts new file mode 100644 index 0000000..66ebbe8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IProfileTemplate.d.ts @@ -0,0 +1,27 @@ +import { Dialogue, WeaponBuild } from "../../profile/IAkiProfile"; +import { IPmcData } from "../IPmcData"; +export interface IProfileTemplates { + Standard: IProfileSides; + "Left Behind": IProfileSides; + "Prepare To Escape": IProfileSides; + "Edge Of Darkness": IProfileSides; +} +export interface IProfileSides { + usec: TemplateSide; + bear: TemplateSide; +} +export interface TemplateSide { + character: IPmcData; + suits: string[]; + dialogues: Record; + weaponbuilds: WeaponBuild[]; + trader: ProfileTraderTemplate; +} +export interface ProfileTraderTemplate { + initialLoyaltyLevel: number; + setQuestsAvailableForStart?: boolean; + setQuestsAvailableForFinish?: boolean; + initialStanding: number; + initialSalesSum: number; + jaegerUnlocked: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IQuest.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IQuest.d.ts new file mode 100644 index 0000000..5c939e1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IQuest.d.ts @@ -0,0 +1,118 @@ +import { QuestRewardType } from "../../../enums/QuestRewardType"; +import { QuestStatus } from "../../../enums/QuestStatus"; +import { Item } from "./IItem"; +export interface IQuest { + QuestName?: string; + _id: string; + canShowNotificationsInGame: boolean; + conditions: Conditions; + description: string; + failMessageText: string; + name: string; + note: string; + traderId: string; + location: string; + image: string; + type: string; + isKey: boolean; + questStatus: any; + restartable: boolean; + instantComplete: boolean; + secretQuest: boolean; + startedMessageText: string; + successMessageText: string; + templateId: string; + rewards: Rewards; + status: string | number; + KeyQuest: boolean; + changeQuestMessageText: string; + side: string; +} +export interface Conditions { + Started: AvailableForConditions[]; + AvailableForFinish: AvailableForConditions[]; + AvailableForStart: AvailableForConditions[]; + Success: AvailableForConditions[]; + Fail: AvailableForConditions[]; +} +export interface AvailableForConditions { + _parent: string; + _props: AvailableForProps; + dynamicLocale?: boolean; +} +export interface AvailableForProps { + id: string; + index: number; + parentId: string; + isEncoded: boolean; + dynamicLocale: boolean; + value?: number; + compareMethod?: string; + visibilityConditions?: VisibilityCondition[]; + target?: string | string[]; + status?: QuestStatus[]; + availableAfter?: number; + dispersion?: number; + onlyFoundInRaid?: boolean; + oneSessionOnly?: boolean; + doNotResetIfCounterCompleted?: boolean; + dogtagLevel?: number; + maxDurability?: number; + minDurability?: number; + counter?: AvailableForCounter; + plantTime?: number; + zoneId?: string; + type?: boolean; + countInRaid?: boolean; +} +export interface AvailableForCounter { + id: string; + conditions: CounterCondition[]; +} +export interface CounterCondition { + _parent: string; + _props: CounterProps; +} +export interface CounterProps { + id: string; + target: string[] | string; + compareMethod?: string; + value?: string; + weapon?: string[]; + equipmentInclusive?: string[][]; + weaponModsInclusive?: string[][]; + status?: string[]; + bodyPart?: string[]; + daytime?: DaytimeCounter; +} +export interface DaytimeCounter { + from: number; + to: number; +} +export interface VisibilityCondition { + id: string; + value: number; + dynamicLocale: boolean; + oneSessionOnly: boolean; +} +export interface Rewards { + AvailableForStart: Reward[]; + AvailableForFinish: Reward[]; + Started: Reward[]; + Success: Reward[]; + Fail: Reward[]; + FailRestartable: Reward[]; + Expired: Reward[]; +} +export interface Reward extends Item { + value?: string | number; + id: string; + type: QuestRewardType; + index: number; + target?: string; + items?: Item[]; + loyaltyLevel?: number; + traderId?: string; + unknown?: boolean; + findInRaid?: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IRepeatableQuests.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IRepeatableQuests.d.ts new file mode 100644 index 0000000..3a33f2e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/IRepeatableQuests.d.ts @@ -0,0 +1,220 @@ +import { Item } from "./IItem"; +export interface IReward { + index: number; + type: string; + value: number; + target?: string; + items?: Item[]; +} +export interface IRepeatableQuestDatabase { + templates: ITemplates; + rewards: IRewardOptions; + data: IOptions; + samples: ISampleQuests[]; +} +export interface ITemplates { + Elimination: IRepeatableQuest; + Completion: IRepeatableQuest; + Exploration: IRepeatableQuest; +} +export interface IPmcDataRepeatableQuest { + id?: string; + name: string; + activeQuests: IRepeatableQuest[]; + inactiveQuests: IRepeatableQuest[]; + endTime: number; + changeRequirement: TChangeRequirementRecord; +} +export type TChangeRequirementRecord = Record; +export interface IChangeRequirement { + changeCost: IChangeCost[]; + changeStandingCost: number; +} +export interface IChangeCost { + templateId: string; + count: number; +} +export interface IRepeatableQuest { + _id: any; + traderId: string; + location: any; + image: string; + type: string; + isKey: boolean; + restartable: boolean; + instantComplete: boolean; + secretQuest: boolean; + canShowNotificationsInGame: boolean; + rewards: IRewards; + conditions: IConditions; + side: string; + name: string; + note: string; + description: string; + successMessageText: string; + failMessageText: string; + startedMessageText: string; + changeQuestMessageText: string; + templateId: string; + changeCost: IChangeCost[]; + changeStandingCost: number; +} +export interface IRewards { + Started: IReward[]; + Success: IReward[]; + Fail: IReward[]; +} +export interface IConditions { + AvailableForStart: any[]; + AvailableForFinish: IAvailableFor[]; + Fail: any[]; +} +export interface IAvailableFor { + _props: IAvailableForProps; + _parent: string; + dynamicLocale: boolean; +} +export interface IAvailableForProps { + id: string; + parentId: string; + dynamicLocale: boolean; + index: number; + visibilityConditions: IVisibilityCondition[]; + value: number; +} +export interface IVisibilityCondition { + id: string; + oneSessionOnly: boolean; + value: number; + index: number; + dynamicLocale: boolean; +} +export interface IAvailableForPropsCounter extends IAvailableForProps { + type: string; + oneSessionOnly: boolean; + doNotResetIfCounterCompleted: boolean; + counter: ICounter; +} +export interface ICounter { + id: string; + conditions: ICondition[]; +} +export interface ICondition { + _props: IConditionProps; + _parent: string; +} +export interface IConditionProps { + id: string; + dynamicLocale: boolean; +} +export interface IElimination extends IRepeatableQuest { + conditions: IEliminationConditions; +} +export interface IEliminationConditions extends IConditions { + AvailableForFinish: IEliminationAvailableFor[]; +} +export interface IEliminationAvailableFor extends IAvailableFor { + _props: IEliminationAvailableForProps; +} +export interface IEliminationAvailableForProps extends IAvailableForPropsCounter { + counter: IEliminationCounter; +} +export interface IEliminationCounter extends ICounter { + conditions: IEliminationCondition[]; +} +export interface IEliminationCondition extends ICondition { + _props: ILocationConditionProps | IKillConditionProps; +} +export interface IExploration extends IRepeatableQuest { + conditions: IExplorationConditions; +} +export interface IExplorationConditions extends IConditions { + AvailableForFinish: IExplorationAvailableFor[]; +} +export interface IExplorationAvailableFor extends IAvailableFor { + _props: IExplorationAvailableForProps; +} +export interface IExplorationAvailableForProps extends IAvailableForPropsCounter { + counter: IExplorationCounter; +} +export interface IExplorationCounter extends ICounter { + conditions: IExplorationCondition[]; +} +export interface IExplorationCondition extends ICondition { + _props: ILocationConditionProps | IExitStatusConditionProps | IExitNameConditionProps; +} +export interface ICompletion extends IRepeatableQuest { + conditions: ICompletionConditions; +} +export interface ICompletionConditions extends IConditions { + AvailableForFinish: ICompletionAvailableFor[]; +} +export interface ICompletionAvailableFor extends IAvailableFor { + _props: ICompletionAvailableForProps; +} +export interface ICompletionAvailableForProps extends IAvailableForProps { + target: string[]; + minDurability: number; + maxDurability: number; + dogtagLevel: number; + onlyFoundInRaid: boolean; +} +export interface ILocationConditionProps extends IConditionProps { + target: string[]; +} +export interface IKillConditionProps extends IConditionProps { + target: string; + value: number; + savageRole?: string[]; + bodyPart?: string[]; + distance?: IDistanceCheck; +} +export interface IDistanceCheck { + compareMethod: string; + value: number; +} +export interface IExitStatusConditionProps extends IConditionProps { + status: string[]; +} +export interface IExitNameConditionProps extends IConditionProps { + exitName: string; +} +export interface IRewardOptions { + itemsBlacklist: string[]; +} +export interface IOptions { + Completion: ICompletionFilter; +} +export interface ICompletionFilter { + itemsBlacklist: ItemsBlacklist[]; + itemsWhitelist: ItemsWhitelist[]; +} +export interface ItemsBlacklist { + minPlayerLevel: number; + itemIds: string[]; +} +export interface ItemsWhitelist { + minPlayerLevel: number; + itemIds: string[]; +} +export interface ISampleQuests { + _id: string; + traderId: string; + location: string; + image: string; + type: string; + isKey: boolean; + restartable: boolean; + instantComplete: boolean; + secretQuest: boolean; + canShowNotificationsInGame: boolean; + rewards: IRewards; + conditions: IConditions; + name: string; + note: string; + description: string; + successMessageText: string; + failMessageText: string; + startedMessageText: string; + templateId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ITemplateItem.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ITemplateItem.d.ts new file mode 100644 index 0000000..cbad0a6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ITemplateItem.d.ts @@ -0,0 +1,467 @@ +export interface ITemplateItem { + _id: string; + _name: string; + _parent: string; + _type: string; + _props: Props; + _proto: string; +} +export interface Props { + Name?: string; + ShortName?: string; + Description?: string; + Weight?: number; + BackgroundColor?: string; + Width?: number; + Height?: number; + StackMaxSize?: number; + Rarity?: string; + SpawnChance?: number; + CreditsPrice?: number; + ItemSound?: string; + Prefab?: Prefab; + UsePrefab?: Prefab; + StackObjectsCount?: number; + NotShownInSlot?: boolean; + ExaminedByDefault?: boolean; + ExamineTime?: number; + IsUndiscardable?: boolean; + IsUnsaleable?: boolean; + IsUnbuyable?: boolean; + IsUngivable?: boolean; + IsUnremovable?: boolean; + IsLockedafterEquip?: boolean; + IsSpecialSlotOnly?: boolean; + QuestItem?: boolean; + QuestStashMaxCount?: number; + LootExperience?: number; + ExamineExperience?: number; + HideEntrails?: boolean; + InsuranceDisabled?: boolean; + RepairCost?: number; + RepairSpeed?: number; + ExtraSizeLeft?: number; + ExtraSizeRight?: number; + ExtraSizeUp?: number; + ExtraSizeDown?: number; + ExtraSizeForceAdd?: boolean; + MergesWithChildren?: boolean; + CanSellOnRagfair?: boolean; + CanRequireOnRagfair?: boolean; + ConflictingItems?: string[]; + Unlootable?: boolean; + UnlootableFromSlot?: string; + UnlootableFromSide?: string[]; + AnimationVariantsNumber?: number; + DiscardingBlock?: boolean; + DropSoundType?: string; + RagFairCommissionModifier?: number; + IsAlwaysAvailableForInsurance?: boolean; + DiscardLimit?: number; + MaxResource?: number; + Resource?: number; + DogTagQualities?: boolean; + Grids?: Grid[]; + Slots?: Slot[]; + CanPutIntoDuringTheRaid?: boolean; + CantRemoveFromSlotsDuringRaid?: string[]; + KeyIds?: string[]; + TagColor?: number; + TagName?: string; + Durability?: number; + Accuracy?: number; + Recoil?: number; + Loudness?: number; + EffectiveDistance?: number; + Ergonomics?: number; + Velocity?: number; + RaidModdable?: boolean; + ToolModdable?: boolean; + BlocksFolding?: boolean; + BlocksCollapsible?: boolean; + IsAnimated?: boolean; + HasShoulderContact?: boolean; + SightingRange?: number; + DoubleActionAccuracyPenaltyMult?: number; + ModesCount?: any; + DurabilityBurnModificator?: number; + HeatFactor?: number; + CoolFactor?: number; + muzzleModType?: string; + CustomAimPlane?: string; + sightModType?: string; + aimingSensitivity?: number; + SightModesCount?: number; + OpticCalibrationDistances?: number[]; + ScopesCount?: number; + AimSensitivity?: number | number[][]; + Zooms?: number[][]; + CalibrationDistances?: number[][]; + Intensity?: number; + Mask?: string; + MaskSize?: number; + NoiseIntensity?: number; + NoiseScale?: number; + Color?: Color; + DiffuseIntensity?: number; + HasHinge?: boolean; + RampPalette?: string; + DepthFade?: number; + RoughnessCoef?: number; + SpecularCoef?: number; + MainTexColorCoef?: number; + MinimumTemperatureValue?: number; + RampShift?: number; + HeatMin?: number; + ColdMax?: number; + IsNoisy?: boolean; + IsFpsStuck?: boolean; + IsGlitch?: boolean; + IsMotionBlurred?: boolean; + IsPixelated?: boolean; + PixelationBlockCount?: number; + ShiftsAimCamera?: number; + magAnimationIndex?: number; + Cartridges?: Slot[]; + CanFast?: boolean; + CanHit?: boolean; + CanAdmin?: boolean; + LoadUnloadModifier?: number; + CheckTimeModifier?: number; + CheckOverride?: number; + ReloadMagType?: string; + VisibleAmmoRangesString?: string; + MalfunctionChance?: number; + IsShoulderContact?: boolean; + Foldable?: boolean; + Retractable?: boolean; + SizeReduceRight?: number; + CenterOfImpact?: number; + ShotgunDispersion?: number; + IsSilencer?: boolean; + DeviationCurve?: number; + DeviationMax?: number; + SearchSound?: string; + BlocksArmorVest?: boolean; + speedPenaltyPercent?: number; + GridLayoutName?: string; + SpawnFilter?: any[]; + containType?: any[]; + sizeWidth?: number; + sizeHeight?: number; + isSecured?: boolean; + spawnTypes?: string; + lootFilter?: any[]; + spawnRarity?: string; + minCountSpawn?: number; + maxCountSpawn?: number; + openedByKeyID?: any[]; + RigLayoutName?: string; + MaxDurability?: number; + armorZone?: string[]; + armorClass?: string | number; + mousePenalty?: number; + weaponErgonomicPenalty?: number; + BluntThroughput?: number; + ArmorMaterial?: string; + ArmorType?: string; + weapClass?: string; + weapUseType?: string; + ammoCaliber?: string; + OperatingResource?: number; + RepairComplexity?: number; + durabSpawnMin?: number; + durabSpawnMax?: number; + isFastReload?: boolean; + RecoilForceUp?: number; + RecoilForceBack?: number; + Convergence?: number; + RecoilAngle?: number; + weapFireType?: string[]; + RecolDispersion?: number; + SingleFireRate?: number; + CanQueueSecondShot?: boolean; + bFirerate?: number; + bEffDist?: number; + bHearDist?: number; + isChamberLoad?: boolean; + chamberAmmoCount?: number; + isBoltCatch?: boolean; + defMagType?: string; + defAmmo?: string; + AdjustCollimatorsToTrajectory?: boolean; + shotgunDispersion?: number; + Chambers?: Slot[]; + CameraRecoil?: number; + CameraSnap?: number; + ReloadMode?: string; + AimPlane?: number; + TacticalReloadStiffnes?: Xyz; + TacticalReloadFixation?: number; + RecoilCenter?: Xyz; + RotationCenter?: Xyz; + RotationCenterNoStock?: Xyz; + FoldedSlot?: string; + CompactHandling?: boolean; + MinRepairDegradation?: number; + MaxRepairDegradation?: number; + IronSightRange?: number; + IsFlareGun?: boolean; + IsGrenadeLauncher?: boolean; + IsOneoff?: boolean; + MustBoltBeOpennedForExternalReload?: boolean; + MustBoltBeOpennedForInternalReload?: boolean; + NoFiremodeOnBoltcatch?: boolean; + BoltAction?: boolean; + HipAccuracyRestorationDelay?: number; + HipAccuracyRestorationSpeed?: number; + HipInnaccuracyGain?: number; + ManualBoltCatch?: boolean; + BurstShotsCount?: number; + BaseMalfunctionChance?: number; + AllowJam?: boolean; + AllowFeed?: boolean; + AllowMisfire?: boolean; + AllowSlide?: boolean; + DurabilityBurnRatio?: number; + HeatFactorGun?: number; + CoolFactorGun?: number; + CoolFactorGunMods?: number; + HeatFactorByShot?: number; + AllowOverheat?: boolean; + DoubleActionAccuracyPenalty?: number; + RecoilPosZMult?: number; + MinRepairKitDegradation?: number; + MaxRepairKitDegradation?: number; + BlocksEarpiece?: boolean; + BlocksEyewear?: boolean; + BlocksHeadwear?: boolean; + BlocksFaceCover?: boolean; + Indestructibility?: number; + headSegments?: string[]; + FaceShieldComponent?: boolean; + FaceShieldMask?: string; + MaterialType?: string; + RicochetParams?: Xyz; + DeafStrength?: string; + BlindnessProtection?: number; + Distortion?: number; + CompressorTreshold?: number; + CompressorAttack?: number; + CompressorRelease?: number; + CompressorGain?: number; + CutoffFreq?: number; + Resonance?: number; + CompressorVolume?: number; + AmbientVolume?: number; + DryVolume?: number; + foodUseTime?: number; + foodEffectType?: string; + StimulatorBuffs?: string; + effects_health?: IHealthEffect[] | Record>; + effects_damage?: any; + MaximumNumberOfUsage?: number; + knifeHitDelay?: number; + knifeHitSlashRate?: number; + knifeHitStabRate?: number; + knifeHitRadius?: number; + knifeHitSlashDam?: number; + knifeHitStabDam?: number; + knifeDurab?: number; + PrimaryDistance?: number; + SecondryDistance?: number; + SlashPenetration?: number; + StabPenetration?: number; + PrimaryConsumption?: number; + SecondryConsumption?: number; + DeflectionConsumption?: number; + AppliedTrunkRotation?: Xyz; + AppliedHeadRotation?: Xyz; + DisplayOnModel?: boolean; + AdditionalAnimationLayer?: number; + StaminaBurnRate?: number; + ColliderScaleMultiplier?: Xyz; + ConfigPathStr?: string; + MaxMarkersCount?: number; + scaleMin?: number; + scaleMax?: number; + medUseTime?: number; + medEffectType?: string; + MaxHpResource?: number; + hpResourceRate?: number; + apResource?: number; + krResource?: number; + MaxOpticZoom?: number; + MaxRepairResource?: number; + TargetItemFilter?: string[]; + RepairQuality?: number; + RepairType?: string; + StackMinRandom?: number; + StackMaxRandom?: number; + ammoType?: string; + InitialSpeed?: number; + BallisticCoeficient?: number; + BulletMassGram?: number; + BulletDiameterMilimeters?: number; + Damage?: number; + ammoAccr?: number; + ammoRec?: number; + ammoDist?: number; + buckshotBullets?: number; + PenetrationPower?: number; + PenetrationPowerDiviation?: number; + ammoHear?: number; + ammoSfx?: string; + MisfireChance?: number; + MinFragmentsCount?: number; + MaxFragmentsCount?: number; + ammoShiftChance?: number; + casingName?: string; + casingEjectPower?: number; + casingMass?: number; + casingSounds?: string; + ProjectileCount?: number; + PenetrationChance?: number; + RicochetChance?: number; + FragmentationChance?: number; + Deterioration?: number; + SpeedRetardation?: number; + Tracer?: boolean; + TracerColor?: string; + TracerDistance?: number; + ArmorDamage?: number; + Caliber?: string; + StaminaBurnPerDamage?: number; + HeavyBleedingDelta?: number; + LightBleedingDelta?: number; + ShowBullet?: boolean; + HasGrenaderComponent?: boolean; + FuzeArmTimeSec?: number; + ExplosionStrength?: number; + MinExplosionDistance?: number; + MaxExplosionDistance?: number; + FragmentsCount?: number; + FragmentType?: string; + ShowHitEffectOnExplode?: boolean; + ExplosionType?: string; + AmmoLifeTimeSec?: number; + Contusion?: Xyz; + ArmorDistanceDistanceDamage?: Xyz; + Blindness?: Xyz; + IsLightAndSoundShot?: boolean; + LightAndSoundShotAngle?: number; + LightAndSoundShotSelfContusionTime?: number; + LightAndSoundShotSelfContusionStrength?: number; + MalfMisfireChance?: number; + MalfFeedChance?: number; + StackSlots?: StackSlot[]; + type?: string; + eqMin?: number; + eqMax?: number; + rate?: number; + ThrowType?: string; + ExplDelay?: number; + Strength?: number; + ContusionDistance?: number; + throwDamMax?: number; + explDelay?: number; + EmitTime?: number; + CanBeHiddenDuringThrow?: boolean; + MinTimeToContactExplode?: number; + ExplosionEffectType?: string; + LinkedWeapon?: string; + UseAmmoWithoutShell?: boolean; +} +export interface IHealthEffect { + type: string; + value: number; +} +export interface Prefab { + path: string; + rcid: string; +} +export interface Grid { + _name: string; + _id: string; + _parent: string; + _props: GridProps; + _proto: string; +} +export interface GridProps { + filters: GridFilter[]; + cellsH: number; + cellsV: number; + minCount: number; + maxCount: number; + maxWeight: number; + isSortingTable: boolean; +} +export interface GridFilter { + Filter: string[]; + ExcludedFilter: string[]; +} +export interface Slot { + _name: string; + _id: string; + _parent: string; + _props: SlotProps; + _max_count?: number; + _required: boolean; + _mergeSlotWithChildren: boolean; + _proto: string; +} +export interface SlotProps { + filters: SlotFilter[]; +} +export interface SlotFilter { + Shift?: number; + Filter: string[]; + AnimationIndex?: number; +} +export interface Xyz { + x: number; + y: number; + z: number; +} +export interface StackSlot { + _name?: string; + _id: string; + _parent: string; + _max_count: number; + _props: StackSlotProps; + _proto: string; + upd: any; +} +export interface StackSlotProps { + filters: SlotFilter[]; +} +export interface EffectsHealth { + Energy: EffectsHealthProps; + Hydration: EffectsHealthProps; +} +export interface EffectsHealthProps { + value: number; +} +export interface EffectsDamage { + Pain: EffectDamageProps; + LightBleeding: EffectDamageProps; + HeavyBleeding: EffectDamageProps; + Contusion: EffectDamageProps; + RadExposure: EffectDamageProps; + Fracture: EffectDamageProps; + DestroyedPart: EffectDamageProps; +} +export interface EffectDamageProps { + delay: number; + duration: number; + fadeOut: number; + cost?: number; + healthPenaltyMin?: number; + healthPenaltyMax?: number; +} +export interface Color { + r: number; + g: number; + b: number; + a: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ITrader.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ITrader.d.ts new file mode 100644 index 0000000..1fcfbaa --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/common/tables/ITrader.d.ts @@ -0,0 +1,99 @@ +import { Item } from "./IItem"; +export interface ITrader { + assort: ITraderAssort; + base: ITraderBase; + dialogue?: Record; + questassort: Record>; + suits?: ISuit[]; +} +export interface ITraderBase { + refreshTraderRagfairOffers: boolean; + _id: string; + availableInRaid: boolean; + avatar: string; + balance_dol: number; + balance_eur: number; + balance_rub: number; + buyer_up: boolean; + currency: string; + customization_seller: boolean; + discount: number; + discount_end: number; + gridHeight: number; + insurance: Insurance; + items_buy: IItemBuyData; + items_buy_prohibited: IItemBuyData; + location: string; + loyaltyLevels: LoyaltyLevel[]; + medic: boolean; + name: string; + nextResupply: number; + nickname: string; + repair: Repair; + sell_category: string[]; + surname: string; + unlockedByDefault: boolean; +} +export interface IItemBuyData { + category: string[]; + id_list: string[]; +} +export interface Insurance { + availability: boolean; + excluded_category: string[]; + max_return_hour: number; + max_storage_time: number; + min_payment: number; + min_return_hour: number; +} +export interface LoyaltyLevel { + buy_price_coef: number; + exchange_price_coef: number; + heal_price_coef: number; + insurance_price_coef: number; + minLevel: number; + minSalesSum: number; + minStanding: number; + repair_price_coef: number; +} +export interface Repair { + availability: boolean; + currency: string; + currency_coefficient: number; + excluded_category: string[]; + /** Doesn't exist in client object */ + excluded_id_list: any[]; + quality: number; +} +export interface ITraderAssort { + nextResupply: number; + items: Item[]; + barter_scheme: Record; + loyal_level_items: Record; +} +export interface IBarterScheme { + count: number; + _tpl: string; + onlyFunctional?: boolean; + sptQuestLocked?: boolean; +} +export interface ISuit { + _id: string; + tid: string; + suiteId: string; + isActive: boolean; + requirements: Requirements; +} +export interface Requirements { + loyaltyLevel: number; + profileLevel: number; + standing: number; + skillRequirements: string[]; + questRequirements: string[]; + itemRequirements: ItemRequirement[]; +} +export interface ItemRequirement { + count: number; + _tpl: string; + onlyFunctional: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/customization/IBuyClothingRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/customization/IBuyClothingRequestData.d.ts new file mode 100644 index 0000000..d19b70d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/customization/IBuyClothingRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IBuyClothingRequestData { + Action: "CustomizationBuy"; + offer: string; + items: ClothingItem[]; +} +export interface ClothingItem { + del: boolean; + id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/customization/IGetSuitsResponse.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/customization/IGetSuitsResponse.d.ts new file mode 100644 index 0000000..cbb909d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/customization/IGetSuitsResponse.d.ts @@ -0,0 +1,4 @@ +export interface IGetSuitsResponse { + _id: string; + suites: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/customization/IWearClothingRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/customization/IWearClothingRequestData.d.ts new file mode 100644 index 0000000..122d9cf --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/customization/IWearClothingRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IWearClothingRequestData { + Action: "CustomizationWear"; + suites: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IChatServer.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IChatServer.d.ts new file mode 100644 index 0000000..48cacc4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IChatServer.d.ts @@ -0,0 +1,16 @@ +export interface IChatServer { + _id: string; + RegistrationId: number; + VersionId: string; + Ip: string; + Port: number; + DateTime: number; + Chats: IChat[]; + Regions: string[]; + /** Possibly removed */ + IsDeveloper?: boolean; +} +export interface IChat { + _id: string; + Members: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IFriendRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IFriendRequestData.d.ts new file mode 100644 index 0000000..9c326ac --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IFriendRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IFriendRequestData { + to: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetAllAttachmentsRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetAllAttachmentsRequestData.d.ts new file mode 100644 index 0000000..53d8289 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetAllAttachmentsRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetAllAttachmentsRequestData { + dialogId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetAllAttachmentsResponse.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetAllAttachmentsResponse.d.ts new file mode 100644 index 0000000..076d414 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetAllAttachmentsResponse.d.ts @@ -0,0 +1,6 @@ +import { Message } from "../profile/IAkiProfile"; +export interface IGetAllAttachmentsResponse { + messages: Message[]; + profiles: any[]; + hasMessagesWithRewards: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetChatServerListRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetChatServerListRequestData.d.ts new file mode 100644 index 0000000..8f1beac --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetChatServerListRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetChatServerListRequestData { + VersionId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetFriendListDataResponse.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetFriendListDataResponse.d.ts new file mode 100644 index 0000000..f8d700c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetFriendListDataResponse.d.ts @@ -0,0 +1,16 @@ +import { MemberCategory } from "../../enums/MemberCategory"; +export interface IGetFriendListDataResponse { + Friends: Friend[]; + Ignore: string[]; + InIgnoreList: string[]; +} +export interface Friend { + _id: string; + Info: Info; +} +export interface Info { + Nickname: string; + Side: string; + Level: number; + MemberCategory: MemberCategory; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetMailDialogInfoRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetMailDialogInfoRequestData.d.ts new file mode 100644 index 0000000..eed84b1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetMailDialogInfoRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetMailDialogInfoRequestData { + dialogId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetMailDialogListRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetMailDialogListRequestData.d.ts new file mode 100644 index 0000000..f8fbf5d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetMailDialogListRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IGetMailDialogListRequestData { + limit: number; + offset: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetMailDialogViewRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetMailDialogViewRequestData.d.ts new file mode 100644 index 0000000..43d416e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetMailDialogViewRequestData.d.ts @@ -0,0 +1,7 @@ +import { MessageType } from "../../enums/MessageType"; +export interface IGetMailDialogViewRequestData { + type: MessageType; + dialogId: string; + limit: number; + time: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetMailDialogViewResponseData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetMailDialogViewResponseData.d.ts new file mode 100644 index 0000000..4f8b946 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IGetMailDialogViewResponseData.d.ts @@ -0,0 +1,7 @@ +import { IPmcData } from "../common/IPmcData"; +import { Message } from "../profile/IAkiProfile"; +export interface IGetMailDialogViewResponseData { + messages: Message[]; + profiles: IPmcData[]; + hasMessagesWithRewards: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IPinDialogRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IPinDialogRequestData.d.ts new file mode 100644 index 0000000..57b8a00 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IPinDialogRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IPinDialogRequestData { + dialogId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IRemoveDialogRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IRemoveDialogRequestData.d.ts new file mode 100644 index 0000000..874b828 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/IRemoveDialogRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IRemoveDialogRequestData { + dialogId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/ISendMessageRequest.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/ISendMessageRequest.d.ts new file mode 100644 index 0000000..dd79deb --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/ISendMessageRequest.d.ts @@ -0,0 +1,7 @@ +import { MessageType } from "../../enums/MessageType"; +export interface ISendMessageRequest { + dialogId: string; + type: MessageType; + text: string; + replyTo: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/ISetDialogReadRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/ISetDialogReadRequestData.d.ts new file mode 100644 index 0000000..2076232 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/dialog/ISetDialogReadRequestData.d.ts @@ -0,0 +1,3 @@ +export interface ISetDialogReadRequestData { + dialogs: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/ICheckVersionResponse.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/ICheckVersionResponse.d.ts new file mode 100644 index 0000000..fa8aa6f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/ICheckVersionResponse.d.ts @@ -0,0 +1,4 @@ +export interface ICheckVersionResponse { + isvalid: boolean; + latestVersion: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameConfigResponse.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameConfigResponse.d.ts new file mode 100644 index 0000000..e1b7587 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameConfigResponse.d.ts @@ -0,0 +1,21 @@ +export interface IGameConfigResponse { + aid: string; + lang: string; + languages: Record; + ndaFree: boolean; + taxonomy: number; + activeProfileId: string; + backend: Backend; + utc_time: number; + /** Total in game time */ + totalInGame: number; + reportAvailable: boolean; + twitchEventMember: boolean; +} +export interface Backend { + Lobby: string; + Trading: string; + Messaging: string; + Main: string; + RagFair: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameEmptyCrcRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameEmptyCrcRequestData.d.ts new file mode 100644 index 0000000..a3ecad9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameEmptyCrcRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGameEmptyCrcRequestData { + crc: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameKeepAliveResponse.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameKeepAliveResponse.d.ts new file mode 100644 index 0000000..170ce6a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameKeepAliveResponse.d.ts @@ -0,0 +1,4 @@ +export interface IGameKeepAliveResponse { + msg: string; + utc_time: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameLogoutResponseData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameLogoutResponseData.d.ts new file mode 100644 index 0000000..0f52050 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameLogoutResponseData.d.ts @@ -0,0 +1,3 @@ +export interface IGameLogoutResponseData { + status: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameStartResponse.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameStartResponse.d.ts new file mode 100644 index 0000000..9f0ab6d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGameStartResponse.d.ts @@ -0,0 +1,3 @@ +export interface IGameStartResponse { + utc_time: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGetItemPricesResponse.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGetItemPricesResponse.d.ts new file mode 100644 index 0000000..ab6e818 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IGetItemPricesResponse.d.ts @@ -0,0 +1,5 @@ +export interface IGetItemPricesResponse { + supplyNextTime: number; + prices: Record; + currencyCourses: Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IReportNicknameRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IReportNicknameRequestData.d.ts new file mode 100644 index 0000000..087c58b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IReportNicknameRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IReportNicknameRequestData { + uid: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IServerDetails.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IServerDetails.d.ts new file mode 100644 index 0000000..101cf99 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IServerDetails.d.ts @@ -0,0 +1,4 @@ +export interface IServerDetails { + ip: string; + port: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IVersionValidateRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IVersionValidateRequestData.d.ts new file mode 100644 index 0000000..0aa0fed --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/game/IVersionValidateRequestData.d.ts @@ -0,0 +1,11 @@ +export interface IVersionValidateRequestData { + version: Version; + develop: boolean; +} +export interface Version { + major: string; + minor: string; + game: string; + backend: string; + taxonomy: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/Effect.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/Effect.d.ts new file mode 100644 index 0000000..62d95a8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/Effect.d.ts @@ -0,0 +1,7 @@ +export declare enum Effect { + FRACTURE = "Fracture", + LIGHT_BLEEDING = "LightBleeding", + HEAVY_BLEEDING = "HeavyBleeding", + MILD_MUSCLE_PAIN = "MildMusclePain", + SEVERE_MUSCLE_PAIN = "SevereMusclePain" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/IHealthTreatmentRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/IHealthTreatmentRequestData.d.ts new file mode 100644 index 0000000..7fb80a8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/IHealthTreatmentRequestData.d.ts @@ -0,0 +1,29 @@ +export interface IHealthTreatmentRequestData { + Action: "RestoreHealth"; + trader: string; + items: Item[]; + difference: Difference; + timestamp: number; +} +export interface Item { + id: string; + count: number; +} +export interface Difference { + BodyParts: BodyParts; + Energy: number; + Hydration: number; +} +export interface BodyParts { + Head: BodyPart; + Chest: BodyPart; + Stomach: BodyPart; + LeftArm: BodyPart; + RightArm: BodyPart; + LeftLeg: BodyPart; + RightLeg: BodyPart; +} +export interface BodyPart { + Health: number; + Effects: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/IOffraidEatRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/IOffraidEatRequestData.d.ts new file mode 100644 index 0000000..8e2b6c3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/IOffraidEatRequestData.d.ts @@ -0,0 +1,7 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface IOffraidEatRequestData extends IBaseInteractionRequestData { + Action: "Eat"; + item: string; + count: number; + time: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/IOffraidHealRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/IOffraidHealRequestData.d.ts new file mode 100644 index 0000000..26b02bd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/IOffraidHealRequestData.d.ts @@ -0,0 +1,18 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface IOffraidHealRequestData extends IBaseInteractionRequestData { + Action: "Heal"; + item: string; + part: BodyPart; + count: number; + time: number; +} +export declare enum BodyPart { + HEAD = "Head", + CHEST = "Chest", + STOMACH = "Stomach", + LEFT_ARM = "LeftArm", + RIGHT_ARM = "RightArm", + LEFT_LEG = "LeftLeg", + RIGHT_LEG = "RightLeg", + COMMON = "Common" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/ISyncHealthRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/ISyncHealthRequestData.d.ts new file mode 100644 index 0000000..20e32f6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/ISyncHealthRequestData.d.ts @@ -0,0 +1,21 @@ +export interface ISyncHealthRequestData { + Health: Health; + IsAlive: boolean; + Hydration?: number; + Energy?: number; + Temperature?: number; +} +export interface Health { + Head?: BodyPartHealth; + Chest?: BodyPartHealth; + Stomach?: BodyPartHealth; + LeftArm?: BodyPartHealth; + RightArm?: BodyPartHealth; + LeftLeg?: BodyPartHealth; + RightLeg?: BodyPartHealth; +} +export interface BodyPartHealth { + Maximum: number; + Current: number; + Effects: Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/IWorkoutData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/IWorkoutData.d.ts new file mode 100644 index 0000000..ba629d2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/health/IWorkoutData.d.ts @@ -0,0 +1,4 @@ +export interface IWorkoutData extends Record { + skills: any; + effects: any; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/HideoutUpgradeCompleteRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/HideoutUpgradeCompleteRequestData.d.ts new file mode 100644 index 0000000..8583e8d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/HideoutUpgradeCompleteRequestData.d.ts @@ -0,0 +1,5 @@ +export interface HideoutUpgradeCompleteRequestData { + Action: string; + areaType: number; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHandleQTEEventRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHandleQTEEventRequestData.d.ts new file mode 100644 index 0000000..5dda485 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHandleQTEEventRequestData.d.ts @@ -0,0 +1,8 @@ +export interface IHandleQTEEventRequestData { + Action: string; + /** true if QTE was successful, otherwise false */ + results: boolean[]; + /** Id of the QTE object used from db/hideout/qte.json */ + id: string; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutArea.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutArea.d.ts new file mode 100644 index 0000000..fa5ca20 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutArea.d.ts @@ -0,0 +1,72 @@ +export interface IHideoutArea { + _id: string; + type: number; + enabled: boolean; + needsFuel: boolean; + requirements: IAreaRequirement[]; + takeFromSlotLocked: boolean; + craftGivesExp: boolean; + displayLevel: boolean; + enableAreaRequirements: boolean; + stages: Record; +} +export interface IAreaRequirement { + areaType: number; + requiredlevel: number; + type: string; +} +export interface Stage { + autoUpgrade: boolean; + bonuses: StageBonus[]; + constructionTime: number; + description: string; + displayInterface: boolean; + improvements: IStageImprovement[]; + requirements: IStageRequirement[]; + slots: number; +} +export interface IStageImprovement { + id: string; + bonuses: IStageImprovementBonus[]; + improvementTime: number; + requirements: IStageImprovementRequirement[]; +} +export interface IStageImprovementBonus { + passive: boolean; + production: boolean; + type: string; + value: number; + visible: boolean; +} +export interface IStageImprovementRequirement { + count: number; + isEncoded: boolean; + isFunctional: boolean; + templateId: string; + type: string; +} +export interface IStageRequirement { + areaType?: number; + requiredLevel?: number; + type: string; + templateId?: string; + count?: number; + isEncoded: false; + isFunctional?: boolean; + traderId?: string; + loyaltyLevel?: number; + skillName?: string; + skillLevel?: number; +} +export interface StageBonus { + value: number; + passive: boolean; + production: boolean; + visible: boolean; + skillType?: string; + type: string; + filter?: string[]; + icon?: string; + id?: string; + templateId?: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutContinuousProductionStartRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutContinuousProductionStartRequestData.d.ts new file mode 100644 index 0000000..3ef00c6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutContinuousProductionStartRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IHideoutContinuousProductionStartRequestData { + Action: "HideoutContinuousProductionStart"; + recipeId: string; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutImproveAreaRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutImproveAreaRequestData.d.ts new file mode 100644 index 0000000..7e927bf --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutImproveAreaRequestData.d.ts @@ -0,0 +1,13 @@ +export interface IHideoutImproveAreaRequestData { + Action: "HideoutImproveArea"; + /** Hideout area id from areas.json */ + id: string; + areaType: number; + items: HideoutItem[]; + timestamp: number; +} +export interface HideoutItem { + /** Hideout inventory id that was used by improvement action */ + id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutProduction.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutProduction.d.ts new file mode 100644 index 0000000..2367e08 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutProduction.d.ts @@ -0,0 +1,23 @@ +export interface IHideoutProduction { + _id: string; + areaType: number; + requirements: Requirement[]; + productionTime: number; + endProduct: string; + isEncoded: boolean; + locked: boolean; + needFuelForAllProductionTime: boolean; + continuous: boolean; + count: number; + productionLimitCount: number; +} +export interface Requirement { + templateId?: string; + count?: number; + isEncoded?: boolean; + isFunctional?: boolean; + type: string; + areaType?: number; + requiredLevel?: number; + resource?: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutPutItemInRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutPutItemInRequestData.d.ts new file mode 100644 index 0000000..8326c55 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutPutItemInRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IHideoutPutItemInRequestData { + Action: "HideoutPutItemsInAreaSlots"; + areaType: number; + items: Record; + timestamp: number; +} +export interface ItemDetails { + count: number; + id: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutScavCase.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutScavCase.d.ts new file mode 100644 index 0000000..e0b9a27 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutScavCase.d.ts @@ -0,0 +1,18 @@ +import { MinMax } from "../../common/MinMax"; +export interface IHideoutScavCase { + _id: string; + ProductionTime: number; + Requirements: Requirement[]; + EndProducts: EndProducts; +} +export interface Requirement { + templateId: string; + count: number; + isFunctional: boolean; + type: string; +} +export interface EndProducts { + Common: MinMax; + Rare: MinMax; + Superrare: MinMax; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutScavCaseStartRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutScavCaseStartRequestData.d.ts new file mode 100644 index 0000000..72fda86 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutScavCaseStartRequestData.d.ts @@ -0,0 +1,15 @@ +export interface IHideoutScavCaseStartRequestData { + Action: "HideoutScavCaseProductionStart"; + recipeId: string; + items: HideoutItem[]; + tools: Tool[]; + timestamp: number; +} +export interface HideoutItem { + id: string; + count: number; +} +export interface Tool { + id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutSettingsBase.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutSettingsBase.d.ts new file mode 100644 index 0000000..8e45939 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutSettingsBase.d.ts @@ -0,0 +1,6 @@ +export interface IHideoutSettingsBase { + generatorSpeedWithoutFuel: number; + generatorFuelFlowRate: number; + airFilterUnitFlowRate: number; + gpuBoostRate: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutSingleProductionStartRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutSingleProductionStartRequestData.d.ts new file mode 100644 index 0000000..1ed542a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutSingleProductionStartRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IHideoutSingleProductionStartRequestData { + Action: "HideoutSingleProductionStart"; + recipeId: string; + items: Item[]; + timestamp: number; +} +export interface Item { + id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutTakeItemOutRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutTakeItemOutRequestData.d.ts new file mode 100644 index 0000000..83a740a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutTakeItemOutRequestData.d.ts @@ -0,0 +1,6 @@ +export interface IHideoutTakeItemOutRequestData { + Action: "HideoutTakeItemsFromAreaSlots"; + areaType: number; + slots: number[]; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutTakeProductionRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutTakeProductionRequestData.d.ts new file mode 100644 index 0000000..a6847ef --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutTakeProductionRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IHideoutTakeProductionRequestData { + Action: "HideoutTakeProduction"; + recipeId: string; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutToggleAreaRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutToggleAreaRequestData.d.ts new file mode 100644 index 0000000..cdea513 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutToggleAreaRequestData.d.ts @@ -0,0 +1,6 @@ +export interface IHideoutToggleAreaRequestData { + Action: "HideoutToggleArea"; + areaType: number; + enabled: boolean; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutUpgradeCompleteRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutUpgradeCompleteRequestData.d.ts new file mode 100644 index 0000000..545311e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutUpgradeCompleteRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IHideoutUpgradeCompleteRequestData { + Action: "HideoutUpgradeComplete"; + areaType: number; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutUpgradeRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutUpgradeRequestData.d.ts new file mode 100644 index 0000000..dfbfdca --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IHideoutUpgradeRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IHideoutUpgradeRequestData { + Action: "HideoutUpgrade"; + areaType: number; + items: HideoutItem[]; + timestamp: number; +} +export interface HideoutItem { + count: number; + id: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IQteData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IQteData.d.ts new file mode 100644 index 0000000..f842b84 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IQteData.d.ts @@ -0,0 +1,38 @@ +export interface IQteData { + Id: string; + Type: string; + Area: string; + AreaLevel: number; + QuickTimeEvents: IQuickTimeEvent[]; + Requirements: IQteRequirement[]; + Results: Record; +} +export interface IQuickTimeEvent { + Type: string; + Position: number; + StartDelay: number; + EndDelay: number; + Speed: number; + SuccessRange: string; + Key: string; +} +export interface IQteRequirement { + type: string; +} +export interface IQteResult { + Energy: number; + Hydration: number; + RewardsRange: IQteEffect[]; +} +export interface IQteEffect { + Type: string; + SkillId: string; + levelMultipliers: ISkillLevelMultiplier[]; + Time: number; + Weight: number; + Result: string; +} +export interface ISkillLevelMultiplier { + level: number; + multiplier: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IRecordShootingRangePoints.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IRecordShootingRangePoints.d.ts new file mode 100644 index 0000000..5bfd2fd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/hideout/IRecordShootingRangePoints.d.ts @@ -0,0 +1,4 @@ +export interface IRecordShootingRangePoints { + Action: "RecordShootingRangePoints"; + points: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/httpResponse/IGetBodyResponseData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/httpResponse/IGetBodyResponseData.d.ts new file mode 100644 index 0000000..b5dc5c1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/httpResponse/IGetBodyResponseData.d.ts @@ -0,0 +1,5 @@ +export interface IGetBodyResponseData { + err: number; + errmsg: any; + (data: Type): Type; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/httpResponse/INullResponseData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/httpResponse/INullResponseData.d.ts new file mode 100644 index 0000000..a3ae838 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/httpResponse/INullResponseData.d.ts @@ -0,0 +1,5 @@ +export interface INullResponseData { + err: number; + errmsg: any; + data: null; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inRaid/IRegisterPlayerRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inRaid/IRegisterPlayerRequestData.d.ts new file mode 100644 index 0000000..e2d9cf1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inRaid/IRegisterPlayerRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IRegisterPlayerRequestData { + crc: number; + locationId: string; + variantId: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inRaid/ISaveProgressRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inRaid/ISaveProgressRequestData.d.ts new file mode 100644 index 0000000..6930261 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inRaid/ISaveProgressRequestData.d.ts @@ -0,0 +1,8 @@ +import { IPmcData } from "../common/IPmcData"; +import { ISyncHealthRequestData } from "../health/ISyncHealthRequestData"; +export interface ISaveProgressRequestData { + exit: string; + profile: IPmcData; + isPlayerScav: boolean; + health: ISyncHealthRequestData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/insurance/IGetInsuranceCostRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/insurance/IGetInsuranceCostRequestData.d.ts new file mode 100644 index 0000000..0e32e96 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/insurance/IGetInsuranceCostRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IGetInsuranceCostRequestData { + traders: string[]; + items: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/insurance/IGetInsuranceCostResponseData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/insurance/IGetInsuranceCostResponseData.d.ts new file mode 100644 index 0000000..4579fdb --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/insurance/IGetInsuranceCostResponseData.d.ts @@ -0,0 +1 @@ +export type IGetInsuranceCostResponseData = Record>; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/insurance/IInsureRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/insurance/IInsureRequestData.d.ts new file mode 100644 index 0000000..f657bb7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/insurance/IInsureRequestData.d.ts @@ -0,0 +1,6 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface IInsureRequestData extends IBaseInteractionRequestData { + Action: "Insure"; + tid: string; + items: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IAddItemRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IAddItemRequestData.d.ts new file mode 100644 index 0000000..61516d6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IAddItemRequestData.d.ts @@ -0,0 +1,9 @@ +export interface IAddItemRequestData { + tid: string; + items: AddItem[]; +} +export interface AddItem { + count: number; + isPreset?: boolean; + item_id: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IAddItemTempObject.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IAddItemTempObject.d.ts new file mode 100644 index 0000000..62d4b64 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IAddItemTempObject.d.ts @@ -0,0 +1,7 @@ +import { Item, Location } from "../common/tables/IItem"; +export interface IAddItemTempObject { + itemRef: Item; + count: number; + isPreset: boolean; + location?: Location; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryAddRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryAddRequestData.d.ts new file mode 100644 index 0000000..462e0de --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryAddRequestData.d.ts @@ -0,0 +1,6 @@ +import { Container, IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryAddRequestData extends IInventoryBaseActionRequestData { + Action: "Add"; + item: string; + container: Container; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryBaseActionRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryBaseActionRequestData.d.ts new file mode 100644 index 0000000..6d7c190 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryBaseActionRequestData.d.ts @@ -0,0 +1,27 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface IInventoryBaseActionRequestData extends IBaseInteractionRequestData { +} +export interface To { + id: string; + container: string; + location?: ToLocation | number; +} +export interface ToLocation { + x: number; + y: number; + r: string; + rotation?: string; + isSearched: boolean; +} +export interface Container { + id: string; + container: string; + location?: Location | number; +} +export interface Location { + x: number; + y: number; + r: string; + rotation?: string; + isSearched: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryBindRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryBindRequestData.d.ts new file mode 100644 index 0000000..ff35066 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryBindRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryBindRequestData extends IInventoryBaseActionRequestData { + Action: "Bind"; + item: string; + index: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryCreateMarkerRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryCreateMarkerRequestData.d.ts new file mode 100644 index 0000000..1e1ecef --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryCreateMarkerRequestData.d.ts @@ -0,0 +1,12 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryCreateMarkerRequestData extends IInventoryBaseActionRequestData { + Action: "CreateMapMarker"; + item: string; + mapMarker: MapMarker; +} +export interface MapMarker { + Type: string; + X: number; + Y: number; + Note: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryDeleteMarkerRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryDeleteMarkerRequestData.d.ts new file mode 100644 index 0000000..0657e1b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryDeleteMarkerRequestData.d.ts @@ -0,0 +1,7 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryDeleteMarkerRequestData extends IInventoryBaseActionRequestData { + Action: "DeleteMapMarker"; + item: string; + X: number; + Y: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryEditMarkerRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryEditMarkerRequestData.d.ts new file mode 100644 index 0000000..e2857e1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryEditMarkerRequestData.d.ts @@ -0,0 +1,14 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryEditMarkerRequestData extends IInventoryBaseActionRequestData { + Action: "EditMapMarker"; + item: string; + X: number; + Y: number; + mapMarker: MapMarker; +} +export interface MapMarker { + Type: string; + X: number; + Y: number; + Note: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryExamineRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryExamineRequestData.d.ts new file mode 100644 index 0000000..614711f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryExamineRequestData.d.ts @@ -0,0 +1,10 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryExamineRequestData extends IInventoryBaseActionRequestData { + Action: "Examine"; + item: string; + fromOwner: IFromOwner; +} +export interface IFromOwner { + id: string; + type: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryFoldRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryFoldRequestData.d.ts new file mode 100644 index 0000000..a5fb2a1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryFoldRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryFoldRequestData extends IInventoryBaseActionRequestData { + Action: "Fold"; + item: string; + value: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryMergeRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryMergeRequestData.d.ts new file mode 100644 index 0000000..3fcfa35 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryMergeRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryMergeRequestData extends IInventoryBaseActionRequestData { + Action: "Merge"; + item: string; + with: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryMoveRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryMoveRequestData.d.ts new file mode 100644 index 0000000..b767908 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryMoveRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData, To } from "./IInventoryBaseActionRequestData"; +export interface IInventoryMoveRequestData extends IInventoryBaseActionRequestData { + Action: "Move"; + item: string; + to: To; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryReadEncyclopediaRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryReadEncyclopediaRequestData.d.ts new file mode 100644 index 0000000..5487b20 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryReadEncyclopediaRequestData.d.ts @@ -0,0 +1,5 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryReadEncyclopediaRequestData extends IInventoryBaseActionRequestData { + Action: "ReadEncyclopedia"; + ids: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryRemoveRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryRemoveRequestData.d.ts new file mode 100644 index 0000000..07d1a52 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryRemoveRequestData.d.ts @@ -0,0 +1,5 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryRemoveRequestData extends IInventoryBaseActionRequestData { + Action: "Remove"; + item: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventorySortRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventorySortRequestData.d.ts new file mode 100644 index 0000000..a0b7928 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventorySortRequestData.d.ts @@ -0,0 +1,20 @@ +import { Upd } from "../common/tables/IItem"; +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventorySortRequestData extends IInventoryBaseActionRequestData { + Action: "ApplyInventoryChanges"; + changedItems: ChangedItem[]; +} +export interface ChangedItem { + _id: string; + _tpl: string; + parentId: string; + slotId: string; + location: Location; + upd: Upd; +} +export interface Location { + x: number; + y: number; + r: string; + isSearched: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventorySplitRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventorySplitRequestData.d.ts new file mode 100644 index 0000000..730ae71 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventorySplitRequestData.d.ts @@ -0,0 +1,7 @@ +import { Container, IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventorySplitRequestData extends IInventoryBaseActionRequestData { + Action: "Split"; + item: string; + container: Container; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventorySwapRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventorySwapRequestData.d.ts new file mode 100644 index 0000000..1b0464d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventorySwapRequestData.d.ts @@ -0,0 +1,11 @@ +import { OwnerInfo } from "../common/request/IBaseInteractionRequestData"; +import { IInventoryBaseActionRequestData, To } from "./IInventoryBaseActionRequestData"; +export interface IInventorySwapRequestData extends IInventoryBaseActionRequestData { + Action: "Swap"; + item: string; + to: To; + item2: string; + to2: To; + fromOwner2: OwnerInfo; + toOwner2: OwnerInfo; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryTagRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryTagRequestData.d.ts new file mode 100644 index 0000000..f021661 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryTagRequestData.d.ts @@ -0,0 +1,7 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryTagRequestData extends IInventoryBaseActionRequestData { + Action: "Tag"; + item: string; + TagName: string; + TagColor: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryToggleRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryToggleRequestData.d.ts new file mode 100644 index 0000000..0955440 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryToggleRequestData.d.ts @@ -0,0 +1,6 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryToggleRequestData extends IInventoryBaseActionRequestData { + Action: "Toggle"; + item: string; + value: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryTransferRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryTransferRequestData.d.ts new file mode 100644 index 0000000..cf4391b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IInventoryTransferRequestData.d.ts @@ -0,0 +1,7 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IInventoryTransferRequestData extends IInventoryBaseActionRequestData { + Action: "Transfer"; + item: string; + with: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IOpenRandomLootContainerRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IOpenRandomLootContainerRequestData.d.ts new file mode 100644 index 0000000..3c45124 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/inventory/IOpenRandomLootContainerRequestData.d.ts @@ -0,0 +1,11 @@ +import { IInventoryBaseActionRequestData } from "./IInventoryBaseActionRequestData"; +export interface IOpenRandomLootContainerRequestData extends IInventoryBaseActionRequestData { + Action: "OpenRandomLootContainer"; + /** Container item opened */ + item: string; + to: To[]; +} +export interface To { + /** Player character (pmc/scav) id items will be sent to */ + id: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/itemEvent/IEmptyItemEventRouterResponse.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/itemEvent/IEmptyItemEventRouterResponse.d.ts new file mode 100644 index 0000000..689fe75 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/itemEvent/IEmptyItemEventRouterResponse.d.ts @@ -0,0 +1,4 @@ +import { IItemEventRouterBase } from "./IItemEventRouterBase"; +export interface IEmptyItemEventRouterResponse extends IItemEventRouterBase { + profileChanges: ""; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/itemEvent/IItemEventRouterBase.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/itemEvent/IItemEventRouterBase.d.ts new file mode 100644 index 0000000..dbf6330 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/itemEvent/IItemEventRouterBase.d.ts @@ -0,0 +1,71 @@ +import { QuestStatus } from "../../../models/enums/QuestStatus"; +import { Health, Productive, Skills, TraderInfo } from "../common/tables/IBotBase"; +import { Item, Upd } from "../common/tables/IItem"; +import { IQuest } from "../common/tables/IQuest"; +import { IPmcDataRepeatableQuest } from "../common/tables/IRepeatableQuests"; +import { IRagfairOffer } from "../ragfair/IRagfairOffer"; +export interface IItemEventRouterBase { + warnings: Warning[]; + profileChanges: TProfileChanges | ""; +} +export type TProfileChanges = Record; +export interface Warning { + index: number; + errmsg: string; + code?: string; + data?: any; +} +export interface ProfileChange { + _id: string; + experience: number; + quests: IQuest[]; + ragFairOffers: IRagfairOffer[]; + builds: BuildChange[]; + items: ItemChanges; + production: Record; + /** Hideout area improvement id */ + improvements: Record; + skills: Skills; + health: Health; + traderRelations: Record; + repeatableQuests?: IPmcDataRepeatableQuest[]; + recipeUnlocked: Record; + questsStatus: QuestStatusChange[]; +} +export interface QuestStatusChange { + qid: string; + startTime: number; + status: QuestStatus; + statusTimers: Record; + completedConditions: string[]; + availableAfter: number; +} +export interface BuildChange { + id: string; + name: string; + root: string; + items: Item[]; +} +export interface ItemChanges { + new: Product[]; + change: Product[]; + del: Product[]; +} +export interface Improvement { + completed: boolean; + improveCompleteTimestamp: number; +} +export interface Product { + _id: string; + _tpl?: string; + parentId?: string; + slotId?: string; + location?: ItemChangeLocation; + upd?: Upd; +} +export interface ItemChangeLocation { + x: number; + y: number; + r: number; + isSearched?: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/itemEvent/IItemEventRouterRequest.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/itemEvent/IItemEventRouterRequest.d.ts new file mode 100644 index 0000000..515b49a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/itemEvent/IItemEventRouterRequest.d.ts @@ -0,0 +1,21 @@ +export interface IItemEventRouterRequest { + data: Daum[]; + tm: number; + reload: number; +} +export interface Daum { + Action: string; + item: string; + to: To; +} +export interface To { + id: string; + container: string; + location?: Location; +} +export interface Location { + x: number; + y: number; + r: string; + isSearched: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/itemEvent/IItemEventRouterResponse.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/itemEvent/IItemEventRouterResponse.d.ts new file mode 100644 index 0000000..72a9b5b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/itemEvent/IItemEventRouterResponse.d.ts @@ -0,0 +1,3 @@ +import { IItemEventRouterBase } from "./IItemEventRouterBase"; +export interface IItemEventRouterResponse extends IItemEventRouterBase { +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IChangeRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IChangeRequestData.d.ts new file mode 100644 index 0000000..f0a7838 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IChangeRequestData.d.ts @@ -0,0 +1,4 @@ +import { ILoginRequestData } from "./ILoginRequestData"; +export interface IChangeRequestData extends ILoginRequestData { + change: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IGetMiniProfileRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IGetMiniProfileRequestData.d.ts new file mode 100644 index 0000000..a14c7c9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IGetMiniProfileRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IGetMiniProfileRequestData { + username: string; + password: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/ILoginRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/ILoginRequestData.d.ts new file mode 100644 index 0000000..e965813 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/ILoginRequestData.d.ts @@ -0,0 +1,4 @@ +export interface ILoginRequestData { + username: string; + password: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IMiniProfile.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IMiniProfile.d.ts new file mode 100644 index 0000000..c12661a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IMiniProfile.d.ts @@ -0,0 +1,14 @@ +export interface IMiniProfile { + username: string; + nickname: string; + side: string; + currlvl: number; + currexp: number; + prevexp: number; + nextlvl: number; + maxlvl: number; + akiData: AkiData; +} +export interface AkiData { + version: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IRegisterData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IRegisterData.d.ts new file mode 100644 index 0000000..61a8bbe --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IRegisterData.d.ts @@ -0,0 +1,4 @@ +import { ILoginRequestData } from "./ILoginRequestData"; +export interface IRegisterData extends ILoginRequestData { + edition: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IRemoveProfileData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IRemoveProfileData.d.ts new file mode 100644 index 0000000..4cc5618 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/launcher/IRemoveProfileData.d.ts @@ -0,0 +1,2 @@ +import { ILoginRequestData } from "./ILoginRequestData"; +export type IRemoveProfileData = ILoginRequestData; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/location/IGetLocationRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/location/IGetLocationRequestData.d.ts new file mode 100644 index 0000000..04e84d9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/location/IGetLocationRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IGetLocationRequestData { + crc: number; + locationId: string; + variantId: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/ICreateGroupRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/ICreateGroupRequestData.d.ts new file mode 100644 index 0000000..7413a8a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/ICreateGroupRequestData.d.ts @@ -0,0 +1,6 @@ +import { RaidMode } from "../../enums/RaidMode"; +export interface ICreateGroupRequestData { + location: string; + raidMode: RaidMode; + startInGroup: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IEndOfflineRaidRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IEndOfflineRaidRequestData.d.ts new file mode 100644 index 0000000..811e9a2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IEndOfflineRaidRequestData.d.ts @@ -0,0 +1,6 @@ +export interface IEndOfflineRaidRequestData { + crc: number; + exitStatus: string; + exitName: any; + raidSeconds: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IGetGroupStatusRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IGetGroupStatusRequestData.d.ts new file mode 100644 index 0000000..55d7079 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IGetGroupStatusRequestData.d.ts @@ -0,0 +1,9 @@ +import { RaidMode } from "../../enums/RaidMode"; +export interface IGetGroupStatusRequestData { + location: string; + savage: boolean; + dt: string; + keyId: string; + raidMode: RaidMode; + startInGroup: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IGetProfileRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IGetProfileRequestData.d.ts new file mode 100644 index 0000000..86b5bbd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IGetProfileRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetProfileRequestData { + profileId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IGetRaidConfigurationRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IGetRaidConfigurationRequestData.d.ts new file mode 100644 index 0000000..cbcc2f6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IGetRaidConfigurationRequestData.d.ts @@ -0,0 +1,30 @@ +export interface IGetRaidConfigurationRequestData { + timeVariant: string; + raidMode: string; + metabolismDisabled: boolean; + playersSpawnPlace: string; + timeAndWeatherSettings: TimeAndWeatherSettings; + botSettings: BotSettings; + wavesSettings: WavesSettings; + location: string; +} +export interface TimeAndWeatherSettings { + isRandomTime: boolean; + isRandomWeather: boolean; + cloudinessType: string; + rainType: string; + windType: string; + fogType: string; + timeFlowType: string; + hourOfDay: number; +} +export interface BotSettings { + isScavWars: boolean; + botAmount: string; +} +export interface WavesSettings { + botAmount: string; + botDifficulty: string; + isBosses: boolean; + isTaggedAndCursed: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IJoinMatchRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IJoinMatchRequestData.d.ts new file mode 100644 index 0000000..cd34f7b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IJoinMatchRequestData.d.ts @@ -0,0 +1,12 @@ +export interface IJoinMatchRequestData { + location: string; + savage: boolean; + dt: string; + servers: Server[]; + keyId: string; +} +export interface Server { + ping: number; + ip: string; + port: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IJoinMatchResult.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IJoinMatchResult.d.ts new file mode 100644 index 0000000..81c9055 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IJoinMatchResult.d.ts @@ -0,0 +1,13 @@ +export interface IJoinMatchResult { + profileid: string; + status: string; + sid: string; + ip: string; + port: number; + version: string; + location: string; + raidMode: string; + mode: string; + shortid: string; + additional_info: any[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IPutMetricsRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IPutMetricsRequestData.d.ts new file mode 100644 index 0000000..d9ed214 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IPutMetricsRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IPutMetricsRequestData { + sid: string; + settings: any; + SharedSettings: any; + HardwareDescription: any; + Location: string; + Metrics: any; + ClientEvents: any; + SpikeSamples: any[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IUpdatePingRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IUpdatePingRequestData.d.ts new file mode 100644 index 0000000..defbd66 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/match/IUpdatePingRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IUpdatePingRequestData { + servers: any[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/notes/INoteActionData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/notes/INoteActionData.d.ts new file mode 100644 index 0000000..610657f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/notes/INoteActionData.d.ts @@ -0,0 +1,10 @@ +import { IBaseInteractionRequestData } from "../common/request/IBaseInteractionRequestData"; +export interface INoteActionData extends IBaseInteractionRequestData { + Action: string; + index: number; + note: INote; +} +export interface INote { + Time: number; + Text: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/notifier/INotifier.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/notifier/INotifier.d.ts new file mode 100644 index 0000000..b248636 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/notifier/INotifier.d.ts @@ -0,0 +1,14 @@ +export interface INotifierChannel { + server: string; + channel_id: string; + url: string; + notifierServer: string; + ws: string; +} +import { Message } from "../profile/IAkiProfile"; +export interface INotification { + type: "RagfairOfferSold" | "new_message" | "ping"; + eventId: string; + dialogId?: string; + message?: Message; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/notifier/ISelectProfileRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/notifier/ISelectProfileRequestData.d.ts new file mode 100644 index 0000000..2bc3d1e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/notifier/ISelectProfileRequestData.d.ts @@ -0,0 +1,3 @@ +export interface ISelectProfileRequestData { + uid: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/notifier/ISelectProfileResponse.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/notifier/ISelectProfileResponse.d.ts new file mode 100644 index 0000000..ecb668a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/notifier/ISelectProfileResponse.d.ts @@ -0,0 +1,6 @@ +import { INotifierChannel } from "./INotifier"; +export interface ISelectProfileResponse { + status: string; + notifier: INotifierChannel; + notifierServer: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/player/IPlayerIncrementSkillLevelRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/player/IPlayerIncrementSkillLevelRequestData.d.ts new file mode 100644 index 0000000..2f9827c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/player/IPlayerIncrementSkillLevelRequestData.d.ts @@ -0,0 +1,21 @@ +import { Skills } from "../common/tables/IBotBase"; +export interface IPlayerIncrementSkillLevelRequestData { + _id: string; + experience: number; + quests: any[]; + ragFairOffers: any[]; + builds: any[]; + items: Items; + production: Production; + skills: Skills; + traderRelations: TraderRelations; +} +export interface Items { + new: any[]; + change: any[]; + del: any[]; +} +export interface Production { +} +export interface TraderRelations { +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts new file mode 100644 index 0000000..99c61f1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts @@ -0,0 +1,25 @@ +export interface IPresetBuildActionRequestData { + Action: string; + id: string; + name: string; + root: string; + items: Item[]; +} +export interface Item { + _id: string; + _tpl: string; + upd?: Upd; + parentId?: string; + slotId?: string; +} +export interface Upd { + Repairable: Repairable; + FireMode: FireMode; +} +export interface Repairable { + MaxDurability: number; + Durability: number; +} +export interface FireMode { + FireMode: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/GetProfileStatusResponseData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/GetProfileStatusResponseData.d.ts new file mode 100644 index 0000000..1228c2e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/GetProfileStatusResponseData.d.ts @@ -0,0 +1,18 @@ +export interface GetProfileStatusResponseData { + maxPveCountExceeded: false; + profiles: ProfileData[]; +} +export interface ProfileData { + profileid: string; + profileToken: string; + status: string; + ip: string; + port: number; + sid: string; + version?: string; + location?: string; + raidMode?: string; + mode?: string; + shortId?: string; + additional_info?: any[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IAkiProfile.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IAkiProfile.d.ts new file mode 100644 index 0000000..2cea0c8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IAkiProfile.d.ts @@ -0,0 +1,176 @@ +import { MessageType } from "../../enums/MessageType"; +import { IPmcData } from "../common/IPmcData"; +import { Item } from "../common/tables/IItem"; +export interface IAkiProfile { + info: Info; + characters: Characters; + suits: string[]; + weaponbuilds: WeaponBuild[]; + dialogues: Record; + aki: Aki; + vitality: Vitality; + inraid: Inraid; + insurance: Insurance[]; + /** Assort purchases made by player since last trader refresh */ + traderPurchases?: Record>; +} +export declare class TraderPurchaseData { + count: number; + purchaseTimestamp: number; +} +export interface Info { + id: string; + username: string; + password: string; + wipe: boolean; + edition: string; +} +export interface Characters { + pmc: IPmcData; + scav: IPmcData; +} +export interface WeaponBuild { + id: string; + name: string; + root: string; + items: Item[]; +} +export interface Dialogue { + _id: string; + messages: Message[]; + pinned: boolean; + new: number; + attachmentsNew: number; +} +export interface DialogueInfo { + attachmentsNew: number; + new: number; + type: MessageType; + pinned: boolean; + message: MessagePreview; + _id: string; +} +export interface Message { + _id: string; + uid: string; + type: MessageType; + dt: number; + UtcDateTime?: number; + Member?: IUpdatableChatMember; + templateId: string; + text?: string; + hasRewards: boolean; + rewardCollected: boolean; + items: MessageItems; + maxStorageTime?: number; + systemData?: ISystemData; + profileChangeEvents?: any[]; +} +export interface MessagePreview { + uid: string; + type: MessageType; + dt: number; + templateId: string; + text?: string; +} +export interface MessageItems { + stash?: string; + data?: Item[]; +} +export interface ISystemData { + date?: string; + time?: string; + location?: string; + buyerNickname?: string; + soldItem?: string; + itemCount?: number; +} +export interface IUpdatableChatMember { + Nickname: string; + Side: string; + Level: number; + MemberCategory: string; + Ignored: boolean; + Banned: boolean; +} +export interface DateTime { + date: string; + time: string; +} +export interface Aki { + version: string; + mods?: ModDetails[]; +} +export interface ModDetails { + name: string; + version: string; + author: string; + dateAdded: number; +} +export interface Vitality { + health: Health; + effects: Effects; +} +export interface Health { + Hydration: number; + Energy: number; + Temperature: number; + Head: number; + Chest: number; + Stomach: number; + LeftArm: number; + RightArm: number; + LeftLeg: number; + RightLeg: number; +} +export interface Effects { + Head: Head; + Chest: Chest; + Stomach: Stomach; + LeftArm: LeftArm; + RightArm: RightArm; + LeftLeg: LeftLeg; + RightLeg: RightLeg; +} +export interface Head { +} +export interface Chest { +} +export interface Stomach { +} +export interface LeftArm { + Fracture?: number; +} +export interface RightArm { + Fracture?: number; +} +export interface LeftLeg { + Fracture?: number; +} +export interface RightLeg { + Fracture?: number; +} +export interface Inraid { + location: string; + character: string; +} +export interface Insurance { + scheduledTime: number; + traderId: string; + messageContent: MessageContent; + items: Item[]; +} +export interface MessageContent { + ragfair?: MessageContentRagfair; + text?: string; + templateId: string; + type: MessageType; + maxStorageTime?: number; + profileChangeEvents?: any[]; + systemData?: ISystemData; +} +export interface MessageContentRagfair { + offerId: string; + count: number; + handbookId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IProfileChangeNicknameRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IProfileChangeNicknameRequestData.d.ts new file mode 100644 index 0000000..4a61196 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IProfileChangeNicknameRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IProfileChangeNicknameRequestData { + nickname: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IProfileChangeVoiceRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IProfileChangeVoiceRequestData.d.ts new file mode 100644 index 0000000..91058ce --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IProfileChangeVoiceRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IProfileChangeVoiceRequestData { + voice: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IProfileCreateRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IProfileCreateRequestData.d.ts new file mode 100644 index 0000000..93cc656 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IProfileCreateRequestData.d.ts @@ -0,0 +1,6 @@ +export interface IProfileCreateRequestData { + side: string; + nickname: string; + headId: string; + voiceId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/ISearchFriendRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/ISearchFriendRequestData.d.ts new file mode 100644 index 0000000..e63e386 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/ISearchFriendRequestData.d.ts @@ -0,0 +1,3 @@ +export interface ISearchFriendRequestData { + nickname: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/ISearchFriendResponse.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/ISearchFriendResponse.d.ts new file mode 100644 index 0000000..96d88b2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/ISearchFriendResponse.d.ts @@ -0,0 +1,9 @@ +export interface ISearchFriendResponse { + _id: string; + Info: Info; +} +export interface Info { + Nickname: string; + Side: string; + Level: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IValidateNicknameRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IValidateNicknameRequestData.d.ts new file mode 100644 index 0000000..9cca7e7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/profile/IValidateNicknameRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IValidateNicknameRequestData { + nickname: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IAcceptQuestRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IAcceptQuestRequestData.d.ts new file mode 100644 index 0000000..0e4821a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IAcceptQuestRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IAcceptQuestRequestData { + Action: "QuestAccept"; + qid: string; + type: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/ICompleteQuestRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/ICompleteQuestRequestData.d.ts new file mode 100644 index 0000000..36a6db3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/ICompleteQuestRequestData.d.ts @@ -0,0 +1,6 @@ +export interface ICompleteQuestRequestData { + Action: string; + /** Quest Id */ + qid: string; + removeExcessItems: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IFailQuestRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IFailQuestRequestData.d.ts new file mode 100644 index 0000000..5881d91 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IFailQuestRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IFailQuestRequestData { + Action: "QuestComplete"; + qid: string; + removeExcessItems: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IHandoverQuestRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IHandoverQuestRequestData.d.ts new file mode 100644 index 0000000..63f10a8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IHandoverQuestRequestData.d.ts @@ -0,0 +1,10 @@ +export interface IHandoverQuestRequestData { + Action: "QuestHandover"; + qid: string; + conditionId: string; + items: Item[]; +} +export interface Item { + id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IListQuestsRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IListQuestsRequestData.d.ts new file mode 100644 index 0000000..91f0b8c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IListQuestsRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IListQuestsRequestData { + completed: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IRepeatableQuestChangeRequest.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IRepeatableQuestChangeRequest.d.ts new file mode 100644 index 0000000..015f58e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/quests/IRepeatableQuestChangeRequest.d.ts @@ -0,0 +1,4 @@ +export interface IRepeatableQuestChangeRequest { + Action: "RepeatableQuestChange"; + qid: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IAddOfferRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IAddOfferRequestData.d.ts new file mode 100644 index 0000000..465ee02 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IAddOfferRequestData.d.ts @@ -0,0 +1,13 @@ +export interface IAddOfferRequestData { + Action: string; + sellInOnePiece: boolean; + items: string[]; + requirements: Requirement[]; +} +export interface Requirement { + _tpl: string; + count: number; + level: number; + side: number; + onlyFunctional: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IExtendOfferRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IExtendOfferRequestData.d.ts new file mode 100644 index 0000000..2a4a876 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IExtendOfferRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IExtendOfferRequestData { + offerId: string; + renewalTime: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IGetItemPriceResult.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IGetItemPriceResult.d.ts new file mode 100644 index 0000000..676322a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IGetItemPriceResult.d.ts @@ -0,0 +1,5 @@ +export interface IGetItemPriceResult { + avg: number; + min: number; + max: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IGetMarketPriceRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IGetMarketPriceRequestData.d.ts new file mode 100644 index 0000000..00f8f17 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IGetMarketPriceRequestData.d.ts @@ -0,0 +1,3 @@ +export interface IGetMarketPriceRequestData { + templateId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IGetOffersResult.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IGetOffersResult.d.ts new file mode 100644 index 0000000..fbc631d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IGetOffersResult.d.ts @@ -0,0 +1,7 @@ +import { IRagfairOffer } from "./IRagfairOffer"; +export interface IGetOffersResult { + categories?: Record; + offers: IRagfairOffer[]; + offersCount: number; + selectedCategory: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IRagfairOffer.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IRagfairOffer.d.ts new file mode 100644 index 0000000..792ec7d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IRagfairOffer.d.ts @@ -0,0 +1,45 @@ +import { MemberCategory } from "../../enums/MemberCategory"; +import { Item } from "../common/tables/IItem"; +export interface IRagfairOffer { + sellResult?: SellResult[]; + _id: string; + items: Item[]; + requirements: OfferRequirement[]; + root: string; + intId: number; + /** Handbook price */ + itemsCost: number; + /** Rouble price */ + requirementsCost: number; + startTime: number; + endTime: number; + sellInOnePiece: boolean; + loyaltyLevel: number; + buyRestrictionMax?: number; + buyRestrictionCurrent?: number; + locked: boolean; + unlimitedCount: boolean; + /** Rouble price */ + summaryCost: number; + user: IRagfairOfferUser; + notAvailable: boolean; + CurrentItemCount: number; + priority: boolean; +} +export interface OfferRequirement { + _tpl: string; + count: number; + onlyFunctional: boolean; +} +export interface IRagfairOfferUser { + id: string; + nickname?: string; + rating?: number; + memberType: MemberCategory; + avatar?: string; + isRatingGrowing?: boolean; +} +export interface SellResult { + sellTime: number; + amount: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IRemoveOfferRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IRemoveOfferRequestData.d.ts new file mode 100644 index 0000000..d926615 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/IRemoveOfferRequestData.d.ts @@ -0,0 +1,4 @@ +export interface IRemoveOfferRequestData { + Action: string; + offerId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/ISearchRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/ISearchRequestData.d.ts new file mode 100644 index 0000000..56d093b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/ISearchRequestData.d.ts @@ -0,0 +1,33 @@ +import { RagfairSort } from "../../enums/RagfairSort"; +export interface ISearchRequestData { + page: number; + limit: number; + sortType: RagfairSort; + sortDirection: number; + currency: number; + priceFrom: number; + priceTo: number; + quantityFrom: number; + quantityTo: number; + conditionFrom: number; + conditionTo: number; + oneHourExpiration: boolean; + removeBartering: boolean; + offerOwnerType: OfferOwnerType; + onlyFunctional: boolean; + updateOfferCount: boolean; + handbookId: string; + linkedSearchId: string; + neededSearchId: string; + buildItems: BuildItems; + buildCount: number; + tm: number; + reload: number; +} +export declare enum OfferOwnerType { + ANYOWNERTYPE = 0, + TRADEROWNERTYPE = 1, + PLAYEROWNERTYPE = 2 +} +export interface BuildItems { +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/ISendRagfairReportRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/ISendRagfairReportRequestData.d.ts new file mode 100644 index 0000000..2d14d20 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/ragfair/ISendRagfairReportRequestData.d.ts @@ -0,0 +1,3 @@ +export interface ISendRagfairReportRequestData { + offerId: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/repair/IBaseRepairActionDataRequest.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/repair/IBaseRepairActionDataRequest.d.ts new file mode 100644 index 0000000..e645fb3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/repair/IBaseRepairActionDataRequest.d.ts @@ -0,0 +1,3 @@ +export interface IBaseRepairActionDataRequest { + Action: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/repair/IRepairActionDataRequest.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/repair/IRepairActionDataRequest.d.ts new file mode 100644 index 0000000..263d400 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/repair/IRepairActionDataRequest.d.ts @@ -0,0 +1,10 @@ +import { IBaseRepairActionDataRequest } from "./IBaseRepairActionDataRequest"; +export interface IRepairActionDataRequest extends IBaseRepairActionDataRequest { + Action: "Repair"; + repairKitsInfo: RepairKitsInfo[]; + target: string; +} +export interface RepairKitsInfo { + _id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/repair/ITraderRepairActionDataRequest.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/repair/ITraderRepairActionDataRequest.d.ts new file mode 100644 index 0000000..e3d469d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/repair/ITraderRepairActionDataRequest.d.ts @@ -0,0 +1,10 @@ +import { IBaseRepairActionDataRequest } from "./IBaseRepairActionDataRequest"; +export interface ITraderRepairActionDataRequest extends IBaseRepairActionDataRequest { + Action: "TraderRepair"; + tid: string; + repairItems: RepairItem[]; +} +export interface RepairItem { + _id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/trade/IProcessBaseTradeRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/trade/IProcessBaseTradeRequestData.d.ts new file mode 100644 index 0000000..a9ef757 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/trade/IProcessBaseTradeRequestData.d.ts @@ -0,0 +1,5 @@ +export interface IProcessBaseTradeRequestData { + Action: string; + type: string; + tid: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/trade/IProcessBuyTradeRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/trade/IProcessBuyTradeRequestData.d.ts new file mode 100644 index 0000000..a9e4c17 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/trade/IProcessBuyTradeRequestData.d.ts @@ -0,0 +1,14 @@ +import { IProcessBaseTradeRequestData } from "./IProcessBaseTradeRequestData"; +export interface IProcessBuyTradeRequestData extends IProcessBaseTradeRequestData { + Action: "buy_from_trader" | "TradingConfirm" | "RestoreHealth" | ""; + type: string; + tid: string; + item_id: string; + count: number; + scheme_id: number; + scheme_items: SchemeItem[]; +} +export interface SchemeItem { + id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/trade/IProcessRagfairTradeRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/trade/IProcessRagfairTradeRequestData.d.ts new file mode 100644 index 0000000..889dfd1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/trade/IProcessRagfairTradeRequestData.d.ts @@ -0,0 +1,13 @@ +export interface IProcessRagfairTradeRequestData { + Action: string; + offers: Offer[]; +} +export interface Offer { + id: string; + count: number; + items: Item[]; +} +export interface Item { + id: string; + count: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/trade/IProcessSellTradeRequestData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/trade/IProcessSellTradeRequestData.d.ts new file mode 100644 index 0000000..dee0cd5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/trade/IProcessSellTradeRequestData.d.ts @@ -0,0 +1,13 @@ +import { IProcessBaseTradeRequestData } from "./IProcessBaseTradeRequestData"; +export interface IProcessSellTradeRequestData extends IProcessBaseTradeRequestData { + Action: "sell_to_trader"; + type: string; + tid: string; + price: number; + items: Item[]; +} +export interface Item { + id: string; + count: number; + scheme_id: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/weather/IWeatherData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/weather/IWeatherData.d.ts new file mode 100644 index 0000000..1f5d5b5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/weather/IWeatherData.d.ts @@ -0,0 +1,21 @@ +import { WindDirection } from "../../../models/enums/WindDirection"; +export interface IWeatherData { + acceleration: number; + time: string; + date: string; + weather?: IWeather; +} +export interface IWeather { + pressure: number; + temp: number; + fog: number; + rain_intensity: number; + rain: number; + wind_gustiness: number; + wind_direction: WindDirection; + wind_speed: number; + cloud: number; + time: string; + date: string; + timestamp: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/eft/wishlist/IWishlistActionData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/wishlist/IWishlistActionData.d.ts new file mode 100644 index 0000000..9217864 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/eft/wishlist/IWishlistActionData.d.ts @@ -0,0 +1,4 @@ +export interface IWishlistActionData { + Action: string; + templateId: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/AmmoTypes.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/AmmoTypes.d.ts new file mode 100644 index 0000000..254b410 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/AmmoTypes.d.ts @@ -0,0 +1,208 @@ +export declare enum Grenade { + M386_HE_GRENADE = "5ede475b549eed7c6d5c18fb", + M576_MP_APERS_GRENADE = "5ede475339ee016e8c534742", + M433_HEDP_GRENADE = "5f0c892565703e5c461894e9", + M406_HE_GRENADE = "5ede4739e0350d05467f73e8", + M381_HE_GRENADE = "5ede474b0c226a66f5402622", + M441_HE_GRENADE = "5ede47405b097655935d7d16" +} +export declare enum Ammo762x51 { + M62_TRACER = "5a608bf24f39f98ffc77720e", + M80 = "58dd3ad986f77403051cba8f", + M61 = "5a6086ea4f39f99cd479502f", + BCP_FMJ = "5e023e53d4353e3302577c4c", + ULTRA_NOSLER = "5e023e88277cce2b522ff2b1", + TCW_SP = "5e023e6e34d52a55c3304f71", + M993 = "5efb0c1bd79ff02a1f5e68d9" +} +export declare enum Ammo762x54 { + SNB_GZH = "560d61e84bdc2da74d8b4571", + LPS_GZH = "5887431f2459777e1612938f", + PS_GZH = "59e77a2386f7742ee578960a", + T46M_GZH = "5e023cf8186a883be655e54f", + BT_GZH = "5e023d34e8a400319a28ed44", + BS_GZH = "5e023d48186a883be655e551" +} +export declare enum Ammo86x70 { + TAC_X = "5fc382b6d6fa9c00c571bbc3", + UCW = "5fc382c1016cce60e8341b20", + AP = "5fc382a9d724d907e2077dab", + FMJ = "5fc275cf85fd526b824a571a" +} +export declare enum Ammo46x30 { + AP_SX = "5ba26835d4351e0035628ff5", + ACTION_SX = "5ba26812d4351e003201fef1", + FMJ_SX = "5ba2678ad4351e44f824b344", + SUBSONIC_SX = "5ba26844d4351e00334c9475" +} +export declare enum Ammo57x28 { + SS198LF = "5cc80f79e4a949033c7343b2", + R37_F = "5cc86832d7f00c000d3a6e6c", + SS190 = "5cc80f38e4a949001152b560", + R37_X = "5cc86840d7f00c002412c56c", + L191 = "5cc80f53e4a949000e1ea4f8", + SS197SR = "5cc80f8fe4a949033b0224a2", + SB193 = "5cc80f67e4a949035e43bbba" +} +export declare enum Ammo762x25 { + FMJ43 = "5735ff5c245977640e39ba7e", + LRN = "573601b42459776410737435", + P_GL = "5736026a245977644601dc61", + PST_GZH = "573603562459776430731618", + LRNPC = "573602322459776445391df1", + AKBS = "5735fdcd2459776445391d61", + PT_GZH = "573603c924597764442bd9cb" +} +export declare enum Ammo9x18 { + PM_SP8_GZH = "5737218f245977612125ba51", + P_GZH = "573719762459775a626ccbc1", + PSTM_GZH = "57371aab2459775a77142f22", + RG028_GZH = "573720e02459776143012541", + BZHT_GZH = "573718ba2459775a75491131", + PM_PSV = "5737207f24597760ff7b25f2", + SP7_GZH = "57372140245977611f70ee91", + PBM_GZH = "573719df2459775a626ccbc2", + PSO_GZH = "57371f8d24597761006c6a81", + PST_GZH = "5737201124597760fc4431f1", + PS_GS_PPO = "57371f2b24597761224311f1", + PRS_GS = "57371eb62459776125652ac1", + PPT_GZH = "57371e4124597760ff7b25f1", + PPE_GZH = "57371b192459775a9f58a5e0" +} +export declare enum Ammo9x19 { + PSO_GZH = "58864a4f2459770fcc257101", + PST_GZH = "56d59d3ad2720bdb418b4577", + GREEN_TRACER = "5c3df7d588a4501f290594e5", + RIP = "5c0d56a986f774449d5de529", + AP_63 = "5c925fa22e221601da359b7b", + LUGER_CCI = "5a3c16fe86f77452b62de32a", + PBP_GZH = "5efb0da7a29a85116f6ea05f", + QUAKEMAKER = "5efb0e16aeb21837e749c7ff" +} +export declare enum Ammo9x21 { + P_GZH = "5a26abfac4a28232980eabff", + PS_GZH = "5a269f97c4a282000b151807", + PE_GZH = "5a26ac06c4a282000c5a90a8", + BT_GZH = "5a26ac0ec4a28200741e1e18" +} +export declare enum Ammo9x33R { + FMJ = "62330b3ed4dc74626d570b95", + HOLLOW_POINT = "62330bfadc5883093563729b", + SOFT_POINT = "62330c40bdd19b369e1e53d1", + JACKET_HP = "62330c18744e5e31df12f516" +} +export declare enum Ammo1143x23ACP { + MATCH_FMJ = "5e81f423763d9f754677bf2e", + HYDRA_SHOK = "5efb0fc6aeb21837e749c801", + LASERMATCH_FMJ = "5efb0d4f4bc50b58e81710f3", + AP = "5efb0cabfb3e451d70735af5", + RIP = "5ea2a8e200685063ec28c05a" +} +export declare enum Ammo545x39 { + PS_GS = "56dff3afd2720bba668b4567", + SP = "56dff421d2720b5f5a8b4567", + PPBS_GS_IGOLNIK = "5c0d5e4486f77478390952fe", + BS_7N40 = "61962b617c6c7b169525f168", + PRS_GS = "56dff338d2720bbd668b4569", + BT_GS = "56dff061d2720bb5668b4567", + US_GS = "56dff4ecd2720b5f5a8b4568", + BP_GS = "56dfef82d2720bbd668b4567", + HP = "56dff216d2720bbd668b4568", + BS_GS = "56dff026d2720bb8668b4567", + T_GS = "56dff4a2d2720bbd668b456a", + PP_GS = "56dff2ced2720bb4668b4567", + FMJ = "56dff0bed2720bb0668b4567" +} +export declare enum Ammo556x45 { + M856 = "59e68f6f86f7746c9f75e846", + MK255_MOD_0_RRLP = "59e6918f86f7746c9f75e849", + M995 = "59e690b686f7746c9f75e848", + M855A1 = "54527ac44bdc2d36668b4567", + M856A1 = "59e6906286f7746c9f75e847", + M855 = "54527a984bdc2d4e668b4567", + HP = "59e6927d86f77411da468256", + FMJ = "59e6920f86f77411d82aa167", + WARMAGEDDON = "5c0d5ae286f7741e46554302", + MK_318_MOD_0_SOST = "60194943740c5d77f6705eea", + SSA_AP = "601949593ae8f707c4608daa" +} +export declare enum Ammo762x35 { + M62_TRACER = "619636be6db0f2477964e710", + BCP_FMJ = "5fbe3ffdf8b6a877a729ea82", + AP = "5fd20ff893a8961fc660a954", + V_MAX = "6196364158ef8c428c287d9f", + WHISPER = "6196365d58ef8c428c287da1" +} +export declare enum Ammo762x39 { + PS_GZH = "5656d7c34bdc2d9d198b4587", + HP = "59e4d3d286f774176a36250a", + US_GZH = "59e4d24686f7741776641ac7", + T45M1_GZH = "59e4cf5286f7741778269d8a", + BP_GZH = "59e0d99486f7744a32234762", + MAI_AP = "601aa3d2b2bcb34913271e6d" +} +export declare enum Ammo9x39 { + SP5_GS = "57a0dfb82459774d3078b56c", + BP_GS = "5c0d688c86f77413ae3407b2", + SP6_GS = "57a0e5022459774d1673f889", + SPP_GS = "5c0d668f86f7747ccb7f13b2", + PAB9_GS = "61962d879bb3d20b0946d385" +} +export declare enum Ammo366TKM { + FMJ = "59e6542b86f77411dc52a77a", + GEKSA = "59e6658b86f77411d949b250", + EKO = "59e655cb86f77411dc52a77b", + APM = "5f0596629e22f464da6bbdd9" +} +export declare enum Ammo127x55 { + PS12 = "5cadf6ddae9215051e1c23b2", + PS12B = "5cadf6eeae921500134b2799", + PS12A = "5cadf6e5ae921500113bb973" +} +export declare enum Ammo12Gauge { + BUCKSHOT_7MM = "560d5e524bdc2d25448b4571", + MAGNUM_85MM = "5d6e6806a4b936088465b17e", + RIP = "5c0d591486f7744c505b416f", + BMG_SLUG_50CAL = "5d6e68c4a4b9361b93413f79", + BUCKSHOT_525MM = "5d6e6772a4b936088465b17c", + EXPRESS_65MM = "5d6e67fba4b9361bc73bc779", + FLECHETTE = "5d6e6911a4b9361bd5780d52", + FTX_CUSTOM_LITE_SLUG = "5d6e68e6a4b9361c140bcfe0", + AP20_ARMOR_PIERCING_SLUG = "5d6e68a8a4b9360b6c0d54e2", + DUAL_SABOT_SLUG = "5d6e68dea4b9361bcc29e659", + POLEVA_6U_SLUG = "5d6e689ca4b9361bc8618956", + POLEVA_3_SLUG = "5d6e6891a4b9361bd473feea", + GRIZZLY_40_SLUG = "5d6e6869a4b9361c140bcfde", + SUPERFORMANCE_HP_SLUG = "5d6e68d1a4b93622fe60e845", + COPPER_SABOT_PREMIER_HP_SLUG = "5d6e68b3a4b9361bca7e50b5", + LEAD_SLUG = "58820d1224597753c90aeb13" +} +export declare enum Ammo20Gauge { + BUCKSHOT_75MM = "5a38ebd9c4a282000d722a5b", + STAR_SLUG = "5d6e6a05a4b93618084f58d0", + BUCKSHOT_73MM = "5d6e69c7a4b9360b6c0d54e4", + DEVASTATOR_SLUG = "5d6e6a5fa4b93614ec501745", + BUCKSHOT_56MM = "5d6e695fa4b936359b35d852", + POLEVA_6U_SLUG = "5d6e6a42a4b9364f07165f52", + POLEVA_3_SLUG = "5d6e6a53a4b9361bd473feec", + BUCKSHOT_62MM = "5d6e69b9a4b9361bc8618958" +} +export declare enum Ammo23x75 { + SHRAPNEL10_BUCKSHOT = "5e85a9a6eacf8c039e4e2ac1", + SHRAPNEL25_BUCKSHOT = "5f647f31b6238e5dd066e196", + ZVEZDA_FLASHBANG = "5e85a9f4add9fe03027d9bf1", + BARRIKADA_SLUG = "5e85aa1a988a8701445df1f5" +} +export declare enum Ammo30x29 { + VOG_30 = "5d70e500a4b9364de70d38ce" +} +export declare enum Ammo127x108 { + B32 = "5cde8864d7f00c0010373be1", + BZT_44M = "5d2f2ab648f03550091993ca" +} +export declare enum Ammo26x75 { + GREEN_FLARE = "62389aaba63f32501b1b444f", + RED_FLARE = "62389ba9a63f32501b1b4451", + WHITE_FLARE = "62389bc9423ed1685422dc57", + YELLOW_FLARE = "62389be94d5d474bf712e709" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/BackendErrorCodes.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/BackendErrorCodes.d.ts new file mode 100644 index 0000000..6614b75 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/BackendErrorCodes.d.ts @@ -0,0 +1,67 @@ +export declare enum BackendErrorCodes { + NONE = 0, + UNKNOWN_ERROR = 200, + NOT_AUTHORIZED = 201, + NEED_AUTHORIZATION_CODE = 209, + WRONG_AUTHORIZATION_CODE = 211, + NEED_CAPTCHA = 214, + NO_NEED_CAPTCHA = 215, + CAPTCHA_FAILED = 218, + CAPTCHA_BRUTE_FORCED = 219, + NO_ROOM_IN_STASH = 223, + NICKNAME_NOT_UNIQUE = 225, + NICKNAME_NOT_VALID = 226, + UNSUPPORTED_CLIENT_VERSION = 232, + REPORT_NOT_ALLOWED = 238, + NICKNAME_IS_ABUSIVE = 241, + NICKNAME_CHANGE_TIMEOUT = 242, + NOT_MODIFIED = 304, + HTTP_BAD_REQUEST = 400, + HTTP_NOT_AUTHORIZED = 401, + HTTP_FORBIDDEN = 403, + HTTP_NOT_FOUND = 404, + HTTP_METHOD_NOT_ALLOWED = 405, + UNKNOWN_TRADING_ERROR = 500, + HTTPNOTIMPLEMENTED = 501, + HTTPBADGATEWAY = 502, + HTTPSERVICEUNAVAILABLE = 503, + HTTPGATEWAYTIMEOUT = 504, + TRADEROUTOFMONEY = 505, + HTTPVARIANTALSONEGOTIATES = 506, + PRICECHANGED = 509, + TRADERDISABLED = 512, + ITEMHASBEENSOLD = 513, + NOTENOUGHSPACEFORMONEY = 518, + HTTPINVALIDSSLCERTIFICATE = 526, + UNKNOWNRAGFAIRERROR = 550, + UNKNOWNRAGFAIRERROR2 = 551, + UNKNOWNMATCHMAKERERROR = 600, + SESSIONPARAMETERSERROR = 601, + SESSIONLOST = 602, + SERVERNOTREGISTERED = 604, + UNKNOWNQUESTERROR = 700, + QUESTBADPARAM = 702, + QUESTNOTFOUND = 703, + QUESTISUNAVAILABLE = 704, + NOFREESPACEFORREWARDS = 705, + WRONGQUESTSTATUS = 706, + CANTCOMPLETEQUEST = 707, + UNKNOWNMAILERROR = 900, + TOOMANYFRIENDREQUESTS = 925, + UNKNOWNSCRIPTEXECUTIONERROR = 1000, + UNKNOWNREPAIRINGERROR = 1200, + UNKNOWNINSURANCEERROR = 1300, + UNKNOWNCURRENCYEXCHANGEERROR = 1400, + OFFERNOTFOUND = 1503, + NOTENOUGHSPACE = 1505, + OFFEROUTOFSTOCK = 1506, + OFFERSOLD = 1507, + RAGFAIRUNAVAILABLE = 1511, + BANNEDERRORCODE = 1513, + INSUFFICIENTNUMBERINSTOCK = 1516, + TOOMANYITEMSTOSELL = 1517, + EXAMINATIONFAILED = 22001, + ITEMALREADYEXAMINED = 22002, + UNKNOWNNGINXERROR = 9000, + PARSERESPONSEERROR = 9001 +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/BaseClasses.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/BaseClasses.d.ts new file mode 100644 index 0000000..c6e880a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/BaseClasses.d.ts @@ -0,0 +1,95 @@ +export declare enum BaseClasses { + WEAPON = "5422acb9af1c889c16000029", + UBGL = "55818b014bdc2ddc698b456b", + ARMOR = "5448e54d4bdc2dcc718b4568", + ARMOREDEQUIPMENT = "57bef4c42459772e8d35a53b", + HEADWEAR = "5a341c4086f77401f2541505", + FACECOVER = "5a341c4686f77469e155819e", + VEST = "5448e5284bdc2dcb718b4567", + BACKPACK = "5448e53e4bdc2d60728b4567", + COMPOUND = "566162e44bdc2d3f298b4573", + VISORS = "5448e5724bdc2ddf718b4568", + FOOD = "5448e8d04bdc2ddf718b4569", + GAS_BLOCK = "56ea9461d2720b67698b456f", + RAIL_COVER = "55818b1d4bdc2d5b648b4572", + DRINK = "5448e8d64bdc2dce718b4568", + BARTER_ITEM = "5448eb774bdc2d0a728b4567", + INFO = "5448ecbe4bdc2d60728b4568", + MEDKIT = "5448f39d4bdc2d0a728b4568", + DRUGS = "5448f3a14bdc2d27728b4569", + STIMULATOR = "5448f3a64bdc2d60728b456a", + MEDICAL = "5448f3ac4bdc2dce718b4569", + MEDICAL_SUPPLIES = "57864c8c245977548867e7f1", + MOD = "5448fe124bdc2da5018b4567", + FUNCTIONAL_MOD = "550aa4154bdc2dd8348b456b", + FUEL = "5d650c3e815116009f6201d2", + GEAR_MOD = "55802f3e4bdc2de7118b4584", + STOCK = "55818a594bdc2db9688b456a", + FOREGRIP = "55818af64bdc2d5b648b4570", + MASTER_MOD = "55802f4a4bdc2ddb688b4569", + MOUNT = "55818b224bdc2dde698b456f", + MUZZLE = "5448fe394bdc2d0d028b456c", + SIGHTS = "5448fe7a4bdc2d6f028b456b", + MEDS = "543be5664bdc2dd4348b4569", + MAP = "567849dd4bdc2d150f8b456e", + MONEY = "543be5dd4bdc2deb348b4569", + NIGHTVISION = "5a2c3a9486f774688b05e574", + KEY = "543be5e94bdc2df1348b4568", + KEY_MECHANICAL = "5c99f98d86f7745c314214b3", + KEYCARD = "5c164d2286f774194c5e69fa", + EQUIPMENT = "543be5f84bdc2dd4348b456a", + THROW_WEAPON = "543be6564bdc2df4348b4568", + FOOD_DRINK = "543be6674bdc2df1348b4569", + PISTOL = "5447b5cf4bdc2d65278b4567", + REVOLVER = "617f1ef5e8b54b0998387733", + SMG = "5447b5e04bdc2d62278b4567", + ASSAULT_RIFLE = "5447b5f14bdc2d61278b4567", + ASSAULT_CARBINE = "5447b5fc4bdc2d87278b4567", + SHOTGUN = "5447b6094bdc2dc3278b4567", + MARKSMAN_RIFLE = "5447b6194bdc2d67278b4567", + SNIPER_RIFLE = "5447b6254bdc2dc3278b4568", + MACHINE_GUN = "5447bed64bdc2d97278b4568", + GRENADE_LAUNCHER = "5447bedf4bdc2d87278b4568", + SPECIAL_WEAPON = "5447bee84bdc2dc3278b4569", + SPEC_ITEM = "5447e0e74bdc2d3c308b4567", + KNIFE = "5447e1d04bdc2dff2f8b4567", + AMMO = "5485a8684bdc2da71d8b4567", + AMMO_BOX = "543be5cb4bdc2deb348b4568", + LOOT_CONTAINER = "566965d44bdc2d814c8b4571", + MOD_CONTAINER = "5448bf274bdc2dfc2f8b456a", + SEARCHABLE_ITEM = "566168634bdc2d144c8b456c", + STASH = "566abbb64bdc2d144c8b457d", + SORTING_TABLE = "6050cac987d3f925bf016837", + LOCKABLE_CONTAINER = "5671435f4bdc2d96058b4569", + SIMPLE_CONTAINER = "5795f317245977243854e041", + INVENTORY = "55d720f24bdc2d88028b456d", + STATIONARY_CONTAINER = "567583764bdc2d98058b456e", + POCKETS = "557596e64bdc2dc2118b4571", + ARMBAND = "5b3f15d486f77432d0509248", + DOG_TAG_USEC = "59f32c3b86f77472a31742f0", + DOG_TAG_BEAR = "59f32bb586f774757e1e8442", + JEWELRY = "57864a3d24597754843f8721", + ELECTRONICS = "57864a66245977548f04a81f", + BUILDING_MATERIAL = "57864ada245977548638de91", + TOOL = "57864bb7245977548b3b66c2", + HOUSEHOLD_GOODS = "57864c322459775490116fbf", + LUBRICANT = "57864e4c24597754843f8723", + BATTERY = "57864ee62459775490116fc1", + ASSAULT_SCOPE = "55818add4bdc2d5b648b456f", + TACTICAL_COMBO = "55818b164bdc2ddc698b456c", + FLASHLIGHT = "55818b084bdc2d5b648b4571", + MAGAZINE = "5448bc234bdc2d3c308b4569", + LIGHT_LASER_DESIGNATOR = "55818b0e4bdc2dde698b456e", + FLASH_HIDER = "550aa4bf4bdc2dd6348b456b", + COLLIMATOR = "55818ad54bdc2ddc698b4569", + IRON_SIGHT = "55818ac54bdc2d5b648b456e", + COMPACT_COLLIMATOR = "55818acf4bdc2dde698b456b", + COMPENSATOR = "550aa4af4bdc2dd4348b456e", + OPTIC_SCOPE = "55818ae44bdc2dde698b456c", + SPECIAL_SCOPE = "55818aeb4bdc2ddc698b456a", + OTHER = "590c745b86f7743cc433c5f2", + SILENCER = "550aa4cd4bdc2dd8348b456c", + PORTABLE_RANGE_FINDER = "61605ddea09d851a0a0c1bbc", + ITEM = "54009119af1c881c07000029", + CYLINDER_MAGAZINE = "610720f290b75a49ff2e5e25" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/BotAmount.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/BotAmount.d.ts new file mode 100644 index 0000000..9ef9cab --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/BotAmount.d.ts @@ -0,0 +1,7 @@ +export declare enum BotAmount { + AS_ONLINE = "AsOnline", + LOW = "Low", + MEDIUM = "Medium", + HIGH = "High", + HORDE = "Horde" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/BotDifficulty.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/BotDifficulty.d.ts new file mode 100644 index 0000000..80e45ad --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/BotDifficulty.d.ts @@ -0,0 +1,8 @@ +export declare enum BotDifficulty { + AS_ONLINE = "AsOnline", + EASY = "Easy", + MEDIUM = "Medium", + HARD = "Hard", + IMPOSSIBLE = "Impossible", + RANDOM = "Random" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ConfigTypes.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ConfigTypes.d.ts new file mode 100644 index 0000000..9c48b68 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ConfigTypes.d.ts @@ -0,0 +1,23 @@ +export declare enum ConfigTypes { + AIRDROP = "aki-airdrop", + BOT = "aki-bot", + CORE = "aki-core", + HEALTH = "aki-health", + HIDEOUT = "aki-hideout", + HTTP = "aki-http", + IN_RAID = "aki-inraid", + INSURANCE = "aki-insurance", + INVENTORY = "aki-inventory", + ITEM = "aki-item", + LOCALE = "aki-locale", + LOCATION = "aki-location", + MATCH = "aki-match", + PLAYERSCAV = "aki-playerscav", + QUEST = "aki-quest", + RAGFAIR = "aki-ragfair", + REPAIR = "aki-repair", + SCAVCASE = "aki-scavcase", + TRADER = "aki-trader", + WEATHER = "aki-weather", + SEASONAL_EVENT = "aki-seasonalevents" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ContainerTypes.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ContainerTypes.d.ts new file mode 100644 index 0000000..e6b330a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ContainerTypes.d.ts @@ -0,0 +1,29 @@ +export declare enum CommonContainers { + AMMO_CASE = "5aafbde786f774389d0cbc0f", + DOCUMENTS_CASE = "590c60fc86f77412b13fddcf", + DOGTAG_CASE = "5c093e3486f77430cb02e593", + GRENADE_CASE = "5e2af55f86f7746d4159f07c", + INJECTOR_CASE = "619cbf7d23893217ec30b689", + ITEM_CASE = "59fb042886f7746c5005a7b2", + KEY_TOOL = "59fafd4b86f7745ca07e1232", + KEYCARD_HOLDER = "619cbf9e0a7c3a1a2731940a", + SCAV_JUNKBOX = "5b7c710788a4506dec015957", + MAGAZINE_CASE = "5c127c4486f7745625356c13", + MEDICINE_CASE = "5aafbcd986f7745e590fff23", + MONEY_CASE = "59fb016586f7746d0d4b423a", + HOLODILNICK_THERMAL_BAG = "5c093db286f7740a1b2617e3", + PISTOL_CASE = "567143bf4bdc2d1a0f8b4567", + SICC_ORGANIZATIONAL_POUCH = "5d235bb686f77443f4331278", + SIMPLE_WALLET = "5783c43d2459774bbe137486", + THICC_ITEM_CASE = "5c0a840b86f7742ffa4f2482", + THICC_WEAPON_CASE = "5b6d9ce188a4501afc1b2b25", + WEAPON_CASE = "59fb023c86f7746d0d4b423c", + WZ_WALLET = "60b0f6c058e0b0481a09ad11" +} +export declare enum SecuredContainers { + ALPHA = "544a11ac4bdc2d470e8b456a", + BETA = "5857a8b324597729ab0a0e7d", + EPSILON = "59db794186f77448bc595262", + GAMMA = "5857a8bc2459772bad15db29", + KAPPA = "5c093ca986f7740a1867ab12" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ELocationName.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ELocationName.d.ts new file mode 100644 index 0000000..c52ae87 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ELocationName.d.ts @@ -0,0 +1,13 @@ +export declare enum ELocationName { + FACTORY_DAY = "factory4_day", + FACTORY_NIGHT = "factory4_night", + BIGMAP = "bigmap", + WOODS = "Woods", + SHORELINE = "Shoreline", + INTERCHANGE = "Interchange", + LIGHTHOUSE = "Lighthouse", + LABORATORY = "laboratory", + RESERVE = "RezervBase", + STREETS = "TarkovStreets", + ANY = "any" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/EquipmentSlots.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/EquipmentSlots.d.ts new file mode 100644 index 0000000..35c18ff --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/EquipmentSlots.d.ts @@ -0,0 +1,16 @@ +export declare enum EquipmentSlots { + HEADWEAR = "Headwear", + EARPIECE = "Earpiece", + FACE_COVER = "FaceCover", + ARMOR_VEST = "ArmorVest", + EYEWEAR = "Eyewear", + ARM_BAND = "ArmBand", + TACTICAL_VEST = "TacticalVest", + POCKETS = "Pockets", + BACKPACK = "Backpack", + SECURED_CONTAINER = "SecuredContainer", + FIRST_PRIMARY_WEAPON = "FirstPrimaryWeapon", + SECOND_PRIMARY_WEAPON = "SecondPrimaryWeapon", + HOLSTER = "Holster", + SCABBARD = "Scabbard" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ExitStatis.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ExitStatis.d.ts new file mode 100644 index 0000000..78d9733 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ExitStatis.d.ts @@ -0,0 +1,7 @@ +export declare enum ExitStatus { + SURVIVED = 0, + KILLED = 1, + LEFT = 2, + RUNNER = 3, + MISSINGINACTION = 4 +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/HideoutAreas.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/HideoutAreas.d.ts new file mode 100644 index 0000000..c8313d9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/HideoutAreas.d.ts @@ -0,0 +1,27 @@ +export declare enum HideoutAreas { + NOTSET = -1, + VENTS = 0, + SECURITY = 1, + LAVATORY = 2, + STASH = 3, + GENERATOR = 4, + HEATING = 5, + WATER_COLLECTOR = 6, + MEDSTATION = 7, + NUTRITION_UNIT = 8, + REST_SPACE = 9, + WORKBENCH = 10, + INTEL_CENTER = 11, + SHOOTING_RANGE = 12, + LIBRARY = 13, + SCAV_CASE = 14, + ILLUMINATION = 15, + PLACE_OF_FAME = 16, + AIR_FILTERING = 17, + SOLAR_POWER = 18, + BOOZE_GENERATOR = 19, + BITCOIN_FARM = 20, + CHRISTMAS_TREE = 21, + EMERGENCY_WALL = 22, + GYM = 23 +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/HideoutEventActions.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/HideoutEventActions.d.ts new file mode 100644 index 0000000..aa04131 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/HideoutEventActions.d.ts @@ -0,0 +1,13 @@ +export declare enum HideoutEventActions { + HIDEOUT_UPGRADE = "HideoutUpgrade", + HIDEOUT_UPGRADE_COMPLETE = "HideoutUpgradeComplete", + HIDEOUT_PUT_ITEMS_IN_AREA_SLOTS = "HideoutPutItemsInAreaSlots", + HIDEOUT_TAKE_ITEMS_FROM_AREA_SLOTS = "HideoutTakeItemsFromAreaSlots", + HIDEOUT_TOGGLE_AREA = "HideoutToggleArea", + HIDEOUT_SINGLE_PRODUCTION_START = "HideoutSingleProductionStart", + HIDEOUT_SCAV_CASE_PRODUCTION_START = "HideoutScavCaseProductionStart", + HIDEOUT_CONTINUOUS_PRODUCTION_START = "HideoutContinuousProductionStart", + HIDEOUT_TAKE_PRODUCTION = "HideoutTakeProduction", + HIDEOUT_RECORD_SHOOTING_RANGE_POINTS = "RecordShootingRangePoints", + HIDEOUT_IMPROVE_AREA = "HideoutImproveArea" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ItemEventActions.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ItemEventActions.d.ts new file mode 100644 index 0000000..94061f8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/ItemEventActions.d.ts @@ -0,0 +1,20 @@ +export declare enum ItemEventActions { + MOVE = "Move", + REMOVE = "Remove", + SPLIT = "Split", + MERGE = "Merge", + TRANSFER = "Transfer", + SWAP = "Swap", + FOLD = "Fold", + TOGGLE = "Toggle", + TAG = "Tag", + BIND = "Bind", + EXAMINE = "Examine", + READ_ENCYCLOPEDIA = "ReadEncyclopedia", + APPLY_INVENTORY_CHANGES = "ApplyInventoryChanges", + CREATE_MAP_MARKER = "CreateMapMarker", + DELETE_MAP_MARKER = "DeleteMapMarker", + EDIT_MAP_MARKER = "EditMapMarker", + OPEN_RANDOM_LOOT_CONTAINER = "OpenRandomLootContainer", + HIDEOUT_QTE_EVENT = "HideoutQuickTimeEvent" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/MemberCategory.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/MemberCategory.d.ts new file mode 100644 index 0000000..a81380e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/MemberCategory.d.ts @@ -0,0 +1,13 @@ +export declare enum MemberCategory { + DEFAULT = 0, + DEVELOPER = 1, + UNIQUE_ID = 2, + TRADER = 4, + GROUP = 8, + SYSTEM = 16, + CHAT_MODERATOR = 32, + CHAT_MODERATOR_WITH_PERMANENT_BAN = 64, + UNIT_TEST = 128, + SHERPA = 256, + EMISSARY = 512 +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/MessageType.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/MessageType.d.ts new file mode 100644 index 0000000..1b0c649 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/MessageType.d.ts @@ -0,0 +1,16 @@ +export declare enum MessageType { + USER_MESSAGE = 1, + NPC_TRADER = 2, + AUCTION_MESSAGE = 3, + FLEAMARKET_MESSAGE = 4, + ADMIN_MESSAGE = 5, + GROUP_CHAT_MESSAGE = 6, + SYSTEM_MESSAGE = 7, + INSURANCE_RETURN = 8, + GLOBAL_CHAT = 9, + QUEST_START = 10, + QUEST_FAIL = 11, + QUEST_SUCCESS = 12, + MESSAGE_WITH_ITEMS = 13, + INITIAL_SUPPORT = 14 +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/Money.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/Money.d.ts new file mode 100644 index 0000000..0d39613 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/Money.d.ts @@ -0,0 +1,5 @@ +export declare enum Money { + ROUBLES = "5449016a4bdc2d6f028b456f", + EUROS = "569668774bdc2da2298b4568", + DOLLARS = "5696686a4bdc2da3298b456a" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/QuestRewardType.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/QuestRewardType.d.ts new file mode 100644 index 0000000..ff8c5f4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/QuestRewardType.d.ts @@ -0,0 +1,9 @@ +export declare enum QuestRewardType { + SKILL = "Skill", + EXPERIENCE = "Experience", + TRADER_STANDING = "TraderStanding", + TRADER_UNLOCK = "TraderUnlock", + ITEM = "Item", + ASSORTMENT_UNLOCK = "AssortmentUnlock", + PRODUCTIONS_SCHEME = "ProductionScheme" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/QuestStatus.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/QuestStatus.d.ts new file mode 100644 index 0000000..e706c05 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/QuestStatus.d.ts @@ -0,0 +1,12 @@ +export declare enum QuestStatus { + Locked = 0, + AvailableForStart = 1, + Started = 2, + AvailableForFinish = 3, + Success = 4, + Fail = 5, + FailRestartable = 6, + MarkedAsFailed = 7, + Expired = 8, + AvailableAfter = 9 +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/RagfairSort.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/RagfairSort.d.ts new file mode 100644 index 0000000..798a5e7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/RagfairSort.d.ts @@ -0,0 +1,7 @@ +export declare enum RagfairSort { + ID = 0, + RATING = 3, + OFFER_TITLE = 4, + PRICE = 5, + EXPIRY = 6 +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/RaidMode.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/RaidMode.d.ts new file mode 100644 index 0000000..e20cf3f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/RaidMode.d.ts @@ -0,0 +1,5 @@ +export declare enum RaidMode { + ONLINE = "Online", + LOCAL = "Local", + COOP = "Coop" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/SkillTypes.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/SkillTypes.d.ts new file mode 100644 index 0000000..4eb90af --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/SkillTypes.d.ts @@ -0,0 +1,52 @@ +export declare enum SkillTypes { + HIDEOUT_MANAGEMENT = "HideoutManagement", + CRAFTING = "Crafting", + METABOLISM = "Metabolism", + IMMUNITY = "Immunity", + ENDURANCE = "Endurance", + STRENGTH = "Strength", + VITALITY = "Vitality", + HEALTH = "Health", + STRESS_RESISTANCE = "StressResistance", + THROWING = "Throwing", + RECOIL_CONTROL = "RecoilControl", + COVERT_MOVEMENT = "CovertMovement", + FIELD_MEDICINE = "FieldMedicine", + SEARCH = "Search", + SNIPING = "Sniping", + PERCEPTION = "Perception", + INTELLECT = "Intellect", + ATTENTION = "Attention", + CHARISMA = "Charisma", + MEMORY = "Memory", + SURGERY = "Surgery", + AIM_DRILLS = "AimDrills", + TROUBLESHOOTING = "TroubleShooting", + PRONE_MOVEMENT = "ProneMovement", + FIRST_AID = "FirstAid", + LIGHT_VESTS = "LightVests", + HEAVY_VESTS = "HeavyVests", + WEAPON_MODDING = "WeaponModding", + ADVANCED_MODDING = "AdvancedModding", + NIGHT_OPS = "NightOps", + SILENT_OPS = "SilentOps", + LOCKPICKING = "Lockpicking", + WEAPON_TREATMENT = "WeaponTreatment", + MAG_DRILLS = "MagDrills", + FREE_TRADING = "Freetrading", + AUCTIONS = "Auctions", + CLEAN_OPS = "Cleanoperations", + BARTER = "Barter", + SHADOW_CONNECTIONS = "Shadowconnections", + TASK_PERFORMANCE = "Taskperformance", + BEAR_ASSAULT_OPS = "BearAssaultoperations", + BEAR_AUTHORITY = "BearAuthority", + BEAR_AK_SYSTEMS = "BearAksystems", + BEAR_HEAVY_CAL = "BearHeavycaliber", + BEAR_RAW_POWER = "BearRawpower", + USEC_AR_SYSTEMS = "UsecArsystems", + USEC_DEEP_WEAPON_MOD = "UsecDeepweaponmodding_Settings", + USEC_LONG_RANGE_OPTICS = "UsecLongrangeoptics_Settings", + USEC_NEGOTIATIONS = "UsecNegotiations", + USEC_TACTICS = "UsecTactics" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/Traders.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/Traders.d.ts new file mode 100644 index 0000000..ffea725 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/Traders.d.ts @@ -0,0 +1,11 @@ +export declare enum Traders { + PRAPOR = "54cb50c76803fa8b248b4571", + THERAPIST = "54cb57776803fa99248b456e", + FENCE = "579dc571d53a0658a154fbec", + SKIER = "58330581ace78e27b8b10cee", + PEACEKEEPER = "5935c25fb3acc3127c3d8cd9", + MECHANIC = "5a7c2eca46aef81a7ca2145d", + RAGMAN = "5ac3b934156ae10c4430e83c", + JAEGER = "5c0647fdd443bc2504c2d371", + LIGHTHOUSEKEEPER = "638f541a29ffd1183d187f57" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WeaponSkillTypes.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WeaponSkillTypes.d.ts new file mode 100644 index 0000000..1e20a2d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WeaponSkillTypes.d.ts @@ -0,0 +1,14 @@ +export declare enum WeaponSkillTypes { + PISTOL = "Pistol", + REVOLVER = "Revolver", + SMG = "SMG", + ASSAULT = "Assault", + SHOTGUN = "Shotgun", + SNIPER = "Sniper", + LMG = "LMG", + HMG = "HMG", + DMR = "DMR", + LAUNCHER = "Launcher", + ATTACHED_LAUNCHER = "AttachedLauncher", + MELEE = "Melee" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WeaponTypes.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WeaponTypes.d.ts new file mode 100644 index 0000000..867b052 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WeaponTypes.d.ts @@ -0,0 +1,151 @@ +export declare enum Weapons127x55 { + ASH_12 = "5cadfbf7ae92152ac412eeef" +} +export declare enum Weapons86x70 { + MK_18 = "5fc22d7c187fea44d52eda44", + AXMC = "627e14b21713922ded6f2c15" +} +export declare enum Weapons9x39 { + AS_VAL = "57c44b372459772d2b39b8ce", + VSS_VINTOREZ = "57838ad32459774a17445cd2" +} +export declare enum Weapons762x54R { + SVDS = "5c46fbd72e2216398b5a8c9c", + MP_18 = "61f7c9e189e6fb1a5e3ea78d", + MOSIN_INFANTRY = "5bfd297f0db834001a669119", + MOSIN_SNIPER = "5ae08f0a5acfc408fb1398a1", + SV_98 = "55801eed4bdc2d89578b4588" +} +export declare enum Weapons762x51 { + VPO_101 = "5c501a4d2e221602b412b540", + DT_MDR_762 = "5dcbd56fdbd3d91b3e5468d5", + SA_58 = "5b0bbe4e5acfc40dc528a72d", + SCARH_BLACK = "6183afd850224f204c1da514", + SCARH_FDE = "6165ac306ef05c2ce828ef74", + HK_G28 = "6176aca650224f204c1da3fb", + M1A = "5aafa857e5b5b00018480968", + RFB = "5f2a9575926fd9352339381f", + RSASS = "5a367e5dc4a282000e49738f", + SR_25 = "5df8ce05b11454561e39243b", + DVL_10 = "588892092459774ac91d4b11", + M700 = "5bfea6e90db834001b7347f3", + T5000M = "5df24cf80dee1b22f862e9bc" +} +export declare enum Weapons366TKM { + VPO_209 = "59e6687d86f77411d949b251", + VPO_215 = "5de652c31b7e3716273428be" +} +export declare enum Weapons762x39 { + OP_SKS = "587e02ff24597743df3deaeb", + SKS = "574d967124597745970e7c94", + AK_103 = "5ac66d2e5acfc43b321d4b53", + AK_104 = "5ac66d725acfc43b321d4b60", + AKM = "59d6088586f774275f37482f", + AKMN = "5a0ec13bfcdbcb00165aa685", + AKMS = "59ff346386f77477562ff5e2", + AKMSN = "5abcbc27d8ce8700182eceeb", + MK47_MUTANT = "606587252535c57a13424cfd", + RD_704 = "628a60ae6b1d481ff772e9c8", + VPO_136 = "59e6152586f77473dc057aa1" +} +export declare enum Weapons762x35 { + MCX = "5fbcc1d9016cce60e8341ab3" +} +export declare enum Weapons556x45 { + ADAR_2_15 = "5c07c60e0db834002330051f", + AK_101 = "5ac66cb05acfc40198510a10", + AK_102 = "5ac66d015acfc400180ae6e4", + DT_MDR_556 = "5c488a752e221602b412af63", + HK_416A5 = "5bb2475ed4351e00853264e3", + HK_G36 = "623063e994fc3f7b302a9696", + M4A1 = "5447a9cd4bdc2dbd208b4567", + SCARL_BLACK = "6184055050224f204c1da540", + SCARL_FDE = "618428466ef05c2ce828f218", + TX15_DML = "5d43021ca4b9362eab4b5e25" +} +export declare enum Weapons545x39 { + AK_105 = "5ac66d9b5acfc4001633997a", + AK_74 = "5bf3e03b0db834001d2c4a9c", + AK_74M = "5ac4cd105acfc40016339859", + AK_74N = "5644bd2b4bdc2d3b4c8b4572", + AKS_74 = "5bf3e0490db83400196199af", + AKS_74N = "5ab8e9fcd8ce870019439434", + AKS_74U = "57dc2fa62459775949412633", + AKS_74UB = "5839a40f24597726f856b511", + AKS_74UN = "583990e32459771419544dd2", + SAG_AK = "628b5638ad252a16da6dd245", + SAG_AK_SHORT = "628b9c37a733087d0d7fe84b", + RPK_16 = "5beed0f50db834001c062b12" +} +export declare enum Weapons57x28FN { + FN_57_BLACK = "5d3eb3b0a4b93615055e84d2", + FN_57_FDE = "5d67abc1a4b93614ec50137f", + FN_P90 = "5cc82d76e24e8d00134b4b83" +} +export declare enum Weapons46x30HK { + MP7A1 = "5ba26383d4351e00334c93d9", + MP7A2 = "5bd70322209c4d00d7167b8f" +} +export declare enum Weapons1143x23 { + M1911A1 = "5e81c3cbac2bb513793cdc75", + M45A1 = "5f36a0e5fbf956000b716b65", + USP45 = "6193a720f8ee7e52e42109ed", + UMP45 = "5fc3e272f8b6a877a729eac5", + VECTOR45 = "5fb64bc92b1b027b1f50bcf2" +} +export declare enum Weapons9x33R { + CR_50DS = "61a4c8884f95bc3b2c5dc96f" +} +export declare enum Weapons9x21 { + SR_1MP = "59f98b4986f7746f546d2cef" +} +export declare enum Weapons9x19 { + GLOCK_17 = "5a7ae0c351dfba0017554310", + GLOCK_18C = "5b1fa9b25acfc40018633c01", + M9A3 = "5cadc190ae921500103bb3b6", + MP_443 = "576a581d2459771e7b1bc4f1", + P226R = "56d59856d2720bd8418b456a", + PL_15 = "602a9740da11d6478d5a06dc", + CR_200DS = "624c2e8614da335f1e034d8c", + MP5 = "5926bb2186f7744b1c6c6e60", + MP5K = "5d2f0d8048f0356c925bc3b0", + MP9 = "5e00903ae9dc277128008b87", + MP9_N = "5de7bd7bfd6b4e6e2276dc25", + MPX = "58948c8e86f77409493f7266", + PP_19_01 = "59984ab886f7743e98271174", + SAIGA_9 = "59f9cabd86f7743a10721f46", + STM_9 = "60339954d62c9b14ed777c06", + VECTOR_9MM = "5fc3f2d5900b1d5091531e57" +} +export declare enum Weapons9x18 { + APB = "5abccb7dd8ce87001773e277", + APS = "5a17f98cfcdbcb0980087290", + PB_SILENCED = "56e0598dd2720bb5668b45a6", + PM = "5448bd6b4bdc2dfc2f8b4569", + PM_T = "579204f224597773d619e051", + PP9_KLIN = "57f4c844245977379d5c14d1", + PP91_KEDR = "57d14d2524597714373db789", + PP91_KEDRB = "57f3c6bd24597738e730fa2f" +} +export declare enum Weapons762x25 { + TT = "571a12c42459771f627b58a0", + TT_GOLD = "5b3b713c5acfc4330140bd8d", + PPSH_41 = "5ea03f7400685063ec28bfa8" +} +export declare enum Weapons12Gauge { + M3_SUPER90 = "6259b864ebedf17603599e88", + M590A1 = "5e870397991fd70db46995c8", + M870 = "5a7828548dc32e5a9c28b516", + MP_133 = "54491c4f4bdc2db1078b4568", + MP_153 = "56dee2bdd2720bc8328b4567", + MP_155 = "606dae0ab0e443224b421bb7", + MP_43_1C = "5580223e4bdc2d1c128b457f", + MTS_255_12 = "60db29ce99594040e04c4a27", + SAIGA_12GA = "576165642459773c7a400233" +} +export declare enum Weapons20Gauge { + TOZ_106 = "5a38e6bac4a2826c6e06d79b" +} +export declare enum Weapons23x75 { + KS_23M = "5e848cc2988a8701445df1e8" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WeatherType.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WeatherType.d.ts new file mode 100644 index 0000000..d31fefe --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WeatherType.d.ts @@ -0,0 +1,19 @@ +export declare enum WeatherType { + CLEAR_DAY = 1, + CLEAR_WIND = 2, + CLEAR_NIGHT = 3, + PARTLY_CLOUD_DAY = 4, + PARTLY_CLOUD_NIGHT = 5, + CLEAR_FOG_DAY = 6, + CLEAR_FOG_NIGHT = 7, + CLOUDFOG = 8, + FOG = 9, + MOSTLY_CLOUD = 10, + LIGHT_RAIN = 11, + RAIN = 12, + CLOUD_WIND = 13, + CLOUD_WIND_RAIN = 14, + FULL_CLOUD = 15, + THUNDER_CLOUD = 16, + NONE = 0 +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WildSpawnTypeNumber.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WildSpawnTypeNumber.d.ts new file mode 100644 index 0000000..ff806fe --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WildSpawnTypeNumber.d.ts @@ -0,0 +1,33 @@ +export declare enum WildSpawnTypeNumber { + ASSAULT = 1, + MARKSMAN = 2, + BOSSTEST = 4, + BOSSBULLY = 8, + FOLLOWERTEST = 16, + FOLLOWERBULLY = 32, + BOSSKILLA = 64, + BOSSKOJANIY = 128, + FOLLOWERKOJANIY = 256, + PMCBOT = 512, + CURSEDASSAULT = 1024, + BOSSGLUHAR = 2048, + FOLLOWERGLUHARASSAULT = 4096, + FOLLOWERGLUHARSECURITY = 8192, + FOLLOWERGLUHARSCOUT = 16384, + FOLLOWERGLUHARSNIPE = 32768, + FOLLOWERSANITAR = 65536, + BOSSSANITAR = 131072, + TEST = 262144, + ASSAULTGROUP = 524288, + SECTANTWARRIOR = 1048576, + SECTANTPRIEST = 2097152, + BOSSTAGILLA = 4194304, + FOLLOWERTAGILLA = 8388608, + EXUSEC = 16777216, + GIFTER = 33554432, + BOSSKNIGHT = 67108864, + FOLLOWERBIGPIPE = 134217728, + FOLLOWERBIRDEYE = 268435456, + SPTUSEC = 536870912, + SPTBEAR = 1073741824 +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WindDirection.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WindDirection.d.ts new file mode 100644 index 0000000..fb30b20 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/enums/WindDirection.d.ts @@ -0,0 +1,10 @@ +export declare enum WindDirection { + EAST = 1, + NORTH = 2, + WEST = 3, + SOUTH = 4, + SE = 5, + SW = 6, + NW = 7, + NE = 8 +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/external/HttpFramework.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/external/HttpFramework.d.ts new file mode 100644 index 0000000..64a37d6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/external/HttpFramework.d.ts @@ -0,0 +1,33 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +export type HandleFn = (_: string, req: IncomingMessage, resp: ServerResponse) => void; +/** + * Associates handlers, HTTP methods and a base url to a listener using a proxy + * @param basePath The base path + * @returns The decorator that create the listener proxy + */ +export declare const Listen: (basePath: string) => any>(Base: T) => T; +/** + * HTTP DELETE decorator + */ +export declare const Delete: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP GET decorator + */ +export declare const Get: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP OPTIONS decorator + */ +export declare const Options: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP PATCH decorator + */ +export declare const Patch: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP POST decorator + */ +export declare const Post: (path?: string) => (target: any, propertyKey: string) => void; +/** + * HTTP PUT decorator + */ +export declare const Put: (path?: string) => (target: any, propertyKey: string) => void; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPostAkiLoadMod.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPostAkiLoadMod.d.ts new file mode 100644 index 0000000..f6950e8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPostAkiLoadMod.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPostAkiLoadMod { + postAkiLoad(container: DependencyContainer): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPostAkiLoadModAsync.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPostAkiLoadModAsync.d.ts new file mode 100644 index 0000000..073ce6e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPostAkiLoadModAsync.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPostAkiLoadModAsync { + postAkiLoadAsync(container: DependencyContainer): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPostDBLoadMod.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPostDBLoadMod.d.ts new file mode 100644 index 0000000..ca7c682 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPostDBLoadMod.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPostDBLoadMod { + postDBLoad(container: DependencyContainer): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPostDBLoadModAsync.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPostDBLoadModAsync.d.ts new file mode 100644 index 0000000..b23825a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPostDBLoadModAsync.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPostDBLoadModAsync { + postDBLoadAsync(container: DependencyContainer): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPreAkiLoadMod.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPreAkiLoadMod.d.ts new file mode 100644 index 0000000..ae7579e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPreAkiLoadMod.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPreAkiLoadMod { + preAkiLoad(container: DependencyContainer): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPreAkiLoadModAsync.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPreAkiLoadModAsync.d.ts new file mode 100644 index 0000000..1249ff1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/external/IPreAkiLoadModAsync.d.ts @@ -0,0 +1,4 @@ +import { DependencyContainer } from "./tsyringe"; +export interface IPreAkiLoadModAsync { + preAkiLoadAsync(container: DependencyContainer): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/external/tsyringe.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/external/tsyringe.d.ts new file mode 100644 index 0000000..56a7e58 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/external/tsyringe.d.ts @@ -0,0 +1,2 @@ +import type { DependencyContainer } from "tsyringe"; +export type { DependencyContainer }; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/bindings/Route.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/bindings/Route.d.ts new file mode 100644 index 0000000..1b29d7d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/bindings/Route.d.ts @@ -0,0 +1,3 @@ +export interface IRoute { + aki: any; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/bots/BotGenerationDetails.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/bots/BotGenerationDetails.d.ts new file mode 100644 index 0000000..26571a2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/bots/BotGenerationDetails.d.ts @@ -0,0 +1,18 @@ +export interface BotGenerationDetails { + /** Should the bot be generated as a PMC */ + isPmc: boolean; + /** assault/pmcBot etc */ + role: string; + /** Side of bot */ + side: string; + /** Active players current level */ + playerLevel: number; + /** Delta of highest level of bot */ + botRelativeLevelDeltaMax: number; + /** How many to create and store */ + botCountToGenerate: number; + /** Desired difficulty of the bot */ + botDifficulty: string; + /** Will the generated bot be a player scav */ + isPlayerScav: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/bots/BotLootCache.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/bots/BotLootCache.d.ts new file mode 100644 index 0000000..aedf7b0 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/bots/BotLootCache.d.ts @@ -0,0 +1,23 @@ +import { ITemplateItem } from "../../eft/common/tables/ITemplateItem"; +export declare class BotLootCache { + backpackLoot: ITemplateItem[]; + pocketLoot: ITemplateItem[]; + vestLoot: ITemplateItem[]; + combinedPoolLoot: ITemplateItem[]; + specialItems: ITemplateItem[]; + healingItems: ITemplateItem[]; + drugItems: ITemplateItem[]; + stimItems: ITemplateItem[]; + grenadeItems: ITemplateItem[]; +} +export declare enum LootCacheType { + SPECIAL = "Special", + BACKPACK = "Backpack", + POCKET = "Pocket", + VEST = "Vest", + COMBINED = "Combined", + HEALING_ITEMS = "HealingItems", + DRUG_ITEMS = "DrugItems", + STIM_ITEMS = "StimItems", + GRENADE_ITEMS = "GrenadeItems" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/bots/GenerateWeaponResult.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/bots/GenerateWeaponResult.d.ts new file mode 100644 index 0000000..56fa481 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/bots/GenerateWeaponResult.d.ts @@ -0,0 +1,10 @@ +import { Mods } from "../../eft/common/tables/IBotType"; +import { Item } from "../../eft/common/tables/IItem"; +import { ITemplateItem } from "../../eft/common/tables/ITemplateItem"; +export declare class GenerateWeaponResult { + weapon: Item[]; + chosenAmmoTpl: string; + chosenUbglAmmoTpl: string; + weaponMods: Mods; + weaponTemplate: ITemplateItem; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IBotCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IBotCallbacks.d.ts new file mode 100644 index 0000000..2c42813 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IBotCallbacks.d.ts @@ -0,0 +1,10 @@ +import { IGenerateBotsRequestData } from "../../eft/bot/IGenerateBotsRequestData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IBotBase } from "../../eft/common/tables/IBotBase"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +export interface IBotCallbacks { + getBotLimit(url: string, info: IEmptyRequestData, sessionID: string): string; + getBotDifficulty(url: string, info: IEmptyRequestData, sessionID: string): string; + generateBots(url: string, info: IGenerateBotsRequestData, sessionID: string): IGetBodyResponseData; + getBotCap(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IBundleCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IBundleCallbacks.d.ts new file mode 100644 index 0000000..7e37c6e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IBundleCallbacks.d.ts @@ -0,0 +1,5 @@ +export interface IBundleCallbacks { + 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; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ICustomizationCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ICustomizationCallbacks.d.ts new file mode 100644 index 0000000..d10027f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ICustomizationCallbacks.d.ts @@ -0,0 +1,12 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IBuyClothingRequestData } from "../../eft/customization/IBuyClothingRequestData"; +import { IWearClothingRequestData } from "../../eft/customization/IWearClothingRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { ISuit } from "../../eft/common/tables/ITrader"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface ICustomizationCallbacks { + getSuits(url: string, info: any, sessionID: string): IGetBodyResponseData; + getTraderSuits(url: string, info: any, sessionID: string): IGetBodyResponseData; + wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse; + buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IDataCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IDataCallbacks.d.ts new file mode 100644 index 0000000..b4f4f8c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IDataCallbacks.d.ts @@ -0,0 +1,25 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGlobals } from "../../eft/common/IGlobals"; +import { IQuest } from "../../eft/common/tables/IQuest"; +import { IHideoutArea } from "../../eft/hideout/IHideoutArea"; +import { IHideoutProduction } from "../../eft/hideout/IHideoutProduction"; +import { IHideoutScavCase } from "../../eft/hideout/IHideoutScavCase"; +import { IHideoutSettingsBase } from "../../eft/hideout/IHideoutSettingsBase"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { ISettingsBase } from "../server/ISettingsBase"; +export interface IDataCallbacks { + getSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getGlobals(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateItems(url: string, info: IEmptyRequestData, sessionID: string): string; + getTemplateHandbook(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateCharacter(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getTemplateQuests(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutAreas(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + gethideoutProduction(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getHideoutScavcase(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocalesLanguages(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + getLocalesMenu(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getLocalesGlobal(url: string, info: IEmptyRequestData, sessionID: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IDialogueCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IDialogueCallbacks.d.ts new file mode 100644 index 0000000..fe2115a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IDialogueCallbacks.d.ts @@ -0,0 +1,34 @@ +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../../eft/httpResponse/INullResponseData"; +import { IGetMailDialogViewRequestData } from "../../eft/dialog/IGetMailDialogViewRequestData"; +import { IGetMailDialogInfoRequestData } from "../../eft/dialog/IGetMailDialogInfoRequestData"; +import { IRemoveDialogRequestData } from "../../eft/dialog/IRemoveDialogRequestData"; +import { IGetMailDialogListRequestData } from "../../eft/dialog/IGetMailDialogListRequestData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IFriendRequestData } from "../../eft/dialog/IFriendRequestData"; +import { IPinDialogRequestData } from "../../eft/dialog/IPinDialogRequestData"; +import { ISetDialogReadRequestData } from "../../eft/dialog/ISetDialogReadRequestData"; +import { IGetAllAttachmentsRequestData } from "../../eft/dialog/IGetAllAttachmentsRequestData"; +import { IGetChatServerListRequestData } from "../../eft/dialog/IGetChatServerListRequestData"; +import { IGetFriendListDataResponse } from "../../eft/dialog/IGetFriendListDataResponse"; +import { ISendMessageRequest } from "../../eft/dialog/ISendMessageRequest"; +import { IGetMailDialogViewResponseData } from "../../eft/dialog/IGetMailDialogViewResponseData"; +import { IGetAllAttachmentsResponse } from "../../eft/dialog/IGetAllAttachmentsResponse"; +import { DialogueInfo } from "../../eft/profile/IAkiProfile"; +export interface IDialogueCallbacks { + getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData; + getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData; + removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData; + pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData; + unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData; + setRead(url: string, info: ISetDialogReadRequestData, sessionID: string): IGetBodyResponseData; + getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData; + listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + friendRequest(url: string, request: IFriendRequestData, sessionID: string): INullResponseData; + sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData; + update(): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IGameCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IGameCallbacks.d.ts new file mode 100644 index 0000000..38ebc5f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IGameCallbacks.d.ts @@ -0,0 +1,16 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGameEmptyCrcRequestData } from "../../eft/game/IGameEmptyCrcRequestData"; +import { IVersionValidateRequestData } from "../../eft/game/IVersionValidateRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../../eft/httpResponse/INullResponseData"; +import { IGameConfigResponse } from "../../eft/game/IGameConfigResponse"; +export interface IGameCallbacks { + versionValidate(url: string, info: IVersionValidateRequestData, sessionID: string): INullResponseData; + gameStart(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + gameLogout(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getGameConfig(url: string, info: IGameEmptyCrcRequestData, sessionID: string): IGetBodyResponseData; + getServer(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + validateGameVersion(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + gameKeepalive(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getVersion(url: string, info: IEmptyRequestData, sessionID: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IHandbookCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IHandbookCallbacks.d.ts new file mode 100644 index 0000000..5857a3e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IHandbookCallbacks.d.ts @@ -0,0 +1,3 @@ +export interface IHandbookCallbacks { + load(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IHealthCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IHealthCallbacks.d.ts new file mode 100644 index 0000000..d238c7a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IHealthCallbacks.d.ts @@ -0,0 +1,13 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IAkiProfile } from "../../eft/profile/IAkiProfile"; +import { ISyncHealthRequestData } from "../../eft/health/ISyncHealthRequestData"; +import { IOffraidEatRequestData } from "../../eft/health/IOffraidEatRequestData"; +import { IOffraidHealRequestData } from "../../eft/health/IOffraidHealRequestData"; +import { IHealthTreatmentRequestData } from "../../eft/health/IHealthTreatmentRequestData"; +export interface IHealthCallbacks { + onLoad(sessionID: string): IAkiProfile; + syncHealth(url: string, info: ISyncHealthRequestData, sessionID: string): any; + offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): any; + offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): any; + healthTreatment(pmcData: IPmcData, info: IHealthTreatmentRequestData, sessionID: string): any; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IHideoutCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IHideoutCallbacks.d.ts new file mode 100644 index 0000000..ad2af48 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IHideoutCallbacks.d.ts @@ -0,0 +1,23 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IHideoutUpgradeRequestData } from "../../eft/hideout/IHideoutUpgradeRequestData"; +import { IHideoutUpgradeCompleteRequestData } from "../../eft/hideout/IHideoutUpgradeCompleteRequestData"; +import { IHideoutScavCaseStartRequestData } from "../../eft/hideout/IHideoutScavCaseStartRequestData"; +import { IHideoutPutItemInRequestData } from "../../eft/hideout/IHideoutPutItemInRequestData"; +import { IHideoutTakeItemOutRequestData } from "../../eft/hideout/IHideoutTakeItemOutRequestData"; +import { IHideoutToggleAreaRequestData } from "../../eft/hideout/IHideoutToggleAreaRequestData"; +import { IHideoutSingleProductionStartRequestData } from "../../eft/hideout/IHideoutSingleProductionStartRequestData"; +import { IHideoutContinuousProductionStartRequestData } from "../../eft/hideout/IHideoutContinuousProductionStartRequestData"; +import { IHideoutTakeProductionRequestData } from "../../eft/hideout/IHideoutTakeProductionRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface IHideoutCallbacks { + 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: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse; + takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse; + update(timeSinceLastRun: number): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IHttpCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IHttpCallbacks.d.ts new file mode 100644 index 0000000..3ecd945 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IHttpCallbacks.d.ts @@ -0,0 +1,5 @@ +export interface IHttpCallbacks { + load(): void; + sendImage(sessionID: string, req: any, resp: any, body: any): void; + getImage(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IInraidCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IInraidCallbacks.d.ts new file mode 100644 index 0000000..e959b98 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IInraidCallbacks.d.ts @@ -0,0 +1,14 @@ +import { INullResponseData } from "../../eft/httpResponse/INullResponseData"; +import { IAkiProfile } from "../../eft/profile/IAkiProfile"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IRegisterPlayerRequestData } from "../../eft/inRaid/IRegisterPlayerRequestData"; +import { ISaveProgressRequestData } from "../../eft/inRaid/ISaveProgressRequestData"; +export interface IInraidCallbacks { + onLoad(sessionID: string): IAkiProfile; + 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; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IInsuranceCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IInsuranceCallbacks.d.ts new file mode 100644 index 0000000..082112d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IInsuranceCallbacks.d.ts @@ -0,0 +1,10 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IAkiProfile } from "../../eft/profile/IAkiProfile"; +import { IGetInsuranceCostRequestData } from "../../eft/insurance/IGetInsuranceCostRequestData"; +import { IInsureRequestData } from "../../eft/insurance/IInsureRequestData"; +export interface IInsuranceCallbacks { + onLoad(sessionID: string): IAkiProfile; + getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): any; + insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): any; + update(secondsSinceLastRun: number): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IInventoryCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IInventoryCallbacks.d.ts new file mode 100644 index 0000000..e53f7d0 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IInventoryCallbacks.d.ts @@ -0,0 +1,36 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IInventoryFoldRequestData } from "../../eft/inventory/IInventoryFoldRequestData"; +import { IInventorySplitRequestData } from "../../eft/inventory/IInventorySplitRequestData"; +import { IInventoryMoveRequestData } from "../../eft/inventory/IInventoryMoveRequestData"; +import { IInventoryMergeRequestData } from "../../eft/inventory/IInventoryMergeRequestData"; +import { IInventoryRemoveRequestData } from "../../eft/inventory/IInventoryRemoveRequestData"; +import { IInventoryTransferRequestData } from "../../eft/inventory/IInventoryTransferRequestData"; +import { IInventorySwapRequestData } from "../../eft/inventory/IInventorySwapRequestData"; +import { IInventoryToggleRequestData } from "../../eft/inventory/IInventoryToggleRequestData"; +import { IInventoryTagRequestData } from "../../eft/inventory/IInventoryTagRequestData"; +import { IInventoryBindRequestData } from "../../eft/inventory/IInventoryBindRequestData"; +import { IInventoryExamineRequestData } from "../../eft/inventory/IInventoryExamineRequestData"; +import { IInventoryReadEncyclopediaRequestData } from "../../eft/inventory/IInventoryReadEncyclopediaRequestData"; +import { IInventorySortRequestData } from "../../eft/inventory/IInventorySortRequestData"; +import { IInventoryCreateMarkerRequestData } from "../../eft/inventory/IInventoryCreateMarkerRequestData"; +import { IInventoryDeleteMarkerRequestData } from "../../eft/inventory/IInventoryDeleteMarkerRequestData"; +import { IInventoryEditMarkerRequestData } from "../../eft/inventory/IInventoryEditMarkerRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface IInventoryCallbacks { + 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; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IItemEventCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IItemEventCallbacks.d.ts new file mode 100644 index 0000000..59db771 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IItemEventCallbacks.d.ts @@ -0,0 +1,6 @@ +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { IItemEventRouterRequest } from "../../eft/itemEvent/IItemEventRouterRequest"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface IItemEventCallbacks { + handleEvents(url: string, info: IItemEventRouterRequest, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ILauncherCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ILauncherCallbacks.d.ts new file mode 100644 index 0000000..52dfec6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ILauncherCallbacks.d.ts @@ -0,0 +1,20 @@ +import { IRegisterData } from "../../eft/launcher/IRegisterData"; +import { IRemoveProfileData } from "../../eft/launcher/IRemoveProfileData"; +import { ILoginRequestData } from "../../eft/launcher/ILoginRequestData"; +import { IChangeRequestData } from "../../eft/launcher/IChangeRequestData"; +import { IGetMiniProfileRequestData } from "../../eft/launcher/IGetMiniProfileRequestData.js"; +export interface ILauncherCallbacks { + 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"; + getMiniProfile(url: string, info: IGetMiniProfileRequestData, sessionID: string): string; + getAllMiniProfiles(url: string, info: any, sessionID: string): string; + getServerVersion(): string; + ping(url: string, info: any, sessionID: string): string; + removeProfile(url: string, info: IRemoveProfileData, sessionID: string): string; + getCompatibleTarkovVersion(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ILocationCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ILocationCallbacks.d.ts new file mode 100644 index 0000000..71656a4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ILocationCallbacks.d.ts @@ -0,0 +1,8 @@ +import { IGetLocationRequestData } from "../../eft/location/IGetLocationRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { ILocationsGenerateAllResponse } from "../../eft/common/ILocationsSourceDestinationBase"; +import { ILocationBase } from "../../eft/common/ILocationBase"; +export interface ILocationCallbacks { + getLocationData(url: string, info: any, sessionID: string): IGetBodyResponseData; + getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IModCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IModCallbacks.d.ts new file mode 100644 index 0000000..1a4cd7b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IModCallbacks.d.ts @@ -0,0 +1,6 @@ +export interface IModCallbacks { + load(): void; + 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; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/INoteCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/INoteCallbacks.d.ts new file mode 100644 index 0000000..8453a4f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/INoteCallbacks.d.ts @@ -0,0 +1,8 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { INoteActionData } from "../../eft/notes/INoteActionData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface INoteCallbacks { + addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; + deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/INotifierCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/INotifierCallbacks.d.ts new file mode 100644 index 0000000..a211310 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/INotifierCallbacks.d.ts @@ -0,0 +1,17 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { INotifierChannel } from "../../eft/notifier/INotifier"; +import { ISelectProfileRequestData } from "../../eft/notifier/ISelectProfileRequestData"; +export interface INotifierCallbacks { + /** + * 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; + createNotifierChannel(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + selectProfile(url: string, info: ISelectProfileRequestData, sessionID: string): IGetBodyResponseData; + notify(url: string, info: any, sessionID: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IPresetBuildCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IPresetBuildCallbacks.d.ts new file mode 100644 index 0000000..97c6487 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IPresetBuildCallbacks.d.ts @@ -0,0 +1,10 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IPresetBuildActionRequestData } from "../../eft/presetBuild/IPresetBuildActionRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { WeaponBuild } from "../../eft/profile/IAkiProfile"; +export interface IPresetBuildCallbacks { + getHandbookUserlist(url: string, info: any, sessionID: string): IGetBodyResponseData; + saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; + removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IPresetCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IPresetCallbacks.d.ts new file mode 100644 index 0000000..4169857 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IPresetCallbacks.d.ts @@ -0,0 +1,3 @@ +export interface IPresetCallbacks { + load(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IProfileCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IProfileCallbacks.d.ts new file mode 100644 index 0000000..9d4d2df --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IProfileCallbacks.d.ts @@ -0,0 +1,21 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../../eft/httpResponse/INullResponseData"; +import { IProfileChangeNicknameRequestData } from "../../eft/profile/IProfileChangeNicknameRequestData"; +import { IProfileChangeVoiceRequestData } from "../../eft/profile/IProfileChangeVoiceRequestData"; +import { IProfileCreateRequestData } from "../../eft/profile/IProfileCreateRequestData"; +import { IValidateNicknameRequestData } from "../../eft/profile/IValidateNicknameRequestData"; +import { ISearchFriendRequestData } from "../../eft/profile/ISearchFriendRequestData"; +import { ISearchFriendResponse } from "../../eft/profile/ISearchFriendResponse"; +export interface IProfileCallbacks { + onLoad(sessionID: string): any; + createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData; + getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData; + changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData; + validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData; + getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getProfileStatus(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + searchFriend(url: string, info: ISearchFriendRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IQuestCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IQuestCallbacks.d.ts new file mode 100644 index 0000000..1c4d0c3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IQuestCallbacks.d.ts @@ -0,0 +1,19 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IAcceptQuestRequestData } from "../../eft/quests/IAcceptQuestRequestData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { IListQuestsRequestData } from "../../eft/quests/IListQuestsRequestData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { ICompleteQuestRequestData } from "../../eft/quests/ICompleteQuestRequestData"; +import { IHandoverQuestRequestData } from "../../eft/quests/IHandoverQuestRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IQuest } from "../../eft/common/tables/IQuest"; +import { IPmcDataRepeatableQuest } from "../../eft/common/tables/IRepeatableQuests"; +import { IRepeatableQuestChangeRequest } from "../../eft/quests/IRepeatableQuestChangeRequest"; +export interface IQuestCallbacks { + 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; + activityPeriods(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IRagfairCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IRagfairCallbacks.d.ts new file mode 100644 index 0000000..9282bd4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IRagfairCallbacks.d.ts @@ -0,0 +1,21 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { ISearchRequestData } from "../../eft/ragfair/ISearchRequestData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IGetMarketPriceRequestData } from "../../eft/ragfair/IGetMarketPriceRequestData"; +import { IAddOfferRequestData } from "../../eft/ragfair/IAddOfferRequestData"; +import { IRemoveOfferRequestData } from "../../eft/ragfair/IRemoveOfferRequestData"; +import { IExtendOfferRequestData } from "../../eft/ragfair/IExtendOfferRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IGetItemPriceResult } from "../../eft/ragfair/IGetItemPriceResult"; +export interface IRagfairCallbacks { + load(): void; + search(url: string, info: ISearchRequestData, sessionID: string): IGetBodyResponseData; + getMarketPrice(url: string, info: IGetMarketPriceRequestData, sessionID: string): IGetBodyResponseData; + getItemPrices(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + addOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse; + removeOffer(pmcData: IPmcData, info: IRemoveOfferRequestData, sessionID: string): IItemEventRouterResponse; + extendOffer(pmcData: IPmcData, info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse; + update(timeSinceLastRun: number): boolean; + updatePlayer(timeSinceLastRun: number): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IRepairCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IRepairCallbacks.d.ts new file mode 100644 index 0000000..e8183c9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IRepairCallbacks.d.ts @@ -0,0 +1,8 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IRepairActionDataRequest } from "../../eft/repair/IRepairActionDataRequest"; +import { ITraderRepairActionDataRequest } from "../../eft/repair/ITraderRepairActionDataRequest"; +export interface IRepairCallbacks { + traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; + repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ISaveCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ISaveCallbacks.d.ts new file mode 100644 index 0000000..1ad3b82 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ISaveCallbacks.d.ts @@ -0,0 +1,4 @@ +export interface ISaveCallbacks { + load(): void; + update(secondsSinceLastRun: number): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ITradeCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ITradeCallbacks.d.ts new file mode 100644 index 0000000..2f41d54 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ITradeCallbacks.d.ts @@ -0,0 +1,8 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IProcessRagfairTradeRequestData } from "../../eft/trade/IProcessRagfairTradeRequestData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBaseTradeRequestData } from "../../eft/trade/IProcessBaseTradeRequestData"; +export interface ITradeCallbacks { + processTrade(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse; + processRagfairTrade(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ITraderCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ITraderCallbacks.d.ts new file mode 100644 index 0000000..e0d7d06 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/ITraderCallbacks.d.ts @@ -0,0 +1,11 @@ +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +import { IBarterScheme, ITraderAssort, ITraderBase } from "../../eft/common/tables/ITrader"; +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +export interface ITraderCallbacks { + load(): void; + getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; + getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + update(): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IWeatherCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IWeatherCallbacks.d.ts new file mode 100644 index 0000000..9ac72ae --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IWeatherCallbacks.d.ts @@ -0,0 +1,5 @@ +import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; +import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; +export interface IWeatherCallbacks { + getWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IWishlistCallbacks.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IWishlistCallbacks.d.ts new file mode 100644 index 0000000..e5d519c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/callbacks/IWishlistCallbacks.d.ts @@ -0,0 +1,7 @@ +import { IPmcData } from "../../eft/common/IPmcData"; +import { IWishlistActionData } from "../../eft/wishlist/IWishlistActionData"; +import { IItemEventRouterResponse } from "../../eft/itemEvent/IItemEventRouterResponse"; +export interface IWishlistCallbacks { + addToWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; + removeFromWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IAirdropConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IAirdropConfig.d.ts new file mode 100644 index 0000000..627b603 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IAirdropConfig.d.ts @@ -0,0 +1,33 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IAirdropConfig extends IBaseConfig { + kind: "aki-airdrop"; + airdropChancePercent: AirdropChancePercent; + planeMinFlyHeight: number; + planeMaxFlyHeight: number; + planeVolume: number; + planeSpeed: number; + crateFallSpeed: number; + airdropMinStartTimeSeconds: number; + airdropMaxStartTimeSeconds: number; + loot: AirdropLoot; +} +export interface AirdropChancePercent { + bigmap: number; + woods: number; + lighthouse: number; + shoreline: number; + interchange: number; + reserve: number; + tarkovStreets: number; +} +export interface AirdropLoot { + presetCount: MinMax; + itemCount: MinMax; + itemBlacklist: string[]; + itemTypeWhitelist: string[]; + /** key: item base type: value: max count */ + itemLimits: Record; + itemStackLimits: Record; + armorLevelWhitelist: number[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IBaseConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IBaseConfig.d.ts new file mode 100644 index 0000000..8b6ba88 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IBaseConfig.d.ts @@ -0,0 +1,3 @@ +export interface IBaseConfig { + kind: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IBotConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IBotConfig.d.ts new file mode 100644 index 0000000..fcbc179 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IBotConfig.d.ts @@ -0,0 +1,110 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +import { IBotDurability } from "./IBotDurability"; +import { IPmcConfig } from "./IPmcConfig"; +export interface IBotConfig extends IBaseConfig { + kind: "aki-bot"; + /** How many variants of each bot should be generated on raid start */ + presetBatch: PresetBatch; + /** What bot types should be classified as bosses */ + bosses: string[]; + /** Control weapon/armor durability min/max values for each bot type */ + durability: IBotDurability; + /** Control the weighting of how expensive an average loot item is on a PMC or Scav */ + lootNValue: LootNvalue; + /** Control what bots are added to a bots revenge list key: bottype, value: bottypes to revenge on seeing their death */ + revenge: Record; + /** PMC bot specific config settings */ + pmc: IPmcConfig; + /** Control how many items are allowed to spawn on a bot + * key: bottype, value: */ + itemSpawnLimits: Record>; + /** Blacklist/whitelist items on a bot */ + equipment: Record; + /** Show a bots botType value after their name */ + showTypeInNickname: boolean; + /** Max number of bots that can be spawned in a raid at any one time */ + maxBotCap: Record; + chanceAssaultScavHasPlayerScavName: number; + /** How many stacks of secret ammo should a bot have in its bot secure container */ + secureContainerAmmoStackCount: number; + /** Batch generation size when type not available in cache */ + botGenerationBatchSizePerType: number; +} +export interface PresetBatch { + assault: number; + bossBully: number; + bossGluhar: number; + bossKilla: number; + bossKojaniy: number; + bossSanitar: number; + bossTagilla: number; + bossKnight: number; + bossTest: number; + cursedAssault: number; + followerBully: number; + followerGluharAssault: number; + followerGluharScout: number; + followerGluharSecurity: number; + followerGluharSnipe: number; + followerKojaniy: number; + followerSanitar: number; + followerTagilla: number; + followerBirdEye: number; + followerBigPipe: number; + followerTest: number; + marksman: number; + pmcBot: number; + sectantPriest: number; + sectantWarrior: number; + gifter: number; + test: number; + exUsec: number; +} +export interface LootNvalue { + scav: number; + pmc: number; +} +export interface EquipmentFilters { + weaponModLimits: ModLimits; + weaponSightWhitelist: Record; + faceShieldIsActiveChancePercent?: number; + lightLaserIsActiveChancePercent?: number; + nvgIsActiveChancePercent?: number; + randomisation: RandomisationDetails[]; + blacklist: EquipmentFilterDetails[]; + whitelist: EquipmentFilterDetails[]; + clothing: WeightingAdjustmentDetails[]; + weightingAdjustments: WeightingAdjustmentDetails[]; +} +export interface ModLimits { + /** How many scopes are allowed on a weapon - hard coded to work with OPTIC_SCOPE, ASSAULT_SCOPE, COLLIMATOR, COMPACT_COLLIMATOR */ + scopeLimit?: number; + /** How many lasers or lights are allowed on a weapon - hard coded to work with TACTICAL_COMBO, and FLASHLIGHT */ + lightLaserLimit?: number; +} +export interface RandomisationDetails { + levelRange: MinMax; + generation?: Record; + randomisedWeaponModSlots?: string[]; + randomisedArmorSlots?: string[]; + /** Equipment chances */ + equipment?: Record; + /** Modc chances */ + mods?: Record; +} +export interface EquipmentFilterDetails { + levelRange: MinMax; + equipment: Record; + cartridge: Record; +} +export interface WeightingAdjustmentDetails { + levelRange: MinMax; + ammo?: AdjustmentDetails; + equipment?: AdjustmentDetails; + clothing?: AdjustmentDetails; +} +export interface AdjustmentDetails { + add: Record>; + edit: Record>; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IBotDurability.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IBotDurability.d.ts new file mode 100644 index 0000000..a4ff53c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IBotDurability.d.ts @@ -0,0 +1,45 @@ +export interface IBotDurability { + default: DefaultDurability; + pmc: PmcDurability; + boss: BotDurability; + follower: BotDurability; + assault: BotDurability; + cursedassault: BotDurability; + marksman: BotDurability; + pmcbot: BotDurability; + exusec: BotDurability; + gifter: BotDurability; + sectantpriest: BotDurability; + sectantwarrior: BotDurability; +} +/** Durability values to be used when a more specific bot type cant be found */ +export interface DefaultDurability { + armor: ArmorDurability; + weapon: WeaponDurability; +} +export interface PmcDurability { + armor: PmcDurabilityArmor; + weapon: WeaponDurability; +} +export interface PmcDurabilityArmor { + lowestMaxPercent: number; + highestMaxPercent: number; + maxDelta: number; + minDelta: number; +} +export interface BotDurability { + armor: ArmorDurability; + weapon: WeaponDurability; +} +export interface ArmorDurability { + maxDelta: number; + minDelta: number; + minLimitPercent: number; +} +export interface WeaponDurability { + lowestMax: number; + highestMax: number; + maxDelta: number; + minDelta: number; + minLimitPercent: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ICoreConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ICoreConfig.d.ts new file mode 100644 index 0000000..b2819a4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ICoreConfig.d.ts @@ -0,0 +1,8 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface ICoreConfig extends IBaseConfig { + kind: "aki-core"; + akiVersion: string; + projectName: string; + compatibleTarkovVersion: string; + commit: string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IHealthConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IHealthConfig.d.ts new file mode 100644 index 0000000..fdbf656 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IHealthConfig.d.ts @@ -0,0 +1,14 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IHealthConfig extends IBaseConfig { + kind: "aki-health"; + healthMultipliers: HealthMultipliers; + save: Save; +} +export interface HealthMultipliers { + death: number; + blacked: number; +} +export interface Save { + health: boolean; + effects: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IHideoutConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IHideoutConfig.d.ts new file mode 100644 index 0000000..0785f1e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IHideoutConfig.d.ts @@ -0,0 +1,7 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IHideoutConfig extends IBaseConfig { + kind: "aki-hideout"; + runIntervalSeconds: number; + hoursForSkillCrafting: number; + hideoutWallAppearTimeSeconds: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IHttpConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IHttpConfig.d.ts new file mode 100644 index 0000000..3fe4787 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IHttpConfig.d.ts @@ -0,0 +1,7 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IHttpConfig extends IBaseConfig { + webSocketPingDelayMs: number; + kind: "aki-http"; + ip: string; + port: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IInRaidConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IInRaidConfig.d.ts new file mode 100644 index 0000000..3ae2972 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IInRaidConfig.d.ts @@ -0,0 +1,22 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IInRaidConfig extends IBaseConfig { + kind: "aki-inraid"; + MIAOnRaidEnd: boolean; + raidMenuSettings: RaidMenuSettings; + save: Save; + carExtracts: string[]; + carExtractBaseStandingGain: number; + scavExtractGain: number; +} +export interface RaidMenuSettings { + aiAmount: string; + aiDifficulty: string; + bossEnabled: boolean; + scavWars: boolean; + taggedAndCursed: boolean; + enablePve: boolean; +} +export interface Save { + loot: boolean; + durability: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IInsuranceConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IInsuranceConfig.d.ts new file mode 100644 index 0000000..fd498bc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IInsuranceConfig.d.ts @@ -0,0 +1,10 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IInsuranceConfig extends IBaseConfig { + kind: "aki-insurance"; + insuranceMultiplier: Record; + returnChancePercent: Record; + blacklistedEquipment: string[]; + slotIdsWithChanceOfNotReturning: string[]; + returnTimeOverrideSeconds: number; + runIntervalSeconds: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IInventoryConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IInventoryConfig.d.ts new file mode 100644 index 0000000..4642b9b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IInventoryConfig.d.ts @@ -0,0 +1,11 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IInventoryConfig extends IBaseConfig { + kind: "aki-inventory"; + newItemsMarkedFound: boolean; + randomLootContainers: Record; +} +export interface RewardDetails { + rewardCount: number; + foundInRaid: boolean; + rewardTplPool: Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IItemConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IItemConfig.d.ts new file mode 100644 index 0000000..5ecccc2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IItemConfig.d.ts @@ -0,0 +1,5 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IItemConfig extends IBaseConfig { + kind: "aki-item"; + blacklist: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ILocaleConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ILocaleConfig.d.ts new file mode 100644 index 0000000..0a8955c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ILocaleConfig.d.ts @@ -0,0 +1,10 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface ILocaleConfig extends IBaseConfig { + kind: "aki-locale"; + /** e.g. ru/en/cn/fr etc, or 'system', will take computer locale setting */ + gameLocale: string; + /** e.g. ru/en/cn/fr etc, or 'system', will take computer locale setting */ + serverLocale: string; + /** Languages server can be translated into */ + serverSupportedLocales: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ILocationConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ILocationConfig.d.ts new file mode 100644 index 0000000..f808ad8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ILocationConfig.d.ts @@ -0,0 +1,37 @@ +import { BossLocationSpawn, Wave } from "../../../models/eft/common/ILocationBase"; +import { IBaseConfig } from "./IBaseConfig"; +export interface ILocationConfig extends IBaseConfig { + kind: "aki-location"; + fixEmptyBotWaves: boolean; + fixRoguesTakingAllSpawnsOnLighthouse: boolean; + lighthouseRogueSpawnTimeSeconds: number; + looseLootMultiplier: LootMultiplier; + staticLootMultiplier: LootMultiplier; + customWaves: CustomWaves; + /** Open zones to add to map */ + openZones: Record; + /** Key = map id, value = item tpls that should only have one forced loot spawn position */ + forcedLootSingleSpawnById: Record; +} +export interface CustomWaves { + boss: Record; + normal: Record; +} +export interface LootMultiplier { + bigmap: number; + develop: number; + factory4_day: number; + factory4_night: number; + interchange: number; + laboratory: number; + rezervbase: number; + shoreline: number; + woods: number; + hideout: number; + lighthouse: number; + privatearea: number; + suburbs: number; + tarkovstreets: number; + terminal: number; + town: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IMatchConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IMatchConfig.d.ts new file mode 100644 index 0000000..92c4d77 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IMatchConfig.d.ts @@ -0,0 +1,5 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface IMatchConfig extends IBaseConfig { + kind: "aki-match"; + enabled: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IPlayerScavConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IPlayerScavConfig.d.ts new file mode 100644 index 0000000..3a65e83 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IPlayerScavConfig.d.ts @@ -0,0 +1,25 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IPlayerScavConfig extends IBaseConfig { + kind: "aki-playerscav"; + karmaLevel: Record; +} +export interface KarmaLevel { + botTypeForLoot: string; + modifiers: Modifiers; + itemLimits: ItemLimits; + equipmentBlacklist: Record; + labsAccessCardChancePercent: number; +} +export interface Modifiers { + equipment: Record; + mod: Record; +} +export interface ItemLimits { + healing: MinMax; + drugs: MinMax; + stims: MinMax; + looseLoot: MinMax; + magazines: MinMax; + grenades: MinMax; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IPmcConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IPmcConfig.d.ts new file mode 100644 index 0000000..979122c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IPmcConfig.d.ts @@ -0,0 +1,29 @@ +import { MinMax } from "../../common/MinMax"; +export interface IPmcConfig { + dynamicLoot: DynamicLoot; + useDifficultyOverride: boolean; + difficulty: string; + looseWeaponInBackpackChancePercent: number; + looseWeaponInBackpackLootMinMax: MinMax; + isUsec: number; + usecType: string; + bearType: string; + chanceSameSideIsHostilePercent: number; + /** key: location, value: type for usec/bear */ + pmcType: Record>>; + maxBackpackLootTotalRub: number; + maxPocketLootTotalRub: number; + maxVestLootTotalRub: number; + convertIntoPmcChance: Record; + enemyTypes: string[]; + botRelativeLevelDeltaMax: number; +} +export interface PmcTypes { + usec: string; + bear: string; +} +export interface DynamicLoot { + whitelist: string[]; + blacklist: string[]; + moneyStackLimits: Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IQuestConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IQuestConfig.d.ts new file mode 100644 index 0000000..9adfaba --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IQuestConfig.d.ts @@ -0,0 +1,96 @@ +import { ELocationName } from "../../enums/ELocationName"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IQuestConfig extends IBaseConfig { + kind: "aki-quest"; + redeemTime: number; + questTemplateIds: IPlayerTypeQuestIds; + repeatableQuests: IRepeatableQuestConfig[]; + locationIdMap: Record; + bearOnlyQuests: string[]; + usecOnlyQuests: string[]; +} +export interface IPlayerTypeQuestIds { + pmc: IQuestTypeIds; + scav: IQuestTypeIds; +} +export interface IQuestTypeIds { + Elimination: string; + Completion: string; + Exploration: string; +} +export interface IRepeatableQuestConfig { + name: string; + side: string; + types: string[]; + resetTime: number; + numQuests: number; + minPlayerLevel: number; + rewardScaling: IRewardScaling; + locations: Record; + traderWhitelist: ITraderWhitelist[]; + questConfig: IRepeatableQuestTypesConfig; + /** Item base types to block when generating rewards */ + rewardBaseTypeBlacklist: string[]; + /** Item tplIds to ignore when generating rewards */ + rewardBlacklist: string[]; + rewardAmmoStackMinSize: number; +} +export interface IRewardScaling { + levels: number[]; + experience: number[]; + roubles: number[]; + items: number[]; + reputation: number[]; + rewardSpread: number; +} +export interface ITraderWhitelist { + traderId: string; + questTypes: string[]; +} +export interface IRepeatableQuestTypesConfig { + Exploration: IExploration; + Completion: ICompletion; + Elimination: IElimination; +} +export interface IExploration { + maxExtracts: number; + specificExits: ISpecificExits; +} +export interface ISpecificExits { + probability: number; + passageRequirementWhitelist: string[]; +} +export interface ICompletion { + minRequestedAmount: number; + maxRequestedAmount: number; + minRequestedBulletAmount: number; + maxRequestedBulletAmount: number; + useWhitelist: boolean; + useBlacklist: boolean; +} +export interface IElimination { + targets: ITarget[]; + bodyPartProb: number; + bodyParts: IBodyPart[]; + specificLocationProb: number; + distLocationBlacklist: string[]; + distProb: number; + maxDist: number; + minDist: number; + maxKills: number; + minKills: number; +} +export interface IProbabilityObject { + key: string; + relativeProbability: number; + data?: any; +} +export interface ITarget extends IProbabilityObject { + data: IBossInfo; +} +export interface IBossInfo { + isBoss: boolean; +} +export interface IBodyPart extends IProbabilityObject { + data: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IRagfairConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IRagfairConfig.d.ts new file mode 100644 index 0000000..3fa04de --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IRagfairConfig.d.ts @@ -0,0 +1,77 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IRagfairConfig extends IBaseConfig { + kind: "aki-ragfair"; + runIntervalSeconds: number; + sell: Sell; + traders: Record; + dynamic: Dynamic; +} +export interface Sell { + fees: boolean; + chance: Chance; + time: Time; + reputation: Reputation; + simulatedSellHours: number; +} +export interface Chance { + base: number; + overpriced: number; + underpriced: number; +} +export interface Time { + base: number; + min: number; + max: number; +} +export interface Reputation { + gain: number; + loss: number; +} +export interface Dynamic { + purchasesAreFoundInRaid: boolean; + barter: Barter; + offerAdjustment: OfferAdjustment; + expiredOfferThreshold: number; + offerItemCount: MinMax; + price: MinMax; + presetPrice: MinMax; + showDefaultPresetsOnly: boolean; + endTimeSeconds: MinMax; + condition: Condition; + stackablePercent: MinMax; + nonStackableCount: MinMax; + rating: MinMax; + currencies: Record; + showAsSingleStack: string[]; + removeSeasonalItemsWhenNotInEvent: boolean; + blacklist: Blacklist; +} +export interface Barter { + enable: boolean; + chancePercent: number; + itemCountMin: number; + itemCountMax: number; + priceRangeVariancePercent: number; + minRoubleCostToBecomeBarter: number; + itemTypeBlacklist: string[]; +} +export interface OfferAdjustment { + maxPriceDifferenceBelowHandbookPercent: number; + handbookPriceMultipier: number; + priceThreshholdRub: number; +} +export interface Condition { + conditionChance: number; + min: number; + max: number; +} +export interface Blacklist { + /** + * show/hide trader items that are blacklisted by bsg + */ + traderItems: boolean; + custom: string[]; + enableBsgList: boolean; + enableQuestList: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IRepairConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IRepairConfig.d.ts new file mode 100644 index 0000000..b6db332 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IRepairConfig.d.ts @@ -0,0 +1,25 @@ +import { MinMax } from "../../../models/common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IRepairConfig extends IBaseConfig { + kind: "aki-repair"; + priceMultiplier: number; + applyRandomizeDurabilityLoss: boolean; + weaponSkillRepairGain: number; + armorKitSkillPointGainPerRepairPointMultiplier: number; + repairKit: RepairKit; +} +export interface RepairKit { + armor: BonusSettings; + weapon: BonusSettings; +} +export interface BonusSettings { + rarityWeight: Record; + bonusTypeWeight: Record; + common: Record; + rare: Record; +} +export interface BonusValues { + valuesMinMax: MinMax; + /** What dura is buff active between (min max of current max) */ + activeDurabilityPercentMinMax: MinMax; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IScavCaseConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IScavCaseConfig.d.ts new file mode 100644 index 0000000..df5dae0 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IScavCaseConfig.d.ts @@ -0,0 +1,27 @@ +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IScavCaseConfig extends IBaseConfig { + kind: "aki-scavcase"; + rewardItemValueRangeRub: Record; + moneyRewards: MoneyRewards; + ammoRewards: AmmoRewards; + rewardItemParentBlacklist: string[]; + rewardItemBlacklist: string[]; +} +export interface MoneyRewards { + moneyRewardChancePercent: number; + rubCount: MoneyLevels; + usdCount: MoneyLevels; + eurCount: MoneyLevels; +} +export interface MoneyLevels { + common: MinMax; + rare: MinMax; + superrare: MinMax; +} +export interface AmmoRewards { + ammoRewardChancePercent: number; + ammoRewardBlacklist: Record; + ammoRewardValueRangeRub: Record; + minStackSize: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ISeasonalEventConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ISeasonalEventConfig.d.ts new file mode 100644 index 0000000..cedf9a9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ISeasonalEventConfig.d.ts @@ -0,0 +1,21 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface ISeasonalEventConfig extends IBaseConfig { + kind: "aki-seasonalevents"; + enableSeasonalEventDetection: boolean; + /** event / botType / equipSlot / itemid */ + eventGear: Record>>>; + events: ISeasonalEvent[]; + gifterSettings: GifterSetting[]; +} +export interface ISeasonalEvent { + name: string; + startDay: number; + startMonth: number; + endDay: number; + endMonth: number; +} +export interface GifterSetting { + map: string; + zones: string; + spawnChance: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ITraderConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ITraderConfig.d.ts new file mode 100644 index 0000000..56c7d35 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/ITraderConfig.d.ts @@ -0,0 +1,35 @@ +import { MinMax } from "../../../models/common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface ITraderConfig extends IBaseConfig { + kind: "aki-trader"; + updateTime: UpdateTime[]; + updateTimeDefault: number; + /** What % of max durability an item needs to sell to a trader*/ + durabilityPurchaseThreshhold: Record; + traderPriceMultipler: number; + persistPurchaseDataInProfile: boolean; + fence: FenceConfig; +} +export interface UpdateTime { + traderId: string; + seconds: number; +} +export interface FenceConfig { + discountOptions: DiscountOptions; + partialRefreshTimeSeconds: number; + partialRefreshChangePercent: number; + assortSize: number; + maxPresetsPercent: number; + itemPriceMult: number; + presetPriceMult: number; + armorMaxDurabilityPercentMinMax: MinMax; + presetMaxDurabilityPercentMinMax: MinMax; + itemTypeLimits: Record; + regenerateAssortsOnRefresh: boolean; + blacklist: string[]; +} +export interface DiscountOptions { + assortSize: number; + itemPriceMult: number; + presetPriceMult: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IWeatherConfig.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IWeatherConfig.d.ts new file mode 100644 index 0000000..41a1c83 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/config/IWeatherConfig.d.ts @@ -0,0 +1,23 @@ +import { WindDirection } from "../../../models/enums/WindDirection"; +import { MinMax } from "../../common/MinMax"; +import { IBaseConfig } from "./IBaseConfig"; +export interface IWeatherConfig extends IBaseConfig { + kind: "aki-weather"; + acceleration: number; + weather: Weather; +} +export interface Weather { + clouds: MinMax; + windSpeed: WeatherSettings; + windDirection: WeatherSettings; + windGustiness: MinMax; + rain: WeatherSettings; + rainIntensity: MinMax; + fog: WeatherSettings; + temp: MinMax; + pressure: MinMax; +} +export interface WeatherSettings { + values: T[]; + weights: number[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/controllers/IBotController.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/controllers/IBotController.d.ts new file mode 100644 index 0000000..010e208 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/controllers/IBotController.d.ts @@ -0,0 +1,13 @@ +import { IGenerateBotsRequestData } from "../../eft/bot/IGenerateBotsRequestData"; +import { IBotBase } from "../../eft/common/tables/IBotBase"; +import { IBotCore } from "../../eft/common/tables/IBotCore"; +import { Difficulty } from "../../eft/common/tables/IBotType"; +export interface IBotController { + getBotLimit(type: string): number; + getBotDifficulty(type: string, difficulty: string): IBotCore | Difficulty; + isBotPmc(botRole: string): boolean; + isBotBoss(botRole: string): boolean; + isBotFollower(botRole: string): boolean; + generate(info: IGenerateBotsRequestData, playerScav: boolean): IBotBase[]; + getBotCap(): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/IBotGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/IBotGenerator.d.ts new file mode 100644 index 0000000..9043945 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/IBotGenerator.d.ts @@ -0,0 +1,10 @@ +import { Inventory as PmcInventory } from "../../eft/common/tables/IBotBase"; +import { Inventory, Chances, Generation } from "../../eft/common/tables/IBotType"; +export interface IBotGenerator { + generateInventory(templateInventory: Inventory, equipmentChances: Chances, generation: Generation, botRole: string, isPmc: boolean): PmcInventory; +} +export interface IExhaustableArray { + getRandomValue(): T; + getFirstValue(): T; + hasValues(): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/ILocationGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/ILocationGenerator.d.ts new file mode 100644 index 0000000..530ceca --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/ILocationGenerator.d.ts @@ -0,0 +1,6 @@ +import { IStaticContainerProps, IStaticLootDetails, IStaticAmmoDetails, IStaticForcedProps } from "../../eft/common/tables/ILootBase"; +import { ILooseLoot, SpawnpointTemplate } from "../../eft/common/ILooseLoot"; +export interface ILocationGenerator { + generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record, staticAmmoDist: Record, locationName: string): IStaticContainerProps; + generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record, locationName: string): SpawnpointTemplate[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/IPMCLootGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/IPMCLootGenerator.d.ts new file mode 100644 index 0000000..a9db89b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/IPMCLootGenerator.d.ts @@ -0,0 +1,4 @@ +export interface IPMCLootGenerator { + generatePMCPocketLootPool(): string[]; + generatePMCBackpackLootPool(): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/IRagfairAssortGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/IRagfairAssortGenerator.d.ts new file mode 100644 index 0000000..6670540 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/IRagfairAssortGenerator.d.ts @@ -0,0 +1,4 @@ +import { Item } from "../../eft/common/tables/IItem"; +export interface IRagfairAssortGenerator { + getAssortItems(): Item[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/IRagfairOfferGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/IRagfairOfferGenerator.d.ts new file mode 100644 index 0000000..30b4be5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/generators/IRagfairOfferGenerator.d.ts @@ -0,0 +1,6 @@ +import { IBarterScheme } from "../../eft/common/tables/ITrader"; +import { IRagfairOffer } from "../../eft/ragfair/IRagfairOffer"; +import { Item } from "../../eft/common/tables/IItem"; +export interface IRagfairOfferGenerator { + createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece: boolean): IRagfairOffer; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/hideout/ScavCaseRewardCountsAndPrices.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/hideout/ScavCaseRewardCountsAndPrices.d.ts new file mode 100644 index 0000000..1b5af39 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/hideout/ScavCaseRewardCountsAndPrices.d.ts @@ -0,0 +1,11 @@ +export interface ScavCaseRewardCountsAndPrices { + common: RewardCountAndPriceDetails; + rare: RewardCountAndPriceDetails; + superrare: RewardCountAndPriceDetails; +} +export interface RewardCountAndPriceDetails { + minCount: number; + maxCount: number; + minPriceRub: number; + maxPriceRub: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/logging/LogBackgroundColor.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/logging/LogBackgroundColor.d.ts new file mode 100644 index 0000000..1dd369b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/logging/LogBackgroundColor.d.ts @@ -0,0 +1,11 @@ +export declare enum LogBackgroundColor { + DEFAULT = "", + BLACK = "blackBG", + RED = "redBG", + GREEN = "greenBG", + YELLOW = "yellowBG", + BLUE = "blueBG", + MAGENTA = "magentaBG", + CYAN = "cyanBG", + WHITE = "whiteBG" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/logging/LogTextColor.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/logging/LogTextColor.d.ts new file mode 100644 index 0000000..6c7abf3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/logging/LogTextColor.d.ts @@ -0,0 +1,11 @@ +export declare enum LogTextColor { + BLACK = "black", + RED = "red", + GREEN = "green", + YELLOW = "yellow", + BLUE = "blue", + MAGENTA = "magenta", + CYAN = "cyan", + WHITE = "white", + GRAY = "" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/logging/SptLogger.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/logging/SptLogger.d.ts new file mode 100644 index 0000000..ea1b3d8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/logging/SptLogger.d.ts @@ -0,0 +1,7 @@ +export interface SptLogger { + error: (msg: string | Record) => void; + warn: (msg: string | Record) => void; + succ?: (msg: string | Record) => void; + info: (msg: string | Record) => void; + debug: (msg: string | Record) => void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/mod/IModLoader.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/mod/IModLoader.d.ts new file mode 100644 index 0000000..9a71f61 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/mod/IModLoader.d.ts @@ -0,0 +1,5 @@ +import { DependencyContainer } from "tsyringe"; +export interface IModLoader { + load(container: DependencyContainer): void; + getModPath(mod: string): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/mod/IPackageJsonData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/mod/IPackageJsonData.d.ts new file mode 100644 index 0000000..06f7454 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/mod/IPackageJsonData.d.ts @@ -0,0 +1,13 @@ +export interface IPackageJsonData { + incompatibilities?: string[]; + dependencies?: Record; + modDependencies?: Record; + name: string; + author: string; + version: string; + akiVersion: string; + licence: string; + main: string; + isBundleMod: boolean; + contributors: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/mod/NewItemDetails.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/mod/NewItemDetails.d.ts new file mode 100644 index 0000000..fc69a06 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/mod/NewItemDetails.d.ts @@ -0,0 +1,39 @@ +import { ITemplateItem, Props } from "../../eft/common/tables/ITemplateItem"; +export declare abstract class NewItemDetailsBase { + /** Price of the item on flea market */ + fleaPriceRoubles: number; + /** Price of the item in the handbook */ + handbookPriceRoubles: number; + /** + * A dictionary for locale settings, key = langauge (e.g. en,cn,es-mx,jp,fr) + * If a language is not included, the first item in the array will be used in its place + */ + locales: Record; +} +export declare class NewItemFromCloneDetails extends NewItemDetailsBase { + /** Id of the item to copy and use as a base */ + itemTplToClone: string; + /** Item properties that should be applied over the top of the cloned base */ + overrideProperties: Props; + /** ParentId for the new item (item type) */ + parentId: string; + /** + * the id the new item should have, leave blank to have one generated for you + * This is often known as the TplId, or TemplateId + */ + newId: string; +} +export declare class NewItemDetails extends NewItemDetailsBase { + newItem: ITemplateItem; +} +export declare class LocaleDetails { + name: string; + shortName: string; + description: string; +} +export declare class CreateItemResult { + constructor(); + success: boolean; + itemId: string; + errors: string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/ragfair/IRagfairServerPrices.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/ragfair/IRagfairServerPrices.d.ts new file mode 100644 index 0000000..c7d246a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/ragfair/IRagfairServerPrices.d.ts @@ -0,0 +1,4 @@ +export interface IRagfairServerPrices { + static: Record; + dynamic: Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/IDatabaseTables.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/IDatabaseTables.d.ts new file mode 100644 index 0000000..582d9e2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/IDatabaseTables.d.ts @@ -0,0 +1,56 @@ +import { IQteData } from "../../../models/eft/hideout/IQteData"; +import { IGlobals } from "../../eft/common/IGlobals"; +import { IBotBase } from "../../eft/common/tables/IBotBase"; +import { IBotCore } from "../../eft/common/tables/IBotCore"; +import { IBotType } from "../../eft/common/tables/IBotType"; +import { ICustomizationItem } from "../../eft/common/tables/ICustomizationItem"; +import { IHandbookBase } from "../../eft/common/tables/IHandbookBase"; +import { ILootBase } from "../../eft/common/tables/ILootBase"; +import { IMatch } from "../../eft/common/tables/IMatch"; +import { IProfileTemplates } from "../../eft/common/tables/IProfileTemplate"; +import { IQuest } from "../../eft/common/tables/IQuest"; +import { IRepeatableQuestDatabase } from "../../eft/common/tables/IRepeatableQuests"; +import { ITemplateItem } from "../../eft/common/tables/ITemplateItem"; +import { ITrader } from "../../eft/common/tables/ITrader"; +import { IHideoutArea } from "../../eft/hideout/IHideoutArea"; +import { IHideoutProduction } from "../../eft/hideout/IHideoutProduction"; +import { IHideoutScavCase } from "../../eft/hideout/IHideoutScavCase"; +import { IHideoutSettingsBase } from "../../eft/hideout/IHideoutSettingsBase"; +import { ILocaleBase } from "./ILocaleBase"; +import { ILocations } from "./ILocations"; +import { IServerBase } from "./IServerBase"; +import { ISettingsBase } from "./ISettingsBase"; +export interface IDatabaseTables { + bots?: { + types: Record; + base: IBotBase; + core: IBotCore; + }; + hideout?: { + areas: IHideoutArea[]; + production: IHideoutProduction[]; + scavcase: IHideoutScavCase[]; + settings: IHideoutSettingsBase; + qte: IQteData[]; + }; + locales?: ILocaleBase; + locations?: ILocations; + loot?: ILootBase; + match?: IMatch; + templates?: { + character: string[]; + items: Record; + quests: Record; + repeatableQuests: IRepeatableQuestDatabase; + handbook: IHandbookBase; + customization: Record; + /** The profile templates listed in the launcher on profile creation, split by account type (e.g. Standard) then side (e.g. bear/usec) */ + profiles: IProfileTemplates; + /** Flea prices of items - gathered from online flea market dump */ + prices: Record; + }; + traders?: Record; + globals?: IGlobals; + server?: IServerBase; + settings?: ISettingsBase; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/ILocaleBase.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/ILocaleBase.d.ts new file mode 100644 index 0000000..3cdaf6f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/ILocaleBase.d.ts @@ -0,0 +1,5 @@ +export interface ILocaleBase { + global: Record>; + menu: Record; + languages: Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/ILocations.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/ILocations.d.ts new file mode 100644 index 0000000..18f0262 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/ILocations.d.ts @@ -0,0 +1,26 @@ +import { ILocationBase } from "../../eft/common/ILocationBase"; +import { ILooseLoot } from "../../eft/common/ILooseLoot"; +import { ILocationsBase } from "../../eft/common/tables/ILocationsBase"; +export interface ILocations { + bigmap?: ILocationData; + develop?: ILocationData; + factory4_day?: ILocationData; + factory4_night?: ILocationData; + hideout?: ILocationData; + interchange?: ILocationData; + laboratory?: ILocationData; + lighthouse?: ILocationData; + privatearea?: ILocationData; + rezervbase?: ILocationData; + shoreline?: ILocationData; + suburbs?: ILocationData; + tarkovstreets?: ILocationData; + terminal?: ILocationData; + town?: ILocationData; + woods?: ILocationData; + base?: ILocationsBase; +} +export interface ILocationData { + base: ILocationBase; + looseLoot?: ILooseLoot; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/IServerBase.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/IServerBase.d.ts new file mode 100644 index 0000000..d033db3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/IServerBase.d.ts @@ -0,0 +1,4 @@ +export interface IServerBase { + ip: string; + port: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/ISettingsBase.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/ISettingsBase.d.ts new file mode 100644 index 0000000..2870cfb --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/server/ISettingsBase.d.ts @@ -0,0 +1,48 @@ +export interface ISettingsBase { + config: Config; +} +export interface Config { + AFKTimeoutSeconds: number; + AdditionalRandomDelaySeconds: number; + ClientSendRateLimit: number; + CriticalRetriesCount: number; + DefaultRetriesCount: number; + FirstCycleDelaySeconds: number; + FramerateLimit: FramerateLimit; + GroupStatusInterval: number; + GroupStatusButtonInterval: number; + KeepAliveInterval: number; + LobbyKeepAliveInterval: number; + Mark502and504AsNonImportant: boolean; + MemoryManagementSettings: MemoryManagementSettings; + NVidiaHighlights: boolean; + NextCycleDelaySeconds: number; + PingServerResultSendInterval: number; + PingServersInterval: number; + ReleaseProfiler: ReleaseProfiler; + RequestConfirmationTimeouts: number[]; + RequestsMadeThroughLobby: string[]; + SecondCycleDelaySeconds: number; + ShouldEstablishLobbyConnection: boolean; + TurnOffLogging: boolean; + WeaponOverlapDistanceCulling: number; + WebDiagnosticsEnabled: boolean; +} +export interface FramerateLimit { + MaxFramerateGameLimit: number; + MaxFramerateLobbyLimit: number; + MinFramerateLimit: number; +} +export interface MemoryManagementSettings { + AggressiveGC: boolean; + GigabytesRequiredToDisableGCDuringRaid: number; + HeapPreAllocationEnabled: boolean; + HeapPreAllocationMB: number; + OverrideRamCleanerSettings: boolean; + RamCleanerEnabled: boolean; +} +export interface ReleaseProfiler { + Enabled: boolean; + MaxRecords: number; + RecordTriggerValue: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/services/CustomPreset.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/services/CustomPreset.d.ts new file mode 100644 index 0000000..f07382e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/services/CustomPreset.d.ts @@ -0,0 +1,5 @@ +import { Preset } from "../../eft/common/IGlobals"; +export interface CustomPreset { + key: string; + preset: Preset; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/services/CustomTraderAssortData.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/services/CustomTraderAssortData.d.ts new file mode 100644 index 0000000..265a26a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/services/CustomTraderAssortData.d.ts @@ -0,0 +1,6 @@ +import { ITraderAssort } from "../../eft/common/tables/ITrader"; +import { Traders } from "../../enums/Traders"; +export interface CustomTraderAssortData { + traderId: Traders; + assorts: ITraderAssort; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/services/LootItem.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/services/LootItem.d.ts new file mode 100644 index 0000000..acb7606 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/services/LootItem.d.ts @@ -0,0 +1,6 @@ +export declare class LootItem { + id?: string; + tpl: string; + isPreset: boolean; + stackCount: number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/services/LootRequest.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/services/LootRequest.d.ts new file mode 100644 index 0000000..8c197ee --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/services/LootRequest.d.ts @@ -0,0 +1,11 @@ +import { MinMax } from "../../common/MinMax"; +export declare class LootRequest { + presetCount: MinMax; + itemCount: MinMax; + itemBlacklist: string[]; + itemTypeWhitelist: string[]; + /** key: item base type: value: max count */ + itemLimits: Record; + itemStackLimits: Record; + armorLevelWhitelist: number[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/utils/IAsyncQueue.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/utils/IAsyncQueue.d.ts new file mode 100644 index 0000000..2be801a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/utils/IAsyncQueue.d.ts @@ -0,0 +1,4 @@ +import { ICommand } from "./ICommand"; +export interface IAsyncQueue { + waitFor(command: ICommand): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/utils/ICommand.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/utils/ICommand.d.ts new file mode 100644 index 0000000..696bb83 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/utils/ICommand.d.ts @@ -0,0 +1,4 @@ +export interface ICommand { + uuid: string; + cmd: () => Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/utils/ILogger.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/utils/ILogger.d.ts new file mode 100644 index 0000000..2af3fac --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/utils/ILogger.d.ts @@ -0,0 +1,13 @@ +import { Daum } from "../../eft/itemEvent/IItemEventRouterRequest"; +import { LogBackgroundColor } from "../logging/LogBackgroundColor"; +import { LogTextColor } from "../logging/LogTextColor"; +export interface ILogger { + writeToLogFile(data: string | Daum): void; + log(data: string | Record | Error, color: string, backgroundColor?: string): void; + logWithColor(data: string | Record, textColor: LogTextColor, backgroundColor?: LogBackgroundColor): void; + error(data: string): void; + warning(data: string): void; + success(data: string): void; + info(data: string): void; + debug(data: string | Record, onlyShowInConsole?: boolean): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/models/spt/utils/IUuidGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/utils/IUuidGenerator.d.ts new file mode 100644 index 0000000..3870469 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/models/spt/utils/IUuidGenerator.d.ts @@ -0,0 +1,3 @@ +export interface IUUidGenerator { + generate(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/EventOutputHolder.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/EventOutputHolder.d.ts new file mode 100644 index 0000000..9a34219 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/EventOutputHolder.d.ts @@ -0,0 +1,41 @@ +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { IHideoutImprovement, Productive } from "../models/eft/common/tables/IBotBase"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { JsonUtil } from "../utils/JsonUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class EventOutputHolder { + protected jsonUtil: JsonUtil; + protected profileHelper: ProfileHelper; + protected timeUtil: TimeUtil; + /** What has client been informed of this game session */ + protected clientActiveSessionStorage: Record; + constructor(jsonUtil: JsonUtil, profileHelper: ProfileHelper, timeUtil: TimeUtil); + protected output: IItemEventRouterResponse; + getOutput(sessionID: string): IItemEventRouterResponse; + /** + * Reset the response object to a default state + * Occurs prior to event being handled by server + * @param sessionID Players id + */ + resetOutput(sessionID: string): void; + /** + * Update output object with most recent values from player profile + * @param sessionId Session id + */ + updateOutputProperties(sessionId: string): void; + /** + * Return all hideout Improvements from player profile, adjust completed Improvements' completed property to be true + * @param pmcData Player profile + * @returns dictionary of hideout improvements + */ + protected getImprovementsFromProfileAndFlagComplete(pmcData: IPmcData): Record; + /** + * Return productions from player profile except those completed crafts the client has already seen + * @param pmcData Player profile + * @returns dictionary of hideout productions + */ + protected getProductionsFromProfileAndFlagComplete(productions: Record): Record; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/HttpRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/HttpRouter.d.ts new file mode 100644 index 0000000..f75a47d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/HttpRouter.d.ts @@ -0,0 +1,16 @@ +/// +import { IncomingMessage } from "http"; +import { DynamicRouter, Router, StaticRouter } from "../di/Router"; +export declare class HttpRouter { + protected staticRouters: StaticRouter[]; + protected dynamicRoutes: DynamicRouter[]; + constructor(staticRouters: StaticRouter[], dynamicRoutes: DynamicRouter[]); + protected groupBy(list: T[], keyGetter: (t: T) => string): Map; + getResponse(req: IncomingMessage, info: any, sessionID: string): string; + protected handleRoute(url: string, info: any, sessionID: string, wrapper: ResponseWrapper, routers: Router[], dynamic: boolean): boolean; +} +declare class ResponseWrapper { + output: string; + constructor(output: string); +} +export {}; diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/ImageRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/ImageRouter.d.ts new file mode 100644 index 0000000..675441c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/ImageRouter.d.ts @@ -0,0 +1,14 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { ImageRouteService } from "../services/mod/image/ImageRouteService"; +import { HttpFileUtil } from "../utils/HttpFileUtil"; +import { VFS } from "../utils/VFS"; +export declare class ImageRouter { + protected vfs: VFS; + protected imageRouteService: ImageRouteService; + protected httpFileUtil: HttpFileUtil; + constructor(vfs: VFS, imageRouteService: ImageRouteService, httpFileUtil: HttpFileUtil); + addRoute(key: string, valueToAdd: string): void; + sendImage(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void; + getImage(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/ItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/ItemEventRouter.d.ts new file mode 100644 index 0000000..9c7f70e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/ItemEventRouter.d.ts @@ -0,0 +1,22 @@ +import { ItemEventRouterDefinition } from "../di/Router"; +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { IItemEventRouterRequest } from "../models/eft/itemEvent/IItemEventRouterRequest"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { EventOutputHolder } from "./EventOutputHolder"; +export declare class ItemEventRouter { + protected logger: ILogger; + protected profileHelper: ProfileHelper; + protected itemEventRouters: ItemEventRouterDefinition[]; + protected localisationService: LocalisationService; + protected eventOutputHolder: EventOutputHolder; + constructor(logger: ILogger, profileHelper: ProfileHelper, itemEventRouters: ItemEventRouterDefinition[], localisationService: LocalisationService, eventOutputHolder: EventOutputHolder); + /** + * + * @param info Event request + * @param sessionID Session id + * @returns Item response + */ + handleEvents(info: IItemEventRouterRequest, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/BotDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/BotDynamicRouter.d.ts new file mode 100644 index 0000000..6d0ab4b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/BotDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { BotCallbacks } from "../../callbacks/BotCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class BotDynamicRouter extends DynamicRouter { + protected botCallbacks: BotCallbacks; + constructor(botCallbacks: BotCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/BundleDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/BundleDynamicRouter.d.ts new file mode 100644 index 0000000..a765410 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/BundleDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { BundleCallbacks } from "../../callbacks/BundleCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class BundleDynamicRouter extends DynamicRouter { + protected bundleCallbacks: BundleCallbacks; + constructor(bundleCallbacks: BundleCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/CustomizationDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/CustomizationDynamicRouter.d.ts new file mode 100644 index 0000000..2db7cc5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/CustomizationDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { CustomizationCallbacks } from "../../callbacks/CustomizationCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class CustomizationDynamicRouter extends DynamicRouter { + protected customizationCallbacks: CustomizationCallbacks; + constructor(customizationCallbacks: CustomizationCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/DataDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/DataDynamicRouter.d.ts new file mode 100644 index 0000000..836ed8d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/DataDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { DataCallbacks } from "../../callbacks/DataCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class DataDynamicRouter extends DynamicRouter { + protected dataCallbacks: DataCallbacks; + constructor(dataCallbacks: DataCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/HttpDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/HttpDynamicRouter.d.ts new file mode 100644 index 0000000..a152b4d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/HttpDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { DynamicRouter } from "../../di/Router"; +import { ImageRouter } from "../ImageRouter"; +export declare class HttpDynamicRouter extends DynamicRouter { + protected imageRouter: ImageRouter; + constructor(imageRouter: ImageRouter); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/InraidDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/InraidDynamicRouter.d.ts new file mode 100644 index 0000000..7c0561f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/InraidDynamicRouter.d.ts @@ -0,0 +1,7 @@ +import { InraidCallbacks } from "../../callbacks/InraidCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class InraidDynamicRouter extends DynamicRouter { + protected inraidCallbacks: InraidCallbacks; + constructor(inraidCallbacks: InraidCallbacks); + getTopLevelRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/LocationDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/LocationDynamicRouter.d.ts new file mode 100644 index 0000000..b8e5cdf --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/LocationDynamicRouter.d.ts @@ -0,0 +1,7 @@ +import { LocationCallbacks } from "../../callbacks/LocationCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class LocationDynamicRouter extends DynamicRouter { + protected locationCallbacks: LocationCallbacks; + constructor(locationCallbacks: LocationCallbacks); + getTopLevelRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/NotifierDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/NotifierDynamicRouter.d.ts new file mode 100644 index 0000000..83c60c5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/NotifierDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { NotifierCallbacks } from "../../callbacks/NotifierCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class NotifierDynamicRouter extends DynamicRouter { + protected notifierCallbacks: NotifierCallbacks; + constructor(notifierCallbacks: NotifierCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/TraderDynamicRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/TraderDynamicRouter.d.ts new file mode 100644 index 0000000..5b7cc1b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/dynamic/TraderDynamicRouter.d.ts @@ -0,0 +1,6 @@ +import { TraderCallbacks } from "../../callbacks/TraderCallbacks"; +import { DynamicRouter } from "../../di/Router"; +export declare class TraderDynamicRouter extends DynamicRouter { + protected traderCallbacks: TraderCallbacks; + constructor(traderCallbacks: TraderCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/CustomizationItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/CustomizationItemEventRouter.d.ts new file mode 100644 index 0000000..32519b1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/CustomizationItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { CustomizationCallbacks } from "../../callbacks/CustomizationCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class CustomizationItemEventRouter extends ItemEventRouterDefinition { + protected customizationCallbacks: CustomizationCallbacks; + constructor(customizationCallbacks: CustomizationCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/HealthItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/HealthItemEventRouter.d.ts new file mode 100644 index 0000000..2b2b91d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/HealthItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { HealthCallbacks } from "../../callbacks/HealthCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class HealthItemEventRouter extends ItemEventRouterDefinition { + protected healthCallbacks: HealthCallbacks; + constructor(healthCallbacks: HealthCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/HideoutItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/HideoutItemEventRouter.d.ts new file mode 100644 index 0000000..44bd1cd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/HideoutItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { HideoutCallbacks } from "../../callbacks/HideoutCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class HideoutItemEventRouter extends ItemEventRouterDefinition { + protected hideoutCallbacks: HideoutCallbacks; + constructor(hideoutCallbacks: HideoutCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/InsuranceItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/InsuranceItemEventRouter.d.ts new file mode 100644 index 0000000..3b6ae8c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/InsuranceItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { InsuranceCallbacks } from "../../callbacks/InsuranceCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class InsuranceItemEventRouter extends ItemEventRouterDefinition { + protected insuranceCallbacks: InsuranceCallbacks; + constructor(insuranceCallbacks: InsuranceCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/InventoryItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/InventoryItemEventRouter.d.ts new file mode 100644 index 0000000..d6a6ae5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/InventoryItemEventRouter.d.ts @@ -0,0 +1,12 @@ +import { HideoutCallbacks } from "../../callbacks/HideoutCallbacks"; +import { InventoryCallbacks } from "../../callbacks/InventoryCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class InventoryItemEventRouter extends ItemEventRouterDefinition { + protected inventoryCallbacks: InventoryCallbacks; + protected hideoutCallbacks: HideoutCallbacks; + constructor(inventoryCallbacks: InventoryCallbacks, hideoutCallbacks: HideoutCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/NoteItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/NoteItemEventRouter.d.ts new file mode 100644 index 0000000..71ed5d4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/NoteItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { NoteCallbacks } from "../../callbacks/NoteCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class NoteItemEventRouter extends ItemEventRouterDefinition { + protected noteCallbacks: NoteCallbacks; + constructor(noteCallbacks: NoteCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/PresetBuildItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/PresetBuildItemEventRouter.d.ts new file mode 100644 index 0000000..f2a7bf3 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/PresetBuildItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { PresetBuildCallbacks } from "../../callbacks/PresetBuildCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class PresetBuildItemEventRouter extends ItemEventRouterDefinition { + protected presetBuildCallbacks: PresetBuildCallbacks; + constructor(presetBuildCallbacks: PresetBuildCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/QuestItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/QuestItemEventRouter.d.ts new file mode 100644 index 0000000..a092aa6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/QuestItemEventRouter.d.ts @@ -0,0 +1,12 @@ +import { QuestCallbacks } from "../../callbacks/QuestCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +import { ILogger } from "../../models/spt/utils/ILogger"; +export declare class QuestItemEventRouter extends ItemEventRouterDefinition { + protected logger: ILogger; + protected questCallbacks: QuestCallbacks; + constructor(logger: ILogger, questCallbacks: QuestCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(eventAction: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/RagfairItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/RagfairItemEventRouter.d.ts new file mode 100644 index 0000000..986d9e7 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/RagfairItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { RagfairCallbacks } from "../../callbacks/RagfairCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class RagfairItemEventRouter extends ItemEventRouterDefinition { + protected ragfairCallbacks: RagfairCallbacks; + constructor(ragfairCallbacks: RagfairCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/RepairItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/RepairItemEventRouter.d.ts new file mode 100644 index 0000000..1c2768c --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/RepairItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { RepairCallbacks } from "../../callbacks/RepairCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class RepairItemEventRouter extends ItemEventRouterDefinition { + protected repairCallbacks: RepairCallbacks; + constructor(repairCallbacks: RepairCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/TradeItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/TradeItemEventRouter.d.ts new file mode 100644 index 0000000..5d84559 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/TradeItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { TradeCallbacks } from "../../callbacks/TradeCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class TradeItemEventRouter extends ItemEventRouterDefinition { + protected tradeCallbacks: TradeCallbacks; + constructor(tradeCallbacks: TradeCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/WishlistItemEventRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/WishlistItemEventRouter.d.ts new file mode 100644 index 0000000..9e3c2a0 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/item_events/WishlistItemEventRouter.d.ts @@ -0,0 +1,10 @@ +import { WishlistCallbacks } from "../../callbacks/WishlistCallbacks"; +import { HandledRoute, ItemEventRouterDefinition } from "../../di/Router"; +import { IPmcData } from "../../models/eft/common/IPmcData"; +import { IItemEventRouterResponse } from "../../models/eft/itemEvent/IItemEventRouterResponse"; +export declare class WishlistItemEventRouter extends ItemEventRouterDefinition { + protected wishlistCallbacks: WishlistCallbacks; + constructor(wishlistCallbacks: WishlistCallbacks); + getHandledRoutes(): HandledRoute[]; + handleItemEvent(url: string, pmcData: IPmcData, body: any, sessionID: string): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/save_load/HealthSaveLoadRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/save_load/HealthSaveLoadRouter.d.ts new file mode 100644 index 0000000..26cb07a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/save_load/HealthSaveLoadRouter.d.ts @@ -0,0 +1,7 @@ +import { HandledRoute, SaveLoadRouter } from "../../di/Router"; +import { IAkiProfile } from "../../models/eft/profile/IAkiProfile"; +export declare class HealthSaveLoadRouter extends SaveLoadRouter { + constructor(); + getHandledRoutes(): HandledRoute[]; + handleLoad(profile: IAkiProfile): IAkiProfile; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/save_load/InraidSaveLoadRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/save_load/InraidSaveLoadRouter.d.ts new file mode 100644 index 0000000..40f388e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/save_load/InraidSaveLoadRouter.d.ts @@ -0,0 +1,7 @@ +import { HandledRoute, SaveLoadRouter } from "../../di/Router"; +import { IAkiProfile } from "../../models/eft/profile/IAkiProfile"; +export declare class InraidSaveLoadRouter extends SaveLoadRouter { + constructor(); + getHandledRoutes(): HandledRoute[]; + handleLoad(profile: IAkiProfile): IAkiProfile; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/save_load/InsuranceSaveLoadRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/save_load/InsuranceSaveLoadRouter.d.ts new file mode 100644 index 0000000..22d645e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/save_load/InsuranceSaveLoadRouter.d.ts @@ -0,0 +1,7 @@ +import { HandledRoute, SaveLoadRouter } from "../../di/Router"; +import { IAkiProfile } from "../../models/eft/profile/IAkiProfile"; +export declare class InsuranceSaveLoadRouter extends SaveLoadRouter { + constructor(); + getHandledRoutes(): HandledRoute[]; + handleLoad(profile: IAkiProfile): IAkiProfile; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/save_load/ProfileSaveLoadRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/save_load/ProfileSaveLoadRouter.d.ts new file mode 100644 index 0000000..f60af15 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/save_load/ProfileSaveLoadRouter.d.ts @@ -0,0 +1,7 @@ +import { HandledRoute, SaveLoadRouter } from "../../di/Router"; +import { IAkiProfile } from "../../models/eft/profile/IAkiProfile"; +export declare class ProfileSaveLoadRouter extends SaveLoadRouter { + constructor(); + getHandledRoutes(): HandledRoute[]; + handleLoad(profile: IAkiProfile): IAkiProfile; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/serializers/BundleSerializer.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/serializers/BundleSerializer.d.ts new file mode 100644 index 0000000..ca4d8b6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/serializers/BundleSerializer.d.ts @@ -0,0 +1,14 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { Serializer } from "../../di/Serializer"; +import { BundleLoader } from "../../loaders/BundleLoader"; +import { ILogger } from "../../models/spt/utils/ILogger"; +import { HttpFileUtil } from "../../utils/HttpFileUtil"; +export declare class BundleSerializer extends Serializer { + protected logger: ILogger; + protected bundleLoader: BundleLoader; + protected httpFileUtil: HttpFileUtil; + constructor(logger: ILogger, bundleLoader: BundleLoader, httpFileUtil: HttpFileUtil); + serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void; + canHandle(route: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/serializers/ImageSerializer.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/serializers/ImageSerializer.d.ts new file mode 100644 index 0000000..5de48ff --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/serializers/ImageSerializer.d.ts @@ -0,0 +1,10 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { Serializer } from "../../di/Serializer"; +import { ImageRouter } from "../ImageRouter"; +export declare class ImageSerializer extends Serializer { + protected imageRouter: ImageRouter; + constructor(imageRouter: ImageRouter); + serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void; + canHandle(route: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/serializers/NotifySerializer.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/serializers/NotifySerializer.d.ts new file mode 100644 index 0000000..0d8cc89 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/serializers/NotifySerializer.d.ts @@ -0,0 +1,12 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { NotifierController } from "../../controllers/NotifierController"; +import { Serializer } from "../../di/Serializer"; +import { HttpServerHelper } from "../../helpers/HttpServerHelper"; +export declare class NotifySerializer extends Serializer { + protected notifierController: NotifierController; + protected httpServerHelper: HttpServerHelper; + constructor(notifierController: NotifierController, httpServerHelper: HttpServerHelper); + serialize(_sessionID: string, req: IncomingMessage, resp: ServerResponse, _: any): void; + canHandle(route: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/BotStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/BotStaticRouter.d.ts new file mode 100644 index 0000000..aeea220 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/BotStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { BotCallbacks } from "../../callbacks/BotCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class BotStaticRouter extends StaticRouter { + protected botCallbacks: BotCallbacks; + constructor(botCallbacks: BotCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/BundleStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/BundleStaticRouter.d.ts new file mode 100644 index 0000000..fb682fc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/BundleStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { BundleCallbacks } from "../../callbacks/BundleCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class BundleStaticRouter extends StaticRouter { + protected bundleCallbacks: BundleCallbacks; + constructor(bundleCallbacks: BundleCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/CustomizationStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/CustomizationStaticRouter.d.ts new file mode 100644 index 0000000..21bc4bb --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/CustomizationStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { CustomizationCallbacks } from "../../callbacks/CustomizationCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class CustomizationStaticRouter extends StaticRouter { + protected customizationCallbacks: CustomizationCallbacks; + constructor(customizationCallbacks: CustomizationCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/DataStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/DataStaticRouter.d.ts new file mode 100644 index 0000000..84ba7fd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/DataStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { DataCallbacks } from "../../callbacks/DataCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class DataStaticRouter extends StaticRouter { + protected dataCallbacks: DataCallbacks; + constructor(dataCallbacks: DataCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/DialogStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/DialogStaticRouter.d.ts new file mode 100644 index 0000000..546cdf1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/DialogStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { DialogueCallbacks } from "../../callbacks/DialogueCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class DialogStaticRouter extends StaticRouter { + protected dialogueCallbacks: DialogueCallbacks; + constructor(dialogueCallbacks: DialogueCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/GameStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/GameStaticRouter.d.ts new file mode 100644 index 0000000..a9a7496 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/GameStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { GameCallbacks } from "../../callbacks/GameCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class GameStaticRouter extends StaticRouter { + protected gameCallbacks: GameCallbacks; + constructor(gameCallbacks: GameCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/HealthStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/HealthStaticRouter.d.ts new file mode 100644 index 0000000..863fd5e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/HealthStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { HealthCallbacks } from "../../callbacks/HealthCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class HealthStaticRouter extends StaticRouter { + protected healthCallbacks: HealthCallbacks; + constructor(healthCallbacks: HealthCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/InraidStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/InraidStaticRouter.d.ts new file mode 100644 index 0000000..b29ad23 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/InraidStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { InraidCallbacks } from "../../callbacks/InraidCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class InraidStaticRouter extends StaticRouter { + protected inraidCallbacks: InraidCallbacks; + constructor(inraidCallbacks: InraidCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/InsuranceStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/InsuranceStaticRouter.d.ts new file mode 100644 index 0000000..5676499 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/InsuranceStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { InsuranceCallbacks } from "../../callbacks/InsuranceCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class InsuranceStaticRouter extends StaticRouter { + protected insuranceCallbacks: InsuranceCallbacks; + constructor(insuranceCallbacks: InsuranceCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/ItemEventStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/ItemEventStaticRouter.d.ts new file mode 100644 index 0000000..c30a7fc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/ItemEventStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { ItemEventCallbacks } from "../../callbacks/ItemEventCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class ItemEventStaticRouter extends StaticRouter { + protected itemEventCallbacks: ItemEventCallbacks; + constructor(itemEventCallbacks: ItemEventCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/LauncherStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/LauncherStaticRouter.d.ts new file mode 100644 index 0000000..0040cbd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/LauncherStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { LauncherCallbacks } from "../../callbacks/LauncherCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class LauncherStaticRouter extends StaticRouter { + protected launcherCallbacks: LauncherCallbacks; + constructor(launcherCallbacks: LauncherCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/LocationStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/LocationStaticRouter.d.ts new file mode 100644 index 0000000..b6de956 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/LocationStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { LocationCallbacks } from "../../callbacks/LocationCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class LocationStaticRouter extends StaticRouter { + protected locationCallbacks: LocationCallbacks; + constructor(locationCallbacks: LocationCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/MatchStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/MatchStaticRouter.d.ts new file mode 100644 index 0000000..9920a92 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/MatchStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { MatchCallbacks } from "../../callbacks/MatchCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class MatchStaticRouter extends StaticRouter { + protected matchCallbacks: MatchCallbacks; + constructor(matchCallbacks: MatchCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/NotifierStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/NotifierStaticRouter.d.ts new file mode 100644 index 0000000..8f1f5cc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/NotifierStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { NotifierCallbacks } from "../../callbacks/NotifierCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class NotifierStaticRouter extends StaticRouter { + protected notifierCallbacks: NotifierCallbacks; + constructor(notifierCallbacks: NotifierCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/PresetStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/PresetStaticRouter.d.ts new file mode 100644 index 0000000..a9e7458 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/PresetStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { PresetBuildCallbacks } from "../../callbacks/PresetBuildCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class PresetStaticRouter extends StaticRouter { + protected presetCallbacks: PresetBuildCallbacks; + constructor(presetCallbacks: PresetBuildCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/ProfileStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/ProfileStaticRouter.d.ts new file mode 100644 index 0000000..83403f2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/ProfileStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { ProfileCallbacks } from "../../callbacks/ProfileCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class ProfileStaticRouter extends StaticRouter { + protected profileCallbacks: ProfileCallbacks; + constructor(profileCallbacks: ProfileCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/QuestStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/QuestStaticRouter.d.ts new file mode 100644 index 0000000..8f7ca0a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/QuestStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { QuestCallbacks } from "../../callbacks/QuestCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class QuestStaticRouter extends StaticRouter { + protected questCallbacks: QuestCallbacks; + constructor(questCallbacks: QuestCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/RagfairStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/RagfairStaticRouter.d.ts new file mode 100644 index 0000000..6c41467 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/RagfairStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { RagfairCallbacks } from "../../callbacks/RagfairCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class RagfairStaticRouter extends StaticRouter { + protected ragfairCallbacks: RagfairCallbacks; + constructor(ragfairCallbacks: RagfairCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/TraderStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/TraderStaticRouter.d.ts new file mode 100644 index 0000000..41728a1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/TraderStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { TraderCallbacks } from "../../callbacks/TraderCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class TraderStaticRouter extends StaticRouter { + protected traderCallbacks: TraderCallbacks; + constructor(traderCallbacks: TraderCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/routers/static/WeatherStaticRouter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/WeatherStaticRouter.d.ts new file mode 100644 index 0000000..72ed851 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/routers/static/WeatherStaticRouter.d.ts @@ -0,0 +1,6 @@ +import { WeatherCallbacks } from "../../callbacks/WeatherCallbacks"; +import { StaticRouter } from "../../di/Router"; +export declare class WeatherStaticRouter extends StaticRouter { + protected weatherCallbacks: WeatherCallbacks; + constructor(weatherCallbacks: WeatherCallbacks); +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/servers/ConfigServer.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/servers/ConfigServer.d.ts new file mode 100644 index 0000000..a079be8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/servers/ConfigServer.d.ts @@ -0,0 +1,14 @@ +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigTypes } from "../models/enums/ConfigTypes"; +export declare class ConfigServer { + protected logger: ILogger; + protected vfs: VFS; + protected jsonUtil: JsonUtil; + protected configs: Record; + constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil); + getConfig(configType: ConfigTypes): T; + getConfigByString(configType: string): T; + initialize(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/servers/DatabaseServer.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/servers/DatabaseServer.d.ts new file mode 100644 index 0000000..b3d29e9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/servers/DatabaseServer.d.ts @@ -0,0 +1,6 @@ +import { IDatabaseTables } from "../models/spt/server/IDatabaseTables"; +export declare class DatabaseServer { + protected tableData: IDatabaseTables; + getTables(): IDatabaseTables; + setTables(tableData: IDatabaseTables): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/servers/HttpServer.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/servers/HttpServer.d.ts new file mode 100644 index 0000000..80c1d48 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/servers/HttpServer.d.ts @@ -0,0 +1,26 @@ +/// +import http, { IncomingMessage, ServerResponse } from "http"; +import { ApplicationContext } from "../context/ApplicationContext"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { ConfigServer } from "./ConfigServer"; +import { DatabaseServer } from "./DatabaseServer"; +import { IHttpListener } from "./http/IHttpListener"; +import { WebSocketServer } from "./WebSocketServer"; +export declare class HttpServer { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected httpServerHelper: HttpServerHelper; + protected localisationService: LocalisationService; + protected httpListeners: IHttpListener[]; + protected configServer: ConfigServer; + protected applicationContext: ApplicationContext; + protected webSocketServer: WebSocketServer; + constructor(logger: ILogger, databaseServer: DatabaseServer, httpServerHelper: HttpServerHelper, localisationService: LocalisationService, httpListeners: IHttpListener[], configServer: ConfigServer, applicationContext: ApplicationContext, webSocketServer: WebSocketServer); + protected httpConfig: IHttpConfig; + getCookies(req: http.IncomingMessage): any; + handleRequest(req: IncomingMessage, resp: ServerResponse): void; + load(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/servers/RagfairServer.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/servers/RagfairServer.d.ts new file mode 100644 index 0000000..f49654a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/servers/RagfairServer.d.ts @@ -0,0 +1,43 @@ +import { RagfairOfferGenerator } from "../generators/RagfairOfferGenerator"; +import { TraderAssortHelper } from "../helpers/TraderAssortHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { RagfairCategoriesService } from "../services/RagfairCategoriesService"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { RagfairRequiredItemsService } from "../services/RagfairRequiredItemsService"; +import { ConfigServer } from "./ConfigServer"; +export declare class RagfairServer { + protected logger: ILogger; + protected ragfairOfferGenerator: RagfairOfferGenerator; + protected ragfairOfferService: RagfairOfferService; + protected ragfairCategoriesService: RagfairCategoriesService; + protected ragfairRequiredItemsService: RagfairRequiredItemsService; + protected localisationService: LocalisationService; + protected traderHelper: TraderHelper; + protected traderAssortHelper: TraderAssortHelper; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + constructor(logger: ILogger, ragfairOfferGenerator: RagfairOfferGenerator, ragfairOfferService: RagfairOfferService, ragfairCategoriesService: RagfairCategoriesService, ragfairRequiredItemsService: RagfairRequiredItemsService, localisationService: LocalisationService, traderHelper: TraderHelper, traderAssortHelper: TraderAssortHelper, configServer: ConfigServer); + load(): Promise; + update(): Promise; + /** + * Get traders who need to be periodically refreshed + * @returns string array of traders + */ + protected getUpdateableTraders(): string[]; + getAllCategories(): Record; + getBespokeCategories(offers: IRagfairOffer[]): Record; + /** + * Disable/Hide an offer from flea + * @param offerId + */ + hideOffer(offerId: string): void; + getOffer(offerID: string): IRagfairOffer; + getOffers(): IRagfairOffer[]; + removeOfferStack(offerID: string, amount: number): void; + doesOfferExist(offerId: string): boolean; + addPlayerOffers(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/servers/SaveServer.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/servers/SaveServer.d.ts new file mode 100644 index 0000000..402befc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/servers/SaveServer.d.ts @@ -0,0 +1,84 @@ +import { SaveLoadRouter } from "../di/Router"; +import { IAkiProfile, Info } from "../models/eft/profile/IAkiProfile"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +export declare class SaveServer { + protected vfs: VFS; + protected saveLoadRouters: SaveLoadRouter[]; + protected jsonUtil: JsonUtil; + protected hashUtil: HashUtil; + protected localisationService: LocalisationService; + protected logger: ILogger; + protected profileFilepath: string; + protected profiles: {}; + protected onBeforeSaveCallbacks: {}; + protected saveMd5: {}; + constructor(vfs: VFS, saveLoadRouters: SaveLoadRouter[], jsonUtil: JsonUtil, hashUtil: HashUtil, localisationService: LocalisationService, logger: ILogger); + /** + * Add callback to occur prior to saving profile changes + * @param id Id for save callback + * @param callback Callback to execute prior to running SaveServer.saveProfile() + */ + addBeforeSaveCallback(id: string, callback: (profile: Partial) => Partial): void; + /** + * Remove a callback from being executed prior to saving profile in SaveServer.saveProfile() + * @param id Id of callback to remove + */ + removeBeforeSaveCallback(id: string): void; + /** + * Load all profiles in /user/profiles folder into memory (this.profiles) + */ + load(): void; + /** + * Save changes for each profile from memory into user/profiles json + */ + save(): void; + /** + * Get a player profile from memory + * @param sessionId Session id + * @returns IAkiProfile + */ + getProfile(sessionId: string): IAkiProfile; + /** + * Get all profiles from memory + * @returns Dictionary of IAkiProfile + */ + getProfiles(): Record; + /** + * Delete a profile by id + * @param sessionID Id of profile to remove + * @returns true when deleted, false when profile not found + */ + deleteProfileById(sessionID: string): boolean; + /** + * Create a new profile in memory with empty pmc/scav objects + * @param profileInfo Basic profile data + */ + createProfile(profileInfo: Info): void; + /** + * Add full profile in memory by key (info.id) + * @param profileDetails Profile to save + */ + addProfile(profileDetails: IAkiProfile): void; + /** + * Look up profile json in user/profiles by id and store in memory + * Execute saveLoadRouters callbacks after being loaded into memory + * @param sessionID Id of profile to store in memory + */ + loadProfile(sessionID: string): void; + /** + * Save changes from in-memory profile to user/profiles json + * Execute onBeforeSaveCallbacks callbacks prior to being saved to json + * @param sessionID profile id (user/profiles/id.json) + */ + saveProfile(sessionID: string): void; + /** + * Remove a physical profile json from user/profiles + * @param sessionID Profile id to remove + * @returns true if file no longer exists + */ + removeProfile(sessionID: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/servers/WebSocketServer.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/servers/WebSocketServer.d.ts new file mode 100644 index 0000000..5d40e6e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/servers/WebSocketServer.d.ts @@ -0,0 +1,27 @@ +/// +import http, { IncomingMessage } from "http"; +import WebSocket from "ws"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +import { INotification } from "../models/eft/notifier/INotifier"; +import { IHttpConfig } from "../models/spt/config/IHttpConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { RandomUtil } from "../utils/RandomUtil"; +import { ConfigServer } from "./ConfigServer"; +export declare class WebSocketServer { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected configServer: ConfigServer; + protected localisationService: LocalisationService; + protected httpServerHelper: HttpServerHelper; + constructor(logger: ILogger, randomUtil: RandomUtil, configServer: ConfigServer, localisationService: LocalisationService, httpServerHelper: HttpServerHelper); + protected httpConfig: IHttpConfig; + protected defaultNotification: INotification; + protected webSockets: Record; + protected websocketPingHandler: any; + setupWebSocket(httpServer: http.Server): void; + sendMessage(sessionID: string, output: INotification): void; + protected getRandomisedMessage(): string; + isConnectionWebSocket(sessionID: string): boolean; + protected wsOnConnection(ws: WebSocket.WebSocket, req: IncomingMessage): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/servers/http/AkiHttpListener.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/servers/http/AkiHttpListener.d.ts new file mode 100644 index 0000000..d02861e --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/servers/http/AkiHttpListener.d.ts @@ -0,0 +1,30 @@ +/// +/// +import { IncomingMessage, ServerResponse } from "http"; +import { Serializer } from "../../di/Serializer"; +import { ILogger } from "../../models/spt/utils/ILogger"; +import { HttpRouter } from "../../routers/HttpRouter"; +import { LocalisationService } from "../../services/LocalisationService"; +import { HttpResponseUtil } from "../../utils/HttpResponseUtil"; +import { JsonUtil } from "../../utils/JsonUtil"; +import { HttpBufferHandler } from "./HttpBufferHandler"; +import { IHttpListener } from "./IHttpListener"; +export declare class AkiHttpListener implements IHttpListener { + protected httpRouter: HttpRouter; + protected serializers: Serializer[]; + protected logger: ILogger; + protected requestsLogger: ILogger; + protected jsonUtil: JsonUtil; + protected httpResponse: HttpResponseUtil; + protected localisationService: LocalisationService; + protected httpBufferHandler: HttpBufferHandler; + constructor(httpRouter: HttpRouter, // TODO: delay required + serializers: Serializer[], logger: ILogger, requestsLogger: ILogger, jsonUtil: JsonUtil, httpResponse: HttpResponseUtil, localisationService: LocalisationService, httpBufferHandler: HttpBufferHandler); + canHandle(_: string, req: IncomingMessage): boolean; + handle(sessionId: string, req: IncomingMessage, resp: ServerResponse): void; + sendResponse(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: Buffer, output: string): void; + getResponse(sessionID: string, req: IncomingMessage, body: Buffer): string; + protected getBodyInfo(body: Buffer): any; + sendJson(resp: ServerResponse, output: string, sessionID: string): void; + sendZlibJson(resp: ServerResponse, output: string, sessionID: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/servers/http/HttpBufferHandler.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/servers/http/HttpBufferHandler.d.ts new file mode 100644 index 0000000..fec4936 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/servers/http/HttpBufferHandler.d.ts @@ -0,0 +1,6 @@ +export declare class HttpBufferHandler { + protected buffers: {}; + resetBuffer(sessionID: string): void; + putInBuffer(sessionID: any, data: any, bufLength: number): boolean; + getFromBuffer(sessionID: string): any; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/servers/http/HttpMethods.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/servers/http/HttpMethods.d.ts new file mode 100644 index 0000000..96031e2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/servers/http/HttpMethods.d.ts @@ -0,0 +1,8 @@ +export declare enum HttpMethods { + OPTIONS = "OPTIONS", + GET = "GET", + POST = "POST", + PUT = "PUT", + PATCH = "PATCH", + DELETE = "DELETE" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/servers/http/IHttpListener.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/servers/http/IHttpListener.d.ts new file mode 100644 index 0000000..758bb5a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/servers/http/IHttpListener.d.ts @@ -0,0 +1,6 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +export interface IHttpListener { + canHandle(sessionId: string, req: IncomingMessage): boolean; + handle(sessionId: string, req: IncomingMessage, resp: ServerResponse): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/BotEquipmentFilterService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/BotEquipmentFilterService.d.ts new file mode 100644 index 0000000..089cfb5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/BotEquipmentFilterService.d.ts @@ -0,0 +1,97 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { MinMax } from "../models/common/MinMax"; +import { EquipmentChances, Generation, IBotType, ModsChances } from "../models/eft/common/tables/IBotType"; +import { BotGenerationDetails } from "../models/spt/bots/BotGenerationDetails"; +import { AdjustmentDetails, EquipmentFilterDetails, EquipmentFilters, IBotConfig, WeightingAdjustmentDetails } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class BotEquipmentFilterService { + protected logger: ILogger; + protected botHelper: BotHelper; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + protected botEquipmentConfig: Record; + constructor(logger: ILogger, botHelper: BotHelper, configServer: ConfigServer); + /** + * Filter a bots data to exclude equipment and cartridges defines in the botConfig + * @param baseBotNode bots json data to filter + * @param botLevel Level of the bot + * @param botGenerationDetails details on how to generate a bot + */ + filterBotEquipment(baseBotNode: IBotType, botLevel: number, botGenerationDetails: BotGenerationDetails): void; + /** + * Iterate over the changes passed in and alter data in baseValues + * @param equipmentChanges Changes to apply + * @param baseValues Values to update + */ + protected adjustChances(equipmentChanges: Record, baseValues: EquipmentChances | ModsChances): void; + /** + * Iterate over the Generation changes and alter data in baseValues.Generation + * @param generationChanges Changes to apply + * @param baseBotGeneration dictionary to update + */ + protected adjustGenerationChances(generationChanges: Record, baseBotGeneration: Generation): void; + /** + * Get equipment settings for bot + * @param botEquipmentRole equipment role to return + * @returns EquipmentFilters object + */ + getBotEquipmentSettings(botEquipmentRole: string): EquipmentFilters; + /** + * Get weapon sight whitelist for a specific bot type + * @param botEquipmentRole equipment role of bot to look up + * @returns Dictionary of weapon type and their whitelisted scope types + */ + getBotWeaponSightWhitelist(botEquipmentRole: string): Record; + /** + * Get an object that contains equipment and cartridge blacklists for a specified bot type + * @param botRole Role of the bot we want the blacklist for + * @param playerLevel Level of the player + * @returns EquipmentBlacklistDetails object + */ + getBotEquipmentBlacklist(botRole: string, playerLevel: number): EquipmentFilterDetails; + /** + * Get the whitelist for a specific bot type that's within the players level + * @param botRole Bot type + * @param playerLevel Players level + * @returns EquipmentFilterDetails object + */ + protected getBotEquipmentWhitelist(botRole: string, playerLevel: number): EquipmentFilterDetails; + /** + * Retrieve clothing weighting adjustments from bot.json config + * @param botRole Bot type to get adjustments for + * @param playerLevel level of player + * @returns Weighting adjustments for bots clothing + */ + protected getBotClothingAdjustments(botRole: string, playerLevel: number): WeightingAdjustmentDetails; + /** + * Retrieve item weighting adjustments from bot.json config + * @param botRole Bot type to get adjustments for + * @param playerLevel level of player + * @returns Weighting adjustments for bot items + */ + protected getBotWeightingAdjustments(botRole: string, playerLevel: number): WeightingAdjustmentDetails; + /** + * Filter bot equipment based on blacklist and whitelist from config/bot.json + * Prioritizes whitelist first, if one is found blacklist is ignored + * @param baseBotNode bot .json file to update + * @param blacklist equipment blacklist + * @returns Filtered bot file + */ + protected filterEquipment(baseBotNode: IBotType, blacklist: EquipmentFilterDetails, whitelist: EquipmentFilterDetails): void; + /** + * Filter bot cartridges based on blacklist and whitelist from config/bot.json + * Prioritizes whitelist first, if one is found blacklist is ignored + * @param baseBotNode bot .json file to update + * @param blacklist equipment on this list should be excluded from the bot + * @param whitelist equipment on this list should be used exclusively + * @returns Filtered bot file + */ + protected filterCartridges(baseBotNode: IBotType, blacklist: EquipmentFilterDetails, whitelist: EquipmentFilterDetails): void; + /** + * Add/Edit weighting changes to bot items using values from config/bot.json/equipment + * @param weightingAdjustments Weighting change to apply to bot + * @param botItemPool Bot item dictionary to adjust + */ + protected adjustWeighting(weightingAdjustments: AdjustmentDetails, botItemPool: Record, showEditWarnings?: boolean): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/BotEquipmentModPoolService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/BotEquipmentModPoolService.d.ts new file mode 100644 index 0000000..adf59ff --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/BotEquipmentModPoolService.d.ts @@ -0,0 +1,65 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Mods } from "../models/eft/common/tables/IBotType"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { VFS } from "../utils/VFS"; +/** Store a mapping between weapons, their slots and the items that fit those slots */ +export declare class BotEquipmentModPoolService { + protected logger: ILogger; + protected vfs: VFS; + protected itemHelper: ItemHelper; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected botConfig: IBotConfig; + protected weaponModPool: Mods; + protected gearModPool: Mods; + protected weaponPoolGenerated: boolean; + protected armorPoolGenerated: boolean; + constructor(logger: ILogger, vfs: VFS, itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Store dictionary of mods for each item passed in + * @param items items to find related mods and store in modPool + */ + protected generatePool(items: ITemplateItem[], poolType: string): void; + /** + * Empty the mod pool + */ + resetPool(): void; + /** + * Get array of compatible mods for an items mod slot (generate pool if it doesnt exist already) + * @param itemTpl item to look up + * @param slotName slot to get compatible mods for + * @returns tpls that fit the slot + */ + getCompatibleModsForWeaponSlot(itemTpl: string, slotName: string): string[]; + /** + * Get array of compatible mods for an items mod slot (generate pool if it doesnt exist already) + * @param itemTpl item to look up + * @param slotName slot to get compatible mods for + * @returns tpls that fit the slot + */ + getCompatibleModsFoGearSlot(itemTpl: string, slotName: string): string[]; + /** + * Get mods for a piece of gear by its tpl + * @param itemTpl items tpl to look up mods for + * @returns Dictionary of mods (keys are mod slot names) with array of compatible mod tpls as value + */ + getModsForGearSlot(itemTpl: string): Record; + /** + * Get mods for a weapon by its tpl + * @param itemTpl Weapons tpl to look up mods for + * @returns Dictionary of mods (keys are mod slot names) with array of compatible mod tpls as value + */ + getModsForWeaponSlot(itemTpl: string): Record; + /** + * Create weapon mod pool and set generated flag to true + */ + protected generateWeaponPool(): void; + /** + * Create gear mod pool and set generated flag to true + */ + protected generateGearPool(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/BotGenerationCacheService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/BotGenerationCacheService.d.ts new file mode 100644 index 0000000..a491b03 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/BotGenerationCacheService.d.ts @@ -0,0 +1,36 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { IBotBase } from "../models/eft/common/tables/IBotBase"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { LocalisationService } from "./LocalisationService"; +export declare class BotGenerationCacheService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected localisationService: LocalisationService; + protected botHelper: BotHelper; + protected storedBots: Map; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, localisationService: LocalisationService, botHelper: BotHelper); + /** + * Store array of bots in cache, shuffle results before storage + * @param botsToStore Bots we want to store in the cache + */ + storeBots(key: string, botsToStore: IBotBase[]): void; + /** + * Find and return a bot based on its role + * Remove bot from internal array so it can't be retreived again + * @param key role to retreive (assault/bossTagilla etc) + * @returns IBotBase object + */ + getBot(key: string): IBotBase; + /** + * Remove all cached bot profiles + */ + clearStoredBots(): void; + /** + * Does cache have a bot with requested key + * @returns false if empty + */ + cacheHasBotOfRole(key: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/BotLootCacheService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/BotLootCacheService.d.ts new file mode 100644 index 0000000..dab7c6d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/BotLootCacheService.d.ts @@ -0,0 +1,95 @@ +import { PMCLootGenerator } from "../generators/PMCLootGenerator"; +import { Items } from "../models/eft/common/tables/IBotType"; +import { ITemplateItem, Props } from "../models/eft/common/tables/ITemplateItem"; +import { BotLootCache, LootCacheType } from "../models/spt/bots/BotLootCache"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { JsonUtil } from "../utils/JsonUtil"; +import { LocalisationService } from "./LocalisationService"; +import { RagfairPriceService } from "./RagfairPriceService"; +export declare class BotLootCacheService { + protected logger: ILogger; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected pmcLootGenerator: PMCLootGenerator; + protected localisationService: LocalisationService; + protected ragfairPriceService: RagfairPriceService; + protected lootCache: Record; + constructor(logger: ILogger, jsonUtil: JsonUtil, databaseServer: DatabaseServer, pmcLootGenerator: PMCLootGenerator, localisationService: LocalisationService, ragfairPriceService: RagfairPriceService); + /** + * Remove all cached bot loot data + */ + clearCache(): void; + /** + * Get the fully created loot array, ordered by price low to high + * @param botRole bot to get loot for + * @param isPmc is the bot a pmc + * @param lootType what type of loot is needed (backpack/pocket/stim/vest etc) + * @param lootPool the full pool of loot (needed when cache is empty) + * @returns ITemplateItem array + */ + getLootFromCache(botRole: string, isPmc: boolean, lootType: LootCacheType, lootPool: Items): ITemplateItem[]; + /** + * Generate loot for a bot and store inside a private class property + * @param botRole bots role (assault / pmcBot etc) + * @param lootPool the full pool of loot we use to create the various sub-categories with + * @param isPmc Is the bot a PMC (alteres what loot is cached) + */ + protected addLootToCache(botRole: string, isPmc: boolean, lootPool: Items): void; + /** + * Sort a pool of item objects by its flea price + * @param poolToSort pool of items to sort + */ + protected sortPoolByRagfairPrice(poolToSort: ITemplateItem[]): void; + /** + * Add unique items into combined pool + * @param combinedItemPool Pool of items to add to + * @param itemsToAdd items to add to combined pool if unique + */ + protected addUniqueItemsToPool(combinedItemPool: ITemplateItem[], itemsToAdd: ITemplateItem[]): void; + /** + * Ammo/grenades have this property + * @param props + * @returns + */ + protected isBulletOrGrenade(props: Props): boolean; + /** + * Internal and external magazine have this property + * @param props + * @returns + */ + protected isMagazine(props: Props): boolean; + /** + * Medical use items (e.g. morphine/lip balm/grizzly) + * @param props + * @returns + */ + protected isMedicalItem(props: Props): boolean; + /** + * Grenades have this property (e.g. smoke/frag/flash grenades) + * @param props + * @returns + */ + protected isGrenade(props: Props): boolean; + /** + * Check if a bot type exists inside the loot cache + * @param botRole role to check for + * @returns true if they exist + */ + protected botRoleExistsInCache(botRole: string): boolean; + /** + * If lootcache is null, init with empty property arrays + * @param botRole Bot role to hydrate + */ + protected initCacheForBotRole(botRole: string): void; + /** + * Compares two item prices by their flea (or handbook if that doesnt exist) price + * -1 when a < b + * 0 when a === b + * 1 when a > b + * @param itemAPrice + * @param itemBPrice + * @returns + */ + protected compareByValue(itemAPrice: number, itemBPrice: number): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/BotWeaponModLimitService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/BotWeaponModLimitService.d.ts new file mode 100644 index 0000000..f8ebc2f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/BotWeaponModLimitService.d.ts @@ -0,0 +1,54 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IBotConfig } from "../models/spt/config/IBotConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +export declare class BotModLimits { + scope: ItemCount; + scopeMax: number; + scopeBaseTypes: string[]; + flashlightLaser: ItemCount; + flashlightLaserMax: number; + flashlgihtLaserBaseTypes: string[]; +} +export declare class ItemCount { + count: number; +} +export declare class BotWeaponModLimitService { + protected logger: ILogger; + protected configServer: ConfigServer; + protected itemHelper: ItemHelper; + protected botConfig: IBotConfig; + constructor(logger: ILogger, configServer: ConfigServer, itemHelper: ItemHelper); + /** + * Initalise mod limits to be used when generating a weapon + * @param botRole "assault", "bossTagilla" or "pmc" + * @returns BotModLimits object + */ + getWeaponModLimits(botRole: string): BotModLimits; + /** + * Check if weapon mod item is on limited list + has surpassed the limit set for it + * Exception: Always allow ncstar backup mount + * Exception: Always allow scopes with a scope for a parent + * Exception: Always disallow mounts that hold only scopes once scope limit reached + * Exception: Always disallow mounts that hold only flashlights once flashlight limit reached + * @param botRole role the bot has e.g. assault + * @param modTemplate mods template data + * @param modLimits limits set for weapon being generated for this bot + * @param modsParent The parent of the mod to be checked + * @returns true if over item limit + */ + weaponModHasReachedLimit(botRole: string, modTemplate: ITemplateItem, modLimits: BotModLimits, modsParent: ITemplateItem, weapon: Item[]): boolean; + /** + * Check if the specific item type on the weapon has reached the set limit + * @param modTpl log mod tpl if over type limit + * @param currentCount current number of this item on gun + * @param maxLimit mod limit allowed + * @param botRole role of bot we're checking weapon of + * @returns true if limit reached + */ + protected weaponModLimitReached(modTpl: string, currentCount: { + count: number; + }, maxLimit: number, botRole: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/CustomLocationWaveService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/CustomLocationWaveService.d.ts new file mode 100644 index 0000000..7d14f07 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/CustomLocationWaveService.d.ts @@ -0,0 +1,42 @@ +import { BossLocationSpawn, Wave } from "../models/eft/common/ILocationBase"; +import { ILocationConfig } from "../models/spt/config/ILocationConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +export declare class CustomLocationWaveService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected locationConfig: ILocationConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Add a boss wave to a map + * @param locationId e.g. factory4_day, bigmap + * @param waveToAdd Boss wave to add to map + */ + addBossWaveToMap(locationId: string, waveToAdd: BossLocationSpawn): void; + /** + * Add a normal bot wave to a map + * @param locationId e.g. factory4_day, bigmap + * @param waveToAdd Wave to add to map + */ + addNormalWaveToMap(locationId: string, waveToAdd: Wave): void; + /** + * Clear all custom boss waves from a map + * @param locationId e.g. factory4_day, bigmap + */ + clearBossWavesForMap(locationId: string): void; + /** + * Clear all custom normal waves from a map + * @param locationId e.g. factory4_day, bigmap + */ + clearNormalWavesForMap(locationId: string): void; + /** + * Add custom boss and normal waves to maps found in config/location.json to db + */ + applyWaveChangesToAllMaps(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/FenceService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/FenceService.d.ts new file mode 100644 index 0000000..d143380 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/FenceService.d.ts @@ -0,0 +1,184 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { FenceLevel, Preset } from "../models/eft/common/IGlobals"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { ItemFilterService } from "./ItemFilterService"; +import { LocalisationService } from "./LocalisationService"; +/** + * Handle actions surrounding Fence + * e.g. generating or refreshing assorts / get next refresh time + */ +export declare class FenceService { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected timeUtil: TimeUtil; + protected randomUtil: RandomUtil; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected itemHelper: ItemHelper; + protected presetHelper: PresetHelper; + protected itemFilterService: ItemFilterService; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + /** Main assorts you see at all rep levels */ + protected fenceAssort: ITraderAssort; + /** Assorts shown on a separte tab when you max out fence rep */ + protected fenceDiscountAssort: ITraderAssort; + protected traderConfig: ITraderConfig; + protected nextMiniRefreshTimestamp: number; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, timeUtil: TimeUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, presetHelper: PresetHelper, itemFilterService: ItemFilterService, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Replace main fence assort with new assort + * @param assort New assorts to replace old with + */ + protected setFenceAssort(assort: ITraderAssort): void; + /** + * Replace high rep level fence assort with new assort + * @param assort New assorts to replace old with + */ + protected setFenceDiscountAssort(assort: ITraderAssort): void; + /** + * Get assorts player can purchase + * Adjust prices based on fence level of player + * @param pmcProfile Player profile + * @returns ITraderAssort + */ + getFenceAssorts(pmcProfile: IPmcData): ITraderAssort; + /** + * Adjust all items contained inside an assort by a multiplier + * @param assort Assort that contains items with prices to adjust + * @param itemMultipler multipler to use on items + * @param presetMultiplier preset multipler to use on presets + */ + protected adjustAssortItemPrices(assort: ITraderAssort, itemMultipler: number, presetMultiplier: number): void; + /** + * Merge two trader assort files together + * @param firstAssort assort 1# + * @param secondAssort assort #2 + * @returns merged assort + */ + protected mergeAssorts(firstAssort: ITraderAssort, secondAssort: ITraderAssort): ITraderAssort; + /** + * Adjust assorts price by a modifier + * @param item assort item details + * @param assort assort to be modified + * @param modifier value to multiply item price by + * @param presetModifier value to multiply preset price by + */ + protected adjustItemPriceByModifier(item: Item, assort: ITraderAssort, modifier: number, presetModifier: number): void; + /** + * Get fence assorts with no price adjustments based on fence rep + * @returns ITraderAssort + */ + getRawFenceAssorts(): ITraderAssort; + /** + * Does fence need to perform a partial refresh because its passed the refresh timer defined in trader.json + * @returns true if it needs a partial refresh + */ + needsPartialRefresh(): boolean; + /** + * Replace a percentage of fence assorts with freshly generated items + */ + performPartialRefresh(): void; + /** + * Increment fence next refresh timestamp by current timestamp + partialRefreshTimeSeconds from config + */ + protected incrementPartialRefreshTime(): void; + /** + * Compare the current fence offer count to what the config wants it to be, + * If value is lower add extra count to value to generate more items to fill gap + * @param existingItemCountToReplace count of items to generate + * @returns number of items to generate + */ + protected getCountOfItemsToGenerate(existingItemCountToReplace: number): number; + /** + * Choose an item (not mod) at random and remove from assorts + */ + protected removeRandomItemFromAssorts(assort: ITraderAssort): void; + /** + * Get an integer rounded count of items to replace based on percentrage from traderConfig value + * @param totalItemCount total item count + * @returns rounded int of items to replace + */ + protected getCountOfItemsToReplace(totalItemCount: number): number; + /** + * Get the count of items fence offers + * @returns number + */ + getOfferCount(): number; + /** + * Create trader assorts for fence and store in fenceService cache + */ + generateFenceAssorts(): void; + /** + * Create skeleton to hold assort items + * @returns ITraderAssort object + */ + protected createBaseTraderAssortItem(): ITraderAssort; + /** + * Hydrate assorts parameter object with generated assorts + * @param assortCount Number of assorts to generate + * @param assorts object to add created assorts to + */ + protected createAssorts(assortCount: number, assorts: ITraderAssort, loyaltyLevel: number): void; + protected addItemAssorts(assortCount: number, fenceAssortIds: string[], assorts: ITraderAssort, fenceAssort: ITraderAssort, itemTypeCounts: Record, loyaltyLevel: number): void; + /** + * Add preset weapons to fence presets + * @param assortCount how many assorts to add to assorts + * @param defaultWeaponPresets a dictionary of default weapon presets + * @param assorts object to add presets to + * @param loyaltyLevel loyalty level to requre item at + */ + protected addPresets(desiredPresetCount: number, defaultWeaponPresets: Record, assorts: ITraderAssort, loyaltyLevel: number): void; + /** + * Randomise items' upd properties e.g. med packs/weapons/armor + * @param itemDetails Item being randomised + * @param itemToAdjust Item being edited + */ + protected randomiseItemUpdProperties(itemDetails: ITemplateItem, itemToAdjust: Item): void; + /** + * Construct item limit record to hold max and current item count + * @param limits limits as defined in config + * @returns record, key: item tplId, value: current/max item count allowed + */ + protected initItemLimitCounter(limits: Record): Record; + /** + * Get the next update timestamp for fence + * @returns future timestamp + */ + getNextFenceUpdateTimestamp(): number; + /** + * Get fence refresh time in seconds + */ + protected getFenceRefreshTime(): number; + /** + * Get fence level the passed in profile has + * @param pmcData Player profile + * @returns FenceLevel object + */ + getFenceInfo(pmcData: IPmcData): FenceLevel; + /** + * Remove an assort from fence by id + * @param assortIdToRemove assort id to remove from fence assorts + */ + removeFenceOffer(assortIdToRemove: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/HashCacheService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/HashCacheService.d.ts new file mode 100644 index 0000000..5320f28 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/HashCacheService.d.ts @@ -0,0 +1,19 @@ +import { ILogger } from "../models/spt/utils/ILogger"; +import { HashUtil } from "../utils/HashUtil"; +import { JsonUtil } from "../utils/JsonUtil"; +import { VFS } from "../utils/VFS"; +export declare class HashCacheService { + protected vfs: VFS; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected logger: ILogger; + protected jsonHashes: any; + protected modHashes: any; + protected readonly modCachePath = "./user/cache/modCache.json"; + constructor(vfs: VFS, hashUtil: HashUtil, jsonUtil: JsonUtil, logger: ILogger); + getStoredModHash(modName: string): string; + modContentMatchesStoredHash(modName: string, modContent: string): boolean; + hashMatchesStoredHash(modName: string, modHash: string): boolean; + storeModContent(modName: string, modContent: string): void; + storeModHash(modName: string, modHash: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/InsuranceService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/InsuranceService.d.ts new file mode 100644 index 0000000..886a298 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/InsuranceService.d.ts @@ -0,0 +1,78 @@ +import { ITraderBase } from "../models/eft/common/tables/ITrader"; +import { DialogueHelper } from "../helpers/DialogueHelper"; +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { SecureContainerHelper } from "../helpers/SecureContainerHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { InsuredItem } from "../models/eft/common/tables/IBotBase"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; +import { IInsuranceConfig } from "../models/spt/config/IInsuranceConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; +import { LocalisationService } from "./LocalisationService"; +export declare class InsuranceService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected secureContainerHelper: SecureContainerHelper; + protected randomUtil: RandomUtil; + protected timeUtil: TimeUtil; + protected saveServer: SaveServer; + protected traderHelper: TraderHelper; + protected dialogueHelper: DialogueHelper; + protected handbookHelper: HandbookHelper; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected insured: Record>; + protected insuranceConfig: IInsuranceConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, secureContainerHelper: SecureContainerHelper, randomUtil: RandomUtil, timeUtil: TimeUtil, saveServer: SaveServer, traderHelper: TraderHelper, dialogueHelper: DialogueHelper, handbookHelper: HandbookHelper, localisationService: LocalisationService, configServer: ConfigServer); + insuranceExists(sessionId: string): boolean; + insuranceTraderArrayExists(sessionId: string, traderId: string): boolean; + getInsurance(sessionId: string): Record; + getInsuranceItems(sessionId: string, traderId: string): Item[]; + resetInsurance(sessionId: string): void; + resetInsuranceTraderArray(sessionId: string, traderId: string): void; + addInsuranceItemToArray(sessionId: string, traderId: string, itemToAdd: any): void; + /** + * Get the rouble price for an item by templateId + * @param itemTpl item tpl to get handbook price for + * @returns handbook price in roubles, Return 0 if not found + */ + getItemPrice(itemTpl: string): number; + /** + * Sends stored insured items as message to player + * @param pmcData profile to modify + * @param sessionID SessionId of current player + * @param mapId Id of the map player died/exited that caused the insurance to be issued on + */ + sendInsuredItems(pmcData: IPmcData, sessionID: string, mapId: string): void; + /** + * Get a timestamp of what insurance items should be sent to player based on the type of trader used to insure + * @param pmcData Player profile + * @param trader Trader used to insure items + * @returns Timestamp to return items to player in seconds + */ + protected getInsuranceReturnTimestamp(pmcData: IPmcData, trader: ITraderBase): number; + /** + * Store lost gear post-raid inside profile + * @param pmcData player profile to store gear in + * @param offraidData post-raid request object + * @param preRaidGear gear player wore prior to raid + * @param sessionID Session id + */ + storeLostGear(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; + storeInsuredItemsForReturn(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; + /** + * Add gear item to InsuredItems array in player profile + * @param pmcData profile to store item in + * @param insuredItem Item to store in profile + * @param actualItem item to store + * @param sessionID Session id + */ + protected addGearToSend(pmcData: IPmcData, insuredItem: InsuredItem, actualItem: Item, sessionID: string): void; + getPremium(pmcData: IPmcData, inventoryItem: Item, traderId: string): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/ItemBaseClassService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/ItemBaseClassService.d.ts new file mode 100644 index 0000000..d7bc4bc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/ItemBaseClassService.d.ts @@ -0,0 +1,39 @@ +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "./LocalisationService"; +/** + * Cache the baseids for each item in the tiems db inside a dictionary + */ +export declare class ItemBaseClassService { + protected logger: ILogger; + protected localisationService: LocalisationService; + protected databaseServer: DatabaseServer; + protected itemBaseClassesCache: Record; + protected cacheGenerated: boolean; + constructor(logger: ILogger, localisationService: LocalisationService, databaseServer: DatabaseServer); + /** + * Create cache and store inside ItemBaseClassService + */ + hydrateItemBaseClassCache(): void; + /** + * Helper method, recursivly iterate through items parent items, finding and adding ids to dictionary + * @param itemIdToUpdate item tpl to store base ids against in dictionary + * @param item item being checked + * @param allDbItems all items in db + */ + protected addBaseItems(itemIdToUpdate: string, item: ITemplateItem, allDbItems: Record): void; + /** + * Does item tpl inherit from the requested base class + * @param itemTpl item to check base classes of + * @param baseClass base class to check for + * @returns true if item inherits from base class passed in + */ + itemHasBaseClass(itemTpl: string, baseClasses: string[]): boolean; + /** + * Get base classes item inherits from + * @param itemTpl item to get base classes for + * @returns array of base classes + */ + getItemBaseClasses(itemTpl: string): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/ItemFilterService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/ItemFilterService.d.ts new file mode 100644 index 0000000..b830d74 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/ItemFilterService.d.ts @@ -0,0 +1,24 @@ +import { IItemConfig } from "../models/spt/config/IItemConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +/** Centralise the handling of blacklisting items, uses blacklist found in config/item.json, stores items that should not be used by players / broken items */ +export declare class ItemFilterService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected blacklist: string[]; + protected itemConfig: IItemConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Check if the provided template id is blacklisted in config/item.json + * @param tpl template id + * @returns true if blacklisted + */ + isItemBlacklisted(tpl: string): boolean; + /** + * Return every template id blacklisted in config/item.json + * @returns string array of blacklisted tempalte ids + */ + getBlacklistedItems(): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/LocaleService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/LocaleService.d.ts new file mode 100644 index 0000000..09c658b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/LocaleService.d.ts @@ -0,0 +1,41 @@ +import { ILocaleConfig } from "../models/spt/config/ILocaleConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +/** + * Handles getting locales from config or users machine + */ +export declare class LocaleService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected configServer: ConfigServer; + protected localeConfig: ILocaleConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, configServer: ConfigServer); + /** + * Get the eft globals db file based on the configured locale in config/locale.json, if not found, fall back to 'en' + * @returns dictionary + */ + getLocaleDb(): Record; + /** + * Gets the game locale key from the locale.json file, + * if value is 'system' get system locale + * @returns locale e.g en/ge/cz/cn + */ + getDesiredGameLocale(): string; + /** + * Gets the game locale key from the locale.json file, + * if value is 'system' get system locale + * @returns locale e.g en/ge/cz/cn + */ + getDesiredServerLocale(): string; + /** + * Get array of languages supported for localisation + * @returns array of locales e.g. en/fr/cn + */ + getServerSupportedLocales(): string[]; + /** + * Get the locale of the computer running the server + * @returns langage part of locale e.g. 'en' part of 'en-US' + */ + protected getPlatformLocale(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/LocalisationService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/LocalisationService.d.ts new file mode 100644 index 0000000..519325d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/LocalisationService.d.ts @@ -0,0 +1,21 @@ +import { I18n } from "i18n"; +import { ILocaleConfig } from "../models/spt/config/ILocaleConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocaleService } from "./LocaleService"; +/** + * Handles translating server text into different langauges + */ +export declare class LocalisationService { + protected logger: ILogger; + protected localeService: LocaleService; + protected localeConfig: ILocaleConfig; + protected i18n: I18n; + constructor(logger: ILogger, localeService: LocaleService); + /** + * Get a localised value using the passed in key + * @param key Key to loop up locale for + * @param args optional arguments + * @returns Localised string + */ + getText(key: string, args?: any): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/MatchLocationService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/MatchLocationService.d.ts new file mode 100644 index 0000000..c027bec --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/MatchLocationService.d.ts @@ -0,0 +1,9 @@ +import { ICreateGroupRequestData } from "../models/eft/match/ICreateGroupRequestData"; +import { TimeUtil } from "../utils/TimeUtil"; +export declare class MatchLocationService { + protected timeUtil: TimeUtil; + protected locations: {}; + constructor(timeUtil: TimeUtil); + createGroup(sessionID: string, info: ICreateGroupRequestData): any; + deleteGroup(info: any): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/ModCompilerService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/ModCompilerService.d.ts new file mode 100644 index 0000000..a4bf3c8 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/ModCompilerService.d.ts @@ -0,0 +1,14 @@ +import { CompilerOptions } from "typescript"; +import type { ILogger } from "../models/spt/utils/ILogger"; +import { HashCacheService } from "./HashCacheService"; +import { VFS } from "../utils/VFS"; +export declare class ModCompilerService { + protected logger: ILogger; + protected hashCacheService: HashCacheService; + protected vfs: VFS; + constructor(logger: ILogger, hashCacheService: HashCacheService, vfs: VFS); + compileMod(modName: string, modPath: string, modTypeScriptFiles: string[]): Promise; + protected compile(fileNames: string[], options: CompilerOptions): Promise; + protected areFilesReady(fileNames: string[]): boolean; + protected delay(ms: number): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/NotificationService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/NotificationService.d.ts new file mode 100644 index 0000000..65a84dd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/NotificationService.d.ts @@ -0,0 +1,21 @@ +import { INotification } from "../models/eft/notifier/INotifier"; +export declare class NotificationService { + protected messageQueue: Record; + getMessageQueue(): Record; + getMessageFromQueue(sessionId: string): any[]; + updateMessageOnQueue(sessionId: string, value: any[]): void; + has(sessionID: string): boolean; + /** + * Pop first message from queue. + */ + pop(sessionID: string): any; + /** + * Add message to queue + */ + add(sessionID: string, message: INotification): void; + /** + * Get message queue for session + * @param sessionID + */ + get(sessionID: string): any[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/OpenZoneService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/OpenZoneService.d.ts new file mode 100644 index 0000000..8e70b94 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/OpenZoneService.d.ts @@ -0,0 +1,28 @@ +import { ILocationConfig } from "../models/spt/config/ILocationConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { JsonUtil } from "../utils/JsonUtil"; +import { RandomUtil } from "../utils/RandomUtil"; +import { LocalisationService } from "./LocalisationService"; +/** Service for adding new zones to a maps OpenZones property */ +export declare class OpenZoneService { + protected logger: ILogger; + protected randomUtil: RandomUtil; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected locationConfig: ILocationConfig; + constructor(logger: ILogger, randomUtil: RandomUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Add open zone to specified map + * @param locationId map location (e.g. factory4_day) + * @param zoneToAdd zone to add + */ + addZoneToMap(locationId: string, zoneToAdd: string): void; + /** + * Add open zones to all maps found in config/location.json to db + */ + applyZoneChangesToAllMaps(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/PaymentService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/PaymentService.d.ts new file mode 100644 index 0000000..ac131ea --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/PaymentService.d.ts @@ -0,0 +1,76 @@ +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { InventoryHelper } from "../helpers/InventoryHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IProcessBuyTradeRequestData } from "../models/eft/trade/IProcessBuyTradeRequestData"; +import { IProcessSellTradeRequestData } from "../models/eft/trade/IProcessSellTradeRequestData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { LocalisationService } from "./LocalisationService"; +export declare class PaymentService { + protected logger: ILogger; + protected httpResponse: HttpResponseUtil; + protected databaseServer: DatabaseServer; + protected handbookHelper: HandbookHelper; + protected traderHelper: TraderHelper; + protected itemHelper: ItemHelper; + protected inventoryHelper: InventoryHelper; + protected localisationService: LocalisationService; + protected paymentHelper: PaymentHelper; + constructor(logger: ILogger, httpResponse: HttpResponseUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, traderHelper: TraderHelper, itemHelper: ItemHelper, inventoryHelper: InventoryHelper, localisationService: LocalisationService, paymentHelper: PaymentHelper); + /** + * Take money and insert items into return to server request + * @param {IPmcData} pmcData Player profile + * @param {IProcessBuyTradeRequestData} request + * @param {string} sessionID + * @returns Object + */ + payMoney(pmcData: IPmcData, request: IProcessBuyTradeRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse; + /** + * Receive money back after selling + * @param {IPmcData} pmcData + * @param {number} amount + * @param {IProcessSellTradeRequestData} body + * @param {IItemEventRouterResponse} output + * @param {string} sessionID + * @returns IItemEventRouterResponse + */ + getMoney(pmcData: IPmcData, amount: number, body: IProcessSellTradeRequestData, output: IItemEventRouterResponse, sessionID: string): IItemEventRouterResponse; + /** + * Recursively checks if the given item is + * inside the stash, that is it has the stash as + * ancestor with slotId=hideout + */ + protected isItemInStash(pmcData: IPmcData, item: Item): boolean; + /** + * Remove currency from player stash/inventory + * @param pmcData Player profile to find and remove currency from + * @param currencyTpl Type of currency to pay + * @param amountToPay money value to pay + * @param sessionID Session id + * @param output output object to send to client + * @returns IItemEventRouterResponse + */ + addPaymentToOutput(pmcData: IPmcData, currencyTpl: string, amountToPay: number, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse; + /** + * Prioritise player stash first over player inventory + * Post-raid healing would often take money out of the players pockets/secure container + * @param a First money stack item + * @param b Second money stack item + * @param inventoryItems players inventory items + * @returns sort order + */ + protected prioritiseStashSort(a: Item, b: Item, inventoryItems: Item[]): number; + /** + * Recursivly check items parents to see if it is inside the players inventory, not stash + * @param itemId item id to check + * @param inventoryItems player inventory + * @returns true if its in inventory + */ + protected isInInventory(itemId: string, inventoryItems: Item[]): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/PlayerService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/PlayerService.d.ts new file mode 100644 index 0000000..1195b93 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/PlayerService.d.ts @@ -0,0 +1,22 @@ +import { IPmcData } from "../models/eft/common/IPmcData"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "./LocalisationService"; +export declare class PlayerService { + protected logger: ILogger; + protected localisationService: LocalisationService; + protected databaseServer: DatabaseServer; + constructor(logger: ILogger, localisationService: LocalisationService, databaseServer: DatabaseServer); + /** + * increases the profile skill and updates any output + * @param {Object} pmcData + * @param {String} skillName + * @param {Number} amount + */ + incrementSkillLevel(pmcData: IPmcData, skillName: string, amount: number): void; + /** + * @param {Object} pmcData + * @returns number + */ + calculateLevel(pmcData: IPmcData): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/ProfileFixerService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/ProfileFixerService.d.ts new file mode 100644 index 0000000..8d23ebc --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/ProfileFixerService.d.ts @@ -0,0 +1,112 @@ +import { HideoutHelper } from "../helpers/HideoutHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Bonus, HideoutSlot } from "../models/eft/common/tables/IBotBase"; +import { IPmcDataRepeatableQuest, IRepeatableQuest } from "../models/eft/common/tables/IRepeatableQuests"; +import { StageBonus } from "../models/eft/hideout/IHideoutArea"; +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { HideoutAreas } from "../models/enums/HideoutAreas"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { TimeUtil } from "../utils/TimeUtil"; +import { Watermark } from "../utils/Watermark"; +import { LocalisationService } from "./LocalisationService"; +export declare class ProfileFixerService { + protected logger: ILogger; + protected watermark: Watermark; + protected hideoutHelper: HideoutHelper; + protected localisationService: LocalisationService; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, localisationService: LocalisationService, timeUtil: TimeUtil, databaseServer: DatabaseServer); + /** + * Find issues in the pmc profile data that may cause issues and fix them + * @param pmcProfile profile to check and fix + */ + checkForAndFixPmcProfileIssues(pmcProfile: IPmcData): void; + /** + * Add tag to profile to indicate when it was made + * @param fullProfile + */ + addMissingAkiVersionTagToProfile(fullProfile: IAkiProfile): void; + /** + * TODO - make this non-public - currently used by RepeatableQuestController + * Remove unused condition counters + * @param pmcProfile profile to remove old counters from + */ + removeDanglingConditionCounters(pmcProfile: IPmcData): void; + addLighthouseKeeperIfMissing(pmcProfile: IPmcData): void; + protected addUnlockedInfoObjectIfMissing(pmcProfile: IPmcData): void; + protected removeDanglingBackendCounters(pmcProfile: IPmcData): void; + protected getActiveRepeatableQuests(repeatableQuests: IPmcDataRepeatableQuest[]): IRepeatableQuest[]; + protected fixNullTraderSalesSums(pmcProfile: IPmcData): void; + protected addMissingBonusesProperty(pmcProfile: IPmcData): void; + /** + * Adjust profile quest status and statusTimers object values + * quest.status is numeric e.g. 2 + * quest.statusTimers keys are numeric as strings e.g. "2" + * @param pmcProfile profile to update + */ + protected updateProfileQuestDataValues(pmcProfile: IPmcData): void; + protected addMissingRepeatableQuestsProperty(pmcProfile: IPmcData): void; + protected addMissingWorkbenchWeaponSkills(pmcProfile: IPmcData): void; + /** + * Some profiles have hideout maxed and therefore no improvements + * @param pmcProfile Profile to add improvement data to + */ + protected addMissingWallImprovements(pmcProfile: IPmcData): void; + /** + * A new property was added to slot items "locationIndex", if this is missing, the hideout slot item must be removed + * @param pmcProfile Profile to find and remove slots from + */ + protected removeResourcesFromSlotsInHideoutWithoutLocationIndexValue(pmcProfile: IPmcData): void; + /** + * Hideout slots need to be in a specific order, locationIndex in ascending order + * @param pmcProfile profile to edit + */ + protected reorderHideoutAreasWithResouceInputs(pmcProfile: IPmcData): void; + /** + * add in objects equal to the number of slots + * @param areaType area to check + * @param pmcProfile profile to update + */ + protected addEmptyObjectsToHideoutAreaSlots(areaType: HideoutAreas, emptyItemCount: number, pmcProfile: IPmcData): void; + protected addObjectsToArray(count: number, slots: HideoutSlot[]): HideoutSlot[]; + /** + * In 18876 bsg changed the pockets tplid to be one that has 3 additional special slots + * @param pmcProfile + */ + protected updateProfilePocketsToNewId(pmcProfile: IPmcData): void; + addMissingArmorRepairSkill(pmcProfile: IPmcData): void; + /** + * Iterate over players hideout areas and find what's build, look for missing bonuses those areas give and add them if missing + * @param pmcProfile Profile to update + */ + addMissingHideoutBonusesToProfile(pmcProfile: IPmcData): void; + /** + * + * @param profileBonuses bonuses from profile + * @param bonus bonus to find + * @returns matching bonus + */ + protected getBonusFromProfile(profileBonuses: Bonus[], bonus: StageBonus): Bonus; + /** + * Checks profile inventiory for items that do not exist inside the items db + * @param pmcProfile Profile to check inventory of + */ + checkForOrphanedModdedItems(pmcProfile: IPmcData): void; + /** + * Add `Improvements` object to hideout if missing - added in eft 13.0.21469 + * @param pmcProfile profile to update + */ + addMissingUpgradesPropertyToHideout(pmcProfile: IPmcData): void; + /** + * Iterate over associated profile template and check all hideout areas exist, add if not + * @param fullProfile Profile to update + */ + addMissingHideoutAreasToProfile(fullProfile: IAkiProfile): void; + /** + * These used to be used for storing scav case rewards, rewards are now generated on pickup + * @param pmcProfile Profile to update + */ + removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/ProfileSnapshotService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/ProfileSnapshotService.d.ts new file mode 100644 index 0000000..445ffd0 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/ProfileSnapshotService.d.ts @@ -0,0 +1,30 @@ +import { IAkiProfile } from "../models/eft/profile/IAkiProfile"; +import { JsonUtil } from "../utils/JsonUtil"; +export declare class ProfileSnapshotService { + protected jsonUtil: JsonUtil; + protected storedProfileSnapshots: Record; + constructor(jsonUtil: JsonUtil); + /** + * Store a profile into an in-memory object + * @param sessionID session id - acts as the key + * @param profile - profile to save + */ + storeProfileSnapshot(sessionID: string, profile: IAkiProfile): void; + /** + * Retreve a stored profile + * @param sessionID key + * @returns A player profile object + */ + getProfileSnapshot(sessionID: string): IAkiProfile; + /** + * Does a profile exists against the provided key + * @param sessionID key + * @returns true if exists + */ + hasProfileSnapshot(sessionID: string): boolean; + /** + * Remove a stored profile by key + * @param sessionID key + */ + clearProfileSnapshot(sessionID: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairCategoriesService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairCategoriesService.d.ts new file mode 100644 index 0000000..83910e5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairCategoriesService.d.ts @@ -0,0 +1,40 @@ +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { ILogger } from "../models/spt/utils/ILogger"; +export declare class RagfairCategoriesService { + protected logger: ILogger; + protected categories: Record; + constructor(logger: ILogger); + /** + * Get all flea categories and their count of offers + * @returns item categories and count + */ + getAllCategories(): Record; + /** + * With the supplied items, get custom categories + * @returns a custom list of categories + */ + getBespokeCategories(offers: IRagfairOffer[]): Record; + /** + * Take an array of ragfair offers and create a dictionary of items with thier corrisponding offer count + * @param offers ragfair offers + * @returns categories and count + */ + protected processOffersIntoCategories(offers: IRagfairOffer[]): Record; + /** + * Increment or decrement a category array + * @param offer offer to process + * @param categories categories to update + * @param increment should item be incremented or decremented + */ + protected addOrIncrementCategory(offer: IRagfairOffer, categories: Record, increment?: boolean): void; + /** + * Increase category count by 1 + * @param offer + */ + incrementCategory(offer: IRagfairOffer): void; + /** + * Reduce category count by 1 + * @param offer + */ + decrementCategory(offer: IRagfairOffer): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairLinkedItemService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairLinkedItemService.d.ts new file mode 100644 index 0000000..51511f9 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairLinkedItemService.d.ts @@ -0,0 +1,21 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { DatabaseServer } from "../servers/DatabaseServer"; +export declare class RagfairLinkedItemService { + protected databaseServer: DatabaseServer; + protected itemHelper: ItemHelper; + protected linkedItemsCache: Record>; + constructor(databaseServer: DatabaseServer, itemHelper: ItemHelper); + getLinkedItems(linkedSearchId: string): Iterable; + /** + * Create Dictionary of every item and the items associated with it + */ + protected buildLinkedItemTable(): void; + /** + * Add ammo to revolvers linked item dictionary + * @param cylinder Revolvers cylinder + * @param applyLinkedItems + */ + protected addRevolverCylinderAmmoToLinkedItems(cylinder: ITemplateItem, applyLinkedItems: (items: string[]) => void): void; + protected getFilters(item: ITemplateItem, slot: string): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairOfferService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairOfferService.d.ts new file mode 100644 index 0000000..fc08d39 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairOfferService.d.ts @@ -0,0 +1,82 @@ +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { RagfairServerHelper } from "../helpers/RagfairServerHelper"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { SaveServer } from "../servers/SaveServer"; +import { HttpResponseUtil } from "../utils/HttpResponseUtil"; +import { RagfairOfferHolder } from "../utils/RagfairOfferHolder"; +import { TimeUtil } from "../utils/TimeUtil"; +import { LocalisationService } from "./LocalisationService"; +import { RagfairCategoriesService } from "./RagfairCategoriesService"; +export declare class RagfairOfferService { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected databaseServer: DatabaseServer; + protected saveServer: SaveServer; + protected ragfairServerHelper: RagfairServerHelper; + protected ragfairCategoriesService: RagfairCategoriesService; + protected profileHelper: ProfileHelper; + protected eventOutputHolder: EventOutputHolder; + protected httpResponse: HttpResponseUtil; + protected localisationService: LocalisationService; + protected configServer: ConfigServer; + protected playerOffersLoaded: boolean; + protected expiredOffers: Record; + protected ragfairConfig: IRagfairConfig; + protected ragfairOfferHandler: RagfairOfferHolder; + constructor(logger: ILogger, timeUtil: TimeUtil, databaseServer: DatabaseServer, saveServer: SaveServer, ragfairServerHelper: RagfairServerHelper, ragfairCategoriesService: RagfairCategoriesService, profileHelper: ProfileHelper, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Get all offers + * @returns IRagfairOffer array + */ + getOffers(): IRagfairOffer[]; + getOfferByOfferId(offerId: string): IRagfairOffer; + getOffersOfType(templateId: string): IRagfairOffer[]; + addOffer(offer: IRagfairOffer): void; + addOfferToExpired(staleOffer: IRagfairOffer): void; + getExpiredOfferCount(): number; + /** + * Get an array of expired items not yet processed into new offers + * @returns items that need to be turned into offers + */ + getExpiredOfferItems(): Item[]; + resetExpiredOffers(): void; + /** + * Does the offer exist on the ragfair + * @param offerId offer id to check for + * @returns offer exists - true + */ + doesOfferExist(offerId: string): boolean; + /** + * Remove an offer from ragfair by offer id + * @param offerId Offer id to remove + */ + removeOfferById(offerId: string): void; + /** + * Reduce size of an offer stack by specified amount + * @param offerId Offer to adjust stack size of + * @param amount How much to deduct from offers stack size + */ + removeOfferStack(offerId: string, amount: number): void; + removeAllOffersByTrader(traderId: string): void; + /** + * Do the trader offers on flea need to be refreshed + * @param traderID Trader to check + * @returns true if they do + */ + traderOffersNeedRefreshing(traderID: string): boolean; + addPlayerOffers(): void; + expireStaleOffers(): void; + /** + * Remove stale offer from flea + * @param staleOffer Stale offer to process + */ + protected processStaleOffer(staleOffer: IRagfairOffer): void; + protected returnPlayerOffer(offer: IRagfairOffer): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairPriceService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairPriceService.d.ts new file mode 100644 index 0000000..8b68bc4 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairPriceService.d.ts @@ -0,0 +1,129 @@ +import { OnLoad } from "../di/OnLoad"; +import { HandbookHelper } from "../helpers/HandbookHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; +import { PresetHelper } from "../helpers/PresetHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { Preset } from "../models/eft/common/IGlobals"; +import { Item } from "../models/eft/common/tables/IItem"; +import { IBarterScheme } from "../models/eft/common/tables/ITrader"; +import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { IRagfairServerPrices } from "../models/spt/ragfair/IRagfairServerPrices"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RandomUtil } from "../utils/RandomUtil"; +/** + * Stores flea prices for items as well as methods to interact with them + */ +export declare class RagfairPriceService implements OnLoad { + protected handbookHelper: HandbookHelper; + protected databaseServer: DatabaseServer; + protected logger: ILogger; + protected itemHelper: ItemHelper; + protected presetHelper: PresetHelper; + protected traderHelper: TraderHelper; + protected randomUtil: RandomUtil; + protected configServer: ConfigServer; + protected ragfairConfig: IRagfairConfig; + protected generatedDynamicPrices: boolean; + protected generatedStaticPrices: boolean; + protected prices: IRagfairServerPrices; + constructor(handbookHelper: HandbookHelper, databaseServer: DatabaseServer, logger: ILogger, itemHelper: ItemHelper, presetHelper: PresetHelper, traderHelper: TraderHelper, randomUtil: RandomUtil, configServer: ConfigServer); + /** + * Generate static (handbook) and dynamic (prices.json) flea prices, store inside class as dictionaries + */ + onLoad(): Promise; + getRoute(): string; + /** + * Iterate over all items of type "Item" in db and get template price, store in cache + */ + generateStaticPrices(): void; + /** + * Create a dictionary and store prices from prices.json in it + */ + protected generateDynamicPrices(): void; + /** + * Get the dynamic price for an item. If value doesn't exist, use static (handbook) value. + * if no static value, return 1 + * @param tplId Item tpl id to get price for + * @returns price in roubles + */ + getFleaPriceForItem(tplId: string): number; + /** + * get the dynamic (flea) price for an item + * Grabs prices from prices.json and stores in class if none currently exist + * @param itemTpl item template id to look up + * @returns price in roubles + */ + getDynamicPriceForItem(itemTpl: string): number; + /** + * Grab the static (handbook) for an item by its tplId + * @param itemTpl item template id to look up + * @returns price in roubles + */ + getStaticPriceForItem(itemTpl: string): number; + /** + * Get prices for all items on flea, priorities dynamic prices from prices.json, use handbook prices if missing + * @returns Dictionary of item tpls and rouble cost + */ + getAllFleaPrices(): Record; + getAllStaticPrices(): Record; + /** + * Get the percentage difference between two values + * @param a numerical value a + * @param b numerical value b + * @returns different in percent + */ + protected getPriceDifference(a: number, b: number): number; + /** + * Get the rouble price for an assorts barter scheme + * @param barterScheme + * @returns Rouble price + */ + getBarterPrice(barterScheme: IBarterScheme[]): number; + /** + * Generate a currency cost for an item and its mods + * @param items Item with mods to get price for + * @param desiredCurrency Currency price desired in + * @returns cost of item in desired currency + */ + getDynamicOfferPrice(items: Item[], desiredCurrency: string): number; + /** + * Check to see if an items price is below its handbook price and adjust accoring to values set to config/ragfair.json + * @param itemPrice price of item + * @param itemTpl item template Id being checked + * @returns adjusted price value in roubles + */ + protected adjustPriceIfBelowHandbook(itemPrice: number, itemTpl: string): number; + /** + * Multiply the price by a randomised curve where n = 2, shift = 2 + * @param existingPrice price to alter + * @param isPreset is the item we're multiplying a preset + * @returns multiplied price + */ + protected randomisePrice(existingPrice: number, isPreset: boolean): number; + /** + * Calculate the cost of a weapon preset by adding together the price of its mods + base price of default weapon preset + * @param item base weapon + * @param items weapon plus mods + * @param existingPrice price of existing base weapon + * @returns + */ + protected getWeaponPresetPrice(item: Item, items: Item[], existingPrice: number): number; + /** + * Get the highest price for an item that is stored in handbook or trader assorts + * @param itemTpl Item to get highest price of + * @returns rouble cost + */ + protected getHighestHandbookOrTraderPriceAsRouble(itemTpl: string): number; + /** + * Attempt to get the default preset for a weapon, failing that get the first preset in the array + * (assumes default = has encyclopedia entry) + * @param presets weapon presets to choose from + * @returns Default preset object + */ + protected getWeaponPreset(presets: Preset[], weapon: Item): { + isDefault: boolean; + preset: Preset; + }; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairRequiredItemsService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairRequiredItemsService.d.ts new file mode 100644 index 0000000..95c3ddb --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/RagfairRequiredItemsService.d.ts @@ -0,0 +1,12 @@ +import { PaymentHelper } from "../helpers/PaymentHelper"; +import { RagfairOfferService } from "../services/RagfairOfferService"; +import { ILogger } from "../models/spt/utils/ILogger"; +export declare class RagfairRequiredItemsService { + protected logger: ILogger; + protected paymentHelper: PaymentHelper; + protected ragfairOfferService: RagfairOfferService; + protected requiredItemsCache: {}; + constructor(logger: ILogger, paymentHelper: PaymentHelper, ragfairOfferService: RagfairOfferService); + getRequiredItemsById(searchId: string): any; + buildRequiredItemTable(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/RepairService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/RepairService.d.ts new file mode 100644 index 0000000..a3c6c7a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/RepairService.d.ts @@ -0,0 +1,128 @@ +import { ItemHelper } from "../helpers/ItemHelper"; +import { QuestHelper } from "../helpers/QuestHelper"; +import { RepairHelper } from "../helpers/RepairHelper"; +import { TraderHelper } from "../helpers/TraderHelper"; +import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper"; +import { IPmcData } from "../models/eft/common/IPmcData"; +import { Item } from "../models/eft/common/tables/IItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { RepairKitsInfo } from "../models/eft/repair/IRepairActionDataRequest"; +import { RepairItem } from "../models/eft/repair/ITraderRepairActionDataRequest"; +import { BonusSettings, IRepairConfig } from "../models/spt/config/IRepairConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { RandomUtil } from "../utils/RandomUtil"; +import { PaymentService } from "./PaymentService"; +export declare class RepairService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected questHelper: QuestHelper; + protected randomUtil: RandomUtil; + protected itemHelper: ItemHelper; + protected traderHelper: TraderHelper; + protected weightedRandomHelper: WeightedRandomHelper; + protected paymentService: PaymentService; + protected repairHelper: RepairHelper; + protected configServer: ConfigServer; + protected repairConfig: IRepairConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, questHelper: QuestHelper, randomUtil: RandomUtil, itemHelper: ItemHelper, traderHelper: TraderHelper, weightedRandomHelper: WeightedRandomHelper, paymentService: PaymentService, repairHelper: RepairHelper, configServer: ConfigServer); + /** + * Use trader to repair an items durability + * @param sessionID Session id + * @param pmcData profile to find item to repair in + * @param repairItemDetails details of the item to repair + * @param traderId Trader being used to repair item + * @returns RepairDetails object + */ + repairItemByTrader(sessionID: string, pmcData: IPmcData, repairItemDetails: RepairItem, traderId: string): RepairDetails; + /** + * + * @param sessionID Session id + * @param pmcData profile to take money from + * @param repairedItemId Repaired item id + * @param repairCost Cost to repair item in roubles + * @param traderId Id of the trader who repaired the item / who is paid + * @param output + */ + payForRepair(sessionID: string, pmcData: IPmcData, repairedItemId: string, repairCost: number, traderId: string, output: IItemEventRouterResponse): void; + /** + * Add skill points to profile after repairing an item + * @param sessionId Session id + * @param repairDetails details of item repaired, cost/item + * @param pmcData Profile to add points to + */ + addRepairSkillPoints(sessionId: string, repairDetails: RepairDetails, pmcData: IPmcData): void; + /** + * + * @param sessionId Session id + * @param pmcData Profile to update repaired item in + * @param repairKits Array of Repair kits to use + * @param itemToRepairId Item id to repair + * @param output IItemEventRouterResponse + * @returns Details of repair, item/price + */ + repairItemByKit(sessionId: string, pmcData: IPmcData, repairKits: RepairKitsInfo[], itemToRepairId: string, output: IItemEventRouterResponse): RepairDetails; + /** + * Calculate value repairkit points need to be divided by to get the durability points to be added to an item + * @param itemToRepairDetails Item to repair details + * @param isArmor Is the item being repaired armor + * @param pmcData Player profile + * @returns Number to divide kit points by + */ + protected getKitDivisor(itemToRepairDetails: ITemplateItem, isArmor: boolean, pmcData: IPmcData): number; + /** + * Get the bonus multiplier for a skill from a player profile + * @param skillBonusName Name of bonus to get multipler of + * @param pmcData Player profile to look in for skill + * @returns Multiplier value + */ + protected getBonusMultiplierValue(skillBonusName: string, pmcData: IPmcData): number; + /** + * Update repair kits Resource object if it doesn't exist + * @param repairKitDetails Repair kit details from db + * @param repairKitInInventory Repair kit to update + */ + protected addMaxResourceToKitIfMissing(repairKitDetails: ITemplateItem, repairKitInInventory: Item): void; + /** + * Chance to apply buff to an item (Armor/weapon) if repaired by armor kit + * @param repairDetails Repair details of item + * @param pmcData Player profile + */ + addBuffToItem(repairDetails: RepairDetails, pmcData: IPmcData): void; + /** + * Add buff to item + * @param itemConfig weapon/armor config + * @param repairDetails Details for item to repair + */ + protected addBuff(itemConfig: BonusSettings, repairDetails: RepairDetails): void; + /** + * Check if item should be buffed by checking the item type and relevant player skill level + * @param repairDetails Item that was repaired + * @param itemTpl tpl of item to be buffed + * @param pmcData Player profile + * @returns True if item should have buff applied + */ + protected shouldBuffItem(repairDetails: RepairDetails, pmcData: IPmcData): boolean; + /** + * Based on item, what underlying skill does this item use for buff settings + * @param itemTemplate Item to check for skill + * @returns Skill name + */ + protected getItemSkillType(itemTemplate: ITemplateItem): string; + /** + * Ensure multiplier is between 1 and 0.01 + * @param receiveDurabilityMaxPercent Max durabiltiy percent + * @param receiveDurabilityPercent current durability percent + * @returns durability multipler value + */ + protected getDurabilityMultiplier(receiveDurabilityMaxPercent: number, receiveDurabilityPercent: number): number; +} +export declare class RepairDetails { + repairCost?: number; + repairedItem: Item; + repairedItemIsArmor: boolean; + repairAmount: number; + repairedByKit: boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/SeasonalEventService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/SeasonalEventService.d.ts new file mode 100644 index 0000000..7474018 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/SeasonalEventService.d.ts @@ -0,0 +1,114 @@ +import { BotHelper } from "../helpers/BotHelper"; +import { Config } from "../models/eft/common/IGlobals"; +import { Inventory } from "../models/eft/common/tables/IBotType"; +import { ISeasonalEvent, ISeasonalEventConfig } from "../models/spt/config/ISeasonalEventConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "./LocalisationService"; +export declare class SeasonalEventService { + protected logger: ILogger; + protected databaseServer: DatabaseServer; + protected localisationService: LocalisationService; + protected botHelper: BotHelper; + protected configServer: ConfigServer; + protected seasonalEventConfig: ISeasonalEventConfig; + constructor(logger: ILogger, databaseServer: DatabaseServer, localisationService: LocalisationService, botHelper: BotHelper, configServer: ConfigServer); + protected get events(): Record; + protected get christmasEventItems(): string[]; + protected get halloweenEventItems(): string[]; + /** + * Get an array of christmas items found in bots inventories as loot + * @returns array + */ + getChristmasEventItems(): string[]; + /** + * Get an array of halloween items found in bots inventories as loot + * @returns array + */ + getHalloweenEventItems(): string[]; + itemIsChristmasRelated(itemTpl: string): boolean; + itemIsHalloweenRelated(itemTpl: string): boolean; + /** + * Check if item id exists in christmas or halloween event arrays + * @param itemTpl item tpl to check for + * @returns + */ + itemIsSeasonalRelated(itemTpl: string): boolean; + /** + * Get an array of items that appear during a seasonal event + * returns multiple seasonal event items if they are both active + * @returns array of tpl strings + */ + getAllSeasonalEventItems(): string[]; + /** + * Get an array of seasonal items that should be blocked as seasonal is not active + * @returns Array of tpl strings + */ + getSeasonalEventItemsToBlock(): string[]; + /** + * Is a seasonal event currently active + * @returns true if event is active + */ + seasonalEventEnabled(): boolean; + /** + * is christmas event active + * @returns true if active + */ + christmasEventEnabled(): boolean; + /** + * is christmas event active + * @returns true if active + */ + halloweenEventEnabled(): boolean; + /** + * Is detection of seasonal events enabled (halloween / christmas) + * @returns true if seasonal events should be checked for + */ + isAutomaticEventDetectionEnabled(): boolean; + /** + * Get a dictionary of gear changes to apply to bots for a specific event e.g. Christmas/Halloween + * @param eventName Name of event to get gear changes for + * @returns bots with equipment changes + */ + protected getEventBotGear(eventName: string): Record>>; + /** + * Get the dates each seasonal event starts and ends at + * @returns Record with event name + start/end date + */ + getEventDetails(): ISeasonalEvent[]; + /** + * Check if current date falls inside any of the seasons events pased in, if so, handle them + */ + checkForAndEnableSeasonalEvents(): void; + /** + * Iterate through bots inventory and loot to find and remove christmas items (as defined in SeasonalEventService) + * @param nodeInventory Bots inventory to iterate over + * @param botRole the role of the bot being processed + */ + removeChristmasItemsFromBotInventory(nodeInventory: Inventory, botRole: string): void; + /** + * Make adjusted to server code based on the name of the event passed in + * @param globalConfig globals.json + * @param eventName Name of the event to enable. e.g. Christmas + */ + protected updateGlobalEvents(globalConfig: Config, eventName: string): void; + /** + * Add lootble items from backpack into patrol.ITEMS_TO_DROP difficulty property + */ + protected addLootItemsToGifterDropItemsList(): void; + /** + * Read in data from seasonalEvents.json and add found equipment items to bots + * @param eventName Name of the event to read equipment in from config + */ + protected addEventGearToBots(eventName: string): void; + protected addPumpkinsToScavBackpacks(): void; + /** + * Set Khorovod(dancing tree) chance to 100% on all maps that support it + */ + protected enableDancingTree(): void; + /** + * Add santa to maps + */ + protected addGifterBotToMaps(): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/TraderAssortService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/TraderAssortService.d.ts new file mode 100644 index 0000000..03b4e12 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/TraderAssortService.d.ts @@ -0,0 +1,11 @@ +import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +export declare class TraderAssortService { + protected pristineTraderAssorts: Record; + getPristineTraderAssort(traderId: string): ITraderAssort; + /** + * Store trader assorts inside a class property + * @param traderId Traderid to store assorts against + * @param assort Assorts to store + */ + setPristineTraderAssort(traderId: string, assort: ITraderAssort): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/TraderPurchasePersisterService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/TraderPurchasePersisterService.d.ts new file mode 100644 index 0000000..7e7c88f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/TraderPurchasePersisterService.d.ts @@ -0,0 +1,34 @@ +import { ProfileHelper } from "../helpers/ProfileHelper"; +import { TraderPurchaseData } from "../models/eft/profile/IAkiProfile"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { TimeUtil } from "../utils/TimeUtil"; +/** + * Help with storing limited item purchases from traders in profile to persist them over server restarts + */ +export declare class TraderPurchasePersisterService { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected profileHelper: ProfileHelper; + protected configServer: ConfigServer; + protected traderConfig: ITraderConfig; + constructor(logger: ILogger, timeUtil: TimeUtil, profileHelper: ProfileHelper, configServer: ConfigServer); + /** + * Get the purchases made from a trader for this profile before the last trader reset + * @param sessionId Session id + * @param traderId Trader to loop up purchases for + * @returns Dict of assort id and count purchased + */ + getProfileTraderPurchases(sessionId: string, traderId: string): Record; + /** + * Remove all trader purchase records from all profiles that exist + * @param traderId Traders id + */ + resetTraderPurchasesStoredInProfile(traderId: string): void; + /** + * Iterate over all server profiles and remove specific trader purchase data that has passed the trader refesh time + * @param traderId Trader id + */ + removeStalePurchasesFromProfiles(traderId: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/mod/CustomItemService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/CustomItemService.d.ts new file mode 100644 index 0000000..87bda40 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/CustomItemService.d.ts @@ -0,0 +1,80 @@ +import { ITemplateItem, Props } from "../../models/eft/common/tables/ITemplateItem"; +import { CreateItemResult, LocaleDetails, NewItemDetails, NewItemFromCloneDetails } from "../../models/spt/mod/NewItemDetails"; +import { IDatabaseTables } from "../../models/spt/server/IDatabaseTables"; +import { ILogger } from "../../models/spt/utils/ILogger"; +import { DatabaseServer } from "../../servers/DatabaseServer"; +import { HashUtil } from "../../utils/HashUtil"; +import { JsonUtil } from "../../utils/JsonUtil"; +export declare class CustomItemService { + protected logger: ILogger; + protected hashUtil: HashUtil; + protected jsonUtil: JsonUtil; + protected databaseServer: DatabaseServer; + protected tables: IDatabaseTables; + constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer); + /** + * Create a new item from a cloned item base + * WARNING - If no item id is supplied, an id will be generated, this id will be random every time you add an item and will not be the same on each subsequent server start + * Add to the items db + * Add to the flea market + * Add to the handbook + * Add to the locales + * @param newItemDetails Item details for the new item to be created + * @returns tplId of the new item created + */ + createItemFromClone(newItemDetails: NewItemFromCloneDetails): CreateItemResult; + /** + * Create a new item without using an existing item as a template + * Add to the items db + * Add to the flea market + * Add to the handbook + * Add to the locales + * @param newItemDetails Details on what the item to be created + * @returns CreateItemResult containing the completed items Id + */ + createItem(newItemDetails: NewItemDetails): CreateItemResult; + /** + * If the id provided is an empty string, return a randomly generated guid, otherwise return the newId parameter + * @param newId id supplied to code + * @returns item id + */ + protected getOrGenerateIdForItem(newId: string): string; + /** + * Iterates through supplied properties and updates the cloned items properties with them + * Complex objects cannot have overrides, they must be fully hydrated with values if they are to be used + * @param overrideProperties new properties to apply + * @param itemClone item to update + */ + protected updateBaseItemPropertiesWithOverrides(overrideProperties: Props, itemClone: ITemplateItem): void; + /** + * Addd a new item object to the in-memory representation of items.json + * @param newItemId id of the item to add to items.json + * @param itemToAdd Item to add against the new id + */ + protected addToItemsDb(newItemId: string, itemToAdd: ITemplateItem): void; + /** + * Add a handbook price for an item + * @param newItemId id of the item being added + * @param parentId parent id of the item being added + * @param priceRoubles price of the item being added + */ + protected addToHandbookDb(newItemId: string, parentId: string, priceRoubles: number): void; + /** + * Iterate through the passed in locale data and add to each locale in turn + * If data is not provided for each langauge eft uses, the first object will be used in its place + * e.g. + * en[0] + * fr[1] + * + * No jp provided, so english will be used as a substitute + * @param localeDetails key is language, value are the new locale details + * @param newItemId id of the item being created + */ + protected addToLocaleDbs(localeDetails: Record, newItemId: string): void; + /** + * Add a price to the in-memory representation of prices.json, used to inform the flea of an items price on the market + * @param newItemId id of the new item + * @param fleaPriceRoubles Price of the new item + */ + protected addToFleaPriceDb(newItemId: string, fleaPriceRoubles: number): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/mod/dynamicRouter/DynamicRouterMod.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/dynamicRouter/DynamicRouterMod.d.ts new file mode 100644 index 0000000..abfe237 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/dynamicRouter/DynamicRouterMod.d.ts @@ -0,0 +1,6 @@ +import { DynamicRouter, RouteAction } from "../../../di/Router"; +export declare class DynamicRouterMod extends DynamicRouter { + private topLevelRoute; + constructor(routes: RouteAction[], topLevelRoute: string); + getTopLevelRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/mod/dynamicRouter/DynamicRouterModService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/dynamicRouter/DynamicRouterModService.d.ts new file mode 100644 index 0000000..6742fc6 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/dynamicRouter/DynamicRouterModService.d.ts @@ -0,0 +1,7 @@ +import { DependencyContainer } from "tsyringe"; +import { RouteAction } from "../../../di/Router"; +export declare class DynamicRouterModService { + private container; + constructor(container: DependencyContainer); + registerDynamicRouter(name: string, routes: RouteAction[], topLevelRoute: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/mod/httpListener/HttpListenerMod.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/httpListener/HttpListenerMod.d.ts new file mode 100644 index 0000000..2cdfbda --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/httpListener/HttpListenerMod.d.ts @@ -0,0 +1,10 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { IHttpListener } from "../../../servers/http/IHttpListener"; +export declare class HttpListenerMod implements IHttpListener { + private canHandleOverride; + private handleOverride; + constructor(canHandleOverride: (sessionId: string, req: IncomingMessage) => boolean, handleOverride: (sessionId: string, req: IncomingMessage, resp: ServerResponse) => void); + canHandle(sessionId: string, req: IncomingMessage): boolean; + handle(sessionId: string, req: IncomingMessage, resp: ServerResponse): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/mod/httpListener/HttpListenerModService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/httpListener/HttpListenerModService.d.ts new file mode 100644 index 0000000..9dd3473 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/httpListener/HttpListenerModService.d.ts @@ -0,0 +1,8 @@ +/// +import { IncomingMessage, ServerResponse } from "http"; +import { DependencyContainer } from "tsyringe"; +export declare class HttpListenerModService { + protected container: DependencyContainer; + constructor(container: DependencyContainer); + registerHttpListener(name: string, canHandleOverride: (sessionId: string, req: IncomingMessage) => boolean, handleOverride: (sessionId: string, req: IncomingMessage, resp: ServerResponse) => void): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/mod/image/ImageRouteService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/image/ImageRouteService.d.ts new file mode 100644 index 0000000..29569b2 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/image/ImageRouteService.d.ts @@ -0,0 +1,6 @@ +export declare class ImageRouteService { + protected routes: Record; + addRoute(urlKey: string, route: string): void; + getByKey(urlKey: string): string; + existsByKey(urlKey: string): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/mod/onLoad/OnLoadMod.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/onLoad/OnLoadMod.d.ts new file mode 100644 index 0000000..a4b58b5 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/onLoad/OnLoadMod.d.ts @@ -0,0 +1,8 @@ +import { OnLoad } from "../../../di/OnLoad"; +export declare class OnLoadMod implements OnLoad { + private onLoadOverride; + private getRouteOverride; + constructor(onLoadOverride: () => void, getRouteOverride: () => string); + onLoad(): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/mod/onLoad/OnLoadModService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/onLoad/OnLoadModService.d.ts new file mode 100644 index 0000000..f402103 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/onLoad/OnLoadModService.d.ts @@ -0,0 +1,6 @@ +import { DependencyContainer } from "tsyringe"; +export declare class OnLoadModService { + protected container: DependencyContainer; + constructor(container: DependencyContainer); + registerOnLoad(name: string, onLoad: () => void, getRoute: () => string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/mod/onUpdate/OnUpdateMod.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/onUpdate/OnUpdateMod.d.ts new file mode 100644 index 0000000..8dfe6dd --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/onUpdate/OnUpdateMod.d.ts @@ -0,0 +1,8 @@ +import { OnUpdate } from "../../../di/OnUpdate"; +export declare class OnUpdateMod implements OnUpdate { + private onUpdateOverride; + private getRouteOverride; + constructor(onUpdateOverride: (timeSinceLastRun: number) => boolean, getRouteOverride: () => string); + onUpdate(timeSinceLastRun: number): Promise; + getRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/mod/onUpdate/OnUpdateModService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/onUpdate/OnUpdateModService.d.ts new file mode 100644 index 0000000..05d735b --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/onUpdate/OnUpdateModService.d.ts @@ -0,0 +1,6 @@ +import { DependencyContainer } from "tsyringe"; +export declare class OnUpdateModService { + protected container: DependencyContainer; + constructor(container: DependencyContainer); + registerOnUpdate(name: string, onUpdate: (timeSinceLastRun: number) => boolean, getRoute: () => string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/mod/staticRouter/StaticRouterMod.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/staticRouter/StaticRouterMod.d.ts new file mode 100644 index 0000000..1e62747 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/staticRouter/StaticRouterMod.d.ts @@ -0,0 +1,6 @@ +import { RouteAction, StaticRouter } from "../../../di/Router"; +export declare class StaticRouterMod extends StaticRouter { + private topLevelRoute; + constructor(routes: RouteAction[], topLevelRoute: string); + getTopLevelRoute(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/services/mod/staticRouter/StaticRouterModService.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/staticRouter/StaticRouterModService.d.ts new file mode 100644 index 0000000..f28fd45 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/services/mod/staticRouter/StaticRouterModService.d.ts @@ -0,0 +1,7 @@ +import { DependencyContainer } from "tsyringe"; +import { RouteAction } from "../../../di/Router"; +export declare class StaticRouterModService { + protected container: DependencyContainer; + constructor(container: DependencyContainer); + registerStaticRouter(name: string, routes: RouteAction[], topLevelRoute: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/App.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/App.d.ts new file mode 100644 index 0000000..b947c83 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/App.d.ts @@ -0,0 +1,17 @@ +import { OnLoad } from "../di/OnLoad"; +import { OnUpdate } from "../di/OnUpdate"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; +import { TimeUtil } from "./TimeUtil"; +export declare class App { + protected logger: ILogger; + protected timeUtil: TimeUtil; + protected localisationService: LocalisationService; + protected onLoadComponents: OnLoad[]; + protected onUpdateComponents: OnUpdate[]; + protected onUpdateLastRun: {}; + constructor(logger: ILogger, timeUtil: TimeUtil, localisationService: LocalisationService, onLoadComponents: OnLoad[], onUpdateComponents: OnUpdate[]); + load(): Promise; + protected update(onUpdateComponents: OnUpdate[]): Promise; + protected logUpdateException(err: any, updateable: OnUpdate): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/AyncQueue.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/AyncQueue.d.ts new file mode 100644 index 0000000..da6ab18 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/AyncQueue.d.ts @@ -0,0 +1,7 @@ +import { IAsyncQueue } from "../models/spt/utils/IAsyncQueue"; +import { ICommand } from "../models/spt/utils/ICommand"; +export declare class AsyncQueue implements IAsyncQueue { + protected commandsQueue: ICommand[]; + constructor(); + waitFor(command: ICommand): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/DatabaseImporter.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/DatabaseImporter.d.ts new file mode 100644 index 0000000..c09d63a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/DatabaseImporter.d.ts @@ -0,0 +1,35 @@ +import { OnLoad } from "../di/OnLoad"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ImageRouter } from "../routers/ImageRouter"; +import { DatabaseServer } from "../servers/DatabaseServer"; +import { LocalisationService } from "../services/LocalisationService"; +import { EncodingUtil } from "./EncodingUtil"; +import { HashUtil } from "./HashUtil"; +import { ImporterUtil } from "./ImporterUtil"; +import { JsonUtil } from "./JsonUtil"; +import { VFS } from "./VFS"; +export declare class DatabaseImporter implements OnLoad { + protected logger: ILogger; + protected vfs: VFS; + protected jsonUtil: JsonUtil; + protected localisationService: LocalisationService; + protected databaseServer: DatabaseServer; + protected imageRouter: ImageRouter; + protected encodingUtil: EncodingUtil; + protected hashUtil: HashUtil; + protected importerUtil: ImporterUtil; + private hashedFile; + private valid; + private filepath; + constructor(logger: ILogger, vfs: VFS, jsonUtil: JsonUtil, localisationService: LocalisationService, databaseServer: DatabaseServer, imageRouter: ImageRouter, encodingUtil: EncodingUtil, hashUtil: HashUtil, importerUtil: ImporterUtil); + onLoad(): Promise; + /** + * Read all json files in database folder and map into a json object + * @param filepath path to database folder + */ + protected hydrateDatabase(filepath: string): Promise; + private onReadValidate; + getRoute(): string; + private validateFile; + loadImages(filepath: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/EncodingUtil.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/EncodingUtil.d.ts new file mode 100644 index 0000000..dabb97a --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/EncodingUtil.d.ts @@ -0,0 +1,15 @@ +export declare class EncodingUtil { + encode(value: string, encode: EncodeType): string; + decode(value: string, encode: EncodeType): string; + fromBase64(value: string): string; + toBase64(value: string): string; + fromHex(value: string): string; + toHex(value: string): string; +} +export declare enum EncodeType { + BASE64 = "base64", + HEX = "hex", + ASCII = "ascii", + BINARY = "binary", + UTF8 = "utf8" +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/HashUtil.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/HashUtil.d.ts new file mode 100644 index 0000000..a8500e1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/HashUtil.d.ts @@ -0,0 +1,21 @@ +/// +import crypto from "crypto"; +import { TimeUtil } from "./TimeUtil"; +export declare class HashUtil { + protected timeUtil: TimeUtil; + constructor(timeUtil: TimeUtil); + /** + * Create a 24 character id using the sha256 algorithm + current timestamp + * @returns 24 character hash + */ + generate(): string; + generateMd5ForData(data: string): string; + generateSha1ForData(data: string): string; + /** + * Create a hash for the data parameter + * @param algorithm algorithm to use to hash + * @param data data to be hashed + * @returns hash value + */ + generateHashForData(algorithm: string, data: crypto.BinaryLike): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/HttpFileUtil.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/HttpFileUtil.d.ts new file mode 100644 index 0000000..afc8409 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/HttpFileUtil.d.ts @@ -0,0 +1,8 @@ +/// +import { ServerResponse } from "http"; +import { HttpServerHelper } from "../helpers/HttpServerHelper"; +export declare class HttpFileUtil { + protected httpServerHelper: HttpServerHelper; + constructor(httpServerHelper: HttpServerHelper); + sendFile(resp: ServerResponse, file: any): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/HttpResponseUtil.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/HttpResponseUtil.d.ts new file mode 100644 index 0000000..3a78618 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/HttpResponseUtil.d.ts @@ -0,0 +1,19 @@ +import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; +import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; +import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; +import { BackendErrorCodes } from "../models/enums/BackendErrorCodes"; +import { LocalisationService } from "../services/LocalisationService"; +import { JsonUtil } from "./JsonUtil"; +export declare class HttpResponseUtil { + protected jsonUtil: JsonUtil; + protected localisationService: LocalisationService; + constructor(jsonUtil: JsonUtil, localisationService: LocalisationService); + protected clearString(s: string): any; + noBody(data: any): any; + getBody(data: T, err?: number, errmsg?: any): IGetBodyResponseData; + getUnclearedBody(data: any, err?: number, errmsg?: any): string; + emptyResponse(): IGetBodyResponseData; + nullResponse(): INullResponseData; + emptyArrayResponse(): IGetBodyResponseData; + appendErrorToOutput(output: IItemEventRouterResponse, message?: string, errorCode?: BackendErrorCodes): IItemEventRouterResponse; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/ImporterUtil.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/ImporterUtil.d.ts new file mode 100644 index 0000000..75aaf54 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/ImporterUtil.d.ts @@ -0,0 +1,21 @@ +import { JsonUtil } from "./JsonUtil"; +import { VFS } from "./VFS"; +export declare class ImporterUtil { + protected vfs: VFS; + protected jsonUtil: JsonUtil; + constructor(vfs: VFS, jsonUtil: JsonUtil); + /** + * Load files into js objects recursively (asynchronous) + * @param filepath Path to folder with files + * @returns Promise return T type associated with this class + */ + loadRecursiveAsync(filepath: string, onReadCallback?: (fileWithPath: string, data: string) => void, onObjectDeserialized?: (fileWithPath: string, object: any) => void): Promise; + /** + * Load files into js objects recursively (synchronous) + * @param filepath Path to folder with files + * @returns + */ + loadRecursive(filepath: string, onReadCallback?: (fileWithPath: string, data: string) => void, onObjectDeserialized?: (fileWithPath: string, object: any) => void): T; + loadAsync(filepath: string, strippablePath?: string, onReadCallback?: (fileWithPath: string, data: string) => void, onObjectDeserialized?: (fileWithPath: string, object: any) => void): Promise; + protected placeObject(fileDeserialized: any, strippedFilePath: string, result: T, strippablePath: string): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/JsonUtil.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/JsonUtil.d.ts new file mode 100644 index 0000000..229dc26 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/JsonUtil.d.ts @@ -0,0 +1,27 @@ +import { ILogger } from "../models/spt/utils/ILogger"; +import { HashUtil } from "./HashUtil"; +import { VFS } from "./VFS"; +export declare class JsonUtil { + protected vfs: VFS; + protected hashUtil: HashUtil; + protected logger: ILogger; + protected fileHashes: any; + protected jsonCacheExists: boolean; + constructor(vfs: VFS, hashUtil: HashUtil, logger: ILogger); + /** + * From object to string + * @param data object to turn into JSON + * @param prettify Should output be prettified? + * @returns string + */ + serialize(data: T, prettify?: boolean): string; + /** + * From string to object + * @param jsonString json string to turn into object + * @returns object + */ + deserialize(jsonString: string, filename?: string): T; + deserializeWithCacheCheckAsync(jsonString: string, filePath: string): Promise; + deserializeWithCacheCheck(jsonString: string, filePath: string): T; + clone(data: T): T; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/MathUtil.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/MathUtil.d.ts new file mode 100644 index 0000000..ea5fd69 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/MathUtil.d.ts @@ -0,0 +1,53 @@ +export declare class MathUtil { + /** + * Helper to create the sum of all array elements + * @param {array} values The array with numbers of which to calculate the sum + * @return {number} sum(values) + */ + arraySum(values: number[]): number; + /** + * Helper to create the cumulative sum of all array elements + * arrayCumsum([1, 2, 3, 4]) = [1, 3, 6, 10] + * @param {array} values The array with numbers of which to calculate the cumulative sum + * @return {array} cumsum(values) + */ + arrayCumsum(values: number[]): number[]; + /** + * Helper to create the product of each element times factor + * @param {array} values The array of numbers which shall be multiplied by the factor + * @return {array} array times factor + */ + arrayProd(values: number[], factor: number): number[]; + /** + * Helper to add a constant to all array elements + * @param {array} values The array of numbers to which the summand should be added + * @return {array} array plus summand + */ + arrayAdd(values: number[], summand: number): number[]; + /** + * Map a value from an input range to an output range linearly + * + * Example: + * a_min = 0; a_max=1; + * b_min = 1; b_max=3; + * MathUtil.mapToRange(0.5, a_min, a_max, b_min, b_max) // returns 2 + * + * @param {number} x The value from input range to be mapped to output range + * @param {number} minIn min of input range + * @param {number} maxIn max of input range + * @param {number} minOut min of output range + * @param {number} maxOut max of outout range + * @return {number} the result of the mapping + */ + mapToRange(x: number, minIn: number, maxIn: number, minOut: number, maxOut: number): number; + /** + * Linear interpolation + * e.g. used to do a continuous integration for quest rewards which are defined for specific support centers of pmcLevel + * + * @param {string} xp the point of x at which to interpolate + * @param {array} x support points in x (of same length as y) + * @param {array} y support points in y (of same length as x) + * @return {number} y(xp) + */ + interp1(xp: number, x: number[], y: number[]): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/ObjectId.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/ObjectId.d.ts new file mode 100644 index 0000000..03aae56 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/ObjectId.d.ts @@ -0,0 +1,14 @@ +/// +import { TimeUtil } from "./TimeUtil"; +export declare class ObjectId { + protected timeUtil: TimeUtil; + constructor(timeUtil: TimeUtil); + protected randomBytes: Buffer; + protected constglobalCounter: number; + protected consttime: number; + protected globalCounter: number; + protected time: number; + incGlobalCounter(): number; + toHexString(byteArray: string | any[] | Buffer): string; + generate(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/RagfairOfferHolder.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/RagfairOfferHolder.d.ts new file mode 100644 index 0000000..46d9e23 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/RagfairOfferHolder.d.ts @@ -0,0 +1,24 @@ +import { IRagfairOffer } from "../models/eft/ragfair/IRagfairOffer"; +export declare class RagfairOfferHolder { + private offersById; + private offersByTemplate; + private offersByTrader; + constructor(); + getOfferById(id: string): IRagfairOffer; + getOffersByTemplate(templateId: string): Array; + getOffersByTrader(traderId: string): Array; + getOffers(): Array; + addOffers(offers: Array): void; + addOffer(offer: IRagfairOffer): void; + removeOffer(offer: IRagfairOffer): void; + removeOffers(offers: Array): void; + removeOfferByTrader(traderId: string): void; + /** + * Get an array of stale offers that are still shown to player + * @returns IRagfairOffer array + */ + getStaleOffers(time: number): Array; + private addOfferByTemplates; + private addOfferByTrader; + protected isStale(offer: IRagfairOffer, time: number): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/RandomUtil.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/RandomUtil.d.ts new file mode 100644 index 0000000..fc0b05d --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/RandomUtil.d.ts @@ -0,0 +1,166 @@ +import { ILogger } from "../models/spt/utils/ILogger"; +import { JsonUtil } from "./JsonUtil"; +import { MathUtil } from "./MathUtil"; +/** + * Array of ProbabilityObjectArray which allow to randomly draw of the contained objects + * based on the relative probability of each of its elements. + * The probabilities of the contained element is not required to be normalized. + * + * Example: + * po = new ProbabilityObjectArray( + * new ProbabilityObject("a", 5), + * new ProbabilityObject("b", 1), + * new ProbabilityObject("c", 1) + * ); + * res = po.draw(10000); + * // count the elements which should be distributed according to the relative probabilities + * res.filter(x => x==="b").reduce((sum, x) => sum + 1 , 0) + */ +export declare class ProbabilityObjectArray extends Array> { + private mathUtil; + constructor(mathUtil: MathUtil, ...items: ProbabilityObject[]); + filter(callbackfn: (value: ProbabilityObject, index: number, array: ProbabilityObject[]) => any): ProbabilityObjectArray; + /** + * Calculates the normalized cumulative probability of the ProbabilityObjectArray's elements normalized to 1 + * @param {array} probValues The relative probability values of which to calculate the normalized cumulative sum + * @returns {array} Cumulative Sum normalized to 1 + */ + cumulativeProbability(probValues: number[]): number[]; + /** + * Clone this ProbabilitObjectArray + * @returns {ProbabilityObjectArray} Deep Copy of this ProbabilityObjectArray + */ + clone(): ProbabilityObjectArray; + /** + * Drop an element from the ProbabilityObjectArray + * + * @param {string} key The key of the element to drop + * @returns {ProbabilityObjectArray} ProbabilityObjectArray without the dropped element + */ + drop(key: K): ProbabilityObjectArray; + /** + * Return the data field of a element of the ProbabilityObjectArray + * @param {string} key The key of the element whose data shall be retrieved + * @returns {object} The data object + */ + data(key: K): V; + /** + * Get the relative probability of an element by its key + * + * Example: + * po = new ProbabilityObjectArray(new ProbabilityObject("a", 5), new ProbabilityObject("b", 1)) + * po.maxProbability() // returns 5 + * + * @param {string} key The key of the element whose relative probability shall be retrieved + * @return {number} The relative probability + */ + probability(key: K): number; + /** + * Get the maximum relative probability out of a ProbabilityObjectArray + * + * Example: + * po = new ProbabilityObjectArray(new ProbabilityObject("a", 5), new ProbabilityObject("b", 1)) + * po.maxProbability() // returns 5 + * + * @return {number} the maximum value of all relative probabilities in this ProbabilityObjectArray + */ + maxProbability(): number; + /** + * Get the minimum relative probability out of a ProbabilityObjectArray + * + * Example: + * po = new ProbabilityObjectArray(new ProbabilityObject("a", 5), new ProbabilityObject("b", 1)) + * po.minProbability() // returns 1 + * + * @return {number} the minimum value of all relative probabilities in this ProbabilityObjectArray + */ + minProbability(): number; + /** + * Draw random element of the ProbabilityObject N times to return an array of N keys. + * Drawing can be with or without replacement + * + * @param {integer} count The number of times we want to draw + * @param {boolean} replacement Draw with or without replacement from the input dict + * @param {array} locklist list keys which shall be replaced even if drawing without replacement + * @return {array} Array consisting of N random keys for this ProbabilityObjectArray + */ + draw(count?: number, replacement?: boolean, locklist?: Array): K[]; +} +/** + * A ProbabilityObject which is use as an element to the ProbabilityObjectArray array + * It contains a key, the relative probability as well as optional data. + */ +export declare class ProbabilityObject { + key: K; + relativeProbability: number; + data: V; + /** + * Constructor for the ProbabilityObject + * @param {string} key The key of the element + * @param {number} relativeProbability The relative probability of this element + * @param {any} data Optional data attached to the element + */ + constructor(key: K, relativeProbability: number, data?: V); +} +export declare class RandomUtil { + protected jsonUtil: JsonUtil; + protected logger: ILogger; + constructor(jsonUtil: JsonUtil, logger: ILogger); + getInt(min: number, max: number): number; + getIntEx(max: number): number; + getFloat(min: number, max: number): number; + getBool(): boolean; + getPercentOfValue(percent: number, number: number, toFixed?: number): number; + /** + * Check if number passes a check out of 100 + * @param chancePercent value check needs to be above + * @returns true if value passes check + */ + getChance100(chancePercent: number): boolean; + getStringArrayValue(arr: string[]): string; + getArrayValue(arr: T[]): T; + getKey(node: any): string; + getKeyValue(node: { + [x: string]: any; + }): any; + /** + * Draw from normal distribution + * @param {number} mu Mean of the normal distribution + * @param {number} sigma Standard deviation of the normal distribution + * @returns {number} The value drawn + */ + randn(mu: number, sigma: number): number; + /** + * Draw Random integer low inclusive, high exclusive + * if high is not set we draw from 0 to low (exclusive) + * @param {integer} low Lower bound inclusive, when high is not set, this is high + * @param {integer} high Higher bound exclusive + * @returns {integer} The random integer in [low, high) + */ + randInt(low: number, high?: number): number; + /** + * Draw a random element of the provided list N times to return an array of N random elements + * Drawing can be with or without replacement + * @param {array} list The array we want to draw randomly from + * @param {integer} count The number of times we want to draw + * @param {boolean} replacement Draw with or without replacement from the input array + * @return {array} Array consisting of N random elements + */ + drawRandomFromList(list: Array, count?: number, replacement?: boolean): Array; + /** + * Draw a random (top level) element of the provided dictionary N times to return an array of N random dictionary keys + * Drawing can be with or without replacement + * @param {any} dict The dictionary we want to draw randomly from + * @param {integer} count The number of times we want to draw + * @param {boolean} replacement Draw with ot without replacement from the input dict + * @return {array} Array consisting of N random keys of the dictionary + */ + drawRandomFromDict(dict: any, count?: number, replacement?: boolean): any[]; + getBiasedRandomNumber(min: number, max: number, shift: number, n: number): number; + /** + * Fisher-Yates shuffle an array + * @param array Array to shuffle + * @returns Shuffled array + */ + shuffle(array: Array): Array; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/TimeUtil.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/TimeUtil.d.ts new file mode 100644 index 0000000..1367e26 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/TimeUtil.d.ts @@ -0,0 +1,31 @@ +/** + * Utility class to handle time related problems + */ +export declare class TimeUtil { + static readonly oneHourAsSeconds = 3600; + formatTime(date: Date): string; + formatDate(date: Date): string; + getDate(): string; + getTime(): string; + /** + * Get timestamp in seconds + * @returns + */ + getTimestamp(): number; + /** + * mail in eft requires time be in a specific format + * @returns current time in format: 00:00 (hh:mm) + */ + getTimeMailFormat(): string; + /** + * Mail in eft requires date be in a specific format + * @returns current date in format: 00.00.0000 (dd.mm.yyyy) + */ + getDateMailFormat(): string; + /** + * Convert hours into seconds + * @param hours hours to convert to seconds + * @returns number + */ + getHoursAsSeconds(hours: number): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/UUidGenerator.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/UUidGenerator.d.ts new file mode 100644 index 0000000..000b719 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/UUidGenerator.d.ts @@ -0,0 +1,4 @@ +import { IUUidGenerator } from "../models/spt/utils/IUuidGenerator"; +export declare class UUidGenerator implements IUUidGenerator { + generate: () => string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/VFS.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/VFS.d.ts new file mode 100644 index 0000000..267b10f --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/VFS.d.ts @@ -0,0 +1,56 @@ +/// +/// +import fs from "fs"; +import "reflect-metadata"; +import { IAsyncQueue } from "../models/spt/utils/IAsyncQueue"; +import { IUUidGenerator } from "../models/spt/utils/IUuidGenerator"; +export declare class VFS { + protected asyncQueue: IAsyncQueue; + protected uuidGenerator: IUUidGenerator; + accessFilePromisify: (path: fs.PathLike, mode?: number) => Promise; + copyFilePromisify: (src: fs.PathLike, dst: fs.PathLike, flags?: number) => Promise; + mkdirPromisify: (path: fs.PathLike, options: fs.MakeDirectoryOptions & { + recursive: true; + }) => Promise; + readFilePromisify: (path: fs.PathLike) => Promise; + writeFilePromisify: (path: fs.PathLike, data: string, options?: any) => Promise; + readdirPromisify: (path: fs.PathLike, options?: BufferEncoding | { + encoding: BufferEncoding; + withFileTypes?: false; + }) => Promise; + statPromisify: (path: fs.PathLike, options?: fs.StatOptions & { + bigint?: false; + }) => Promise; + unlinkPromisify: (path: fs.PathLike) => Promise; + rmdirPromisify: (path: fs.PathLike) => Promise; + constructor(asyncQueue: IAsyncQueue, uuidGenerator: IUUidGenerator); + exists(filepath: fs.PathLike): boolean; + existsAsync(filepath: fs.PathLike): Promise; + copyFile(filepath: fs.PathLike, target: fs.PathLike): void; + copyAsync(filepath: fs.PathLike, target: fs.PathLike): Promise; + createDir(filepath: string): void; + createDirAsync(filepath: string): Promise; + copyDir(filepath: string, target: string, fileExtensions?: string | string[]): void; + copyDirAsync(filepath: string, target: string, fileExtensions: string | string[]): Promise; + readFile(...args: Parameters): string; + readFileAsync(path: fs.PathLike): Promise; + private isBuffer; + writeFile(filepath: any, data?: string, append?: boolean, atomic?: boolean): void; + writeFileAsync(filepath: any, data?: string, append?: boolean, atomic?: boolean): Promise; + getFiles(filepath: string): string[]; + getFilesAsync(filepath: string): Promise; + getDirs(filepath: string): string[]; + getDirsAsync(filepath: string): Promise; + removeFile(filepath: string): void; + removeFileAsync(filepath: string): Promise; + removeDir(filepath: string): void; + removeDirAsync(filepath: string): Promise; + private lockFileSync; + private checkFileSync; + private unlockFileSync; + getFileExtension(filepath: string): string; + stripExtension(filepath: string): string; + minifyAllJsonInDirRecursive(filepath: string): Promise; + minifyAllJsonInDirRecursiveAsync(filepath: string): Promise; + getFilesOfType(directory: string, fileType: string, files?: string[]): string[]; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/Watermark.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/Watermark.d.ts new file mode 100644 index 0000000..f870cf1 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/Watermark.d.ts @@ -0,0 +1,46 @@ +import { ICoreConfig } from "../models/spt/config/ICoreConfig"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; +import { LocalisationService } from "../services/LocalisationService"; +export declare class WatermarkLocale { + protected localisationService: LocalisationService; + constructor(localisationService: LocalisationService); + protected watermark: { + description: string[]; + warning: string[]; + modding: string[]; + }; + getDescription(): string[]; + getWarning(): string[]; + getModding(): string[]; +} +export declare class Watermark { + protected logger: ILogger; + protected configServer: ConfigServer; + protected localisationService: LocalisationService; + protected watermarkLocale?: WatermarkLocale; + protected akiConfig: ICoreConfig; + constructor(logger: ILogger, configServer: ConfigServer, localisationService: LocalisationService, watermarkLocale?: WatermarkLocale); + protected text: string[]; + protected versionLabel: string; + initialize(): void; + /** + * Get a version string (x.x.x) or (x.x.x-BLEEDINGEDGE) OR (X.X.X (18xxx)) + * @param withEftVersion Include the eft version this spt version was made for + * @returns string + */ + getVersionTag(withEftVersion?: boolean): string; + /** + * Get text shown in game on screen, can't be translated as it breaks bsgs client when certian characters are used + * @returns string + */ + getInGameVersionLabel(): string; + /** Set window title */ + setTitle(): void; + /** Reset console cursor to top */ + resetCursor(): void; + /** Draw the watermark */ + draw(): void; + /** Caculate text length */ + protected textLength(s: string): number; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/collections/lists/LinkedList.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/collections/lists/LinkedList.d.ts new file mode 100644 index 0000000..aca0659 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/collections/lists/LinkedList.d.ts @@ -0,0 +1,30 @@ +export declare class LinkedList { + private head; + private tail; + add(t: T): void; + addRange(list: T[]): void; + getHead(): LinkedListNode; + getTail(): LinkedListNode; + isEmpty(): boolean; + getSize(): number; + removeFirst(): LinkedListNode; + removeLast(): LinkedListNode; + indexOf(func: (t: T) => boolean): number; + contains(func: (t: T) => boolean): boolean; + forEachNode(func: (t: LinkedListNode) => void): void; + forEachValue(func: (t: T) => void): void; + findFirstNode(func: (t: LinkedListNode) => boolean): LinkedListNode; + findFirstValue(func: (t: T) => boolean): T; + toList(): T[]; +} +export declare class LinkedListNode { + private previous; + private value; + private next; + constructor(value: T, previous?: LinkedListNode, next?: LinkedListNode); + getValue(): T; + getNextNode(): LinkedListNode; + setNextNode(node: LinkedListNode): void; + getPreviousNode(): LinkedListNode; + setPreviousNode(node: LinkedListNode): void; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/collections/queue/Queue.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/collections/queue/Queue.d.ts new file mode 100644 index 0000000..645d462 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/collections/queue/Queue.d.ts @@ -0,0 +1,12 @@ +export declare class Queue { + private elements; + private head; + private tail; + constructor(); + enqueue(element: T): void; + enqueueAll(elements: T[]): void; + dequeue(): T; + peek(): T; + getLength(): number; + isEmpty(): boolean; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/logging/AbstractWinstonLogger.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/logging/AbstractWinstonLogger.d.ts new file mode 100644 index 0000000..1ae1100 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/logging/AbstractWinstonLogger.d.ts @@ -0,0 +1,69 @@ +/// +import fs from "fs"; +import winston from "winston"; +import { Daum } from "../../models/eft/itemEvent/IItemEventRouterRequest"; +import { LogBackgroundColor } from "../../models/spt/logging/LogBackgroundColor"; +import { LogTextColor } from "../../models/spt/logging/LogTextColor"; +import { SptLogger } from "../../models/spt/logging/SptLogger"; +import { IAsyncQueue } from "../../models/spt/utils/IAsyncQueue"; +import { ILogger } from "../../models/spt/utils/ILogger"; +import { IUUidGenerator } from "../../models/spt/utils/IUuidGenerator"; +export declare abstract class AbstractWinstonLogger implements ILogger { + protected asyncQueue: IAsyncQueue; + protected uuidGenerator: IUUidGenerator; + protected showDebugInConsole: boolean; + protected filePath: string; + protected logLevels: { + levels: { + error: number; + warn: number; + succ: number; + info: number; + custom: number; + debug: number; + }; + colors: { + error: string; + warn: string; + succ: string; + info: string; + custom: string; + debug: string; + }; + bgColors: { + default: string; + blackBG: string; + redBG: string; + greenBG: string; + yellowBG: string; + blueBG: string; + magentaBG: string; + cyanBG: string; + whiteBG: string; + }; + }; + protected logger: winston.Logger & SptLogger; + protected writeFilePromisify: (path: fs.PathLike, data: string, options?: any) => Promise; + constructor(asyncQueue: IAsyncQueue, uuidGenerator: IUUidGenerator); + protected abstract isLogToFile(): boolean; + protected abstract isLogToConsole(): boolean; + protected abstract isLogExceptions(): boolean; + protected abstract getFilePath(): string; + protected abstract getFileName(): string; + protected getLogMaxSize(): string; + protected getLogMaxFiles(): string; + writeToLogFile(data: string | Daum): Promise; + log(data: string | Error | Record, color: string, backgroundColor?: string): Promise; + error(data: string | Record): Promise; + warning(data: string | Record): Promise; + success(data: string | Record): Promise; + info(data: string | Record): Promise; + /** + * Log to console text with a customisable text and background color. Background defaults to black + * @param data text to log + * @param textColor color of text + * @param backgroundColor color of background + */ + logWithColor(data: string | Record, textColor: LogTextColor, backgroundColor?: LogBackgroundColor): Promise; + debug(data: string | Record, onlyShowInConsole?: boolean): Promise; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/logging/WinstonMainLogger.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/logging/WinstonMainLogger.d.ts new file mode 100644 index 0000000..3c67902 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/logging/WinstonMainLogger.d.ts @@ -0,0 +1,13 @@ +import { IAsyncQueue } from "../../models/spt/utils/IAsyncQueue"; +import { IUUidGenerator } from "../../models/spt/utils/IUuidGenerator"; +import { AbstractWinstonLogger } from "./AbstractWinstonLogger"; +export declare class WinstonMainLogger extends AbstractWinstonLogger { + protected asyncQueue: IAsyncQueue; + protected uuidGenerator: IUUidGenerator; + constructor(asyncQueue: IAsyncQueue, uuidGenerator: IUUidGenerator); + protected isLogExceptions(): boolean; + protected isLogToFile(): boolean; + protected isLogToConsole(): boolean; + protected getFilePath(): string; + protected getFileName(): string; +} diff --git a/TypeScript/17AsyncImporterWithDependency2/types/utils/logging/WinstonRequestLogger.d.ts b/TypeScript/17AsyncImporterWithDependency2/types/utils/logging/WinstonRequestLogger.d.ts new file mode 100644 index 0000000..1475e43 --- /dev/null +++ b/TypeScript/17AsyncImporterWithDependency2/types/utils/logging/WinstonRequestLogger.d.ts @@ -0,0 +1,14 @@ +import { IAsyncQueue } from "../../models/spt/utils/IAsyncQueue"; +import { IUUidGenerator } from "../../models/spt/utils/IUuidGenerator"; +import { AbstractWinstonLogger } from "./AbstractWinstonLogger"; +export declare class WinstonRequestLogger extends AbstractWinstonLogger { + protected asyncQueue: IAsyncQueue; + protected uuidGenerator: IUUidGenerator; + constructor(asyncQueue: IAsyncQueue, uuidGenerator: IUUidGenerator); + protected isLogExceptions(): boolean; + protected isLogToFile(): boolean; + protected isLogToConsole(): boolean; + protected getFilePath(): string; + protected getFileName(): string; + protected getLogMaxSize(): string; +}