This commit is contained in:
CWX 2022-05-27 23:13:35 +01:00
parent 17ec44c7f2
commit b5659c564a
513 changed files with 14679 additions and 1001 deletions

View File

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

View File

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

View File

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

View File

@ -20,7 +20,7 @@
"householdGoods": 1, "householdGoods": 1,
"jewelry": 1, "jewelry": 1,
"medicalSupplies": 1, "medicalSupplies": 1,
"flammable": 1, "lubricant": 1,
"tools": 1, "tools": 1,
"other": 1 "other": 1
}, },
@ -77,8 +77,8 @@
"removeScavKarma": false, "removeScavKarma": false,
"energyDrainRate": false, "energyDrainRate": false,
"energyDrainTime": false, "energyDrainTime": false,
"hydratationDrainRate": false, "hydrationDrainRate": false,
"hydratationDrainTime": false, "hydrationDrainTime": false,
"regenerationLoopTime": false, "regenerationLoopTime": false,
"energyRestoration": false, "energyRestoration": false,
"hydrationRestoration": false "hydrationRestoration": false

Binary file not shown.

View File

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

View File

@ -0,0 +1,151 @@
{
"items": {
"allExaminedItems": false,
"weightChanges": false,
"moreStack": false,
"equipRigsWithArmors": false,
"forceMoneyStack": false,
"removeSecureContainerFilters": false,
"removeBackpacksRestrictions": false,
"removeContainersRestrictions": false,
"inRaidModdable": false,
"increaseLootExp": false,
"increaseExamineExp": false,
"removeKeyUsageNumber": false,
"stackableBarters": {
"activated": false,
"battery": 1,
"buildingMaterials": 1,
"electronics": 1,
"householdGoods": 1,
"jewelry": 1,
"medicalSupplies": 1,
"lubricant": 1,
"tools": 1,
"other": 1
},
"weaponMalfunctions": {
"overheat": false,
"jam": false,
"slide": false,
"misfire": false,
"feed": false
},
"weaponDurabilities": {
"minimumSpawnDurability": false,
"maximumSpawnDurability": false
},
"removeAllGearPenalties": false,
"removeItemDurabilityBurn": false,
"removeBulletWeaponDurabilityDamage": false,
"removeWeaponPresetRestriction": false,
"changeIndividualItemProperty": {
"activated": false,
"itemList": {
"__REPLACEMEBYITEMID__": {
"spawnChance": 0
}
}
}
},
"hideout": {
"changeFuelConsumptionRate": false,
"fastHideoutConstruction": false,
"fastHideoutProduction": false,
"fastScavCase": false,
"scavCasePriceReducer": false,
"removeConstructionRequirements": false
},
"player": {
"removeScavTimer": false,
"changeSkillProgressionMultiplier": false,
"changeWeaponSkillMultiplier": false,
"disableSkillFatigue": false,
"skillMinEffectiveness": 0.2,
"skillFatiguePerPoint": 0.2,
"skillFreshEffectiveness": 1.3,
"skillFreshPoints": 1,
"skillPointsBeforeFatigue": 1,
"skillFatigueReset": 300,
"changeMaxStamina": false,
"unlimitedStamina": false,
"removeInRaidRestrictions": false,
"disableFallDamage": false,
"allSkillsMaster": false,
"enableSkillBotReload": false,
"enableSkillBotSound": false,
"removeScavKarma": false,
"energyDrainRate": false,
"energyDrainTime": false,
"hydrationDrainRate": false,
"hydrationDrainTime": false,
"regenerationLoopTime": false,
"energyRestoration": false,
"hydrationRestoration": false
},
"traders": {
"allQuestsAvailable": false,
"allClothesFree": false,
"allClothesForEverySide": false,
"changeFleaMarketLvl": false,
"insuranceTime": {
"activated": false,
"therapist": {
"activated": false,
"min": 0,
"max": 0
},
"prapor": {
"activated": false,
"min": 0,
"max": 0
}
},
"traderChanges": {
"allTraders4Stars": false,
"unlockAllItemsAtLL1": false,
"removeItemsFromQuestLocks": false
},
"maxInsuranceStorageTime": false,
"preventFenceMastering": false,
"removeFIRConditionOnQuests": false
},
"raids": {
"noExtractRestrictions": false,
"allExtractionsAvailable": false,
"increasedBossChance": false,
"extendedRaid": false,
"removeLabsKeycard": false,
"extractionsExtended": false,
"insuranceOnAllMaps": false
},
"fixes": {
"finsChokeMeHarder": true,
"chompsRaiderSpawnFix": true,
"justNUsEvenMoreOpenZones": true
},
"other": {
"compatibilityMods": {
"terragroupSpecialist": false,
"coDMWMilSimCTSFOI": false,
"additionnalGearTan": false,
"additionnalGearBlack": false,
"additionnalGearUntar": false,
"additionnalClothing": false,
"andrudisQuestManiac": false
},
"preWipeEvents": {
"raidersOnAllMaps": false,
"killaOnFactory": false,
"allBossesOnReserve": false,
"allTradersSellCheapItems": false,
"makeObdolbosPowerful": false,
"gluhkarOnLabs": false
},
"inGameEvents": {
"heatWave": false
},
"hideWarningMessage": false,
"showModLogs": true
}
}

View File

@ -0,0 +1,122 @@
{
"items": {
"default": "{OPTION NAME} option is incorrect, {option to enable} or {option to disable}, check the readme.pdf for more info.",
"allExaminedItems": "AllExaminedItems option is incorrect, it must be true to true to activate or false to disable, check the readme.pdf for more info.",
"weightChanges": "WeightChanger option is incorrect, it must be a number to be correct and will only work as a multiplier above 0, if you selected a number below 0, Defaulting to 0. check the readme.pdf for more info.",
"moreStack": "MoreStack option is incorrect, it must be a number to activate or false to disable. check the readme.pdf for more info.",
"equipRigsWithArmors": "EquipRigsWithArmors option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"forceMoneyStack": "ForceMoneyStack option is incorrect, it must be a number to activate or false to disable. check the readme.pdf for more info.",
"removeSecureContainerFilters": "RemoveSecureContainerFilters option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"removeBackpacksRestrictions": "RemoveBackpacksRestrictions option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"removeContainersRestrictions": "RemoveContainersRestrictions option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"inRaidModdable": "InRaidModdable option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"increaseLootExp": "IncreaseLootExp option is incorrect, it must be a number to activate or false to disable. check the readme.pdf for more info.",
"increaseExamineExp": "IncreaseExamineExp option is incorrect, it must be a number to activate or false to disable. check the readme.pdf for more info.",
"removeKeyUsageNumber": "RemoveKeyUsageNumber option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"stackableBarters": "StackableBarters option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"removeAllGearPenalties": "RemoveAllGearPenalties option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"removeItemDurabilityBurn": "RemoveItemDurabilityBurn option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"removeBulletWeaponDurabilityDamage": "RemoveBulletWeaponDurabilityDamage option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"removeWeaponPresetRestriction": "RemoveWeaponPresetRestriction option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"changeIndividualItemProperty": {
"activated": "ChangeIndividualItemProperty[activated] option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info."
},
"weaponMalfunctions": {
"overheat": "Malfunction: Overheat option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info",
"jam": "Malfunction: Jam option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info",
"slide": "Malfunction: Slide option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info",
"misfire": "Malfunction: Misfire option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info",
"feed": "Malfunction: Feed option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info"
},
"weaponDurabilities": {
"minimumSpawnDurability": "Weapon durabilities: Minimum spawn durability value is incorrect, it must be a number to activate or false to disable. check the readme.pdf for more info.",
"maximumSpawnDurability": "Weapon durabilities: Maximum spawn durability value is incorrect, it must be a number to activate or false to disable. check the readme.pdf for more info."
}
},
"hideout": {
"changeFuelConsumptionRate": "ChangeFuelConsumptionRate option is incorrect, it must be a number to activate or false to disable. check the readme.pdf for more info.",
"fastHideoutConstruction": "FastHideoutConstruction option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"fastHideoutProduction": "FastHideoutProduction option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"fastScavCase": "FastScavCase option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"scavCasePriceReducer": "ScavCasePriceReducer option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"removeConstructionsRequirements": "RemoveConstructionsRequirements option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info."
},
"player": {
"removeScavTimer": "RemoveScavTimer option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"changeSkillProgressionMultiplier": "ChangeSkillProgressionMultiplier option is incorrect, it must be a number to activate or false to disable. check the readme.pdf for more info.",
"changeWeaponSkillMultiplier": "ChangeWeaponSkillMultiplier option is incorrect, it must be a number to activate or false to disable. check the readme.pdf for more info.",
"disableSkillFatigue": "DisableSkillFatigue option is incorrect, it must be either true or \"Custom\" to activate or false to disable. check the readme.pdf for more info.",
"skillMinEffectiveness": "SkillMinEffectiveness option is incorrect, it must be a number to activate. check the readme.pdf for more info.",
"skillFatiguePerPoint": "SkillFatiguePerPoint option is incorrect, it must be a number to activate. check the readme.pdf for more info.",
"skillFreshEffectiveness": "SkillFreshEffectiveness option is incorrect, it must be a number to activate. check the readme.pdf for more info.",
"skillFreshPoints": "SkillFreshPoints option is incorrect, it must be a number to activate. check the readme.pdf for more info.",
"skillPointsBeforeFatigue": "SkillPointsBeforeFatigue option is incorrect, it must be a number to activate. check the readme.pdf for more info.",
"skillFatigueReset": "SkillFatigueReset option is incorrect, it must be a number to activate. check the readme.pdf for more info.",
"changeMaxStamina": "ChangeMaxStamina option is incorrect, it must be a number to activate or false to disable. check the readme.pdf for more info.",
"unlimitedStamina": "UnlimitedStamina option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"removeInRaidsRestrictions": "RemoveInRaidsRestrictions option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"allSkillsMaster": "AllSkillsMaster option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"removeScavKarma": "AllSkillsMaster option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"enableSkillBotReload": "EnableSkillBotReload option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"enableSkillBotSound": "EnableSkillBotSound option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"disableFallDamage": "DisableFallDamage option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"energyDrainRate": "EnergyDrainRate option is incorrect, it must be a boolean in order to work (false or number). check the readme.pdf for more info.",
"energyDrainTime": "EnergyDrainTime option is incorrect, it must be a boolean in order to work (false or number). check the readme.pdf for more info.",
"hydrationDrainRate": "hydrationDrainRate option is incorrect, it must be a boolean in order to work (false or number). check the readme.pdf for more info.",
"hydrationDrainTime": "hydrationDrainTime option is incorrect, it must be a boolean in order to work (false or number). check the readme.pdf for more info.",
"regenerationLoopTime": "RegenerationLoopTime option is incorrect, it must be a number to activate or false to disable, check the readme.pdf for more info.",
"energyRestoration": "EnergyRestoration option is incorrect, it must be a number to activate or false to disable, check the readme.pdf for more info.",
"hydrationRestoration": "HydrationRestoration option is incorrect, it must be a number to activate or false to disable, check the readme.pdf for more info."
},
"traders": {
"allQuestsAvailable": "AllQuestsAvailable option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"allClothesFree": "AllClothesFree option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"allClothesForEverySide": "AllClotheForEverySide option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"changeFleaMarketLvl": "ChangeFleaMarketLvl option is incorrect, it must be a number to activate or false to disable. check the readme.pdf for more info.",
"insuranceTime": {
"activated": "InsuranceTime[activated] option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"therapist": {
"activated": "InsuranceTime[Therapist][activated] option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info."
},
"prapor": {
"activated": "InsuranceTime[Prapor][activated] option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info."
}
},
"traderChanges": {
"allTraders4Stars": "AllTraders4Stars option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"unlockAllItemsAtLL1": "UnlockAllItemsAtLL1 option is incorrect, it must be true to activate or false to disable. Check the readme.pdf for more info.",
"removeItemsFromQuestLocks": "RemoveItemsFromQuestLocks option is incorrect, it must be true to activate or false to disable. Check the readme.pdf for more info.",
"all4StarAndLL1": "AllTraders4Stars & UnlockAllItemsAtLL1 are active, disable one of them!"
},
"maxInsuranceStorageTime": "WeightChanger option is incorrect, it must be a number to activate or false to disable. check the readme.pdf for more info.",
"PreventFenceMastering": "PreventFenceMastering option is incorrect, it must be true to activate or false to disable. Check the readme.pdf for more info.",
"removeFIRConditionOnQuests": "Remove FIR condition on quests option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info."
},
"raids": {
"noExtractRestrictions": "NoExtractsRestrictions option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"allExtractionsAvailable": "AllExtractionsAvailable option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"increasedBossChance": "IncreasedBossChance option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"extendedRaid": "ExtendedRaid option is incorrect, it must be false or a number in order to work. check the readme.pdf for more info.",
"removeLabsKeycard": "RemoveLabKeycard option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"extractionsExtended": "ExtractionsExtended option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"insuranceOnAllMaps": "InsuranceOnAllMaps option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info."
},
"other": {
"preWipeEvents": {
"raidersOnAllMaps": "Raiders on all maps option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"killaOnFactory":"Killa on factory option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"allBossesOnReserve": "All bosses on reserve option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"allTradersSellCheapItems": "All bosses on reserve option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"makeObdolbosPowerful": "Make Obdolbos Powerfull option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info.",
"gluhkarOnLabs": "Gluhkar on labs option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info."
},
"inGameEvents": {
"heatWave": "heatWave option is incorrect, it must be true to activate or false to disable. check the readme.pdf for more info."
}
},
"fixes": {
"finsChokeMeHarder": "Fins-ChokeMeHarder option is incorrect, it must be true to activate or false to disable, check the readme.pdf for more info.",
"chompsRaiderSpawnFix": "Chomps-RaiderSpawnFix option is incorrect, it must be true to activate or false to disable, check the readme.pdf for more info.",
"justNUsEvenMoreOpenZones": "JustNUs-EvenMoreOpenzones option is incorrect, it must be true to activate or false to disable, check the readme.pdf for more info."
}
}

