diff --git a/.gitignore b/.gitignore index f6bbe44..aa94aee 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,9 @@ bin/ obj/ *.editorconfig +## Rider +.idea + ## visual studio .vs .idea diff --git a/Live/CWX_BushWhacker/BushWhacker.cs b/Live/CWX_BushWhacker/BushWhacker.cs index 396089b..9333974 100644 --- a/Live/CWX_BushWhacker/BushWhacker.cs +++ b/Live/CWX_BushWhacker/BushWhacker.cs @@ -5,7 +5,7 @@ using UnityEngine; namespace CWX_BushWhacker { - [BepInPlugin("com.cwx.bushwhacker", "cwx-bushwhacker", "1.2.9")] + [BepInPlugin("com.cwx.bushwhacker", "cwx-bushwhacker", "1.3.0")] public class BushWhacker : BaseUnityPlugin { public void Start() diff --git a/Live/CWX_BushWhacker/CWX-BushWhacker 1.2.9/bepInEx/plugins/CWX-BushWhacker.dll b/Live/CWX_BushWhacker/CWX-BushWhacker 1.3.0/bepInEx/plugins/CWX-BushWhacker.dll similarity index 88% rename from Live/CWX_BushWhacker/CWX-BushWhacker 1.2.9/bepInEx/plugins/CWX-BushWhacker.dll rename to Live/CWX_BushWhacker/CWX-BushWhacker 1.3.0/bepInEx/plugins/CWX-BushWhacker.dll index 8554c38..5ba10f4 100644 Binary files a/Live/CWX_BushWhacker/CWX-BushWhacker 1.2.9/bepInEx/plugins/CWX-BushWhacker.dll and b/Live/CWX_BushWhacker/CWX-BushWhacker 1.3.0/bepInEx/plugins/CWX-BushWhacker.dll differ diff --git a/Live/CWX_BushWhacker/CWX_BushWhacker.csproj b/Live/CWX_BushWhacker/CWX_BushWhacker.csproj index dd35d40..d3f2433 100644 --- a/Live/CWX_BushWhacker/CWX_BushWhacker.csproj +++ b/Live/CWX_BushWhacker/CWX_BushWhacker.csproj @@ -3,7 +3,7 @@ net472 CWX-BushWhacker - 1.2.9 + 1.3.0 diff --git a/Live/CWX_ColourAdderPatcher/ColourAdderPatcher.cs b/Live/CWX_ColourAdderPatcher/ColourAdderPatcher.cs index 4238ff4..0159369 100644 --- a/Live/CWX_ColourAdderPatcher/ColourAdderPatcher.cs +++ b/Live/CWX_ColourAdderPatcher/ColourAdderPatcher.cs @@ -1,27 +1,27 @@ -using System.Reflection; -using System; -using System.Collections.Generic; -using System.Linq; -using Aki.Reflection.Patching; -using Aki.Reflection.Utils; -using BepInEx; -using EFT; -using Comfort.Common; -using JsonType; -using UnityEngine; - -namespace CWX_ColourAdderPatcher -{ - [BepInPlugin("com.cwx.ColourAdder", "cwx-ColourAdder", "1.0.0")] - public class ColourAdderPatcher : BaseUnityPlugin - { - public void Start() - { - var type = PatchConstants.EftTypes.Single(x => x.Name == "GClass1179") - .GetField("dictionary_0"); - // get field with name of dictionary_0 add custom - // dictionary.Add(TaxonomyColor.yellow, new Color32(104, 102, 40, byte.MaxValue)); - } - } -} +// using System.Reflection; +// using System; +// using System.Collections.Generic; +// using System.Linq; +// using Aki.Reflection.Patching; +// using Aki.Reflection.Utils; +// using BepInEx; +// using EFT; +// using Comfort.Common; +// using JsonType; +// using UnityEngine; +// +// namespace CWX_ColourAdderPatcher +// { +// [BepInPlugin("com.cwx.ColourAdder", "cwx-ColourAdder", "1.0.0")] +// public class ColourAdderPatcher : BaseUnityPlugin +// { +// public void Start() +// { +// var type = PatchConstants.EftTypes.Single(x => x.Name == "GClass1179") +// .GetField("dictionary_0"); +// // get field with name of dictionary_0 add custom +// // dictionary.Add(TaxonomyColor.yellow, new Color32(104, 102, 40, byte.MaxValue)); +// } +// } +// } diff --git a/Live/CWX_DeSharpener/CWX-DeSharpener 1.4.9/bepInEx/plugins/CWX-DeSharpener.dll b/Live/CWX_DeSharpener/CWX-DeSharpener 1.5.0/bepInEx/plugins/CWX-DeSharpener.dll similarity index 85% rename from Live/CWX_DeSharpener/CWX-DeSharpener 1.4.9/bepInEx/plugins/CWX-DeSharpener.dll rename to Live/CWX_DeSharpener/CWX-DeSharpener 1.5.0/bepInEx/plugins/CWX-DeSharpener.dll index 73ed681..b495f02 100644 Binary files a/Live/CWX_DeSharpener/CWX-DeSharpener 1.4.9/bepInEx/plugins/CWX-DeSharpener.dll and b/Live/CWX_DeSharpener/CWX-DeSharpener 1.5.0/bepInEx/plugins/CWX-DeSharpener.dll differ diff --git a/Live/CWX_DeSharpener/CWX_DeSharpener.csproj b/Live/CWX_DeSharpener/CWX_DeSharpener.csproj index 35c70d2..4b590b5 100644 --- a/Live/CWX_DeSharpener/CWX_DeSharpener.csproj +++ b/Live/CWX_DeSharpener/CWX_DeSharpener.csproj @@ -2,7 +2,7 @@ net472 - 1.4.9 + 1.5.0 CWX-DeSharpener diff --git a/Live/CWX_DeSharpener/DeSharpener.cs b/Live/CWX_DeSharpener/DeSharpener.cs index 7d41482..97d547e 100644 --- a/Live/CWX_DeSharpener/DeSharpener.cs +++ b/Live/CWX_DeSharpener/DeSharpener.cs @@ -2,7 +2,7 @@ namespace CWX_DeSharpener { - [BepInPlugin("com.CWX.DeSharpener", "CWX-DeSharpener", "1.4.9")] + [BepInPlugin("com.CWX.DeSharpener", "CWX-DeSharpener", "1.5.0")] public class DeSharpener : BaseUnityPlugin { private void Awake() diff --git a/Live/CWX_DebuggingTool/CWX_DebuggingTool 1.0.0/BepInEx/plugins/CWX_DebuggingTool.dll b/Live/CWX_DebuggingTool/CWX_DebuggingTool 1.0.0/BepInEx/plugins/CWX_DebuggingTool.dll new file mode 100644 index 0000000..41f789c Binary files /dev/null and b/Live/CWX_DebuggingTool/CWX_DebuggingTool 1.0.0/BepInEx/plugins/CWX_DebuggingTool.dll differ diff --git a/Live/CWX_MasterKey/CWX_MasterKey 1.4.1/bepInEx/plugins/CWX-MasterKey.dll b/Live/CWX_MasterKey/CWX_MasterKey 1.4.2/bepInEx/plugins/CWX-MasterKey.dll similarity index 75% rename from Live/CWX_MasterKey/CWX_MasterKey 1.4.1/bepInEx/plugins/CWX-MasterKey.dll rename to Live/CWX_MasterKey/CWX_MasterKey 1.4.2/bepInEx/plugins/CWX-MasterKey.dll index d9423f6..6ddcdaf 100644 Binary files a/Live/CWX_MasterKey/CWX_MasterKey 1.4.1/bepInEx/plugins/CWX-MasterKey.dll and b/Live/CWX_MasterKey/CWX_MasterKey 1.4.2/bepInEx/plugins/CWX-MasterKey.dll differ diff --git a/Live/CWX_MasterKey/CWX_MasterKey 1.4.1/user/mods/CWX-MasterKey 1.4.1/LICENSE.txt b/Live/CWX_MasterKey/CWX_MasterKey 1.4.2/user/mods/CWX-MasterKey 1.4.2/LICENSE.txt similarity index 100% rename from Live/CWX_MasterKey/CWX_MasterKey 1.4.1/user/mods/CWX-MasterKey 1.4.1/LICENSE.txt rename to Live/CWX_MasterKey/CWX_MasterKey 1.4.2/user/mods/CWX-MasterKey 1.4.2/LICENSE.txt diff --git a/Live/CWX_MasterKey/CWX_MasterKey 1.4.1/user/mods/CWX-MasterKey 1.4.1/package.json b/Live/CWX_MasterKey/CWX_MasterKey 1.4.2/user/mods/CWX-MasterKey 1.4.2/package.json similarity index 52% rename from Live/CWX_MasterKey/CWX_MasterKey 1.4.1/user/mods/CWX-MasterKey 1.4.1/package.json rename to Live/CWX_MasterKey/CWX_MasterKey 1.4.2/user/mods/CWX-MasterKey 1.4.2/package.json index 40a0933..c3697fb 100644 --- a/Live/CWX_MasterKey/CWX_MasterKey 1.4.1/user/mods/CWX-MasterKey 1.4.1/package.json +++ b/Live/CWX_MasterKey/CWX_MasterKey 1.4.2/user/mods/CWX-MasterKey 1.4.2/package.json @@ -1,23 +1,23 @@ { "name": "MasterKey", "author": "CWX", - "version": "1.4.1", + "version": "1.4.2", "license": "NCSA", "main": "src/mod.js", - "akiVersion": "3.5.0", + "akiVersion": "3.5.1", "scripts": { "setup": "npm i", "build": "node ./packageBuild.ts" }, "devDependencies": { - "@types/node": "16.11.62", - "@typescript-eslint/eslint-plugin": "5.38.1", - "@typescript-eslint/parser": "5.38.1", + "@types/node": "16.18.10", + "@typescript-eslint/eslint-plugin": "5.46.1", + "@typescript-eslint/parser": "5.46.1", "bestzip": "2.2.1", - "eslint": "8.24.0", - "fs-extra": "10.1.0", + "eslint": "8.30.0", + "fs-extra": "11.1.0", "glob": "8.0.3", "tsyringe": "4.7.0", - "typescript": "4.8.4" + "typescript": "4.9.4" } } diff --git a/Live/CWX_MasterKey/CWX_MasterKey 1.4.1/user/mods/CWX-MasterKey 1.4.1/src/config.json b/Live/CWX_MasterKey/CWX_MasterKey 1.4.2/user/mods/CWX-MasterKey 1.4.2/src/config.json similarity index 100% rename from Live/CWX_MasterKey/CWX_MasterKey 1.4.1/user/mods/CWX-MasterKey 1.4.1/src/config.json rename to Live/CWX_MasterKey/CWX_MasterKey 1.4.2/user/mods/CWX-MasterKey 1.4.2/src/config.json diff --git a/Live/CWX_MasterKey/CWX_MasterKey 1.4.1/user/mods/CWX-MasterKey 1.4.1/src/mod.ts b/Live/CWX_MasterKey/CWX_MasterKey 1.4.2/user/mods/CWX-MasterKey 1.4.2/src/mod.ts similarity index 100% rename from Live/CWX_MasterKey/CWX_MasterKey 1.4.1/user/mods/CWX-MasterKey 1.4.1/src/mod.ts rename to Live/CWX_MasterKey/CWX_MasterKey 1.4.2/user/mods/CWX-MasterKey 1.4.2/src/mod.ts diff --git a/Live/CWX_MasterKey/CWX_MasterKey.csproj b/Live/CWX_MasterKey/CWX_MasterKey.csproj index 910a92b..d39a322 100644 --- a/Live/CWX_MasterKey/CWX_MasterKey.csproj +++ b/Live/CWX_MasterKey/CWX_MasterKey.csproj @@ -3,7 +3,7 @@ net472 CWX-MasterKey - 1.4.1 + 1.4.2 diff --git a/Live/CWX_MasterKey/MasterKey.cs b/Live/CWX_MasterKey/MasterKey.cs index 63ff50a..9262c94 100644 --- a/Live/CWX_MasterKey/MasterKey.cs +++ b/Live/CWX_MasterKey/MasterKey.cs @@ -2,7 +2,7 @@ namespace CWX_MasterKey { - [BepInPlugin("com.CWX.MasterKey", "CWX-MasterKey", "1.4.1")] + [BepInPlugin("com.CWX.MasterKey", "CWX-MasterKey", "1.4.2")] public class MasterKey : BaseUnityPlugin { private void Awake() diff --git a/Live/CWX_MasterKey/server/dist/package.json b/Live/CWX_MasterKey/server/dist/package.json index 40a0933..c3697fb 100644 --- a/Live/CWX_MasterKey/server/dist/package.json +++ b/Live/CWX_MasterKey/server/dist/package.json @@ -1,23 +1,23 @@ { "name": "MasterKey", "author": "CWX", - "version": "1.4.1", + "version": "1.4.2", "license": "NCSA", "main": "src/mod.js", - "akiVersion": "3.5.0", + "akiVersion": "3.5.1", "scripts": { "setup": "npm i", "build": "node ./packageBuild.ts" }, "devDependencies": { - "@types/node": "16.11.62", - "@typescript-eslint/eslint-plugin": "5.38.1", - "@typescript-eslint/parser": "5.38.1", + "@types/node": "16.18.10", + "@typescript-eslint/eslint-plugin": "5.46.1", + "@typescript-eslint/parser": "5.46.1", "bestzip": "2.2.1", - "eslint": "8.24.0", - "fs-extra": "10.1.0", + "eslint": "8.30.0", + "fs-extra": "11.1.0", "glob": "8.0.3", "tsyringe": "4.7.0", - "typescript": "4.8.4" + "typescript": "4.9.4" } } diff --git a/Live/CWX_MasterKey/server/package.json b/Live/CWX_MasterKey/server/package.json index 40a0933..c3697fb 100644 --- a/Live/CWX_MasterKey/server/package.json +++ b/Live/CWX_MasterKey/server/package.json @@ -1,23 +1,23 @@ { "name": "MasterKey", "author": "CWX", - "version": "1.4.1", + "version": "1.4.2", "license": "NCSA", "main": "src/mod.js", - "akiVersion": "3.5.0", + "akiVersion": "3.5.1", "scripts": { "setup": "npm i", "build": "node ./packageBuild.ts" }, "devDependencies": { - "@types/node": "16.11.62", - "@typescript-eslint/eslint-plugin": "5.38.1", - "@typescript-eslint/parser": "5.38.1", + "@types/node": "16.18.10", + "@typescript-eslint/eslint-plugin": "5.46.1", + "@typescript-eslint/parser": "5.46.1", "bestzip": "2.2.1", - "eslint": "8.24.0", - "fs-extra": "10.1.0", + "eslint": "8.30.0", + "fs-extra": "11.1.0", "glob": "8.0.3", "tsyringe": "4.7.0", - "typescript": "4.8.4" + "typescript": "4.9.4" } } diff --git a/Live/CWX_MasterKey/server/types/callbacks/GameCallbacks.d.ts b/Live/CWX_MasterKey/server/types/callbacks/GameCallbacks.d.ts index 3a6b7e6..30cf074 100644 --- a/Live/CWX_MasterKey/server/types/callbacks/GameCallbacks.d.ts +++ b/Live/CWX_MasterKey/server/types/callbacks/GameCallbacks.d.ts @@ -39,6 +39,7 @@ declare class GameCallbacks { */ getGameConfig(url: string, info: IGameEmptyCrcRequestData, sessionID: string): IGetBodyResponseData; getServer(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getCurrentGroup(url: string, info: IEmptyRequestData, sessionID: string): any; validateGameVersion(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; /** * Handle client/game/keepalive diff --git a/Live/CWX_MasterKey/server/types/callbacks/ProfileCallbacks.d.ts b/Live/CWX_MasterKey/server/types/callbacks/ProfileCallbacks.d.ts index 183bb0a..9a5848e 100644 --- a/Live/CWX_MasterKey/server/types/callbacks/ProfileCallbacks.d.ts +++ b/Live/CWX_MasterKey/server/types/callbacks/ProfileCallbacks.d.ts @@ -5,6 +5,7 @@ import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyRespons import { INullResponseData } from "../models/eft/httpResponse/INullResponseData"; import { IGetMiniProfileRequestData } from "../models/eft/launcher/IGetMiniProfileRequestData"; import { GetProfileStatusResponseData } from "../models/eft/profile/GetProfileStatusResponseData"; +import { IGetProfileSettingsRequest } from "../models/eft/profile/IGetProfileSettingsRequest"; import { IProfileChangeNicknameRequestData } from "../models/eft/profile/IProfileChangeNicknameRequestData"; import { IProfileChangeVoiceRequestData } from "../models/eft/profile/IProfileChangeVoiceRequestData"; import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateRequestData"; @@ -64,6 +65,7 @@ export declare class ProfileCallbacks { * @returns */ getProfileStatus(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; + getProfileSettings(url: string, info: IGetProfileSettingsRequest, sessionId: string): IGetBodyResponseData; searchFriend(url: string, info: ISearchFriendRequestData, sessionID: string): IGetBodyResponseData; getMiniProfile(url: string, info: IGetMiniProfileRequestData, sessionID: string): string; getAllMiniProfiles(url: string, info: any, sessionID: string): string; diff --git a/Live/CWX_MasterKey/server/types/callbacks/TraderCallbacks.d.ts b/Live/CWX_MasterKey/server/types/callbacks/TraderCallbacks.d.ts index 8df1049..1e75add 100644 --- a/Live/CWX_MasterKey/server/types/callbacks/TraderCallbacks.d.ts +++ b/Live/CWX_MasterKey/server/types/callbacks/TraderCallbacks.d.ts @@ -2,7 +2,7 @@ import { OnLoad } from "../di/OnLoad"; import { OnUpdate } from "../di/OnUpdate"; import { TraderController } from "../controllers/TraderController"; import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData"; -import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader"; +import { ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader"; import { IGetBodyResponseData } from "../models/eft/httpResponse/IGetBodyResponseData"; import { HttpResponseUtil } from "../utils/HttpResponseUtil"; export declare class TraderCallbacks implements OnLoad, OnUpdate { @@ -13,11 +13,6 @@ export declare class TraderCallbacks implements OnLoad, OnUpdate { onUpdate(): Promise; getRoute(): string; getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; - /** - * Handle client/trading/api/getUserAssortPrice/trader - * @returns - */ - getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; } diff --git a/Live/CWX_MasterKey/server/types/context/ApplicationContext.d.ts b/Live/CWX_MasterKey/server/types/context/ApplicationContext.d.ts index 28bbdf7..0a81be0 100644 --- a/Live/CWX_MasterKey/server/types/context/ApplicationContext.d.ts +++ b/Live/CWX_MasterKey/server/types/context/ApplicationContext.d.ts @@ -8,6 +8,8 @@ export declare class ApplicationContext { * * const registerPlayerInfo = this.applicationContext.getLatestValue(ContextVariableType.REGISTER_PLAYER_REQUEST).getValue(); * + * const activePlayerSessionId = this.applicationContext.getLatestValue(ContextVariableType.SESSION_ID).getValue(); + * * const matchInfo = this.applicationContext.getLatestValue(ContextVariableType.MATCH_INFO).getValue(); * @param type * @returns diff --git a/Live/CWX_MasterKey/server/types/controllers/GameController.d.ts b/Live/CWX_MasterKey/server/types/controllers/GameController.d.ts index 44264dc..e47d5fa 100644 --- a/Live/CWX_MasterKey/server/types/controllers/GameController.d.ts +++ b/Live/CWX_MasterKey/server/types/controllers/GameController.d.ts @@ -20,10 +20,12 @@ import { LocalisationService } from "../services/LocalisationService"; import { OpenZoneService } from "../services/OpenZoneService"; import { ProfileFixerService } from "../services/ProfileFixerService"; import { SeasonalEventService } from "../services/SeasonalEventService"; +import { JsonUtil } from "../utils/JsonUtil"; import { TimeUtil } from "../utils/TimeUtil"; export declare class GameController { protected logger: ILogger; protected databaseServer: DatabaseServer; + protected jsonUtil: JsonUtil; protected timeUtil: TimeUtil; protected preAkiModLoader: PreAkiModLoader; protected httpServerHelper: HttpServerHelper; @@ -39,7 +41,7 @@ export declare class GameController { protected httpConfig: IHttpConfig; protected coreConfig: ICoreConfig; protected locationConfig: ILocationConfig; - constructor(logger: ILogger, databaseServer: DatabaseServer, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, applicationContext: ApplicationContext, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, applicationContext: ApplicationContext, configServer: ConfigServer); gameStart(_url: string, _info: IEmptyRequestData, sessionID: string, startTimeStampMS: number): void; /** * When player logs in, iterate over all active effects and reduce timer @@ -55,6 +57,10 @@ export declare class GameController { * Make Rogues spawn later to allow for scavs to spawn first instead of rogues filling up all spawn positions */ protected fixRoguesSpawningInstantlyOnLighthouse(): void; + /** + * Find and split waves with large numbers of bots into smaller waves - BSG appears to reduce the size of these waves to one bot when they're waiting to spawn for too long + */ + protected splitBotWavesIntoSingleWaves(): void; /** * Get a list of installed mods and save their details to the profile being used * @param fullProfile Profile to add mod details to @@ -76,5 +82,6 @@ export declare class GameController { protected logProfileDetails(fullProfile: IAkiProfile): void; getGameConfig(sessionID: string): IGameConfigResponse; getServer(): IServerDetails[]; + getCurrentGroup(sessionId: any): any; getValidGameVersion(): ICheckVersionResponse; } diff --git a/Live/CWX_MasterKey/server/types/controllers/InraidController.d.ts b/Live/CWX_MasterKey/server/types/controllers/InraidController.d.ts index f954eff..4b0c21b 100644 --- a/Live/CWX_MasterKey/server/types/controllers/InraidController.d.ts +++ b/Live/CWX_MasterKey/server/types/controllers/InraidController.d.ts @@ -61,18 +61,18 @@ export declare class InraidController { */ protected savePmcProgress(sessionID: string, offraidData: ISaveProgressRequestData): void; /** - * Make changes to pmc profile after they left raid dead, - * alter bodypart hp, handle insurance, delete inventory items, remove carried quest items - * @param postRaidSaveRequest post-raid save request - * @param pmcData pmc profile - * @param insuranceEnabled is insurance enabled - * @param preRaidGear gear player had before raid + * Make changes to pmc profile after they've died in raid, + * Alter bodypart hp, handle insurance, delete inventory items, remove carried quest items + * @param postRaidSaveRequest Post-raid save request + * @param pmcData Pmc profile + * @param insuranceEnabled Is insurance enabled + * @param preRaidGear Gear player had before raid * @param sessionID Session id * @returns Updated profile object */ protected performPostRaidActionsWhenDead(postRaidSaveRequest: ISaveProgressRequestData, pmcData: IPmcData, insuranceEnabled: boolean, preRaidGear: Item[], sessionID: string): IPmcData; /** - * Adjust player characters bodypart hp if they left raid early + * Adjust player characters bodypart hp post-raid * @param postRaidSaveRequest post raid data * @param pmcData player profile */ diff --git a/Live/CWX_MasterKey/server/types/controllers/InventoryController.d.ts b/Live/CWX_MasterKey/server/types/controllers/InventoryController.d.ts index 129ede3..53bb017 100644 --- a/Live/CWX_MasterKey/server/types/controllers/InventoryController.d.ts +++ b/Live/CWX_MasterKey/server/types/controllers/InventoryController.d.ts @@ -112,7 +112,14 @@ export declare class InventoryController { * @returns client response object */ tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse; - bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Bind an inventory item to the quick access menu at bottom of player screen + * @param pmcData Player profile + * @param bindRequest Reqeust object + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + bindItem(pmcData: IPmcData, bindRequest: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse; /** * Handles examining an item * @param pmcData player profile @@ -137,9 +144,36 @@ export declare class InventoryController { * @returns IItemEventRouterResponse */ sortInventory(pmcData: IPmcData, request: IInventorySortRequestData, sessionID: string): IItemEventRouterResponse; - createMapMarker(pmcData: IPmcData, body: IInventoryCreateMarkerRequestData, sessionID: string): IItemEventRouterResponse; - deleteMapMarker(pmcData: IPmcData, body: IInventoryDeleteMarkerRequestData, sessionID: string): IItemEventRouterResponse; - editMapMarker(pmcData: IPmcData, body: IInventoryEditMarkerRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Add note to a map + * @param pmcData Player profile + * @param request Add marker request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + createMapMarker(pmcData: IPmcData, request: IInventoryCreateMarkerRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Delete a map marker + * @param pmcData Player profile + * @param request Delete marker request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + deleteMapMarker(pmcData: IPmcData, request: IInventoryDeleteMarkerRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Edit an existing map marker + * @param pmcData Player profile + * @param request Edit marker request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + editMapMarker(pmcData: IPmcData, request: IInventoryEditMarkerRequestData, sessionID: string): IItemEventRouterResponse; + /** + * Strip out characters from note string that are not: letter/numbers/unicode/spaces + * @param mapNoteText Marker text to sanitise + * @returns Sanitised map marker text + */ + protected sanitiseMapMarkerText(mapNoteText: string): string; /** * Handle event fired when a container is unpacked (currently only the halloween pumpkin) * @param pmcData Profile data diff --git a/Live/CWX_MasterKey/server/types/controllers/ProfileController.d.ts b/Live/CWX_MasterKey/server/types/controllers/ProfileController.d.ts index e76785a..9496013 100644 --- a/Live/CWX_MasterKey/server/types/controllers/ProfileController.d.ts +++ b/Live/CWX_MasterKey/server/types/controllers/ProfileController.d.ts @@ -1,4 +1,5 @@ import { PlayerScavGenerator } from "../generators/PlayerScavGenerator"; +import { DialogueHelper } from "../helpers/DialogueHelper"; import { ItemHelper } from "../helpers/ItemHelper"; import { ProfileHelper } from "../helpers/ProfileHelper"; import { QuestHelper } from "../helpers/QuestHelper"; @@ -11,6 +12,7 @@ import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateR import { ISearchFriendRequestData } from "../models/eft/profile/ISearchFriendRequestData"; import { ISearchFriendResponse } from "../models/eft/profile/ISearchFriendResponse"; import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData"; +import { EventOutputHolder } from "../routers/EventOutputHolder"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; import { ProfileFixerService } from "../services/ProfileFixerService"; @@ -24,10 +26,12 @@ export declare class ProfileController { protected itemHelper: ItemHelper; protected profileFixerService: ProfileFixerService; protected playerScavGenerator: PlayerScavGenerator; + protected eventOutputHolder: EventOutputHolder; protected traderHelper: TraderHelper; + protected dialogueHelper: DialogueHelper; protected questHelper: QuestHelper; protected profileHelper: ProfileHelper; - constructor(hashUtil: HashUtil, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileFixerService: ProfileFixerService, playerScavGenerator: PlayerScavGenerator, traderHelper: TraderHelper, questHelper: QuestHelper, profileHelper: ProfileHelper); + constructor(hashUtil: HashUtil, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileFixerService: ProfileFixerService, playerScavGenerator: PlayerScavGenerator, eventOutputHolder: EventOutputHolder, traderHelper: TraderHelper, dialogueHelper: DialogueHelper, questHelper: QuestHelper, profileHelper: ProfileHelper); getMiniProfiles(): IMiniProfile[]; getMiniProfile(sessionID: string): any; getCompleteProfile(sessionID: string): IPmcData[]; diff --git a/Live/CWX_MasterKey/server/types/controllers/QuestController.d.ts b/Live/CWX_MasterKey/server/types/controllers/QuestController.d.ts index fe1754d..7e4bd69 100644 --- a/Live/CWX_MasterKey/server/types/controllers/QuestController.d.ts +++ b/Live/CWX_MasterKey/server/types/controllers/QuestController.d.ts @@ -60,13 +60,6 @@ export declare class QuestController { * @returns client response */ acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; - /** - * Get a quests startedMessageText key from db, if no startedMessageText key found, use description key instead - * @param startedMessageTextId startedMessageText property from IQuest - * @param questDescriptionId description property from IQuest - * @returns message id - */ - protected getMessageIdForQuestStart(startedMessageTextId: string, questDescriptionId: string): string; /** * Handle the client accepting a repeatable quest and starting it * Send starting rewards if any to player and @@ -123,7 +116,14 @@ export declare class QuestController { * @param questsToFail quests to fail */ protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[]): void; - handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse; + /** + * + * @param pmcData Player profile + * @param handoverQuestRequest handover item request + * @param sessionID Session id + * @returns IItemEventRouterResponse + */ + handoverQuest(pmcData: IPmcData, handoverQuestRequest: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse; /** * Increment a backend counter stored value by an amount, * Create counter if it does not exist diff --git a/Live/CWX_MasterKey/server/types/controllers/RepeatableQuestController.d.ts b/Live/CWX_MasterKey/server/types/controllers/RepeatableQuestController.d.ts index dd8dc40..171062d 100644 --- a/Live/CWX_MasterKey/server/types/controllers/RepeatableQuestController.d.ts +++ b/Live/CWX_MasterKey/server/types/controllers/RepeatableQuestController.d.ts @@ -12,7 +12,7 @@ import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse"; import { IRepeatableQuestChangeRequest } from "../models/eft/quests/IRepeatableQuestChangeRequest"; import { ELocationName } from "../models/enums/ELocationName"; -import { IQuestConfig, IRepeatableQuestConfig } from "../models/spt/config/IQuestConfig"; +import { IEliminationConfig, IQuestConfig, IRepeatableQuestConfig } from "../models/spt/config/IQuestConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { EventOutputHolder } from "../routers/EventOutputHolder"; import { ConfigServer } from "../servers/ConfigServer"; @@ -159,7 +159,14 @@ export declare class RepeatableQuestController { */ generateEliminationQuest(pmcLevel: number, traderId: string, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IElimination; /** - * Cpnvert a location into an quest code can read (e.g. factory4_day into 55f2d3fd4bdc2d5f408b4567) + * Get the relevant elimination config based on the current players PMC level + * @param pmcLevel Level of PMC character + * @param repeatableConfig Main repeatable config + * @returns IEliminationConfig + */ + protected getEliminationConfigByPmcLevel(pmcLevel: number, repeatableConfig: IRepeatableQuestConfig): IEliminationConfig; + /** + * Convert a location into an quest code can read (e.g. factory4_day into 55f2d3fd4bdc2d5f408b4567) * @param locationKey e.g factory4_day * @returns guid */ @@ -203,10 +210,11 @@ export declare class RepeatableQuestController { * 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 + * @param repeatableConfig main repeatable quest config + * @param pmcLevel level of pmc generating quest pool + * @returns IQuestTypePool */ - generateQuestPool(repeatableConfig: IRepeatableQuestConfig): IQuestTypePool; + generateQuestPool(repeatableConfig: IRepeatableQuestConfig, pmcLevel: number): IQuestTypePool; /** * Generate the reward for a mission. A reward can consist of * - Experience diff --git a/Live/CWX_MasterKey/server/types/controllers/TradeController.d.ts b/Live/CWX_MasterKey/server/types/controllers/TradeController.d.ts index dc7de19..8a0630b 100644 --- a/Live/CWX_MasterKey/server/types/controllers/TradeController.d.ts +++ b/Live/CWX_MasterKey/server/types/controllers/TradeController.d.ts @@ -7,6 +7,7 @@ import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRout import { IProcessBaseTradeRequestData } from "../models/eft/trade/IProcessBaseTradeRequestData"; import { IProcessRagfairTradeRequestData } from "../models/eft/trade/IProcessRagfairTradeRequestData"; import { IRagfairConfig } from "../models/spt/config/IRagfairConfig"; +import { ITraderConfig } from "../models/spt/config/ITraderConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { EventOutputHolder } from "../routers/EventOutputHolder"; import { ConfigServer } from "../servers/ConfigServer"; @@ -24,8 +25,10 @@ declare class TradeController { protected localisationService: LocalisationService; protected configServer: ConfigServer; protected ragfairConfig: IRagfairConfig; + protected traderConfig: ITraderConfig; constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, tradeHelper: TradeHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, ragfairServer: RagfairServer, httpResponse: HttpResponseUtil, localisationService: LocalisationService, configServer: ConfigServer); - confirmTrading(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string, foundInRaid?: boolean, upd?: Upd): IItemEventRouterResponse; + confirmTrading(pmcData: IPmcData, request: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse; confirmRagfairTrading(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse; + protected confirmTradingInternal(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string, foundInRaid?: boolean, upd?: Upd): IItemEventRouterResponse; } export { TradeController }; diff --git a/Live/CWX_MasterKey/server/types/controllers/TraderController.d.ts b/Live/CWX_MasterKey/server/types/controllers/TraderController.d.ts index b67aec9..007901b 100644 --- a/Live/CWX_MasterKey/server/types/controllers/TraderController.d.ts +++ b/Live/CWX_MasterKey/server/types/controllers/TraderController.d.ts @@ -2,27 +2,25 @@ import { FenceBaseAssortGenerator } from "../generators/FenceBaseAssortGenerator import { ProfileHelper } from "../helpers/ProfileHelper"; import { TraderAssortHelper } from "../helpers/TraderAssortHelper"; import { TraderHelper } from "../helpers/TraderHelper"; -import { IBarterScheme, ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader"; +import { ITraderAssort, ITraderBase } from "../models/eft/common/tables/ITrader"; import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { FenceService } from "../services/FenceService"; import { TraderAssortService } from "../services/TraderAssortService"; import { TraderPurchasePersisterService } from "../services/TraderPurchasePersisterService"; import { JsonUtil } from "../utils/JsonUtil"; -import { TimeUtil } from "../utils/TimeUtil"; export declare class TraderController { protected logger: ILogger; protected databaseServer: DatabaseServer; protected traderAssortHelper: TraderAssortHelper; protected profileHelper: ProfileHelper; protected traderHelper: TraderHelper; - protected timeUtil: TimeUtil; protected traderAssortService: TraderAssortService; protected traderPurchasePersisterService: TraderPurchasePersisterService; protected fenceService: FenceService; protected fenceBaseAssortGenerator: FenceBaseAssortGenerator; protected jsonUtil: JsonUtil; - constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, timeUtil: TimeUtil, traderAssortService: TraderAssortService, traderPurchasePersisterService: TraderPurchasePersisterService, fenceService: FenceService, fenceBaseAssortGenerator: FenceBaseAssortGenerator, jsonUtil: JsonUtil); + constructor(logger: ILogger, databaseServer: DatabaseServer, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, traderAssortService: TraderAssortService, traderPurchasePersisterService: TraderPurchasePersisterService, fenceService: FenceService, fenceBaseAssortGenerator: FenceBaseAssortGenerator, jsonUtil: JsonUtil); /** * Runs when onLoad event is fired * Iterate over traders, ensure an unmolested copy of their assorts is stored in traderAssortService @@ -42,7 +40,13 @@ export declare class TraderController { * @returns array if ITraderBase objects */ getAllTraders(sessionID: string): ITraderBase[]; + /** + * Order traders by their traderId (Ttid) + * @param traderA First trader to compare + * @param traderB Second trader to compare + * @returns 1,-1 or 0 + */ + protected sortByTraderId(traderA: ITraderBase, traderB: ITraderBase): number; getTrader(sessionID: string, traderID: string): ITraderBase; getAssort(sessionId: string, traderId: string): ITraderAssort; - getPurchasesData(sessionID: string, traderID: string): Record; } diff --git a/Live/CWX_MasterKey/server/types/generators/BotEquipmentModGenerator.d.ts b/Live/CWX_MasterKey/server/types/generators/BotEquipmentModGenerator.d.ts index 6703a36..4a8581c 100644 --- a/Live/CWX_MasterKey/server/types/generators/BotEquipmentModGenerator.d.ts +++ b/Live/CWX_MasterKey/server/types/generators/BotEquipmentModGenerator.d.ts @@ -14,6 +14,7 @@ import { DatabaseServer } from "../servers/DatabaseServer"; import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService"; import { BotEquipmentModPoolService } from "../services/BotEquipmentModPoolService"; import { BotModLimits, BotWeaponModLimitService } from "../services/BotWeaponModLimitService"; +import { ItemBaseClassService } from "../services/ItemBaseClassService"; import { ItemFilterService } from "../services/ItemFilterService"; import { LocalisationService } from "../services/LocalisationService"; import { HashUtil } from "../utils/HashUtil"; @@ -28,6 +29,7 @@ export declare class BotEquipmentModGenerator { protected databaseServer: DatabaseServer; protected itemHelper: ItemHelper; protected botEquipmentFilterService: BotEquipmentFilterService; + protected itemBaseClassService: ItemBaseClassService; protected itemFilterService: ItemFilterService; protected profileHelper: ProfileHelper; protected botWeaponModLimitService: BotWeaponModLimitService; @@ -38,7 +40,7 @@ export declare class BotEquipmentModGenerator { protected botEquipmentModPoolService: BotEquipmentModPoolService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, itemHelper: ItemHelper, botEquipmentFilterService: BotEquipmentFilterService, itemFilterService: ItemFilterService, profileHelper: ProfileHelper, botWeaponModLimitService: BotWeaponModLimitService, botHelper: BotHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, localisationService: LocalisationService, botEquipmentModPoolService: BotEquipmentModPoolService, configServer: ConfigServer); + constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, probabilityHelper: ProbabilityHelper, databaseServer: DatabaseServer, itemHelper: ItemHelper, botEquipmentFilterService: BotEquipmentFilterService, itemBaseClassService: ItemBaseClassService, itemFilterService: ItemFilterService, profileHelper: ProfileHelper, botWeaponModLimitService: BotWeaponModLimitService, botHelper: BotHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, localisationService: LocalisationService, botEquipmentModPoolService: BotEquipmentModPoolService, configServer: ConfigServer); /** * Check mods are compatible and add to array * @param equipment Equipment item to add mods to diff --git a/Live/CWX_MasterKey/server/types/generators/BotGenerator.d.ts b/Live/CWX_MasterKey/server/types/generators/BotGenerator.d.ts index 9581259..8992e9e 100644 --- a/Live/CWX_MasterKey/server/types/generators/BotGenerator.d.ts +++ b/Live/CWX_MasterKey/server/types/generators/BotGenerator.d.ts @@ -14,12 +14,14 @@ import { SeasonalEventService } from "../services/SeasonalEventService"; import { HashUtil } from "../utils/HashUtil"; import { JsonUtil } from "../utils/JsonUtil"; import { RandomUtil } from "../utils/RandomUtil"; +import { TimeUtil } from "../utils/TimeUtil"; import { BotInventoryGenerator } from "./BotInventoryGenerator"; import { BotLevelGenerator } from "./BotLevelGenerator"; export declare class BotGenerator { protected logger: ILogger; protected hashUtil: HashUtil; protected randomUtil: RandomUtil; + protected timeUtil: TimeUtil; protected jsonUtil: JsonUtil; protected profileHelper: ProfileHelper; protected databaseServer: DatabaseServer; @@ -32,7 +34,7 @@ export declare class BotGenerator { protected seasonalEventService: SeasonalEventService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, configServer: ConfigServer); + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, configServer: ConfigServer); /** * Generate a player scav bot object * @param role e.g. assault / pmcbot diff --git a/Live/CWX_MasterKey/server/types/generators/BotLootGenerator.d.ts b/Live/CWX_MasterKey/server/types/generators/BotLootGenerator.d.ts index 6273a11..044d407 100644 --- a/Live/CWX_MasterKey/server/types/generators/BotLootGenerator.d.ts +++ b/Live/CWX_MasterKey/server/types/generators/BotLootGenerator.d.ts @@ -1,10 +1,11 @@ import { BotGeneratorHelper } from "../helpers/BotGeneratorHelper"; import { BotWeaponGeneratorHelper } from "../helpers/BotWeaponGeneratorHelper"; import { HandbookHelper } from "../helpers/HandbookHelper"; +import { ItemHelper } from "../helpers/ItemHelper"; import { Inventory as PmcInventory } from "../models/eft/common/tables/IBotBase"; import { Chances, Inventory, ItemMinMax, ModsChances } from "../models/eft/common/tables/IBotType"; import { Item } from "../models/eft/common/tables/IItem"; -import { ITemplateItem, Props } from "../models/eft/common/tables/ITemplateItem"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { IBotConfig } from "../models/spt/config/IBotConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; @@ -18,6 +19,7 @@ export declare class BotLootGenerator { protected logger: ILogger; protected hashUtil: HashUtil; protected randomUtil: RandomUtil; + protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; protected handbookHelper: HandbookHelper; protected botGeneratorHelper: BotGeneratorHelper; @@ -27,7 +29,7 @@ export declare class BotLootGenerator { protected localisationService: LocalisationService; protected configServer: ConfigServer; protected botConfig: IBotConfig; - constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botLootCacheService: BotLootCacheService, localisationService: LocalisationService, configServer: ConfigServer); + constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, botGeneratorHelper: BotGeneratorHelper, botWeaponGenerator: BotWeaponGenerator, botWeaponGeneratorHelper: BotWeaponGeneratorHelper, botLootCacheService: BotLootCacheService, localisationService: LocalisationService, configServer: ConfigServer); /** * Add loot to bots containers * @param sessionId Session id @@ -94,19 +96,6 @@ export declare class BotLootGenerator { * @returns true if item has reached spawn limit */ protected itemHasReachedSpawnLimit(itemTemplate: ITemplateItem, botRole: string, isPmc: boolean, limitCount: Record, itemSpawnLimits: Record): boolean; - /** - * Is the item an ammo box - * @param props props of the item to check - * @returns true if item is an ammo box - */ - protected isAmmoBox(props: Props): boolean; - /** - * Create an object that contains the ammo stack for an ammo box - * @param parentId ammo box id - * @param props ammo box props - * @returns Item object - */ - protected createAmmoForAmmoBox(parentId: string, props: Props): Item; /** * Randomise the stack size of a money object, uses different values for pmc or scavs * @param isPmc is this a PMC diff --git a/Live/CWX_MasterKey/server/types/generators/BotWeaponGenerator.d.ts b/Live/CWX_MasterKey/server/types/generators/BotWeaponGenerator.d.ts index a68b82f..3e9fe30 100644 --- a/Live/CWX_MasterKey/server/types/generators/BotWeaponGenerator.d.ts +++ b/Live/CWX_MasterKey/server/types/generators/BotWeaponGenerator.d.ts @@ -140,26 +140,27 @@ export declare class BotWeaponGenerator { protected getWeaponCaliber(weaponTemplate: ITemplateItem): string; /** * Fill existing magazines to full, while replacing their contents with specified ammo - * @param weaponMods - * @param magazine - * @param ammoTpl + * @param weaponMods Weapon with children + * @param magazine Magazine item + * @param cartridgeTpl Cartridge to insert into magazine */ - protected fillExistingMagazines(weaponMods: Item[], magazine: Item, ammoTpl: string): void; + protected fillExistingMagazines(weaponMods: Item[], magazine: Item, cartridgeTpl: string): void; /** * Add desired ammo tpl as item to weaponmods array, placed as child to UBGL - * @param weaponMods - * @param ubglMod - * @param ubglAmmoTpl + * @param weaponMods Weapon with children + * @param ubglMod UBGL item + * @param ubglAmmoTpl Grenade ammo tpl */ protected fillUbgl(weaponMods: Item[], ubglMod: Item, ubglAmmoTpl: string): void; /** * Add cartridge item to weapon Item array, if it already exists, update - * @param weaponMods Weapon items array to amend + * @param weaponWithMods Weapon items array to amend * @param magazine magazine item details we're adding cartridges to - * @param chosenAmmo cartridge to put into the magazine + * @param chosenAmmoTpl cartridge to put into the magazine * @param newStackSize how many cartridges should go into the magazine + * @param magazineTemplate magazines db template */ - protected addOrUpdateMagazinesChildWithAmmo(weaponMods: Item[], magazine: Item, chosenAmmo: string, newStackSize: number): void; + protected addOrUpdateMagazinesChildWithAmmo(weaponWithMods: Item[], magazine: Item, chosenAmmoTpl: string, magazineTemplate: ITemplateItem): void; /** * Fill each Camora with a bullet * @param weaponMods Weapon mods to find and update camora mod(s) from diff --git a/Live/CWX_MasterKey/server/types/generators/LocationGenerator.d.ts b/Live/CWX_MasterKey/server/types/generators/LocationGenerator.d.ts index a617048..04b1599 100644 --- a/Live/CWX_MasterKey/server/types/generators/LocationGenerator.d.ts +++ b/Live/CWX_MasterKey/server/types/generators/LocationGenerator.d.ts @@ -2,7 +2,7 @@ import { ContainerHelper } from "../helpers/ContainerHelper"; import { ItemHelper } from "../helpers/ItemHelper"; import { PresetHelper } from "../helpers/PresetHelper"; import { RagfairServerHelper } from "../helpers/RagfairServerHelper"; -import { ILooseLoot, SpawnpointsForced, SpawnpointTemplate } from "../models/eft/common/ILooseLoot"; +import { ILooseLoot, Spawnpoint, SpawnpointsForced, SpawnpointTemplate } from "../models/eft/common/ILooseLoot"; import { Item } from "../models/eft/common/tables/IItem"; import { IStaticAmmoDetails, IStaticContainerProps, IStaticForcedProps, IStaticLootDetails } from "../models/eft/common/tables/ILootBase"; import { ILocationConfig } from "../models/spt/config/ILocationConfig"; @@ -34,6 +34,15 @@ export declare class LocationGenerator { protected configServer: ConfigServer; protected locationConfig: ILocationConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, objectId: ObjectId, randomUtil: RandomUtil, ragfairServerHelper: RagfairServerHelper, itemHelper: ItemHelper, mathUtil: MathUtil, seasonalEventService: SeasonalEventService, containerHelper: ContainerHelper, presetHelper: PresetHelper, localisationService: LocalisationService, configServer: ConfigServer); + /** + * Choose loot to put into a static container + * @param containerIn + * @param staticForced + * @param staticLootDist + * @param staticAmmoDist + * @param locationName Name of the map to generate static loot for + * @returns IStaticContainerProps + */ generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record, staticAmmoDist: Record, locationName: string): IStaticContainerProps; protected getLooseLootMultiplerForLocation(location: string): number; protected getStaticLootMultiplerForLocation(location: string): number; @@ -52,5 +61,25 @@ export declare class LocationGenerator { * @param name of map currently generating forced loot for */ protected addForcedLoot(loot: SpawnpointTemplate[], forcedSpawnPoints: SpawnpointsForced[], locationName: string): void; - protected createItem(tpl: string, staticAmmoDist: Record, parentId?: string): IContainerItem; + /** + * Create array of item (with child items) and return + * @param chosenComposedKey Key we want to look up items for + * @param spawnPoint Dynamic spawn point item we want will be placed in + * @returns IContainerItem + */ + protected createDynamicLootItem(chosenComposedKey: string, spawnPoint: Spawnpoint): IContainerItem; + /** + * Replace the _id value for base item + all children items parentid value + * @param itemWithChildren Item with mods to update + * @param newId new id to add on chidren of base item + */ + protected reparentItemAndChildren(itemWithChildren: Item[], newId?: string): void; + /** + * Find an item in array by its _tpl, handle differently if chosenTpl is a weapon + * @param items Items array to search + * @param chosenTpl Tpl we want to get item with + * @returns Item object + */ + protected getItemInArray(items: Item[], chosenTpl: string): Item; + protected createStaticLootItem(tpl: string, staticAmmoDist: Record, parentId?: string): IContainerItem; } diff --git a/Live/CWX_MasterKey/server/types/generators/PMCLootGenerator.d.ts b/Live/CWX_MasterKey/server/types/generators/PMCLootGenerator.d.ts index 10918e3..8dd47ef 100644 --- a/Live/CWX_MasterKey/server/types/generators/PMCLootGenerator.d.ts +++ b/Live/CWX_MasterKey/server/types/generators/PMCLootGenerator.d.ts @@ -1,4 +1,5 @@ import { ItemHelper } from "../helpers/ItemHelper"; +import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem"; import { IBotConfig } from "../models/spt/config/IBotConfig"; import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; @@ -15,6 +16,7 @@ export declare class PMCLootGenerator { protected itemFilterService: ItemFilterService; protected seasonalEventService: SeasonalEventService; protected pocketLootPool: string[]; + protected vestLootPool: string[]; protected backpackLootPool: string[]; protected botConfig: IBotConfig; constructor(itemHelper: ItemHelper, databaseServer: DatabaseServer, configServer: ConfigServer, itemFilterService: ItemFilterService, seasonalEventService: SeasonalEventService); @@ -23,6 +25,18 @@ export declare class PMCLootGenerator { * @returns string array of tpls */ generatePMCPocketLootPool(): string[]; + /** + * Create an array of loot items a PMC can have in their vests + * @returns string array of tpls + */ + generatePMCVestLootPool(): string[]; + /** + * Check if item has a width/hide that lets it fit into a 1x2 slot + * 1x1 / 1x2 / 2x1 + * @param item Item to check size of + * @returns true if it fits + */ + protected itemFitsInto1By2Slot(item: ITemplateItem): boolean; /** * Create an array of loot items a PMC can have in their backpack * @returns string array of tpls diff --git a/Live/CWX_MasterKey/server/types/helpers/AssortHelper.d.ts b/Live/CWX_MasterKey/server/types/helpers/AssortHelper.d.ts index 13512b2..bc66b09 100644 --- a/Live/CWX_MasterKey/server/types/helpers/AssortHelper.d.ts +++ b/Live/CWX_MasterKey/server/types/helpers/AssortHelper.d.ts @@ -1,5 +1,6 @@ import { IPmcData } from "../models/eft/common/IPmcData"; import { ITraderAssort } from "../models/eft/common/tables/ITrader"; +import { QuestStatus } from "../models/enums/QuestStatus"; import { ILogger } from "../models/spt/utils/ILogger"; import { DatabaseServer } from "../servers/DatabaseServer"; import { LocalisationService } from "../services/LocalisationService"; @@ -15,12 +16,22 @@ export declare class AssortHelper { /** * Remove assorts from a trader that have not been unlocked yet * @param pmcProfile player profile - * @param traderId traders id - * @param assort assort items from a trader - * @param mergedQuestAssorts An object of quest assort to quest id unlocks for all traders + * @param traderId traders id the assort belongs to + * @param traderAssorts All assort items from same trader + * @param mergedQuestAssorts Dict of quest assort to quest id unlocks for all traders * @returns assort items minus locked quest assorts */ - stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, assort: ITraderAssort, mergedQuestAssorts: Record>, flea?: boolean): ITraderAssort; + stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, traderAssorts: ITraderAssort, mergedQuestAssorts: Record>, flea?: boolean): ITraderAssort; + /** + * Get a quest id + the statuses quest can be in to unlock assort + * @param mergedQuestAssorts quest assorts to search for assort id + * @param assortId Assort to look for linked quest id + * @returns quest id + array of quest status the assort should show for + */ + protected getQuestIdAndStatusThatShowAssort(mergedQuestAssorts: Record>, assortId: string): { + questId: string; + status: QuestStatus[]; + }; /** * Remove assorts from a trader that have not been unlocked yet * @param pmcProfile player profile diff --git a/Live/CWX_MasterKey/server/types/helpers/BotWeaponGeneratorHelper.d.ts b/Live/CWX_MasterKey/server/types/helpers/BotWeaponGeneratorHelper.d.ts index cefc3bd..8a3784b 100644 --- a/Live/CWX_MasterKey/server/types/helpers/BotWeaponGeneratorHelper.d.ts +++ b/Live/CWX_MasterKey/server/types/helpers/BotWeaponGeneratorHelper.d.ts @@ -65,11 +65,11 @@ export declare class BotWeaponGeneratorHelper { /** * TODO - move into BotGeneratorHelper, this is not the class for it * Adds an item with all its children into specified equipmentSlots, wherever it fits. - * @param equipmentSlots + * @param equipmentSlots Slot to add item+children into * @param parentId * @param parentTpl - * @param itemWithChildren - * @param inventory + * @param itemWithChildren Item to add + * @param inventory Inventory to add item+children into * @returns a `boolean` indicating item was added */ addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: Inventory): boolean; diff --git a/Live/CWX_MasterKey/server/types/helpers/HideoutHelper.d.ts b/Live/CWX_MasterKey/server/types/helpers/HideoutHelper.d.ts index a5849e3..466b41d 100644 --- a/Live/CWX_MasterKey/server/types/helpers/HideoutHelper.d.ts +++ b/Live/CWX_MasterKey/server/types/helpers/HideoutHelper.d.ts @@ -140,8 +140,21 @@ export declare class HideoutHelper { * @returns coin slot count */ protected getBTCSlots(pmcData: IPmcData): number; + /** + * Get a count of bitcoins player miner can hold + */ protected getManagementSkillsSlots(): number; - protected hasManagementSkillSlots(pmcData: IPmcData): boolean; + /** + * Does profile have elite hideout management skill + * @param pmcData Profile to look at + * @returns True if profile has skill + */ + protected hasEliteHideoutManagementSkill(pmcData: IPmcData): boolean; + /** + * Get the hideout management skill from player profile + * @param pmcData Profile to look at + * @returns Hideout management skill object + */ protected getHideoutManagementSkill(pmcData: IPmcData): Common; protected getHideoutManagementConsumptionBonus(pmcData: IPmcData): number; /** diff --git a/Live/CWX_MasterKey/server/types/helpers/InRaidHelper.d.ts b/Live/CWX_MasterKey/server/types/helpers/InRaidHelper.d.ts index c69a810..b65d78d 100644 --- a/Live/CWX_MasterKey/server/types/helpers/InRaidHelper.d.ts +++ b/Live/CWX_MasterKey/server/types/helpers/InRaidHelper.d.ts @@ -2,24 +2,35 @@ import { IPmcData } from "../models/eft/common/IPmcData"; import { Victim } from "../models/eft/common/tables/IBotBase"; import { Item } from "../models/eft/common/tables/IItem"; import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData"; +import { ILostOnDeathConfig } from "../models/spt/config/ILostOnDeathConfig"; import { ILogger } from "../models/spt/utils/ILogger"; +import { ConfigServer } from "../servers/ConfigServer"; import { DatabaseServer } from "../servers/DatabaseServer"; import { SaveServer } from "../servers/SaveServer"; import { LocalisationService } from "../services/LocalisationService"; import { ProfileFixerService } from "../services/ProfileFixerService"; import { JsonUtil } from "../utils/JsonUtil"; import { InventoryHelper } from "./InventoryHelper"; +import { ItemHelper } from "./ItemHelper"; import { PaymentHelper } from "./PaymentHelper"; export declare class InRaidHelper { protected logger: ILogger; protected saveServer: SaveServer; protected jsonUtil: JsonUtil; + protected itemHelper: ItemHelper; protected databaseServer: DatabaseServer; protected inventoryHelper: InventoryHelper; protected paymentHelper: PaymentHelper; protected localisationService: LocalisationService; protected profileFixerService: ProfileFixerService; - constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, profileFixerService: ProfileFixerService); + protected configServer: ConfigServer; + protected lostOnDeathConfig: ILostOnDeathConfig; + constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, profileFixerService: ProfileFixerService, configServer: ConfigServer); + /** + * Should quest items be removed from player inventory on death + * @returns True if items should be removed from inventory + */ + removeQuestItemsOnDeath(): boolean; /** * Check an array of items and add an upd object to money items with a stack count of 1 * Single stack money items have no upd object and thus no StackObjectsCount, causing issues @@ -83,7 +94,7 @@ export declare class InRaidHelper { * Remove equipped items from pre-raid * Add new items found in raid to profile * Store insurance items in profile - * @param sessionID + * @param sessionID Session id * @param pmcData Profile to update * @param postRaidProfile Profile returned by client after a raid * @returns Updated profile @@ -94,15 +105,21 @@ export declare class InRaidHelper { * Used post-raid to remove items after death * @param pmcData Player profile * @param sessionID Session id - * @returns Player profile with pmc inventory cleared */ - deleteInventory(pmcData: IPmcData, sessionID: string): IPmcData; + deleteInventory(pmcData: IPmcData, sessionID: string): void; + /** + * Get items in vest/pocket/backpack inventory containers (excluding children) + * @param pmcData Player profile + * @returns Item array + */ + protected getBaseItemsInRigPocketAndBackpack(pmcData: IPmcData): Item[]; /** * Does the provided items slotId mean its kept on the player after death - * @param slotId slotid of item to check + * @pmcData Player profile + * @itemToCheck Item to check should be kept * @returns true if item is kept after death */ - isItemKeptAfterDeath(slotId: string): boolean; + protected isItemKeptAfterDeath(pmcData: IPmcData, itemToCheck: Item): boolean; /** * Return the equipped items from a players inventory * @param items Players inventory to search through diff --git a/Live/CWX_MasterKey/server/types/helpers/InventoryHelper.d.ts b/Live/CWX_MasterKey/server/types/helpers/InventoryHelper.d.ts index 8855d1e..9c31d78 100644 --- a/Live/CWX_MasterKey/server/types/helpers/InventoryHelper.d.ts +++ b/Live/CWX_MasterKey/server/types/helpers/InventoryHelper.d.ts @@ -61,12 +61,12 @@ export declare class InventoryHelper { /** * Add ammo to ammo boxes * @param itemToAdd Item to check is ammo box - * @param toDo + * @param parentId Ammo box parent id * @param output IItemEventRouterResponse object * @param sessionID Session id * @param pmcData Profile to add ammobox to */ - protected hydrateAmmoBoxWithAmmo(pmcData: IPmcData, itemToAdd: IAddItemTempObject, toDo: string[][], sessionID: string, output: IItemEventRouterResponse): void; + protected hydrateAmmoBoxWithAmmo(pmcData: IPmcData, itemToAdd: IAddItemTempObject, parentId: string, sessionID: string, output: IItemEventRouterResponse): void; /** * * @param assortItems Items to add to inventory @@ -111,7 +111,13 @@ export declare class InventoryHelper { /** * Internal helper function to move item within the same profile_f. */ - moveItemInternal(inventoryItems: Item[], body: IInventoryMoveRequestData): void; + moveItemInternal(pmcData: IPmcData, inventoryItems: Item[], moveRequest: IInventoryMoveRequestData): void; + /** + * Update fast panel bindings when an item is moved into a container that doesnt allow quick slot access + * @param pmcData Player profile + * @param itemBeingMoved item being moved + */ + protected updateFastPanelBinding(pmcData: IPmcData, itemBeingMoved: Item): void; /** * Internal helper function to handle cartridges in inventory if any of them exist. */ diff --git a/Live/CWX_MasterKey/server/types/helpers/ItemHelper.d.ts b/Live/CWX_MasterKey/server/types/helpers/ItemHelper.d.ts index de424d2..bd4893c 100644 --- a/Live/CWX_MasterKey/server/types/helpers/ItemHelper.d.ts +++ b/Live/CWX_MasterKey/server/types/helpers/ItemHelper.d.ts @@ -193,31 +193,53 @@ declare class ItemHelper { replaceIDs(pmcData: IPmcData, items: Item[], insuredItems?: InsuredItem[], fastPanel?: any): any[]; /** * WARNING, SLOW. Recursively loop down through an items hierarchy to see if any of the ids match the supplied list, return true if any do - * @param {string} tpl - * @param {Array} tplsToCheck - * @returns boolean + * @param {string} tpl Items tpl to check parents of + * @param {Array} tplsToCheck Tpl values to check if parents of item match + * @returns boolean Match found */ doesItemOrParentsIdMatch(tpl: string, tplsToCheck: string[]): boolean; /** - * Return true if item is a quest item - * @param {string} tpl - * @returns boolean + * Check if item is quest item + * @param tpl Items tpl to check quest status of + * @returns true if item is flagged as quest item */ isQuestItem(tpl: string): boolean; /** * Get the inventory size of an item - * @param items + * @param items Item with children * @param rootItemId * @returns ItemSize object (width and height) */ getItemSize(items: Item[], rootItemId: string): ItemHelper.ItemSize; /** * Get a random cartridge from an items Filter property - * @param item - * @returns + * @param item Db item template to look up Cartridge filter values from + * @returns Caliber of cartridge */ getRandomCompatibleCaliberTemplateId(item: ITemplateItem): string; - createRandomMagCartridges(magTemplate: ITemplateItem, parentId: string, staticAmmoDist: Record, caliber?: string): Item; + /** + * Add cartridges to the ammo box with correct max stack sizes + * @param ammoBox Box to add cartridges to + * @param ammoBoxDetails Item template from items db + */ + addCartridgesToAmmoBox(ammoBox: Item[], ammoBoxDetails: ITemplateItem): void; + /** + * Add child items (cartridges) to a magazine + * @param magazine Magazine to add child items to + * @param magTemplate Db template of magazine + * @param staticAmmoDist Cartridge distribution + * @param caliber Caliber of cartridge to add to magazine + * @param minSizePercent % the magazine must be filled to + */ + fillMagazineWithRandomCartridge(magazine: Item[], magTemplate: ITemplateItem, staticAmmoDist: Record, caliber?: string, minSizePercent?: number): void; + /** + * Add child items to a magazine of a specific cartridge + * @param magazine Magazine to add child items to + * @param magTemplate Db template of magazine + * @param cartridgeTpl Cartridge to add to magazine + * @param minSizePercent % the magazine must be filled to + */ + fillMagazineWithCartridge(magazine: Item[], magTemplate: ITemplateItem, cartridgeTpl: string, minSizePercent?: number): void; protected getRandomValidCaliber(magTemplate: ITemplateItem): string; protected drawAmmoTpl(caliber: string, staticAmmoDist: Record): string; /** diff --git a/Live/CWX_MasterKey/server/types/helpers/ProfileHelper.d.ts b/Live/CWX_MasterKey/server/types/helpers/ProfileHelper.d.ts index 79652ad..28d3d23 100644 --- a/Live/CWX_MasterKey/server/types/helpers/ProfileHelper.d.ts +++ b/Live/CWX_MasterKey/server/types/helpers/ProfileHelper.d.ts @@ -20,7 +20,12 @@ export declare class ProfileHelper { protected itemHelper: ItemHelper; protected profileSnapshotService: ProfileSnapshotService; constructor(logger: ILogger, jsonUtil: JsonUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileSnapshotService: ProfileSnapshotService); - resetProfileQuestCondition(sessionID: string, conditionId: string): void; + /** + * Remove/reset started quest condtions in player profile + * @param sessionID Session id + * @param conditionIds Condition ids that need to be reset/removed + */ + resetProfileQuestCondition(sessionID: string, conditionIds: string[]): void; /** * Get all profiles from server * @returns Dictionary of profiles diff --git a/Live/CWX_MasterKey/server/types/helpers/QuestHelper.d.ts b/Live/CWX_MasterKey/server/types/helpers/QuestHelper.d.ts index de7cba2..1ec9fe8 100644 --- a/Live/CWX_MasterKey/server/types/helpers/QuestHelper.d.ts +++ b/Live/CWX_MasterKey/server/types/helpers/QuestHelper.d.ts @@ -40,7 +40,7 @@ export declare class QuestHelper { protected questConfig: IQuestConfig; constructor(logger: ILogger, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, traderHelper: TraderHelper, configServer: ConfigServer); /** - * Get status of a quest by quest id + * Get status of a quest in player profile by its id * @param pmcData Profile to search * @param questID Quest id to look up * @returns QuestStatus enum @@ -160,6 +160,13 @@ export declare class QuestHelper { * @returns IQuest object */ getQuestFromDb(questId: string, pmcData: IPmcData): IQuest; + /** + * Get a quests startedMessageText key from db, if no startedMessageText key found, use description key instead + * @param startedMessageTextId startedMessageText property from IQuest + * @param questDescriptionId description property from IQuest + * @returns message id + */ + getMessageIdForQuestStart(startedMessageTextId: string, questDescriptionId: string): string; /** * Get the locale Id from locale db for a quest message * @param questMessageId Quest message id to look up @@ -204,7 +211,7 @@ export declare class QuestHelper { * @param itemTpl item tpl to look for * @returns 'FindItem' condition id */ - getFindItemIdForQuestHandIn(itemTpl: string): string; + getFindItemIdForQuestHandIn(itemTpl: string): string[]; /** * Add all quests to a profile with the provided statuses * @param pmcProfile profile to update diff --git a/Live/CWX_MasterKey/server/types/helpers/RagfairOfferHelper.d.ts b/Live/CWX_MasterKey/server/types/helpers/RagfairOfferHelper.d.ts index 3d0d570..0e92762 100644 --- a/Live/CWX_MasterKey/server/types/helpers/RagfairOfferHelper.d.ts +++ b/Live/CWX_MasterKey/server/types/helpers/RagfairOfferHelper.d.ts @@ -47,7 +47,22 @@ export declare class RagfairOfferHelper { protected questConfig: IQuestConfig; constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, traderHelper: TraderHelper, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer); getValidOffers(searchRequest: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; - getOffersForBuild(info: ISearchRequestData, itemsToAdd: string[], assorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; + /** + * Get offers from flea/traders specifically when building weapon preset + * @param searchRequest Search request data + * @param itemsToAdd string array of item tpls to search for + * @param traderAssorts All trader assorts player can access/buy + * @param pmcProfile Player profile + * @returns ITraderAssort + */ + getOffersForBuild(searchRequest: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record, pmcProfile: IPmcData): IRagfairOffer[]; + /** + * Check if offer item is quest locked for current player by looking at sptQuestLocked property in traders barter_scheme + * @param offer Offer to check is quest locked + * @param traderAssorts all trader assorts for player + * @returns true if quest locked + */ + traderOfferItemQuestLocked(offer: IRagfairOffer, traderAssorts: Record): boolean; /** * Has a traders offer ran out of stock to sell to player * @param offer Offer to check stock of diff --git a/Live/CWX_MasterKey/server/types/helpers/TraderHelper.d.ts b/Live/CWX_MasterKey/server/types/helpers/TraderHelper.d.ts index 49aea28..fddacba 100644 --- a/Live/CWX_MasterKey/server/types/helpers/TraderHelper.d.ts +++ b/Live/CWX_MasterKey/server/types/helpers/TraderHelper.d.ts @@ -1,7 +1,5 @@ -import { FenceLevel } from "../models/eft/common/IGlobals"; import { IPmcData } from "../models/eft/common/IPmcData"; -import { Item } from "../models/eft/common/tables/IItem"; -import { IBarterScheme, ITraderAssort, ITraderBase, LoyaltyLevel } from "../models/eft/common/tables/ITrader"; +import { ITraderAssort, ITraderBase, LoyaltyLevel } from "../models/eft/common/tables/ITrader"; import { ITraderConfig } from "../models/spt/config/ITraderConfig"; import { ILogger } from "../models/spt/utils/ILogger"; import { ConfigServer } from "../servers/ConfigServer"; @@ -12,16 +10,12 @@ import { LocalisationService } from "../services/LocalisationService"; import { PlayerService } from "../services/PlayerService"; import { TimeUtil } from "../utils/TimeUtil"; import { HandbookHelper } from "./HandbookHelper"; -import { ItemHelper } from "./ItemHelper"; -import { PaymentHelper } from "./PaymentHelper"; import { ProfileHelper } from "./ProfileHelper"; export declare class TraderHelper { protected logger: ILogger; protected databaseServer: DatabaseServer; protected saveServer: SaveServer; protected profileHelper: ProfileHelper; - protected paymentHelper: PaymentHelper; - protected itemHelper: ItemHelper; protected handbookHelper: HandbookHelper; protected playerService: PlayerService; protected localisationService: LocalisationService; @@ -31,7 +25,7 @@ export declare class TraderHelper { protected traderConfig: ITraderConfig; /** Dictionary of item tpl and the highest trader rouble price */ protected highestTraderPriceItems: Record; - constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, itemHelper: ItemHelper, handbookHelper: HandbookHelper, playerService: PlayerService, localisationService: LocalisationService, fenceService: FenceService, timeUtil: TimeUtil, configServer: ConfigServer); + constructor(logger: ILogger, databaseServer: DatabaseServer, saveServer: SaveServer, profileHelper: ProfileHelper, handbookHelper: HandbookHelper, playerService: PlayerService, localisationService: LocalisationService, fenceService: FenceService, timeUtil: TimeUtil, configServer: ConfigServer); getTrader(traderID: string, sessionID: string): ITraderBase; getTraderAssortsById(traderId: string): ITraderAssort; /** @@ -48,62 +42,6 @@ export declare class TraderHelper { * @param sessionId Session id */ setTraderUnlockedState(traderId: string, status: boolean, sessionId: string): void; - /** - * Get a list of items and their prices from player inventory that can be sold to a trader - * @param traderID trader id being traded with - * @param sessionID session id - * @returns IBarterScheme[][] - */ - getPurchasesData(traderID: string, sessionID: string): Record; - /** - * Should item be skipped when selling to trader according to its sell categories and other checks - * @param pmcData Profile - * @param item Item to be checked is sellable to trader - * @param sellCategory categories trader will buy - * @param traderId Trader item is being checked can be sold to - * @returns true if should NOT be sold to trader - */ - protected isItemUnSellableToTrader(pmcData: IPmcData, item: Item, sellCategory: string[], traderId: string): boolean; - /** - * Check if item has durability so low it precludes it from being sold to the trader (inclusive) - * @param item Item to check durability of - * @param traderId Trader item is sold to - * @returns - */ - protected itemIsBelowSellableDurabilityThreshhold(item: Item, traderId: string): boolean; - /** - * Get the percentage threshold value a trader will buy armor/weapons above - * @param traderId Trader to look up - * @returns percentage - */ - protected getTraderDurabiltyPurchaseThreshold(traderId: string): number; - /** - * Get the price of passed in item and all of its attached children (mods) - * Take into account bonuses/adjustments e.g. discounts - * @param pmcData profile data - * @param item item to calculate price of - * @param buyPriceCoefficient - * @param fenceInfo fence data - * @param traderBase trader details - * @param currencyTpl Currency to get price as - * @returns price of item + children - */ - protected getAdjustedItemPrice(pmcData: IPmcData, item: Item, buyPriceCoefficient: number, fenceInfo: FenceLevel, traderBase: ITraderBase, currencyTpl: string): number; - /** - * Get the raw price of item+child items from handbook without any modification - * @param pmcData profile data - * @param item item to calculate price of - * @returns price as number - */ - protected getRawItemPrice(pmcData: IPmcData, item: Item): number; - /** - * Get discount modifier for desired trader - * @param trader Trader to get discount for - * @param buyPriceCoefficient - * @param fenceInfo fence info, needed if getting fence modifier value - * @returns discount modifier value - */ - protected getTraderDiscount(trader: ITraderBase, buyPriceCoefficient: number, fenceInfo: FenceLevel): number; /** * Add standing to a trader and level them up if exp goes over level threshold * @param sessionId Session id @@ -129,13 +67,6 @@ export declare class TraderHelper { * @returns Time in seconds */ getTraderUpdateSeconds(traderId: string): number; - /** - * check if an item is allowed to be sold to a trader - * @param categoriesTraderBuys array of allowed categories - * @param tplToCheck itemTpl of inventory - * @returns boolean if item can be sold to trader - */ - doesTraderBuyItem(categoriesTraderBuys: string[], tplToCheck: string): boolean; getLoyaltyLevel(traderID: string, pmcData: IPmcData): LoyaltyLevel; /** * Store the purchase of an assort from a trader in the player profile diff --git a/Live/CWX_MasterKey/server/types/loaders/PostAkiModLoader.d.ts b/Live/CWX_MasterKey/server/types/loaders/PostAkiModLoader.d.ts index 5df8c6c..848e9f3 100644 --- a/Live/CWX_MasterKey/server/types/loaders/PostAkiModLoader.d.ts +++ b/Live/CWX_MasterKey/server/types/loaders/PostAkiModLoader.d.ts @@ -1,15 +1,19 @@ import { DependencyContainer } from "tsyringe"; import { IModLoader } from "../models/spt/mod/IModLoader"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; import { VFS } from "../utils/VFS"; import { BundleLoader } from "./BundleLoader"; import { ModTypeCheck } from "./ModTypeCheck"; import { PreAkiModLoader } from "./PreAkiModLoader"; export declare class PostAkiModLoader implements IModLoader { + protected logger: ILogger; protected bundleLoader: BundleLoader; protected vfs: VFS; protected preAkiModLoader: PreAkiModLoader; + protected localisationService: LocalisationService; protected modTypeCheck: ModTypeCheck; - constructor(bundleLoader: BundleLoader, vfs: VFS, preAkiModLoader: PreAkiModLoader, modTypeCheck: ModTypeCheck); + constructor(logger: ILogger, bundleLoader: BundleLoader, vfs: VFS, preAkiModLoader: PreAkiModLoader, localisationService: LocalisationService, modTypeCheck: ModTypeCheck); getModPath(mod: string): string; load(): Promise; protected executeMods(container: DependencyContainer): Promise; diff --git a/Live/CWX_MasterKey/server/types/loaders/PostDBModLoader.d.ts b/Live/CWX_MasterKey/server/types/loaders/PostDBModLoader.d.ts index c4cda5c..eef160b 100644 --- a/Live/CWX_MasterKey/server/types/loaders/PostDBModLoader.d.ts +++ b/Live/CWX_MasterKey/server/types/loaders/PostDBModLoader.d.ts @@ -1,11 +1,15 @@ import { DependencyContainer } from "tsyringe"; import { OnLoad } from "../di/OnLoad"; +import { ILogger } from "../models/spt/utils/ILogger"; +import { LocalisationService } from "../services/LocalisationService"; import { ModTypeCheck } from "./ModTypeCheck"; import { PreAkiModLoader } from "./PreAkiModLoader"; export declare class PostDBModLoader implements OnLoad { + protected logger: ILogger; protected preAkiModLoader: PreAkiModLoader; + protected localisationService: LocalisationService; protected modTypeCheck: ModTypeCheck; - constructor(preAkiModLoader: PreAkiModLoader, modTypeCheck: ModTypeCheck); + constructor(logger: ILogger, preAkiModLoader: PreAkiModLoader, localisationService: LocalisationService, modTypeCheck: ModTypeCheck); onLoad(): Promise; getRoute(): string; getModPath(mod: string): string; diff --git a/Live/CWX_MasterKey/server/types/models/eft/common/IGlobals.d.ts b/Live/CWX_MasterKey/server/types/models/eft/common/IGlobals.d.ts index b5ed401..5790cde 100644 --- a/Live/CWX_MasterKey/server/types/models/eft/common/IGlobals.d.ts +++ b/Live/CWX_MasterKey/server/types/models/eft/common/IGlobals.d.ts @@ -70,6 +70,7 @@ export interface Config { EventType: string[]; WalkSpeed: xyz; SprintSpeed: xyz; + SquadSettings: ISquadSettings; SkillEnduranceWeightThreshold: number; TeamSearchingTimeout: number; Insurance: Insurance; @@ -803,6 +804,11 @@ export interface RestrictionsInRaid { TemplateId: string; Value: number; } +export interface ISquadSettings { + CountOfRequestsToOnePlayer: number; + SecondsForExpiredRequest: number; + SendRequestDelaySeconds: number; +} export interface Insurance { MaxStorageTimeInHour: number; } diff --git a/Live/CWX_MasterKey/server/types/models/eft/common/ILooseLoot.d.ts b/Live/CWX_MasterKey/server/types/models/eft/common/ILooseLoot.d.ts index 14b795e..572ec69 100644 --- a/Live/CWX_MasterKey/server/types/models/eft/common/ILooseLoot.d.ts +++ b/Live/CWX_MasterKey/server/types/models/eft/common/ILooseLoot.d.ts @@ -1,3 +1,4 @@ +import { Item } from "./tables/IItem"; export interface ILooseLoot { spawnpointCount: SpawnpointCount; spawnpointsForced: SpawnpointsForced[]; @@ -24,10 +25,6 @@ export interface SpawnpointTemplate { Root: any; Items: Item[]; } -export interface Item { - _id: string; - _tpl?: string; -} export interface Spawnpoint { locationId: string; probability: number; @@ -40,6 +37,9 @@ export interface Xyz { z: number; } export interface ItemDistribution { - tpl: string; + composedKey: ComposedKey; relativeProbability: number; } +export interface ComposedKey { + key: string; +} diff --git a/Live/CWX_MasterKey/server/types/models/eft/common/tables/IBotBase.d.ts b/Live/CWX_MasterKey/server/types/models/eft/common/tables/IBotBase.d.ts index dd7c478..82a925b 100644 --- a/Live/CWX_MasterKey/server/types/models/eft/common/tables/IBotBase.d.ts +++ b/Live/CWX_MasterKey/server/types/models/eft/common/tables/IBotBase.d.ts @@ -120,9 +120,7 @@ export interface Inventory { sortingTable: string; questRaidItems: string; questStashItems: string; - fastPanel: FastPanel; -} -export interface FastPanel { + fastPanel: Record; } export interface Skills { Common: Common[]; diff --git a/Live/CWX_MasterKey/server/types/models/eft/common/tables/IQuest.d.ts b/Live/CWX_MasterKey/server/types/models/eft/common/tables/IQuest.d.ts index 5c939e1..52968b1 100644 --- a/Live/CWX_MasterKey/server/types/models/eft/common/tables/IQuest.d.ts +++ b/Live/CWX_MasterKey/server/types/models/eft/common/tables/IQuest.d.ts @@ -46,7 +46,7 @@ export interface AvailableForProps { parentId: string; isEncoded: boolean; dynamicLocale: boolean; - value?: number; + value?: string | number; compareMethod?: string; visibilityConditions?: VisibilityCondition[]; target?: string | string[]; diff --git a/Live/CWX_MasterKey/server/types/models/eft/hideout/IHideoutProduction.d.ts b/Live/CWX_MasterKey/server/types/models/eft/hideout/IHideoutProduction.d.ts index 2367e08..8bed3cc 100644 --- a/Live/CWX_MasterKey/server/types/models/eft/hideout/IHideoutProduction.d.ts +++ b/Live/CWX_MasterKey/server/types/models/eft/hideout/IHideoutProduction.d.ts @@ -20,4 +20,5 @@ export interface Requirement { areaType?: number; requiredLevel?: number; resource?: number; + questId?: string; } diff --git a/Live/CWX_MasterKey/server/types/models/eft/match/IEndOfflineRaidRequestData.d.ts b/Live/CWX_MasterKey/server/types/models/eft/match/IEndOfflineRaidRequestData.d.ts index 811e9a2..9368c32 100644 --- a/Live/CWX_MasterKey/server/types/models/eft/match/IEndOfflineRaidRequestData.d.ts +++ b/Live/CWX_MasterKey/server/types/models/eft/match/IEndOfflineRaidRequestData.d.ts @@ -1,6 +1,6 @@ export interface IEndOfflineRaidRequestData { crc: number; exitStatus: string; - exitName: any; + exitName: string; raidSeconds: number; } diff --git a/Live/CWX_MasterKey/server/types/models/eft/match/IGetRaidConfigurationRequestData.d.ts b/Live/CWX_MasterKey/server/types/models/eft/match/IGetRaidConfigurationRequestData.d.ts index cbcc2f6..ed3dfab 100644 --- a/Live/CWX_MasterKey/server/types/models/eft/match/IGetRaidConfigurationRequestData.d.ts +++ b/Live/CWX_MasterKey/server/types/models/eft/match/IGetRaidConfigurationRequestData.d.ts @@ -1,4 +1,7 @@ export interface IGetRaidConfigurationRequestData { + keyId: string; + side: string; + location: string; timeVariant: string; raidMode: string; metabolismDisabled: boolean; @@ -6,7 +9,6 @@ export interface IGetRaidConfigurationRequestData { timeAndWeatherSettings: TimeAndWeatherSettings; botSettings: BotSettings; wavesSettings: WavesSettings; - location: string; } export interface TimeAndWeatherSettings { isRandomTime: boolean; diff --git a/Live/CWX_MasterKey/server/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts b/Live/CWX_MasterKey/server/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts index 99c61f1..42549e6 100644 --- a/Live/CWX_MasterKey/server/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts +++ b/Live/CWX_MasterKey/server/types/models/eft/presetBuild/IPresetBuildActionRequestData.d.ts @@ -1,3 +1,4 @@ +import { Upd } from "../common/tables/IItem"; export interface IPresetBuildActionRequestData { Action: string; id: string; @@ -12,14 +13,3 @@ export interface Item { parentId?: string; slotId?: string; } -export interface Upd { - Repairable: Repairable; - FireMode: FireMode; -} -export interface Repairable { - MaxDurability: number; - Durability: number; -} -export interface FireMode { - FireMode: string; -} diff --git a/Live/CWX_MasterKey/server/types/models/eft/profile/IGetProfileSettingsRequest.d.ts b/Live/CWX_MasterKey/server/types/models/eft/profile/IGetProfileSettingsRequest.d.ts new file mode 100644 index 0000000..8168615 --- /dev/null +++ b/Live/CWX_MasterKey/server/types/models/eft/profile/IGetProfileSettingsRequest.d.ts @@ -0,0 +1,3 @@ +export interface IGetProfileSettingsRequest { + squadInviteRestriction: boolean; +} diff --git a/Live/CWX_MasterKey/server/types/models/enums/ConfigTypes.d.ts b/Live/CWX_MasterKey/server/types/models/enums/ConfigTypes.d.ts index 9c48b68..d849010 100644 --- a/Live/CWX_MasterKey/server/types/models/enums/ConfigTypes.d.ts +++ b/Live/CWX_MasterKey/server/types/models/enums/ConfigTypes.d.ts @@ -19,5 +19,6 @@ export declare enum ConfigTypes { SCAVCASE = "aki-scavcase", TRADER = "aki-trader", WEATHER = "aki-weather", - SEASONAL_EVENT = "aki-seasonalevents" + SEASONAL_EVENT = "aki-seasonalevents", + LOST_ON_DEATH = "aki-lostondeath" } diff --git a/Live/CWX_MasterKey/server/types/models/spt/callbacks/ITraderCallbacks.d.ts b/Live/CWX_MasterKey/server/types/models/spt/callbacks/ITraderCallbacks.d.ts index e0d7d06..b784408 100644 --- a/Live/CWX_MasterKey/server/types/models/spt/callbacks/ITraderCallbacks.d.ts +++ b/Live/CWX_MasterKey/server/types/models/spt/callbacks/ITraderCallbacks.d.ts @@ -1,10 +1,9 @@ import { IEmptyRequestData } from "../../eft/common/IEmptyRequestData"; -import { IBarterScheme, ITraderAssort, ITraderBase } from "../../eft/common/tables/ITrader"; +import { ITraderAssort, ITraderBase } from "../../eft/common/tables/ITrader"; import { IGetBodyResponseData } from "../../eft/httpResponse/IGetBodyResponseData"; export interface ITraderCallbacks { load(): void; getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; - getProfilePurchases(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData>; getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData; update(): boolean; diff --git a/Live/CWX_MasterKey/server/types/models/spt/config/IHttpConfig.d.ts b/Live/CWX_MasterKey/server/types/models/spt/config/IHttpConfig.d.ts index 3fe4787..c34c11d 100644 --- a/Live/CWX_MasterKey/server/types/models/spt/config/IHttpConfig.d.ts +++ b/Live/CWX_MasterKey/server/types/models/spt/config/IHttpConfig.d.ts @@ -4,4 +4,5 @@ export interface IHttpConfig extends IBaseConfig { kind: "aki-http"; ip: string; port: number; + logRequests: boolean; } diff --git a/Live/CWX_MasterKey/server/types/models/spt/config/ILocationConfig.d.ts b/Live/CWX_MasterKey/server/types/models/spt/config/ILocationConfig.d.ts index f808ad8..bcd91cc 100644 --- a/Live/CWX_MasterKey/server/types/models/spt/config/ILocationConfig.d.ts +++ b/Live/CWX_MasterKey/server/types/models/spt/config/ILocationConfig.d.ts @@ -2,9 +2,9 @@ import { BossLocationSpawn, Wave } from "../../../models/eft/common/ILocationBas import { IBaseConfig } from "./IBaseConfig"; export interface ILocationConfig extends IBaseConfig { kind: "aki-location"; - fixEmptyBotWaves: boolean; - fixRoguesTakingAllSpawnsOnLighthouse: boolean; - lighthouseRogueSpawnTimeSeconds: number; + fixEmptyBotWavesSettings: IFixEmptyBotWavesSettings; + rogueLighthouseSpawnTimeSettings: IRogueLighthouseSpawnTimeSettings; + splitWaveIntoSingleSpawnsSettings: ISplitWaveSettings; looseLootMultiplier: LootMultiplier; staticLootMultiplier: LootMultiplier; customWaves: CustomWaves; @@ -12,6 +12,21 @@ export interface ILocationConfig extends IBaseConfig { openZones: Record; /** Key = map id, value = item tpls that should only have one forced loot spawn position */ forcedLootSingleSpawnById: Record; + /** How many attempts should be taken to fit an item into a container before giving up */ + fitLootIntoContainerAttempts: number; +} +export interface IFixEmptyBotWavesSettings { + enabled: boolean; + ignoreMaps: string[]; +} +export interface IRogueLighthouseSpawnTimeSettings { + enabled: boolean; + waitTimeSeconds: number; +} +export interface ISplitWaveSettings { + enabled: boolean; + ignoreMaps: string[]; + waveSizeThreshold: number; } export interface CustomWaves { boss: Record; diff --git a/Live/CWX_MasterKey/server/types/models/spt/config/ILostOnDeathConfig.d.ts b/Live/CWX_MasterKey/server/types/models/spt/config/ILostOnDeathConfig.d.ts new file mode 100644 index 0000000..b557afe --- /dev/null +++ b/Live/CWX_MasterKey/server/types/models/spt/config/ILostOnDeathConfig.d.ts @@ -0,0 +1,21 @@ +import { IBaseConfig } from "./IBaseConfig"; +export interface ILostOnDeathConfig extends IBaseConfig { + kind: "aki-lostondeath"; + equipment: Equipment; + specialSlotItems: boolean; + questItems: boolean; +} +export interface Equipment { + ArmBand: boolean; + Headwear: boolean; + Earpiece: boolean; + FaceCover: boolean; + ArmorVest: boolean; + Eyewear: boolean; + TacticalVest: boolean; + Backpack: boolean; + Holster: boolean; + FirstPrimaryWeapon: boolean; + SecondPrimaryWeapon: boolean; + Scabbard: boolean; +} diff --git a/Live/CWX_MasterKey/server/types/models/spt/config/IPmcConfig.d.ts b/Live/CWX_MasterKey/server/types/models/spt/config/IPmcConfig.d.ts index 979122c..87098da 100644 --- a/Live/CWX_MasterKey/server/types/models/spt/config/IPmcConfig.d.ts +++ b/Live/CWX_MasterKey/server/types/models/spt/config/IPmcConfig.d.ts @@ -1,5 +1,8 @@ import { MinMax } from "../../common/MinMax"; export interface IPmcConfig { + vestLoot: SlotLootSettings; + pocketLoot: SlotLootSettings; + backpackLoot: SlotLootSettings; dynamicLoot: DynamicLoot; useDifficultyOverride: boolean; difficulty: string; @@ -22,8 +25,11 @@ export interface PmcTypes { usec: string; bear: string; } -export interface DynamicLoot { +export interface SlotLootSettings { whitelist: string[]; blacklist: string[]; moneyStackLimits: Record; } +export interface DynamicLoot { + moneyStackLimits: Record; +} diff --git a/Live/CWX_MasterKey/server/types/models/spt/config/IQuestConfig.d.ts b/Live/CWX_MasterKey/server/types/models/spt/config/IQuestConfig.d.ts index 9adfaba..94c00fd 100644 --- a/Live/CWX_MasterKey/server/types/models/spt/config/IQuestConfig.d.ts +++ b/Live/CWX_MasterKey/server/types/models/spt/config/IQuestConfig.d.ts @@ -1,3 +1,4 @@ +import { MinMax } from "../../../models/common/MinMax"; import { ELocationName } from "../../enums/ELocationName"; import { IBaseConfig } from "./IBaseConfig"; export interface IQuestConfig extends IBaseConfig { @@ -50,7 +51,7 @@ export interface ITraderWhitelist { export interface IRepeatableQuestTypesConfig { Exploration: IExploration; Completion: ICompletion; - Elimination: IElimination; + Elimination: IEliminationConfig[]; } export interface IExploration { maxExtracts: number; @@ -68,7 +69,8 @@ export interface ICompletion { useWhitelist: boolean; useBlacklist: boolean; } -export interface IElimination { +export interface IEliminationConfig { + levelRange: MinMax; targets: ITarget[]; bodyPartProb: number; bodyParts: IBodyPart[]; @@ -80,11 +82,6 @@ export interface IElimination { maxKills: number; minKills: number; } -export interface IProbabilityObject { - key: string; - relativeProbability: number; - data?: any; -} export interface ITarget extends IProbabilityObject { data: IBossInfo; } @@ -94,3 +91,8 @@ export interface IBossInfo { export interface IBodyPart extends IProbabilityObject { data: string[]; } +export interface IProbabilityObject { + key: string; + relativeProbability: number; + data?: any; +} diff --git a/Live/CWX_MasterKey/server/types/models/spt/config/IRagfairConfig.d.ts b/Live/CWX_MasterKey/server/types/models/spt/config/IRagfairConfig.d.ts index 3fa04de..75357d0 100644 --- a/Live/CWX_MasterKey/server/types/models/spt/config/IRagfairConfig.d.ts +++ b/Live/CWX_MasterKey/server/types/models/spt/config/IRagfairConfig.d.ts @@ -30,6 +30,8 @@ export interface Reputation { } export interface Dynamic { purchasesAreFoundInRaid: boolean; + /** Use the highest trader price for an offer if its greater than the price in templates/prices.json */ + useTraderPriceForOffersIfHigher: boolean; barter: Barter; offerAdjustment: OfferAdjustment; expiredOfferThreshold: number; diff --git a/Live/CWX_MasterKey/server/types/models/spt/config/ITraderConfig.d.ts b/Live/CWX_MasterKey/server/types/models/spt/config/ITraderConfig.d.ts index 56c7d35..832f22a 100644 --- a/Live/CWX_MasterKey/server/types/models/spt/config/ITraderConfig.d.ts +++ b/Live/CWX_MasterKey/server/types/models/spt/config/ITraderConfig.d.ts @@ -3,9 +3,8 @@ import { IBaseConfig } from "./IBaseConfig"; export interface ITraderConfig extends IBaseConfig { kind: "aki-trader"; updateTime: UpdateTime[]; + purchasesAreFoundInRaid: boolean; updateTimeDefault: number; - /** What % of max durability an item needs to sell to a trader*/ - durabilityPurchaseThreshhold: Record; traderPriceMultipler: number; persistPurchaseDataInProfile: boolean; fence: FenceConfig; diff --git a/Live/CWX_MasterKey/server/types/models/spt/mod/NewItemDetails.d.ts b/Live/CWX_MasterKey/server/types/models/spt/mod/NewItemDetails.d.ts index fc69a06..9e37cc9 100644 --- a/Live/CWX_MasterKey/server/types/models/spt/mod/NewItemDetails.d.ts +++ b/Live/CWX_MasterKey/server/types/models/spt/mod/NewItemDetails.d.ts @@ -4,6 +4,8 @@ export declare abstract class NewItemDetailsBase { fleaPriceRoubles: number; /** Price of the item in the handbook */ handbookPriceRoubles: number; + /** Handbook ParentId for the new item */ + handbookParentId: string; /** * A dictionary for locale settings, key = langauge (e.g. en,cn,es-mx,jp,fr) * If a language is not included, the first item in the array will be used in its place diff --git a/Live/CWX_MasterKey/server/types/services/InsuranceService.d.ts b/Live/CWX_MasterKey/server/types/services/InsuranceService.d.ts index 886a298..55baa1a 100644 --- a/Live/CWX_MasterKey/server/types/services/InsuranceService.d.ts +++ b/Live/CWX_MasterKey/server/types/services/InsuranceService.d.ts @@ -63,8 +63,16 @@ export declare class InsuranceService { * @param offraidData post-raid request object * @param preRaidGear gear player wore prior to raid * @param sessionID Session id + * @param playerDied did the player die in raid + */ + storeLostGear(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string, playerDied: boolean): void; + /** + * Store insured items on pmc death inside insurance array in player profile + * @param pmcData Player profile + * @param offraidData Player gear post-raid + * @param preRaidGear Player gear before raid + * @param sessionID Session id */ - storeLostGear(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; storeInsuredItemsForReturn(pmcData: IPmcData, offraidData: ISaveProgressRequestData, preRaidGear: Item[], sessionID: string): void; /** * Add gear item to InsuredItems array in player profile diff --git a/Live/CWX_WeatherPatcher/CWX_WeatherPatcher 2.4.9/BepInEx/plugins/CWX-WeatherPatcher.dll b/Live/CWX_WeatherPatcher/CWX_WeatherPatcher 2.5.0/BepInEx/plugins/CWX-WeatherPatcher.dll similarity index 87% rename from Live/CWX_WeatherPatcher/CWX_WeatherPatcher 2.4.9/BepInEx/plugins/CWX-WeatherPatcher.dll rename to Live/CWX_WeatherPatcher/CWX_WeatherPatcher 2.5.0/BepInEx/plugins/CWX-WeatherPatcher.dll index 3239931..d5ec6b5 100644 Binary files a/Live/CWX_WeatherPatcher/CWX_WeatherPatcher 2.4.9/BepInEx/plugins/CWX-WeatherPatcher.dll and b/Live/CWX_WeatherPatcher/CWX_WeatherPatcher 2.5.0/BepInEx/plugins/CWX-WeatherPatcher.dll differ diff --git a/Live/CWX_WeatherPatcher/CWX_WeatherPatcher.csproj b/Live/CWX_WeatherPatcher/CWX_WeatherPatcher.csproj index cb3d650..0d2e45e 100644 --- a/Live/CWX_WeatherPatcher/CWX_WeatherPatcher.csproj +++ b/Live/CWX_WeatherPatcher/CWX_WeatherPatcher.csproj @@ -3,7 +3,7 @@ net472 CWX-WeatherPatcher - 2.4.9 + 2.5.0 diff --git a/Live/CWX_WeatherPatcher/WeatherPatcher.cs b/Live/CWX_WeatherPatcher/WeatherPatcher.cs index b1e497d..79c1aff 100644 --- a/Live/CWX_WeatherPatcher/WeatherPatcher.cs +++ b/Live/CWX_WeatherPatcher/WeatherPatcher.cs @@ -3,7 +3,7 @@ using EFT.Weather; namespace CWX_WeatherPatcher { - [BepInPlugin("com.CWX.WeatherPatcher", "CWX-WeatherPatcher", "2.4.9")] + [BepInPlugin("com.CWX.WeatherPatcher", "CWX-WeatherPatcher", "2.5.0")] public class WeatherPatcher : BaseUnityPlugin { private void Awake()