View File

@ -0,0 +1,197 @@
export interface StackableBarters
{
activated: boolean;
battery: number;
buildingMaterials: number;
electronics: number;
householdGoods: number;
jewelry: number;
medicalSupplies: number;
lubricant: number;
tools: number;
other: number;
}
export interface WeaponMalfunctions
{
overheat: boolean;
jam: boolean;
slide: boolean;
misfire: boolean;
feed: boolean;
}
export interface WeaponDurabilities
{
minimumSpawnDurability: boolean | number;
maximumSpawnDurability: boolean | number;
}
export interface Items
{
allExaminedItems: boolean;
weightChanges: boolean | number;
moreStack: boolean | number;
equipRigsWithArmors: boolean;
forceMoneyStack: boolean | number;
removeSecureContainerFilters: boolean;
removeBackpacksRestrictions: boolean;
removeContainersRestrictions: boolean;
inRaidModdable: boolean;
increaseLootExp: boolean | number;
increaseExamineExp: boolean | number;
removeKeyUsageNumber: boolean;
stackableBarters: StackableBarters;
weaponMalfunctions: WeaponMalfunctions;
weaponDurabilities: WeaponDurabilities;
removeAllGearPenalties: boolean;
removeItemDurabilityBurn: boolean;
removeBulletWeaponDurabilityDamage: boolean;
removeWeaponPresetRestriction: boolean;
changeIndividualItemProperty: any;
}
export interface Hideout
{
changeFuelConsumptionRate: boolean | number;
fastHideoutConstruction: boolean;
fastHideoutProduction: boolean;
fastScavCase: boolean;
scavCasePriceReducer: boolean;
removeConstructionRequirements: boolean;
}
export interface Player
{
removeScavTimer: boolean;
changeSkillProgressionMultiplier: boolean | number;
changeWeaponSkillMultiplier: boolean | number;
disableSkillFatigue: boolean | string;
skillMinEffectiveness: number;
skillFatiguePerPoint: number;
skillFreshEffectiveness: number;
skillFreshPoints: number;
skillPointsBeforeFatigue: number;
skillFatigueReset: number;
changeMaxStamina: boolean | number;
unlimitedStamina: boolean;
removeInRaidsRestrictions: boolean;
disableFallDamage: boolean;
allSkillsMaster: boolean;
enableSkillBotReload: boolean;
enableSkillBotSound: boolean;
removeScavKarma: boolean;
energyDrainRate: boolean | number;
energyDrainTime: boolean | number;
hydrationDrainRate: boolean | number;
hydrationDrainTime: boolean | number;
regenerationLoopTime: boolean | number;
energyRestoration: boolean | number;
hydrationRestoration: boolean | number;
}
export interface Therapist
{
activated: boolean;
min: number;
max: number;
}
export interface Prapor
{
activated: boolean;
min: number;
max: number;
}
export interface InsuranceTime
{
activated: boolean;
therapist: Therapist;
prapor: Prapor;
}
export interface TraderChanges
{
allTraders4Stars: boolean;
unlockAllItemsAtLL1: boolean;
removeItemsFromQuestLocks: boolean;
}
export interface Traders
{
allQuestsAvailable: boolean;
allClothesFree: boolean;
allClothesForEverySide: boolean;
changeFleaMarketLvl: boolean | number;
insuranceTime: InsuranceTime;
traderChanges: TraderChanges;
maxInsuranceStorageTime: boolean | number;
preventFenceMastering: boolean;
removeFIRConditionOnQuests: boolean;
}
export interface Raids
{
noExtractRestrictions: boolean;
allExtractionsAvailable: boolean;
increasedBossChance: boolean;
extendedRaid: boolean | number;
removeLabsKeycard: boolean;
extractionsExtended: boolean;
insuranceOnAllMaps: boolean;
}
export interface Fixes
{
finsChokeMeHarder: boolean;
chompsRaiderSpawnFix: boolean;
justNUsEvenMoreOpenZones: boolean;
}
export interface CompatibilityMods
{
terragroupSpecialist: boolean;
coDMWMilSimCTSFOI: boolean;
additionnalGearTan: boolean;
additionnalGearBlack: boolean;
additionnalGearUntar: boolean;
additionnalClothing: boolean;
andrudisQuestManiac: boolean;
}
export interface PreWipeEvents
{
raidersOnAllMaps: boolean;
killaOnFactory: boolean;
allBossesOnReserve: boolean;
allTradersSellCheapItems: boolean;
makeObdolbosPowerful: boolean;
gluhkarOnLabs: boolean;
}
export interface InGameEvents
{
heatWave: boolean;
}
export interface Other
{
compatibilityMods: CompatibilityMods;
preWipeEvents: PreWipeEvents;
inGameEvents: InGameEvents;
hideWarningMessage: boolean;
showModLogs: boolean;
}
export interface IConfig
{
items: Items;
hideout: Hideout;
player: Player;
traders: Traders;
raids: Raids;
fixes: Fixes;
other: Other;
}

View File

@ -0,0 +1,172 @@
export interface ChangeIndividualItemProperty
{
activated: string;
}
export interface WeaponMalfunctions
{
overheat: string;
jam: string;
slide: string;
misfire: string;
feed: string;
}
export interface WeaponDurabilities
{
minimumSpawnDurability: string;
maximumSpawnDurability: string;
}
export interface Items
{
default: string;//
allExaminedItems: string;
weightChanges: string;
moreStack: string;
equipRigsWithArmors: string;
forceMoneyStack: string;
removeSecureContainerFilters: string;
removeBackpacksRestrictions: string;
removeContainersRestrictions: string;
inRaidModdable: string;
increaseLootExp: string;
increaseExamineExp: string;
removeKeyUsageNumber: string;
stackableBarters: string;
removeAllGearPenalties: string;
removeItemDurabilityBurn: string;
removeBulletWeaponDurabilityDamage: string;
removeWeaponPresetRestriction: string;
changeIndividualItemProperty: ChangeIndividualItemProperty;
weaponMalfunctions: WeaponMalfunctions;
weaponDurabilities: WeaponDurabilities;
}
export interface Hideout
{
changeFuelConsumptionRate: string;
fastHideoutConstruction: string;
fastHideoutProduction: string;
fastScavCase: string;
scavCasePriceReducer: string;
removeConstructionRequirements: string;
}
export interface Player
{
removeScavTimer: string;
changeSkillProgressionMultiplier: string;
changeWeaponSkillMultiplier: string;
disableSkillFatigue: string;
skillMinEffectiveness: string;
skillFatiguePerPoint: string;
skillFreshEffectiveness: string;
skillFreshPoints: string;
skillPointsBeforeFatigue: string;
skillFatigueReset: string;
changeMaxStamina: string;
unlimitedStamina: string;
removeInRaidsRestrictions: string;
allSkillsMaster: string;
removeScavKarma: string;
enableSkillBotReload: string;
enableSkillBotSound: string;
disableFallDamage: string;
energyDrainRate: string;
energyDrainTime: string;
hydrationDrainRate: string;
hydrationDrainTime: string;
regenerationLoopTime: string;
energyRestoration: string;
hydrationRestoration: string;
}
export interface Therapist
{
activated: string;
}
export interface Prapor
{
activated: string;
}
export interface InsuranceTime
{
activated: string;
therapist: Therapist;
prapor: Prapor;
}
export interface TraderChanges
{
allTraders4Stars: string;
unlockAllItemsAtLL1: string;
removeItemsFromQuestLocks: string;
all4StarAndLL1: string;
}
export interface Traders
{
allQuestsAvailable: string;
allClothesFree: string;
allClothesForEverySide: string;
changeFleaMarketLvl: string;
insuranceTime: InsuranceTime;
traderChanges: TraderChanges;
maxInsuranceStorageTime: string;
preventFenceMastering: string;
removeFIRConditionOnQuests: string;
}
export interface Raids
{
noExtractRestrictions: string;
allExtractionsAvailable: string;
increasedBossChance: string;
extendedRaid: string;
removeLabsKeycard: string;
extractionsExtended: string;
insuranceOnAllMaps: string;
}
export interface PreWipeEvents
{
raidersOnAllMaps: string;
killaOnFactory: string;
allBossesOnReserve: string;
allTradersSellCheapItems: string;
makeObdolbosPowerful: string;
gluhkarOnLabs: string;
}
export interface Other
{
preWipeEvents: PreWipeEvents;
inGameEvents: InGameEvents;
}
export interface InGameEvents
{
heatWave: string;
}
export interface Fixes
{
finsChokeMeHarder: string;
chompsRaiderSpawnFix: string;
justNUsEvenMoreOpenZones: string;
}
export interface ILocale
{
items: Items;
hideout: Hideout;
player: Player;
traders: Traders;
raids: Raids;
other: Other;
fixes: Fixes;
}

View File

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

View File

@ -0,0 +1,9 @@
{
"name": "AllinOneMod",
"author": "Ereshkigal",
"version": "3.0.0",
"akiVersion": "3.0.0",
"license": "CC-BY-NC-ND 4.0",
"main": "./src/mod.js",
"updated by": "CWX, Valens"
}

View File

@ -0,0 +1,26 @@
import { injectable } from "tsyringe";
import { IConfig } from "../models/IConfig";
import { ILocale } from "../models/ILocale";
@injectable()
export class AIOConfigHandler
{
private config: IConfig;
private locales: ILocale;
constructor()
{
this.config = require("../config/config.json");
this.locales = require("../locale/locale.json")
}
public getConfig(): IConfig
{
return this.config;
}
public getLocales(): ILocale
{
return this.locales;
}
}

View File

@ -0,0 +1,866 @@
import { inject, injectable } from "tsyringe";
import type { ILogger } from "../types/models/spt/utils/ILogger";
import { AIOConfigHandler } from "./AIOConfigHandler";
@injectable()
export class Notifications
{
constructor(
@inject("WinstonLogger") private logger: ILogger,
@inject("AIOConfigHandler") private configHandler: AIOConfigHandler
)
{}
public sendNotifications(): void
{
const config = this.configHandler.getConfig();
const locale = this.configHandler.getLocales();
if (!config.other.hideWarningMessage)
{
this.logger.info("[AIO Mod INFORMATION]");
this.logger.info("Please read the README.PDF carefully as this has all the information you need.");
this.logger.info("[AIO Mod INFORMATION]");
}
//Items:
// All Examined Items:
if (config.items.allExaminedItems)
{
this.logger.info("AllInOne Mod: AllExaminedItems activated.");
if (typeof config.items.allExaminedItems !== "boolean")
{
this.logger.warning(locale.items.allExaminedItems);
}
}
// Weight Changes:
if (config.items.weightChanges !== false)
{
this.logger.info("AllInOne Mod: WeightChanges activated.");
if (typeof config.items.weightChanges !== "boolean" && config.items.weightChanges <= 0)
{
this.logger.warning(locale.items.weightChanges);
}
}
// More Stack:
if (config.items.moreStack !== false)
{
this.logger.info("AllInOne Mod: moreStack activated.");
if (typeof config.items.moreStack !== "number")
{
this.logger.warning(locale.items.moreStack);
}
}
// Equip Rigs With Armors:
if (config.items.equipRigsWithArmors)
{
this.logger.info("AllInOne Mod: equipRigsWithArmors activated.");
if (typeof config.items.equipRigsWithArmors !== "boolean")
{
this.logger.warning(locale.items.equipRigsWithArmors);
}
}
// Force Money Stack:
if (config.items.forceMoneyStack !== false)
{
this.logger.info("AllInOne Mod: forceMoneyStack activated.");
if (typeof config.items.forceMoneyStack !== "number")
{
this.logger.warning(locale.items.forceMoneyStack);
}
}
// Remove Secure Container Filters:
if (config.items.removeSecureContainerFilters)
{
this.logger.info("AllInOne Mod: removeSecureContainerFilters activated.");
if (typeof config.items.removeSecureContainerFilters !== "boolean")
{
this.logger.warning(locale.items.removeSecureContainerFilters);
}
}
// Remove Backpack Restrictions:
if (config.items.removeBackpacksRestrictions)
{
this.logger.info("AllInOne Mod: removeBackpacksRestrictions activated.");
if (typeof config.items.removeBackpacksRestrictions !== "boolean")
{
this.logger.warning(locale.items.removeBackpacksRestrictions);
}
}
// Remove Secure Container Filters:
if (config.items.removeContainersRestrictions)
{
this.logger.info("AllInOne Mod: removeContainersRestrictions activated.");
if (typeof config.items.removeContainersRestrictions !== "boolean")
{
this.logger.warning(locale.items.removeContainersRestrictions);
}
}
// In Raid Moddable
if (config.items.inRaidModdable)
{
this.logger.info("AllInOne Mod: inRaidModdable activated.");
if (typeof config.items.inRaidModdable !== "boolean")
{
this.logger.warning(locale.items.inRaidModdable);
}
}
// Increase Loot Exp
if (config.items.increaseLootExp !== false)
{
this.logger.info("AllInOne Mod: increaseLootExp activated.");
if (typeof config.items.increaseLootExp !== "number")
{
this.logger.warning(locale.items.increaseLootExp);
}
}
// Increase Examine Exp
if (config.items.increaseExamineExp !== false)
{
this.logger.info("AllInOne Mod: increaseExamineExp activated.");
if (typeof config.items.increaseExamineExp !== "number")
{
this.logger.warning(locale.items.increaseExamineExp);
}
}
// Remove Key Usage Number
if (config.items.removeKeyUsageNumber)
{
this.logger.info("AllInOne Mod: removeKeyUsageNumber activated.");
if (typeof config.items.removeKeyUsageNumber !== "boolean")
{
this.logger.warning(locale.items.removeKeyUsageNumber);
}
}
// Stackable Barters
if (config.items.stackableBarters.activated)
{
this.logger.info("AllInOne Mod: stackableBarters activated.");
if (typeof config.items.stackableBarters.activated !== "boolean")
{
this.logger.warning(locale.items.stackableBarters);
}
}
// Weapon Malf - Overheat
if (config.items.weaponMalfunctions.overheat)
{
this.logger.info("AllInOne Mod: weaponMalfunctions.overheat activated.");
if (typeof config.items.weaponMalfunctions.overheat !== "boolean")
{
this.logger.warning(locale.items.weaponMalfunctions.overheat);
}
}
// Weapon Malf - jam
if (config.items.weaponMalfunctions.jam)
{
this.logger.info("AllInOne Mod: weaponMalfunctions.jam activated.");
if (typeof config.items.weaponMalfunctions.jam !== "boolean")
{
this.logger.warning(locale.items.weaponMalfunctions.jam);
}
}
// Weapon Malf - slide
if (config.items.weaponMalfunctions.slide)
{
this.logger.info("AllInOne Mod: weaponMalfunctions.slide activated.");
if (typeof config.items.weaponMalfunctions.slide !== "boolean")
{
this.logger.warning(locale.items.weaponMalfunctions.slide);
}
}
// Weapon Malf - misfire
if (config.items.weaponMalfunctions.misfire)
{
this.logger.info("AllInOne Mod: weaponMalfunctions.misfire activated.");
if (typeof config.items.weaponMalfunctions.misfire !== "boolean")
{
this.logger.warning(locale.items.weaponMalfunctions.misfire);
}
}
// Weapon Malf - misfire
if (config.items.weaponMalfunctions.feed)
{
this.logger.info("AllInOne Mod: weaponMalfunctions.feed activated.");
if (typeof config.items.weaponMalfunctions.feed !== "boolean")
{
this.logger.warning(locale.items.weaponMalfunctions.feed);
}
}
// Weapon Dura - Min
if (config.items.weaponDurabilities.minimumSpawnDurability !== false)
{
this.logger.info("AllInOne Mod: weaponsDurabilities.minimumSpawnDurability activated.");
if (typeof config.items.weaponDurabilities.minimumSpawnDurability !== "number")
{
this.logger.warning(locale.items.weaponDurabilities.minimumSpawnDurability);
}
}
// Weapon Dura - Max
if (config.items.weaponDurabilities.maximumSpawnDurability !== false)
{
this.logger.info("AllInOne Mod: weaponsDurabilities.maximumSpawnDurability activated.");
if (typeof config.items.weaponDurabilities.maximumSpawnDurability !== "number")
{
this.logger.warning(locale.items.weaponDurabilities.maximumSpawnDurability);
}
}
// Remove All Gear Penalties
if (config.items.removeAllGearPenalties)
{
this.logger.info("AllInOne Mod: removeAllGearPenalties activated.");
if (typeof config.items.removeAllGearPenalties !== "boolean")
{
this.logger.warning(locale.items.removeAllGearPenalties);
}
}
// Remove Item Durability Burn
if (config.items.removeItemDurabilityBurn)
{
this.logger.info("AllInOne Mod: removeItemDurabilityBurn activated.");
if (typeof config.items.removeItemDurabilityBurn !== "boolean")
{
this.logger.warning(locale.items.removeItemDurabilityBurn);
}
}
// Remove Bullet Weapon Durability Damage
if (config.items.removeBulletWeaponDurabilityDamage)
{
this.logger.info("AllInOne Mod: removeBulletWeaponDurabilityDamage activated.");
if (typeof config.items.removeBulletWeaponDurabilityDamage !== "boolean")
{
this.logger.warning(locale.items.removeBulletWeaponDurabilityDamage);
}
}
// Remove Weapon Preset Restriction
if (config.items.removeWeaponPresetRestriction)
{
this.logger.info("AllInOne Mod: removeWeaponPresetRestriction activated.");
if (typeof config.items.removeWeaponPresetRestriction !== "boolean")
{
this.logger.warning(locale.items.removeWeaponPresetRestriction);
}
}
// Change Indicidual Item Property
if (config.items.changeIndividualItemProperty.activated)
{
this.logger.info("AllInOne Mod: changeIndividualItemProperty activated.");
if (typeof config.items.changeIndividualItemProperty.activated !== "boolean")
{
this.logger.warning(locale.items.changeIndividualItemProperty.activated);
}
}
// Hideout:
// Change Fuel Consumption Rate
if (config.hideout.changeFuelConsumptionRate !== false)
{
this.logger.info("AllInOne Mod: changeFuelConsumptionRate activated.");
if (typeof config.items.weaponDurabilities.maximumSpawnDurability !== "number")
{
this.logger.warning(locale.hideout.changeFuelConsumptionRate);
}
}
// Fast Hideout Construction
if (config.hideout.fastHideoutConstruction)
{
this.logger.info("AllInOne Mod: fastHideoutConstruction activated.");
if (typeof config.hideout.fastHideoutConstruction !== "boolean")
{
this.logger.warning(locale.hideout.fastHideoutConstruction);
}
}
// Fast Hideout Construction
if (config.hideout.fastHideoutProduction)
{
this.logger.info("AllInOne Mod: fastHideoutProduction activated.");
if (typeof config.hideout.fastHideoutProduction !== "boolean")
{
this.logger.warning(locale.hideout.fastHideoutProduction);
}
}
// Fast Scav Case
if (config.hideout.fastScavCase)
{
this.logger.info("AllInOne Mod: fastScavCase activated.");
if (typeof config.hideout.fastScavCase !== "boolean")
{
this.logger.warning(locale.hideout.fastScavCase);
}
}
// Scav Case Price Reducer
if (config.hideout.scavCasePriceReducer)
{
this.logger.info("AllInOne Mod: scavCasePriceReducer activated.");
if (typeof config.hideout.scavCasePriceReducer !== "boolean")
{
this.logger.warning(locale.hideout.scavCasePriceReducer);
}
}
// Remove Construction Requirements
if (config.hideout.removeConstructionRequirements)
{
this.logger.info("AllInOne Mod: removeConstructionRequirements activated.");
if (typeof config.hideout.removeConstructionRequirements !== "boolean")
{
this.logger.warning(locale.hideout.removeConstructionRequirements);
}
}
// Player:
// Remove Scav Timer
if (config.player.removeScavTimer)
{
this.logger.info("AllInOne Mod: removeScavTimer activated.");
if (typeof config.player.removeScavTimer !== "boolean")
{
this.logger.warning(locale.player.removeScavTimer);
}
}
// Change Skill Progression Multiplier
if (config.player.changeSkillProgressionMultiplier !== false)
{
this.logger.info("AllInOne Mod: changeSkillProgressionMultiplier activated.");
if (typeof config.player.changeSkillProgressionMultiplier !== "number")
{
this.logger.warning(locale.player.changeSkillProgressionMultiplier);
}
}
// Change Weapon Skill Multiplier
if (config.player.changeWeaponSkillMultiplier !== false)
{
this.logger.info("AllInOne Mod: changeWeaponSkillMultiplier activated.");
if (typeof config.player.changeWeaponSkillMultiplier !== "number")
{
this.logger.warning(locale.player.changeWeaponSkillMultiplier);
}
}
// Disable Skill Fatigue
if (config.player.disableSkillFatigue !== false)
{
this.logger.info("AllInOne Mod: disableSkillFatigue activated.");
if (typeof config.player.disableSkillFatigue !== "boolean" && (<string> config.player.disableSkillFatigue).toLowerCase() !== "custom")
{
this.logger.warning(locale.player.disableSkillFatigue);
}
}
// skillFatiguePerPoint
if (typeof config.player.skillFatiguePerPoint !== "number")
{
this.logger.warning(locale.player.skillFatiguePerPoint)
}
// skillFreshEffectiveness
if (typeof config.player.skillFreshEffectiveness !== "number")
{
this.logger.warning(locale.player.skillFreshEffectiveness)
}
// skillFreshPoints
if (typeof config.player.skillFreshPoints !== "number")
{
this.logger.warning(locale.player.skillFreshPoints)
}
// skillPointsBeforeFatigue
if (typeof config.player.skillPointsBeforeFatigue !== "number")
{
this.logger.warning(locale.player.skillPointsBeforeFatigue)
}
// skillFatigueReset
if (typeof config.player.skillFatigueReset !== "number")
{
this.logger.warning(locale.player.skillFatigueReset)
}
// Change Max Stamina
if (config.player.changeMaxStamina !== false)
{
this.logger.info("AllInOne Mod: changeMaxStamina activated.");
if (typeof config.player.changeMaxStamina !== "number")
{
this.logger.warning(locale.player.changeMaxStamina);
}
}
// Unlimited Stamina
if (config.player.unlimitedStamina)
{
this.logger.info("AllInOne Mod: unlimitedStamina activated.");
if (typeof config.player.unlimitedStamina !== "boolean")
{
this.logger.warning(locale.player.unlimitedStamina);
}
}
// Remove In Raid Restrictions
if (config.player.removeInRaidsRestrictions)
{
this.logger.info("AllInOne Mod: removeInRaidsRestrictions activated.");
if (typeof config.player.removeInRaidsRestrictions !== "boolean")
{
this.logger.warning(locale.player.removeInRaidsRestrictions);
}
}
// Diable Fall Damage
if (config.player.disableFallDamage)
{
this.logger.info("AllInOne Mod: disableFallDamage activated.");
if (typeof config.player.disableFallDamage !== "boolean")
{
this.logger.warning(locale.player.disableFallDamage);
}
}
// All Skills Master
if (config.player.allSkillsMaster)
{
this.logger.info("AllInOne Mod: allSkillsMaster activated.");
if (typeof config.player.allSkillsMaster !== "boolean")
{
this.logger.warning(locale.player.allSkillsMaster);
}
}
// Enable Skill BotReload
if (config.player.enableSkillBotReload)
{
this.logger.info("AllInOne Mod: enableSkillBotReload activated.");
if (typeof config.player.enableSkillBotReload !== "boolean")
{
this.logger.warning(locale.player.enableSkillBotReload);
}
}
// Enable Skill BotSound
if (config.player.enableSkillBotSound)
{
this.logger.info("AllInOne Mod: enableSkillBotSound activated.");
if (typeof config.player.enableSkillBotSound !== "boolean")
{
this.logger.warning(locale.player.enableSkillBotSound);
}
}
// Remove Scav Karma
if (config.player.removeScavKarma)
{
this.logger.info("AllInOne Mod: removeScavKarma activated.");
if (typeof config.player.removeScavKarma !== "boolean")
{
this.logger.warning(locale.player.removeScavKarma);
}
}
// Energy Drain Rate
if (config.player.energyDrainRate !== false)
{
this.logger.info("AllInOne Mod: energyDrainRate activated.");
if (typeof config.player.energyDrainRate !== "number")
{
this.logger.warning(locale.player.energyDrainRate);
}
}
// Energy Drain Time
if (config.player.energyDrainTime !== false)
{
this.logger.info("AllInOne Mod: energyDrainTime activated.");
if (typeof config.player.energyDrainTime !== "number")
{
this.logger.warning(locale.player.energyDrainTime);
}
}
// Hydratation Drain Rate
if (config.player.hydrationDrainRate !== false)
{
this.logger.info("AllInOne Mod: hydratationDrainRate activated.");
if (typeof config.player.hydrationDrainRate !== "number")
{
this.logger.warning(locale.player.hydrationDrainRate);
}
}
// Hydratation Drain Time
if (config.player.hydrationDrainTime !== false)
{
this.logger.info("AllInOne Mod: hydratationDrainTime activated.");
if (typeof config.player.hydrationDrainTime !== "number")
{
this.logger.warning(locale.player.hydrationDrainTime);
}
}
// Regeneration Loop Time
if (config.player.regenerationLoopTime !== false)
{
this.logger.info("AllInOne Mod: regenerationLoopTime activated.");
if (typeof config.player.regenerationLoopTime !== "number")
{
this.logger.warning(locale.player.regenerationLoopTime);
}
}
// Energy Restoration
if (config.player.energyRestoration !== false)
{
this.logger.info("AllInOne Mod: energyRestoration activated.");
if (typeof config.player.energyRestoration !== "number")
{
this.logger.warning(locale.player.energyRestoration);
}
}
// Hydration Restoration
if (config.player.hydrationRestoration !== false)
{
this.logger.info("AllInOne Mod: hydrationRestoration activated.");
if (typeof config.player.hydrationRestoration !== "number")
{
this.logger.warning(locale.player.hydrationRestoration);
}
}
// Traders:
// All Quests Available
if (config.traders.allQuestsAvailable)
{
this.logger.info("AllInOne Mod: removeScavKarma activated.");
if (typeof config.traders.allQuestsAvailable !== "boolean")
{
this.logger.warning(locale.traders.allQuestsAvailable);
}
}
// All Clothes Free
if (config.traders.allClothesFree)
{
this.logger.info("AllInOne Mod: allClothesFree activated.");
if (typeof config.traders.allClothesFree !== "boolean")
{
this.logger.warning(locale.traders.allClothesFree);
}
}
// All Clothes For Every Side
if (config.traders.allClothesForEverySide)
{
this.logger.info("AllInOne Mod: allClothesForEverySide activated.");
if (typeof config.traders.allClothesForEverySide !== "boolean")
{
this.logger.warning(locale.traders.allClothesForEverySide);
}
}
// Change Flea Market Level
if (config.traders.changeFleaMarketLvl !== false)
{
this.logger.info("AllInOne Mod: changeFleaMarketLvl activated.");
if (typeof config.traders.changeFleaMarketLvl !== "number")
{
this.logger.warning(locale.traders.changeFleaMarketLvl);
}
}
// Insurance Time Activated
if (config.traders.insuranceTime.activated)
{
this.logger.info("AllInOne Mod: insuranceTime activated.")
if (typeof config.traders.insuranceTime.activated !== "boolean")
{
this.logger.warning(locale.traders.insuranceTime.activated);
}
}
// Insurance Time - Therapist
if (config.traders.insuranceTime.therapist.activated)
{
this.logger.info("AllInOne Mod: InsuranceTime.Therapist activated.")
if (typeof config.traders.insuranceTime.therapist.activated !== "boolean")
{
this.logger.warning(locale.traders.insuranceTime.therapist.activated);
}
}
// Insurance Time - Prapor
if (config.traders.insuranceTime.prapor.activated)
{
this.logger.info("AllInOne Mod: InsuranceTime.Prapor activated.")
if (typeof config.traders.insuranceTime.prapor.activated !== "boolean")
{
this.logger.warning(locale.traders.insuranceTime.prapor.activated);
}
}
// All Traders 4 Star - Unlock All Items At LL1
if (config.traders.traderChanges.unlockAllItemsAtLL1 && config.traders.traderChanges.allTraders4Stars)
{
this.logger.warning(locale.traders.traderChanges.all4StarAndLL1);
}
else if (config.traders.traderChanges.allTraders4Stars)
{
this.logger.info("AllInOne Mod: allTraders4Stars activated.")
if (typeof config.traders.traderChanges.allTraders4Stars !== "boolean")
{
this.logger.warning(locale.traders.traderChanges.allTraders4Stars);
}
}
else if (config.traders.traderChanges.unlockAllItemsAtLL1)
{
this.logger.info("AllInOne Mod: unlockAllItemsAtLL1 activated.")
if (typeof config.traders.traderChanges.unlockAllItemsAtLL1 !== "boolean")
{
this.logger.warning(locale.traders.traderChanges.unlockAllItemsAtLL1);
}
}
// Remove Items From Quest Locks
if (config.traders.traderChanges.removeItemsFromQuestLocks)
{
this.logger.info("AllInOne Mod: removeItemsFromQuestLocks activated.")
if (typeof config.traders.traderChanges.removeItemsFromQuestLocks !== "boolean")
{
this.logger.warning(locale.traders.traderChanges.removeItemsFromQuestLocks);
}
}
// Max Insurance Storage Time
if (config.traders.maxInsuranceStorageTime)
{
this.logger.info("AllInOne Mod: maxInsuranceStorageTime activated.")
if (typeof config.traders.maxInsuranceStorageTime !== "boolean")
{
this.logger.warning(locale.traders.maxInsuranceStorageTime);
}
}
// Max Insurance Storage Time
if (config.traders.preventFenceMastering)
{
this.logger.info("AllInOne Mod: preventFenceMastering activated.")
if (typeof config.traders.preventFenceMastering !== "boolean")
{
this.logger.warning(locale.traders.preventFenceMastering);
}
}
// Remove FIR Condition On Quests
if (config.traders.removeFIRConditionOnQuests)
{
this.logger.info("AllInOne Mod: removeFIRConditionOnQuests activated.")
if (typeof config.traders.removeFIRConditionOnQuests !== "boolean")
{
this.logger.warning(locale.traders.removeFIRConditionOnQuests);
}
}
// Raids:
// No Extract Restrictions
if (config.raids.noExtractRestrictions)
{
this.logger.info("AllInOne Mod: noExtractRestrictions activated.")
if (typeof config.raids.noExtractRestrictions !== "boolean")
{
this.logger.warning(locale.raids.noExtractRestrictions);
}
}
// All Extractions Avaliable
if (config.raids.allExtractionsAvailable)
{
this.logger.info("AllInOne Mod: allExtractionsAvailable activated.")
if (typeof config.raids.allExtractionsAvailable !== "boolean")
{
this.logger.warning(locale.raids.allExtractionsAvailable);
}
}
// Increased Boss Chances
if (config.raids.increasedBossChance)
{
this.logger.info("AllInOne Mod: increasedBossChance activated.")
if (typeof config.raids.increasedBossChance !== "boolean")
{
this.logger.warning(locale.raids.increasedBossChance);
}
}
// Extended Raid
if (config.raids.extendedRaid !== false)
{
this.logger.info("AllInOne Mod: changeFleaMarketLvl activated.");
if (typeof config.raids.extendedRaid !== "number")
{
this.logger.warning(locale.raids.extendedRaid);
}
}
// Remove Labs Keycard
if (config.raids.removeLabsKeycard)
{
this.logger.info("AllInOne Mod: removeLabsKeycard activated.")
if (typeof config.raids.removeLabsKeycard !== "boolean")
{
this.logger.warning(locale.raids.removeLabsKeycard);
}
}
// Extractions Extended
if (config.raids.extractionsExtended)
{
this.logger.info("AllInOne Mod: extractionsExtended activated.")
if (typeof config.raids.extractionsExtended !== "boolean")
{
this.logger.warning(locale.raids.extractionsExtended);
}
}
// Insurance On All Maps
if (config.raids.insuranceOnAllMaps)
{
this.logger.info("AllInOne Mod: insuranceOnAllMaps activated.")
if (typeof config.raids.insuranceOnAllMaps !== "boolean")
{
this.logger.warning(locale.raids.insuranceOnAllMaps);
}
}
// Fixes:
// Fins Choke Me Harder
if (config.fixes.finsChokeMeHarder)
{
this.logger.info("AllInOne Mod: finsChokeMeHarder activated.")
if (typeof config.fixes.finsChokeMeHarder !== "boolean")
{
this.logger.warning(locale.fixes.finsChokeMeHarder);
}
}
// Chomps Raider Spawn Fix
if (config.fixes.chompsRaiderSpawnFix)
{
this.logger.info("AllInOne Mod: chompsRaiderSpawnFix activated.")
if (typeof config.fixes.chompsRaiderSpawnFix !== "boolean")
{
this.logger.warning(locale.fixes.chompsRaiderSpawnFix);
}
}
// justNUs Even More Open Zones
if (config.fixes.justNUsEvenMoreOpenZones)
{
this.logger.info("AllInOne Mod: justNUsEvenMoreOpenZones activated.")
if (typeof config.fixes.justNUsEvenMoreOpenZones !== "boolean")
{
this.logger.warning(locale.fixes.justNUsEvenMoreOpenZones);
}
}
// Other:
// Pre Wipe Events:
if (config.other.preWipeEvents.raidersOnAllMaps)
{
this.logger.info("AllInOne Mod: raidersOnAllMaps activated.")
if (typeof config.other.preWipeEvents.raidersOnAllMaps !== "boolean")
{
this.logger.warning(locale.other.preWipeEvents.raidersOnAllMaps);
}
}
// Killa On Factory:
if (config.other.preWipeEvents.killaOnFactory)
{
this.logger.info("AllInOne Mod: killaOnFactory activated.")
if (typeof config.other.preWipeEvents.killaOnFactory !== "boolean")
{
this.logger.warning(locale.other.preWipeEvents.killaOnFactory);
}
}
// All Bosses On Reserve:
if (config.other.preWipeEvents.allBossesOnReserve)
{
this.logger.info("AllInOne Mod: allBossesOnReserve activated.")
if (typeof config.other.preWipeEvents.allBossesOnReserve !== "boolean")
{
this.logger.warning(locale.other.preWipeEvents.allBossesOnReserve);
}
}
// All Traders Sell Cheap Items
if (config.other.preWipeEvents.allTradersSellCheapItems)
{
this.logger.info("AllInOne Mod: allTradersSellCheapItems activated.")
if (typeof config.other.preWipeEvents.allTradersSellCheapItems !== "boolean")
{
this.logger.warning(locale.other.preWipeEvents.allTradersSellCheapItems);
}
}
// Make Obdolbos Powerful
if (config.other.preWipeEvents.makeObdolbosPowerful)
{
this.logger.info("AllInOne Mod: makeObdolbosPowerful activated.")
if (typeof config.other.preWipeEvents.makeObdolbosPowerful !== "boolean")
{
this.logger.warning(locale.other.preWipeEvents.makeObdolbosPowerful);
}
}
// Gluhkar On Labs
if (config.other.preWipeEvents.gluhkarOnLabs)
{
this.logger.info("AllInOne Mod: gluhkarOnLabs activated.")
if (typeof config.other.preWipeEvents.gluhkarOnLabs !== "boolean")
{
this.logger.warning(locale.other.preWipeEvents.gluhkarOnLabs);
}
}
// Heat Wave
if (config.other.inGameEvents.heatWave)
{
this.logger.info("AllInOne Mod: heatWave activated.")
if (typeof config.other.inGameEvents.heatWave !== "boolean")
{
this.logger.warning(locale.other.inGameEvents.heatWave);
}
}
}
}

View File

@ -0,0 +1,78 @@
import { inject, injectable } from "tsyringe";
import type { DatabaseServer } from "../types/servers/DatabaseServer";
import { AIOConfigHandler } from "./AIOConfigHandler";
@injectable()
export class Fixes
{
constructor(
@inject("AIOConfigHandler") private configHandler: AIOConfigHandler,
@inject("DatabaseServer") private database: DatabaseServer
)
{}
public applyChanges(): void
{
const items = this.database.getTables().templates.items;
const maps = {
"bigmap": "ZoneBrige,ZoneCrossRoad,ZoneDormitory,ZoneGasStation,ZoneFactoryCenter,ZoneFactorySide,ZoneOldAZS,ZoneSnipeBrige,ZoneSnipeTower,ZoneSnipeFactory,ZoneBlockPost,ZoneBlockPostSniper,ZoneBlockPostSniper3,ZoneBlockPost,ZoneTankSquare,ZoneWade,ZoneCustoms,ZoneScavBase",
"laboratory": "BotZoneFloor1,BotZoneFloor2,BotZoneBasement",
"rezervbase": "ZoneRailStrorage,ZonePTOR1,ZonePTOR2,ZoneBarrack,ZoneBunkerStorage,ZoneSubStorage,ZoneSubCommand",
"woods": "ZoneRedHouse,ZoneWoodCutter,ZoneHouse,ZoneBigRocks,ZoneRoad,ZoneMiniHouse,ZoneScavBase2,ZoneBrokenVill,ZoneClearVill,ZoneHighRocks",
"shoreline": "ZoneSanatorium1,ZoneSanatorium2,ZonePassFar,ZonePassClose,ZoneTunnel,ZoneStartVillage,ZoneBunker,ZoneGreenHouses,ZoneIsland,ZoneGasStation,ZoneMeteoStation,ZonePowerStation,ZoneBusStation,ZoneRailWays,ZonePort,ZoneForestTruck,ZoneForestSpawn,ZoneForestGasStation",
"lighthouse": "Zone_TreatmentContainers,Zone_LongRoad,Zone_Blockpost,Zone_TreatmentBeach,Zone_Hellicopter,Zone_RoofContainers,Zone_Village,Zone_OldHouse,Zone_RoofRocks,Zone_DestroyedHouse,Zone_Chalet,Zone_SniperPeak,Zone_RoofBeach,Zone_Containers,Zone_TreatmentRocks,Zone_Rocks"
}
const labsBosses = this.database.getTables().locations.laboratory.base.BossLocationSpawn;
const reserveBosses = this.database.getTables().locations.rezervbase.base.BossLocationSpawn;
// Fin's Choke Me Harder
if (this.configHandler.getConfig().fixes.finsChokeMeHarder)
{
for (const id in items)
{
if (items[id]._props && items[id]._props.ShotgunDispersion)
{
items[id]._props.shotgunDispersion = items[id]._props.ShotgunDispersion;
}
}
}
// Chomps Raider Spawn Fix
if (this.configHandler.getConfig().fixes.chompsRaiderSpawnFix)
{
const spawn1 = labsBosses.find(x => x.TriggerId === "autoId_00008_EXFIL");
if (spawn1)
{
spawn1.TriggerId = "00404";
}
const spawn2 = labsBosses.find(x => x.TriggerId === "autoId_00010_EXFIL");
if (spawn2)
{
spawn2.TriggerId = "00409";
}
const spawn3 = reserveBosses.find(x => x.TriggerId === "00457");
if (spawn3)
{
spawn3.TriggerId = "autoId_00632_EXFIL";
}
const spawn4 = reserveBosses.find(x => x.TriggerId === "00452");
if (spawn4)
{
spawn4.TriggerId = "autoId_00000_D2_LEVER";
}
}
// JustNU's EvenMoreOpenZones
if (this.configHandler.getConfig().fixes.justNUsEvenMoreOpenZones)
{
for (const location in maps)
{
this.database.getTables().locations[location].base.OpenZones = maps[location];
}
}
}
}

View File

@ -0,0 +1,417 @@
import type { ILogger } from "../types/models/spt/utils/ILogger";
import type { DatabaseServer } from "../types/servers/DatabaseServer";
import { Other } from "./other";
import { inject, injectable } from "tsyringe";
import { AIOConfigHandler } from "./AIOConfigHandler";
import { BaseClasses } from "../types/models/enums/BaseClasses";
@injectable()
export class Items
{
constructor(
@inject("WinstonLogger") private logger: ILogger,
@inject("AIOConfigHandler") private configHandler: AIOConfigHandler,
@inject("DatabaseServer") private database: DatabaseServer,
@inject("AIOOther") private other: Other
)
{}
public applyChanges(): void
{
const items = this.database.getTables().templates.items;
for (const id in items)
{
const base = items[id];
if (!this.other.isThisIDaMod([id]))
{
//Examine all items
if (!this.configHandler.getConfig().items.allExaminedItems)
{
this.editSimpleItemData(id, "ExaminedByDefault", true);
}
// Weight Change, only Multiple possible
if (typeof this.configHandler.getConfig().items.weightChanges !== "boolean" && typeof this.configHandler.getConfig().items.weightChanges === "number" && this.configHandler.getConfig().items.weightChanges <= 0)
{
this.editSimpleItemData(id, "Weight", (base._props.Weight * <number> this.configHandler.getConfig().items.weightChanges));
}
if (this.configHandler.getConfig().items.removeAllGearPenalties)
{
if (base._props.mousePenalty)
{
this.editSimpleItemData(id, "mousePenalty", 0);
}
if (base._props.weaponErgonomicPenalty)
{
this.editSimpleItemData(id, "weaponErgonomicPenalty", 0);
}
if (base._props.speedPenaltyPercent)
{
this.editSimpleItemData(id, "speedPenaltyPercent", 0);
}
}
if (this.configHandler.getConfig().items.removeItemDurabilityBurn && base._props.DurabilityBurnModificator)
{
this.editSimpleItemData(id, "DurabilityBurnModificator", 0);
}
if (this.configHandler.getConfig().items.removeBulletWeaponDurabilityDamage && base._props.Deterioration)
{
this.editSimpleItemData(id, "Deterioration", 0);
}
if (this.configHandler.getConfig().items.removeWeaponPresetRestriction && !base._props.CanRequireOnRagfair && items[items[base._parent]._parent]._id === "5422acb9af1c889c16000029")
{
this.editSimpleItemData(id, "CanRequireOnRagfair", "true");
}
if (this.configHandler.getConfig().items.stackableBarters.activated)
{
switch (base._parent)
{
case BaseClasses.BATTERY:
if (this.configHandler.getConfig().items.stackableBarters.battery > 1)
{
this.editSimpleItemData(id, "StackMaxSize", this.configHandler.getConfig().items.stackableBarters.battery);
}
break;
case BaseClasses.BUILDING_MATERIAL:
if (this.configHandler.getConfig().items.stackableBarters.buildingMaterials > 1)
{
this.editSimpleItemData(id, "StackMaxSize", this.configHandler.getConfig().items.stackableBarters.buildingMaterials);
}
break;
case BaseClasses.ELECTRONICS:
if (this.configHandler.getConfig().items.stackableBarters.electronics > 1)
{
this.editSimpleItemData(id, "StackMaxSize", this.configHandler.getConfig().items.stackableBarters.electronics);
}
break;
case BaseClasses.HOUSEHOLD_GOODS:
if (this.configHandler.getConfig().items.stackableBarters.householdGoods > 1)
{
this.editSimpleItemData(id, "StackMaxSize", this.configHandler.getConfig().items.stackableBarters.householdGoods);
}
break;
case BaseClasses.JEWELRY:
if (this.configHandler.getConfig().items.stackableBarters.jewelry > 1)
{
this.editSimpleItemData(id, "StackMaxSize", this.configHandler.getConfig().items.stackableBarters.jewelry);
}
break;
case BaseClasses.MEDICAL_SUPPLIES:
if (this.configHandler.getConfig().items.stackableBarters.medicalSupplies > 1)
{
this.editSimpleItemData(id, "StackMaxSize", this.configHandler.getConfig().items.stackableBarters.medicalSupplies);
}
break;
case BaseClasses.LUBRICANT:
if (this.configHandler.getConfig().items.stackableBarters.lubricant > 1)
{
this.editSimpleItemData(id, "StackMaxSize", this.configHandler.getConfig().items.stackableBarters.lubricant);
}
break;
case BaseClasses.TOOL:
if (this.configHandler.getConfig().items.stackableBarters.tools > 1)
{
this.editSimpleItemData(id, "StackMaxSize", this.configHandler.getConfig().items.stackableBarters.tools);
}
break;
case BaseClasses.OTHER:
if (this.configHandler.getConfig().items.stackableBarters.other > 1)
{
this.editSimpleItemData(id, "StackMaxSize", this.configHandler.getConfig().items.stackableBarters.other);
}
break;
}
}
//Change ammo stacks
if (typeof this.configHandler.getConfig().items.moreStack == "number")
{
if (base._name.includes("patron") && !base._name.includes("40x46"))
{
this.editSimpleItemData(id, "StackMaxSize", this.configHandler.getConfig().items.moreStack);
}
}
//Change money stacks
if (typeof this.configHandler.getConfig().items.forceMoneyStack == "number" && base._parent === BaseClasses.MONEY)
{
this.editSimpleItemData(id, "StackMaxSize", this.configHandler.getConfig().items.forceMoneyStack);
}
//Allow armored rigs with armors
if (this.configHandler.getConfig().items.equipRigsWithArmors)
{
this.editSimpleItemData(id, "BlocksArmorVest", false);
}
//Remove filters
if (this.configHandler.getConfig().items.removeSecureContainerFilters && base._parent === BaseClasses.MOD_CONTAINER && base._props.Grids[0]._props.filters.length > 0)
{
base._props.Grids[0]._props.filters = [];
}
if (this.configHandler.getConfig().items.removeBackpacksRestrictions && base._parent === BaseClasses.BACKPACK && base._props.Grids[0]._props.filters.length > 0)
{
base._props.Grids[0]._props.filters = [];
}
if (this.configHandler.getConfig().items.removeContainersRestrictions && base._parent === BaseClasses.SIMPLE_CONTAINER && base._props.Grids[0]._props.filters.length > 0)
{
base._props.Grids[0]._props.filters = [];
}
//Change items experience gain
if (typeof this.configHandler.getConfig().items.increaseLootExp == "number" && base._props.LootExperience !== undefined)
{
const calculation = Math.round((base._props.LootExperience + ((<number> this.configHandler.getConfig().items.increaseLootExp / 100) * base._props.LootExperience)));
this.editSimpleItemData(id, "LootExperience", calculation);
}
if (typeof this.configHandler.getConfig().items.increaseExamineExp == "number" && base._props.ExamineExperience !== undefined)
{
const calculation = Math.round((base._props.ExamineExperience + ((<number> this.configHandler.getConfig().items.increaseExamineExp / 100) * base._props.ExamineExperience)));
this.editSimpleItemData(id, "ExamineExperience", calculation);
}
if (this.configHandler.getConfig().items.removeKeyUsageNumber && base._parent === BaseClasses.KEY_MECHANICAL || base._parent === BaseClasses.KEYCARD)
{
base._props.MaximumNumberOfUsage = 0;
}
//Change weapons parts moddability
if (this.configHandler.getConfig().items.inRaidModdable)
{
if (base._props.RaidModdable)
{
this.editSimpleItemData(id, "RaidModdable", true);
}
if (base._props.ToolModdable)
{
this.editSimpleItemData(id, "ToolModdable", true);
}
if (base._props.Slots)
{
for (const k in base._props.Slots)
{
if (!base._props.Slots[k]._required)
{
base._props.Slots[k]._required = false;
}
}
}
}
}
//Weapons malfunctions
if (this.configHandler.getConfig().items.weaponMalfunctions.overheat && base._props.AllowOverheat)
{
base._props.AllowOverheat = false;
}
if (this.configHandler.getConfig().items.weaponMalfunctions.jam && base._props.AllowJam)
{
base._props.AllowJam = false;
}
if (this.configHandler.getConfig().items.weaponMalfunctions.feed && base._props.AllowFeed)
{
base._props.AllowFeed = false;
}
if (this.configHandler.getConfig().items.weaponMalfunctions.misfire && base._props.AllowMisfire)
{
base._props.AllowMisfire = false;
}
if (this.configHandler.getConfig().items.weaponMalfunctions.slide && base._props.AllowSlide)
{
base._props.AllowSlide = false;
}
//Weapons durabilities min-max
if (this.configHandler.getConfig().items.weaponDurabilities.minimumSpawnDurability != false && typeof this.configHandler.getConfig().items.weaponDurabilities.minimumSpawnDurability === "number" && base._props.durabSpawnMin)
{
base._props.durabSpawnMin = <number> this.configHandler.getConfig().items.weaponDurabilities.minimumSpawnDurability;
}
if (this.configHandler.getConfig().items.weaponDurabilities.maximumSpawnDurability != false && typeof this.configHandler.getConfig().items.weaponDurabilities.maximumSpawnDurability === "number" && base._props.durabSpawnMax)
{
base._props.durabSpawnMax = <number> this.configHandler.getConfig().items.weaponDurabilities.maximumSpawnDurability;
}
}
if (this.configHandler.getConfig().other.preWipeEvents.makeObdolbosPowerful)
{
const obdolbosBuff = [
{
"BuffType": "StaminaRate",
"Chance": 1,
"Delay": 1,
"Duration": 1800,
"Value": 0.5,
"AbsoluteValue": true,
"SkillName": ""
},
{
"BuffType": "SkillRate",
"Chance": 1,
"Delay": 1,
"Duration": 1800,
"Value": 10,
"AbsoluteValue": true,
"SkillName": "Endurance"
},
{
"BuffType": "SkillRate",
"Chance": 1,
"Delay": 1,
"Duration": 1800,
"Value": 10,
"AbsoluteValue": true,
"SkillName": "Strength"
},
{
"BuffType": "SkillRate",
"Chance": 1,
"Delay": 1,
"Duration": 1800,
"Value": 20,
"AbsoluteValue": true,
"SkillName": "StressResistance"
},
{
"BuffType": "SkillRate",
"Chance": 1,
"Delay": 1,
"Duration": 1800,
"Value": 20,
"AbsoluteValue": true,
"SkillName": "Charisma"
},
{
"BuffType": "SkillRate",
"Chance": 1,
"Delay": 1,
"Duration": 1800,
"Value": -20,
"AbsoluteValue": true,
"SkillName": "Memory"
},
{
"BuffType": "SkillRate",
"Chance": 1,
"Delay": 1,
"Duration": 1800,
"Value": -20,
"AbsoluteValue": true,
"SkillName": "Intellect"
},
{
"BuffType": "SkillRate",
"Chance": 1,
"Delay": 1,
"Duration": 1800,
"Value": -20,
"AbsoluteValue": true,
"SkillName": "Attention"
},
{
"BuffType": "Pain",
"Chance": 0.25,
"Delay": 1,
"Duration": 1800,
"Value": 0,
"AbsoluteValue": false,
"SkillName": ""
},
{
"BuffType": "StomachBloodloss",
"Chance": 0.25,
"Delay": 1,
"Duration": 1800,
"Value": 0,
"AbsoluteValue": false,
"SkillName": ""
},
{
"BuffType": "HydrationRate",
"Chance": 0.25,
"Delay": 1,
"Duration": 1800,
"Value": -0.05,
"AbsoluteValue": true,
"SkillName": ""
},
{
"BuffType": "EnergyRate",
"Chance": 0.25,
"Delay": 1,
"Duration": 1800,
"Value": -0.05,
"AbsoluteValue": true,
"SkillName": ""
},
{
"BuffType": "DamageModifier",
"Chance": 0.25,
"Delay": 1,
"Duration": 1800,
"Value": 0.2,
"AbsoluteValue": false,
"SkillName": ""
},
{
"BuffType": "QuantumTunnelling",
"Chance": 0.25,
"Delay": 1,
"Duration": 1800,
"Value": 0,
"AbsoluteValue": false,
"SkillName": ""
}]
this.database.getTables().globals.config.Health.Effects.Stimulator.Buffs.Buffs_Obdolbos = obdolbosBuff;
}
//Individual items proprety changes
if (this.configHandler.getConfig().items.changeIndividualItemProperty.activated)
{
//Edit item properties
if (this.configHandler.getConfig().items.changeIndividualItemProperty.ItemList !== {})
{
for (const k in this.configHandler.getConfig().items.changeIndividualItemProperty.ItemList)
{
if (k === "__REPLACEMEBYITEMID__")
{
this.logger.error("AllinOne Mod: " + k + " : IS NOT AN ITEMID");
}
else
{
for (const property in this.configHandler.getConfig().items.changeIndividualItemProperty.ItemList[k])
{
const value = this.configHandler.getConfig().items.changeIndividualItemProperty.ItemList[k][property];
this.editSimpleItemData(k, property, value);
}
}
}
}
}
}
private editSimpleItemData(id: string, data: string, value: any): void
{
const items = this.database.getTables().templates.items;
items[id]._props[data] = value;
}
}

View File

@ -0,0 +1,86 @@
import { DependencyContainer, Lifecycle } from "tsyringe";
import type { StaticRouterModService } from "../types/services/mod/staticRouter/StaticRouterModService";
import type { IMod } from "../types/models/external/mod";
import type { ILogger } from "../types/models/spt/utils/ILogger";
import { Other } from "./other";
import { Items } from "./items";
import { Raids } from "./raids";
import { Traders } from "./traders";
import { Player } from "./player";
import { Notifications } from "./Notifications";
import { Fixes } from "./fixes";
import { AIOConfigHandler } from "./AIOConfigHandler";
class AIOMod implements IMod
{
private logger: ILogger;
private pkg;
public load(container: DependencyContainer): void
{
container.register<AIOConfigHandler>("AIOConfigHandler", AIOConfigHandler, {lifecycle:Lifecycle.Singleton});
container.register<Other>("AIOOther", Other, {lifecycle:Lifecycle.Singleton});
container.register<Fixes>("AIOFixes", Fixes);
container.register<Raids>("AIORaids", Raids);
container.register<Items>("AIOItems", Items);
container.register<Traders>("AIOTraders", Traders);
container.register<Player>("AIOPlayer", Player);
container.register<Notifications>("AIONotifications", Notifications);
const staticRoute = container.resolve<StaticRouterModService>("StaticRouterModService");
container.resolve<ILogger>("WinstonLogger");
if (container.resolve<AIOConfigHandler>("AIOConfigHandler").getConfig().player.allSkillsMaster)
{
staticRoute.registerStaticRouter(
"AIOModGameVersion",
[
{
url: "/client/game/version/validate",
action: (sessionID: string): any =>
{
return container.resolve<Player>("AIOPlayer").maxSkills(sessionID);
}
}
],
"AIOMod"
)
}
if (container.resolve<AIOConfigHandler>("AIOConfigHandler").getConfig().other.preWipeEvents.raidersOnAllMaps)
{
staticRoute.registerStaticRouter(
"AIOModBotGen",
[
{
url: "/client/game/bot/generate",
action: (info: any): any =>
{
return container.resolve<Other>("AIOOther").spawnRaidersEverywhere(info);
}
}
],
"AIOMod"
)
}
this.pkg = require("../package.json");
this.logger.info(`Loading: ${this.pkg.name} ${this.pkg.version}`);
}
public delayedLoad(container: DependencyContainer): void
{
container.resolve<Other>("AIOOther").applyChanges();
container.resolve<Fixes>("AIOFixes").applyChanges();
container.resolve<Raids>("AIORaids").applyChanges();
container.resolve<Items>("AIOItems").applyChanges();
container.resolve<Traders>("AIOTrader").applyChanges();
container.resolve<Player>("AIOPlayer").applyChanges();
if (container.resolve<AIOConfigHandler>("AIOConfigHandler").getConfig().other.showModLogs)
{
container.resolve<Notifications>("AIONotifications").sendNotifications()
}
}
}
module.exports = { mod: new AIOMod() };

View File

@ -0,0 +1,101 @@
import type { HttpResponseUtil } from "../types/utils/HttpResponseUtil"
import type { BotController } from "../types/controllers/BotController"
import type { IBotBase } from "../types/models/eft/common/tables/IBotBase";
import type { IGetBodyResponseData } from "../types/models/eft/httpResponse/IGetBodyResponseData";
import { AIOConfigHandler } from "./AIOConfigHandler";
import { inject, injectable } from "tsyringe";
@injectable()
export class Other
{
private dontNuke = [];
constructor(
@inject("AIOConfigHandler") private configHandler: AIOConfigHandler,
@inject("HttpResponseUtil") private httpResponse: HttpResponseUtil,
@inject("BotController") private botController: BotController
)
{}
public applyChanges(): void
{
if (this.configHandler.getConfig().other.compatibilityMods.terragroupSpecialist)
{
this.dontNuke.push("terragroupSpecialist")
}
else if (this.configHandler.getConfig().other.compatibilityMods.coDMWMilSimCTSFOI)
{
this.dontNuke.push("ctsfo1")
}
else if (this.configHandler.getConfig().other.compatibilityMods.additionnalGearTan)
{
this.dontNuke.push("AddGearTan")
}
else if (this.configHandler.getConfig().other.compatibilityMods.additionnalGearBlack)
{
this.dontNuke.push("AddGearBlack")
}
else if (this.configHandler.getConfig().other.compatibilityMods.additionnalGearUntar)
{
this.dontNuke.push("AddGearUntar")
}
else if (this.configHandler.getConfig().other.compatibilityMods.additionnalClothing)
{
this.dontNuke.push("AdditionalClothing")
}
else if (this.configHandler.getConfig().other.compatibilityMods.andrudisQuestManiac)
{
this.dontNuke.push("Ammo_Proficiency")
}
}
public isThisIDaMod(id: string[]): boolean
{
if (this.dontNuke.length > 0)
{
for (const mod in this.dontNuke)
{
if (id.includes(this.dontNuke[mod]))
{
return true;
}
else
{
return false
}
}
}
else
{
return false
}
}
public spawnRaidersEverywhere(info: any): IGetBodyResponseData<IBotBase[]>
{
for (const type in info.conditions)
{
const roles = info.conditions[type]
roles.Role = "pmcBot"
roles.Difficulty = "impossible"
}
return this.httpResponse.getBody(this.botController.generate(info));
}
public createBossWave(role: string, chance: number, followers: string, escortAmount: number, zones: string): any
{
return {
"BossName": role,
"BossChance": chance,
"BossZone": zones,
"BossPlayer": false,
"BossDifficult": "normal",
"BossEscortType": followers,
"BossEscortDifficult": "normal",
"BossEscortAmount": escortAmount,
"Time": -1
}
}
}

View File

@ -0,0 +1,199 @@
import { inject, injectable } from "tsyringe";
import type { ProfileHelper } from "../types/helpers/ProfileHelper";
import type { IPmcData } from "../types/models/eft/common/IPmcData";
import type { ILogger } from "../types/models/spt/utils/ILogger";
import type { DatabaseServer } from "../types/servers/DatabaseServer";
import type { HttpResponseUtil } from "../types/utils/HttpResponseUtil";
import { AIOConfigHandler } from "./AIOConfigHandler";
@injectable()
export class Player
{
constructor(
@inject("WinstonLogger") private logger: ILogger,
@inject("AIOConfigHandler") private configHandler: AIOConfigHandler,
@inject("DatabaseServer") private database: DatabaseServer,
@inject("HttpResponseUtil") private httpResponse: HttpResponseUtil,
@inject("ProfileHelper") private profileHelper: ProfileHelper
)
{}
public applyChanges(): void
{
const globals = this.database.getTables().globals.config;
//Hydratation Drain rate
if (typeof this.configHandler.getConfig().player.hydrationDrainRate === "number")
{
globals.Health.Effects.Existence.HydrationDamage = <number> this.configHandler.getConfig().player.hydrationDrainRate;
}
//Hydratation Drain Time
if (typeof this.configHandler.getConfig().player.hydrationDrainTime === "number")
{
globals.Health.Effects.Existence.HydrationLoopTime = <number> this.configHandler.getConfig().player.hydrationDrainTime;
}
//Energy Drain Rate
if (typeof this.configHandler.getConfig().player.energyDrainRate === "number")
{
globals.Health.Effects.Existence.EnergyDamage = <number> this.configHandler.getConfig().player.energyDrainRate;
}
//Energy Drain Time
if (typeof this.configHandler.getConfig().player.energyDrainTime === "number")
{
globals.Health.Effects.Existence.EnergyLoopTime = <number> this.configHandler.getConfig().player.energyDrainTime;
}
//RegenerationLoopTime
if (typeof this.configHandler.getConfig().player.regenerationLoopTime === "number")
{
globals.Health.Effects.Regeneration.LoopTime = <number> this.configHandler.getConfig().player.regenerationLoopTime;
}
//Energy recovery in hideout
if (typeof this.configHandler.getConfig().player.energyRestoration === "number")
{
globals.Health.Effects.Regeneration.Energy = <number> this.configHandler.getConfig().player.energyRestoration;
}
//Hydration recovery in hideout
if (typeof this.configHandler.getConfig().player.hydrationRestoration === "number")
{
globals.Health.Effects.Regeneration.Hydration = <number> this.configHandler.getConfig().player.hydrationRestoration;
}
//Remove scav timer
if (this.configHandler.getConfig().player.removeScavTimer)
{
globals.SavagePlayCooldown = 1;
}
//Change skills progression multiplier
if (this.configHandler.getConfig().player.changeSkillProgressionMultiplier !== false && typeof this.configHandler.getConfig().player.changeSkillProgressionMultiplier == "number")
{
globals.SkillsSettings.SkillProgressRate = <number> this.configHandler.getConfig().player.changeSkillProgressionMultiplier;
}
//Change weapons skill multiplier
if (this.configHandler.getConfig().player.changeWeaponSkillMultiplier !== false && typeof this.configHandler.getConfig().player.changeWeaponSkillMultiplier == "number")
{
globals.SkillsSettings.WeaponSkillProgressRate = <number> this.configHandler.getConfig().player.changeWeaponSkillMultiplier;
}
//Change fleamarket mini level
if (this.configHandler.getConfig().traders.changeFleaMarketLvl !== false && typeof this.configHandler.getConfig().traders.changeFleaMarketLvl == "number")
{
globals.RagFair.minUserLevel = <number> this.configHandler.getConfig().traders.changeFleaMarketLvl;
}
//Change in raids restrictions
if (this.configHandler.getConfig().player.removeInRaidsRestrictions)
{
globals.RestrictionsInRaid = []
}
//Remove fall damages
if (this.configHandler.getConfig().player.disableFallDamage)
{
globals.Health.Falling.SafeHeight = 200
globals.Health.Falling.DamagePerMeter = 0
}
//Change staminas (unlimited or no)
if (typeof this.configHandler.getConfig().player.changeMaxStamina == "number" && !this.configHandler.getConfig().player.unlimitedStamina)
{
globals.Stamina.Capacity = <number> this.configHandler.getConfig().player.changeMaxStamina
}
else if (!this.configHandler.getConfig().player.changeMaxStamina && this.configHandler.getConfig().player.unlimitedStamina)
{
globals.Stamina.Capacity = 500;
globals.Stamina.BaseRestorationRate = 500;
globals.Stamina.StaminaExhaustionCausesJiggle = false;
globals.Stamina.StaminaExhaustionStartsBreathSound = false;
globals.Stamina.StaminaExhaustionRocksCamera = false;
globals.Stamina.SprintDrainRate = 0;
globals.Stamina.JumpConsumption = 0;
globals.Stamina.AimDrainRate = 0;
globals.Stamina.SitToStandConsumption = 0;
}
if (this.configHandler.getConfig().player.disableSkillFatigue === true)
{
globals.SkillMinEffectiveness = 1;
globals.SkillFatiguePerPoint = 0;
globals.SkillFreshEffectiveness = 1.0;
}
else if (this.configHandler.getConfig().player.disableSkillFatigue === "Custom")
{
globals.SkillMinEffectiveness = this.configHandler.getConfig().player.skillMinEffectiveness;
globals.SkillFatiguePerPoint = this.configHandler.getConfig().player.skillFatiguePerPoint;
globals.SkillFreshEffectiveness = this.configHandler.getConfig().player.skillFreshEffectiveness;
globals.SkillFreshPoints = this.configHandler.getConfig().player.skillFreshPoints;
globals.SkillPointsBeforeFatigue = this.configHandler.getConfig().player.skillPointsBeforeFatigue;
globals.SkillFatigueReset = this.configHandler.getConfig().player.skillFatigueReset;
}
//PreventScavKarma
if (this.configHandler.getConfig().player.removeScavKarma == true)
{
const types = this.database.getTables().bots.types
for (const bots in types)
{
if (types[bots].experience.standingForKill < 0 && types[bots].experience.standingForKill > 0)
{
types[bots].experience.standingForKill = 0
}
if (types[bots].experience.aggressorBonus < 0 && types[bots].experience.aggressorBonus > 0)
{
types[bots].experience.aggressorBonus = 0
}
}
}
}
public maxSkills(sessionID: string): any
{
let pmcData: IPmcData = null
if (sessionID)
{
pmcData = this.profileHelper.getPmcProfile(sessionID);
}
if (pmcData !== null)
{
if (pmcData.Skills.Common.length > 0)
{
for (const skills in pmcData.Skills.Common)
{
const skill = pmcData.Skills.Common[skills];
switch (skill.Id)
{
case "BotReload":
if (this.configHandler.getConfig().player.enableSkillBotReload === true)
{
skill.Progress = 5100;
}
break;
case "BotSound":
if (this.configHandler.getConfig().player.enableSkillBotSound === true)
{
skill.Progress = 5100;
}
break;
default:
skill.Progress = 5100;
break;
}
}
}
else
{
this.logger.error("No skills for PMC to master, skipping");
}
}
return this.httpResponse.nullResponse();
}
}

View File

@ -0,0 +1,335 @@
import { inject, injectable } from "tsyringe";
import type { BossLocationSpawn } from "../types/models/eft/common/ILocationBase";
import type { DatabaseServer } from "../types/servers/DatabaseServer";
import { AIOConfigHandler } from "./AIOConfigHandler";
import { Other } from "./other";
@injectable()
export class Raids
{
constructor(
@inject("AIOConfigHandler") private configHandler: AIOConfigHandler,
@inject("DatabaseServer") private database: DatabaseServer,
@inject("AIOOther") private other: Other
)
{}
public applyChanges(): void
{
const hideout = this.database.getTables().hideout;
const locations = this.database.getTables().locations;
//Change hideout fuel consumption
if (this.configHandler.getConfig().hideout.changeFuelConsumptionRate !== false && typeof this.configHandler.getConfig().hideout.changeFuelConsumptionRate === "number")
{
hideout.settings.generatorFuelFlowRate = <number> this.configHandler.getConfig().hideout.changeFuelConsumptionRate;
}
//Enable hideout fast constructions
if (this.configHandler.getConfig().hideout.fastHideoutConstruction)
{
for (const data in hideout.areas)
{
const areaData = hideout.areas[data];
if (this.other.isThisIDaMod([areaData._id]) === false)
{
for (const i in areaData.stages)
{
if (areaData.stages[i].constructionTime > 0)
{
areaData.stages[i].constructionTime = 1;
}
}
}
}
}
//Enable fast hideout production
if (this.configHandler.getConfig().hideout.fastHideoutProduction === true)
{
for (const data in hideout.production)
{
const productionData = hideout.production[data];
if (this.other.isThisIDaMod([productionData._id]) === false)
{
if (!productionData.continuous && productionData.productionTime > 10)
{
productionData.productionTime = 10;
}
}
}
}
//Scav cases modifications
if (this.configHandler.getConfig().hideout.fastScavCase === true)
{
for (const scav in hideout.scavcase)
{
const caseData = hideout.scavcase[scav];
if (this.other.isThisIDaMod([caseData._id]) === false)
{
if (caseData.ProductionTime > 10)
{
caseData.ProductionTime = 10;
}
}
}
}
if (this.configHandler.getConfig().hideout.scavCasePriceReducer === true)
{
for (const scase in hideout.scavcase)
{
const caseData = hideout.scavcase[scase];
if (this.other.isThisIDaMod([caseData._id]) === false)
{
if (caseData.Requirements[0].count > 10 && (caseData.Requirements[0].templateId === "5449016a4bdc2d6f028b456f" ||
caseData.Requirements[0].templateId === "5696686a4bdc2da3298b456a" ||
caseData.Requirements[0].templateId === "569668774bdc2da2298b4568"))
{
caseData.Requirements[0].count = 10;
}
}
}
}
//Remove construction requirements
if (this.configHandler.getConfig().hideout.removeConstructionRequirements)
{
for (const data in hideout.areas)
{
const areaData = hideout.areas[data];
if (this.other.isThisIDaMod([areaData._id]) === false)
{
for (const i in areaData.stages)
{
if (areaData.stages[i].requirements !== undefined)
{
areaData.stages[i].requirements = [];
}
}
}
}
}
//Remove labs entry keycard
if (this.configHandler.getConfig().raids.removeLabsKeycard)
{
locations.laboratory.base.AccessKeys = []
}
//Remove extracts restrictions
if (this.configHandler.getConfig().raids.noExtractRestrictions)
{
for (const i in locations)
{
if (i !== "base")
{
for (const x in locations[i].base.exits)
{
if (locations[i].base.exits[x].Name !== "EXFIL_Train" &&
!locations[i].base.exits[x].Name.includes("lab") ||
locations[i].base.exits[x].Name === "lab_Vent")
{
if (locations[i].base.exits[x].PassageRequirement !== "None")
{
locations[i].base.exits[x].PassageRequirement = "None";
}
if (locations[i].base.exits[x].ExfiltrationType !== "Individual")
{
locations[i].base.exits[x].ExfiltrationType = "Individual";
}
if (locations[i].base.exits[x].Id !== "")
{
locations[i].base.exits[x].Id = "";
}
if (locations[i].base.exits[x].Count !== 0)
{
locations[i].base.exits[x].Count = 0;
}
if (locations[i].base.exits[x].RequirementTip !== "")
{
locations[i].base.exits[x].RequirementTip = "";
}
if (locations[i].base.exits[x].RequiredSlot)
{
delete locations[i].base.exits[x].RequiredSlot;
}
}
}
}
}
}
//Make all extractions available to extract
if (this.configHandler.getConfig().raids.allExtractionsAvailable)
{
for (const i in locations)
{
if (i !== "base")
{
for (const x in locations[i].base.exits)
{
if (locations[i].base.exits[x].Name !== "EXFIL_Train")
{
if (locations[i].base.exits[x].Chance !== 100)
{
locations[i].base.exits[x].Chance = 100;
}
}
}
}
}
}
//Make all maps have functional insurance
if (this.configHandler.getConfig().raids.insuranceOnAllMaps)
{
for (const i in locations)
{
if (i !== "base")
{
locations[i].base.Insurance = true;
}
}
}
//Make all bosses to 100% spawn
if (this.configHandler.getConfig().raids.increasedBossChance)
{
for (const i in locations)
{
if (i !== "base")
{
if (locations[i].base.BossLocationSpawn !== [])
{
for (const x in locations[i].base.BossLocationSpawn)
{
locations[i].base.BossLocationSpawn[x].BossChance = 100;
}
}
}
}
}
if (this.configHandler.getConfig().other.preWipeEvents.killaOnFactory)
{
const killaWave = this.other.createBossWave("bossKilla", 100, "followerBully", 0, locations.factory4_day.base.OpenZones);
locations.factory4_day.base.BossLocationSpawn.push(killaWave);
locations.factory4_night.base.BossLocationSpawn.push(killaWave);
}
if (this.configHandler.getConfig().other.preWipeEvents.allBossesOnReserve)
{
let bossWave = this.other.createBossWave("bossKilla", 100, "followerBully", 0, locations.rezervbase.base.OpenZones);
locations.rezervbase.base.BossLocationSpawn.push(bossWave);
bossWave = this.other.createBossWave("bossBully", 100, "followerBully", 4, locations.rezervbase.base.OpenZones);
locations.rezervbase.base.BossLocationSpawn.push(bossWave);
bossWave = this.other.createBossWave("bossKojaniy", 100, "followerKojaniy", 2, locations.rezervbase.base.OpenZones);
locations.rezervbase.base.BossLocationSpawn.push(bossWave);
bossWave = this.other.createBossWave("bossSanitar", 100, "followerSanitar", 2, locations.rezervbase.base.OpenZones);
locations.rezervbase.base.BossLocationSpawn.push(bossWave);
}
if (this.configHandler.getConfig().other.preWipeEvents.gluhkarOnLabs)
{
const glugluWave: BossLocationSpawn = {
"BossName": "bossGluhar",
"BossChance": 43,
"BossZone": "ZoneRailStrorage,ZoneRailStrorage,ZoneRailStrorage,ZonePTOR1,ZonePTOR2,ZoneBarrack,ZoneBarrack,ZoneBarrack,ZoneSubStorage",
"BossPlayer": false,
"BossDifficult": "normal",
"BossEscortType": "followerGluharAssault",
"BossEscortDifficult": "normal",
"BossEscortAmount": "0",
"Time": -1,
"TriggerId": "",
"TriggerName": "",
"Supports": [
{
"BossEscortType": "followerGluharAssault",
"BossEscortDifficult": [
"normal"
],
"BossEscortAmount": "2"
},
{
"BossEscortType": "followerGluharSecurity",
"BossEscortDifficult": [
"normal"
],
"BossEscortAmount": "2"
},
{
"BossEscortType": "followerGluharScout",
"BossEscortDifficult": [
"normal"
],
"BossEscortAmount": "2"
}
]
}
glugluWave.BossZone = locations.laboratory.base.OpenZones;
locations.laboratory.base.BossLocationSpawn.push(glugluWave);
}
//Extend raids to defined number
if (this.configHandler.getConfig().raids.extendedRaid != false && typeof this.configHandler.getConfig().raids.extendedRaid === "number")
{
for (const map in locations)
{
if (map !== "base")
{
locations[map].base.exit_access_time = this.configHandler.getConfig().raids.extendedRaid;
locations[map].base.escape_time_limit = this.configHandler.getConfig().raids.extendedRaid;
}
}
}
//Make all extractions of the map available regardless of the infill
if (this.configHandler.getConfig().raids.extractionsExtended)
{
for (const map in locations)
{
switch (map)
{
case "base":
break;
case "bigmap":
for (const extract in locations[map].base.exits)
{
locations[map].base.exits[extract].EntryPoints = "Customs,Boiler Tanks";
}
break;
case "interchange":
for (const extract in locations[map].base.exits)
{
locations[map].base.exits[extract].EntryPoints = "MallSE,MallNW";
}
break;
case "shoreline":
for (const extract in locations[map].base.exits)
{
locations[map].base.exits[extract].EntryPoints = "Village,Riverside";
}
break;
case "woods":
for (const extract in locations[map].base.exits)
{
locations[map].base.exits[extract].EntryPoints = "House,Old Station";
}
break;
default:
break;
}
}
}
}
}

View File

@ -0,0 +1,205 @@
import { inject, injectable } from "tsyringe";
import type { DatabaseServer } from "../types/servers/DatabaseServer";
import { AIOConfigHandler } from "./AIOConfigHandler";
import { Other } from "./other";
import { Money } from "../types/models/enums/Money"
import { Traders as eftTraders} from "../types/models/spt/helpers/Traders"
@injectable()
export class Traders
{
private traders;
constructor(
@inject("AIOConfigHandler") private configHandler: AIOConfigHandler,
@inject("DatabaseServer") private database: DatabaseServer,
@inject("AIOOther") private other: Other
)
{}
public applyChanges(): void
{
this.traders = this.database.getTables().traders;
const quests = this.database.getTables().templates.quests;
const suits = this.database.getTables().templates.customization;
//Enable all the quests
if (this.configHandler.getConfig().traders.allQuestsAvailable)
{
for (const id in quests)
{
if (this.other.isThisIDaMod([id]) === false)
{
const questData = quests[id];
questData.conditions.AvailableForStart = [
{
_parent: "Level",
_props:
{
compareMethod: ">=",
value: 1,
index: 0,
parentId: "",
id: "AllInOne-Mod: AllQuestsAvailable",
dynamicLocale: false
},
dynamicLocale: false
}];
}
}
}
if (this.configHandler.getConfig().traders.removeFIRConditionOnQuests)
{
for (const id in quests)
{
const condition = quests[id].conditions.AvailableForFinish;
for (const requirements in condition)
{
const requirement = condition[requirements];
if (requirement._parent === "FindItem" || requirement._parent === "HandoverItem" &&
"_props" in requirement && "onlyFoundInRaid" in requirement._props)
{
requirement._props.onlyFoundInRaid = false;
}
}
}
}
//Enable all clothes available for both side
if (this.configHandler.getConfig().traders.allClothesForEverySide)
{
for (const suit in suits)
{
if (this.other.isThisIDaMod([suit]) === false)
{
const suitData = suits[suit];
suitData._props.Side = ["Savage", "Bear", "Usec"];
}
}
}
//Enable all clothes for free
if (this.configHandler.getConfig().traders.allClothesFree)
{
for (const trader in this.traders)
{
if (this.other.isThisIDaMod([trader]) === false && this.traders[trader].suits)
{
for (const file in this.traders[trader].suits)
{
const fileData = this.traders[trader].suits[file];
fileData.requirements.loyaltyLevel = 1;
fileData.requirements.profileLevel = 1;
fileData.requirements.standing = 0;
fileData.requirements.skillRequirements = [];
fileData.requirements.questRequirements = [];
fileData.requirements.itemRequirements = [];
}
}
}
}
//All cheap items on traders
if (this.configHandler.getConfig().other.preWipeEvents.allTradersSellCheapItems)
{
for (const trader in this.traders)
{
for (const assort in this.traders[trader].assort.barter_scheme)
{
const itemScheme = this.traders[trader].assort.barter_scheme[assort];
switch (itemScheme[0][0]._tpl)
{
case Money.ROUBLES:
itemScheme[0][0].count = itemScheme[0][0].count * 0.01;
break;
case Money.DOLLARS:
itemScheme[0][0].count = itemScheme[0][0].count * 0.1;
break;
case Money.EUROS:
itemScheme[0][0].count = itemScheme[0][0].count * 0.05;
break;
default:
break;
}
}
}
}
//Change insurances return times
if (this.configHandler.getConfig().traders.insuranceTime.activated)
{
if (this.configHandler.getConfig().traders.insuranceTime.prapor.activated)
{
this.traders[eftTraders.PRAPOR].base.insurance.min_return_hour =
this.configHandler.getConfig().traders.insuranceTime.prapor.min;
this.traders[eftTraders.PRAPOR].base.insurance.max_return_hour =
this.configHandler.getConfig().traders.insuranceTime.prapor.max;
}
if (this.configHandler.getConfig().traders.insuranceTime.therapist.activated)
{
this.traders[eftTraders.THERAPIST].base.insurance.min_return_hour =
this.configHandler.getConfig().traders.insuranceTime.therapist.min;
this.traders[eftTraders.THERAPIST].base.insurance.max_return_hour =
this.configHandler.getConfig().traders.insuranceTime.therapist.max;
}
}
//Change the maximum time for insurance to be in mails
if (this.configHandler.getConfig().traders.maxInsuranceStorageTime !== false)
{
this.traders[eftTraders.PRAPOR].base.insurance.max_storage_time =
this.configHandler.getConfig().traders.maxInsuranceStorageTime;
this.traders[eftTraders.THERAPIST].base.insurance.max_storage_time =
this.configHandler.getConfig().traders.maxInsuranceStorageTime;
}
//UnlockAllItemsAtLL1
if (this.configHandler.getConfig().traders.traderChanges.unlockAllItemsAtLL1 && !this.configHandler.getConfig().traders.traderChanges.allTraders4Stars)
{
for (const traderID in this.traders)
{
if (traderID === eftTraders.FENCE || traderID === "ragfair")
{
continue;
}
const loyaltyItems = this.traders[traderID].assort.loyal_level_items;
for (const lLItem in loyaltyItems)
{
loyaltyItems[lLItem] = 1;
}
}
}
//Remove assorts locked by quests
if (this.configHandler.getConfig().traders.traderChanges.removeItemsFromQuestLocks)
{
for (const traderID in this.traders)
{
if (this.traders[traderID].questassort && this.traders[traderID].questassort.success)
{
this.traders[traderID].questassort.success = {};
}
}
}
if (this.configHandler.getConfig().traders.traderChanges.allTraders4Stars)
{
for (const traderID in this.traders)
{
const loyaltyLevels = this.traders[traderID].base.loyaltyLevels;
for (const level in loyaltyLevels)
{
const loyalty = loyaltyLevels[level];
loyalty.minLevel = 1;
loyalty.minSalesSum = 0;
loyalty.minStanding = 0;
}
}
}
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,35 @@
import { MatchController } from "../controllers/MatchController";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "../models/eft/httpResponse/INullResponseData";
import { IEndOfflineRaidRequestData } from "../models/eft/match/IEndOfflineRaidRequestData";
import { IGetProfileRequestData } from "../models/eft/match/IGetProfileRequestData";
import { IStartOfflineRaidRequestData } from "../models/eft/match/IStartOffineRaidRequestData";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { JsonUtil } from "../utils/JsonUtil";
export declare class MatchCallbacks {
private httpResponse;
private jsonUtil;
private matchController;
private databaseServer;
constructor(httpResponse: HttpResponseUtil, jsonUtil: JsonUtil, matchController: MatchController, databaseServer: DatabaseServer);
updatePing(url: string, info: any, sessionID: string): INullResponseData;
exitMatch(url: string, info: any, sessionID: string): INullResponseData;
exitToMenu(url: string, info: any, sessionID: string): INullResponseData;
startGroupSearch(url: string, info: any, sessionID: string): INullResponseData;
stopGroupSearch(url: string, info: any, sessionID: string): INullResponseData;
sendGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
acceptGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
cancelGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
putMetrics(url: string, info: any, sessionID: string): INullResponseData;
getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>;
serverAvailable(url: string, info: any, sessionID: string): IGetBodyResponseData<any> | IGetBodyResponseData<true>;
joinMatch(url: string, info: any, sessionID: string): IGetBodyResponseData<any>;
getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData<string>;
getGroupStatus(url: string, info: any, sessionID: string): IGetBodyResponseData<any>;
createGroup(url: string, info: any, sessionID: string): IGetBodyResponseData<any>;
deleteGroup(url: string, info: any, sessionID: string): INullResponseData;
startOfflineRaid(url: string, info: IStartOfflineRaidRequestData, sessionID: string): INullResponseData;
endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,20 @@
import { BotGenerator } from "../generators/BotGenerator";
import { BotHelper } from "../helpers/BotHelper";
import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData";
import { IBotBase } from "../models/eft/common/tables/IBotBase";
import { IBotCore } from "../models/eft/common/tables/IBotCore";
import { Difficulty } from "../models/eft/common/tables/IBotType";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
export declare class BotController {
private databaseServer;
private botGenerator;
private botHelper;
private configServer;
private botConfig;
constructor(databaseServer: DatabaseServer, botGenerator: BotGenerator, botHelper: BotHelper, configServer: ConfigServer);
getBotLimit(type: string): number;
getBotDifficulty(type: string, difficulty: string): IBotCore | Difficulty;
generate(info: IGenerateBotsRequestData, playerScav?: boolean): IBotBase[];
getBotCap(): number;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,56 @@
import { HideoutHelper } from "../helpers/HideoutHelper";
import { InventoryHelper } from "../helpers/InventoryHelper";
import { PaymentHelper } from "../helpers/PaymentHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { HideoutUpgradeCompleteRequestData } from "../models/eft/hideout/HideoutUpgradeCompleteRequestData";
import { IHideoutContinousProductionStartRequestData } from "../models/eft/hideout/IHideoutContinousProductionStartRequestData";
import { IHideoutPutItemInRequestData } from "../models/eft/hideout/IHideoutPutItemInRequestData";
import { IHideoutScavCaseStartRequestData } from "../models/eft/hideout/IHideoutScavCaseStartRequestData";
import { IHideoutSingleProductionStartRequestData } from "../models/eft/hideout/IHideoutSingleProductionStartRequestData";
import { IHideoutTakeItemOutRequestData } from "../models/eft/hideout/IHideoutTakeItemOutRequestData";
import { IHideoutTakeProductionRequestData } from "../models/eft/hideout/IHideoutTakeProductionRequestData";
import { IHideoutToggleAreaRequestData } from "../models/eft/hideout/IHideoutToggleAreaRequestData";
import { IHideoutUpgradeRequestData } from "../models/eft/hideout/IHideoutUpgradeRequestData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { PlayerService } from "../services/PlayerService";
import { HashUtil } from "../utils/HashUtil";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class HideoutController {
private logger;
private hashUtil;
private timeUtil;
private databaseServer;
private randomUtil;
private inventoryHelper;
private saveServer;
private playerService;
private presetHelper;
private paymentHelper;
private itemEventRouter;
private httpResponse;
private profileHelper;
private hideoutHelper;
private configServer;
private hideoutConfig;
constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, itemEventRouter: ItemEventRouter, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, configServer: ConfigServer);
upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse;
upgradeComplete(pmcData: IPmcData, body: HideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse;
putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse;
takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse;
toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse;
singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse;
continuousProductionStart(pmcData: IPmcData, body: IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
registerProduction(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData | IHideoutContinousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
update(): void;
}

View File

@ -0,0 +1,30 @@
import { ExtendedProfileHelper } from "../helpers/ExtendedProfileHelper";
import { HealthHelper } from "../helpers/HealthHelper";
import { InRaidHelper } from "../helpers/InRaidHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { QuestHelper } from "../helpers/QuestHelper";
import { TraderHelper } from "../helpers/TraderHelper";
import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData";
import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { InsuranceService } from "../services/InsuranceService";
import { JsonUtil } from "../utils/JsonUtil";
export declare class InraidController {
private saveServer;
private jsonUtil;
private databaseServer;
private questHelper;
private itemHelper;
private extendedProfileHelper;
private healthHelper;
private traderHelper;
private insuranceService;
private inRaidHelper;
private configServer;
private inraidConfig;
constructor(saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, questHelper: QuestHelper, itemHelper: ItemHelper, extendedProfileHelper: ExtendedProfileHelper, healthHelper: HealthHelper, traderHelper: TraderHelper, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, configServer: ConfigServer);
addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void;
saveProgress(offraidData: ISaveProgressRequestData, sessionID: string): void;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,37 @@
import { DialogueHelper } from "../helpers/DialogueHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestConditionHelper } from "../helpers/QuestConditionHelper";
import { QuestHelper } from "../helpers/QuestHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IQuest } from "../models/eft/common/tables/IQuest";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IAcceptQuestRequestData } from "../models/eft/quests/IAcceptQuestRequestData";
import { ICompleteQuestRequestData } from "../models/eft/quests/ICompleteQuestRequestData";
import { IHandoverQuestRequestData } from "../models/eft/quests/IHandoverQuestRequestData";
import { ILogger } from "../models/spt/utils/ILogger";
import { ItemEventRouter } from "../routers/ItemEventRouter";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { PlayerService } from "../services/PlayerService";
import { TimeUtil } from "../utils/TimeUtil";
export declare class QuestController {
private logger;
private timeUtil;
private itemEventRouter;
private databaseServer;
private itemHelper;
private dialogueHelper;
private profileHelper;
private questHelper;
private questConditionHelper;
private playerService;
private configServer;
private questConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, itemEventRouter: ItemEventRouter, databaseServer: DatabaseServer, itemHelper: ItemHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, questHelper: QuestHelper, questConditionHelper: QuestConditionHelper, playerService: PlayerService, configServer: ConfigServer);
getClientQuests(sessionID: string): IQuest[];
acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
acceptRepeatableQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,36 @@
import { BotHelper } from "../helpers/BotHelper";
import { GameEventHelper } from "../helpers/GameEventHelper";
import { IGenerateBotsRequestData } from "../models/eft/bot/IGenerateBotsRequestData";
import { IBotBase } from "../models/eft/common/tables/IBotBase";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { BotInventoryGenerator } from "./BotInventoryGenerator";
export declare class BotGenerator {
private logger;
private hashUtil;
private randomUtil;
private jsonUtil;
private databaseServer;
private botInventoryGenerator;
private botHelper;
private gameEventHelper;
private configServer;
private botConfig;
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botHelper: BotHelper, gameEventHelper: GameEventHelper, configServer: ConfigServer);
generate(info: IGenerateBotsRequestData, playerScav?: boolean): IBotBase[];
private generateBot;
private generateRandomLevel;
/** Converts health object to the required format */
private generateHealth;
private generateSkills;
private getPmcRole;
private removeChristmasItemsFromBotInventory;
private generateId;
private generateInventoryID;
private getPMCDifficulty;
private generateDogtag;
}

View File

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

View File

@ -0,0 +1,27 @@
import { PMCLootGenerator } from "../generators/PMCLootGenerator";
import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper";
import { HandbookHelper } from "../helpers/HandbookHelper";
import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
import { ItemMinMax, Items } from "../models/eft/common/tables/IBotType";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
export declare class BotLootGenerator {
private jsonUtil;
private hashUtil;
private randomUtil;
private databaseServer;
private handbookHelper;
private botGeneratorHelper;
private pmcLootGenerator;
private configServer;
private botConfig;
constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, pmcLootGenerator: PMCLootGenerator, configServer: ConfigServer);
generateLoot(lootPool: Items, itemCounts: ItemMinMax, isPmc: boolean, inventory: PmcInventory): void;
private getRandomisedCount;
private addLootFromPool;
/** Compares two item templates by their price to spawn chance ratio */
private compareByValue;
}

View File

@ -0,0 +1,44 @@
import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { Inventory as PmcInventory } from "../models/eft/common/IPmcData";
import { MinMax, Mods, ModsChances } from "../models/eft/common/tables/IBotType";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { RandomUtil } from "../utils/RandomUtil";
export declare class BotWeaponGenerator {
private logger;
private hashUtil;
private databaseServer;
private itemHelper;
private weightedRandomHelper;
private botGeneratorHelper;
private randomUtil;
constructor(logger: ILogger, hashUtil: HashUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, weightedRandomHelper: WeightedRandomHelper, botGeneratorHelper: BotGeneratorHelper, randomUtil: RandomUtil);
generateWeapon(equipmentSlot: string, weaponPool: Record<string, number>, modPool: Mods, modChances: ModsChances, magCounts: MinMax, botRole: string, isPmc: boolean, inventory: PmcInventory): void;
/** Checks if all required slots are occupied on a weapon and all it's mods */
private isWeaponValid;
/**
* Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets.
* Additionally, adds extra bullets to SecuredContainer
*
* @param {*} weaponMods
* @param {*} weaponTemplate
* @param {*} magCounts
* @param {*} ammoTpl
* @returns
*/
private generateExtraMagazines;
private addBullets;
/**
* Finds and returns tpl of ammo that should be used, while making sure it's compatible
*
* @param {*} weaponMods
* @param {*} weaponTemplate
* @returns
*/
private getCompatibleAmmo;
/** Fill existing magazines to full, while replacing their contents with specified ammo */
private fillExistingMagazines;
}

View File

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

View File

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

View File

@ -0,0 +1,17 @@
import { ItemHelper } from "../helpers/ItemHelper";
import { Item } from "../models/eft/common/tables/IItem";
import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
export declare class RagfairAssortGenerator {
private jsonUtil;
private hashUtil;
private itemHelper;
private databaseServer;
private generatedAssortItems;
constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer);
getAssortItems(): Item[];
private assortsAreGenerated;
private generateRagfairAssortItems;
private createRagfairAssortItem;
}

View File

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

View File

@ -0,0 +1,19 @@
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { ConfigServer } from "../servers/ConfigServer";
import { IWeatherData } from "../models/eft/weather/IWeatherData";
import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class WeatherGenerator {
private weightedRandomHelper;
private randomUtil;
private timeUtil;
private configServer;
private weatherConfig;
constructor(weightedRandomHelper: WeightedRandomHelper, randomUtil: RandomUtil, timeUtil: TimeUtil, configServer: ConfigServer);
calculateTime(data: IWeatherData): IWeatherData;
generateWeather(data: IWeatherData): IWeatherData;
private getWeightedFog;
private getWeightedRain;
private getRandomFloat;
private getRandomInt;
}

View File

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

View File

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

View File

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

View File

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

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