Update to SPT 3.10.0 (#38)

Co-authored-by: Dev <dev@dev.sp-tarkov.com>
Co-authored-by: Chomp <dev@dev.sp-tarkov.com>
Reviewed-on: #38
This commit is contained in:
chomp 2024-11-26 15:03:02 +00:00
parent b7d81c52d3
commit 8675689cb6
8319 changed files with 123542 additions and 76782 deletions

View File

@ -1,7 +1,7 @@
{ {
"name": "ScopesAndTypes", "name": "ScopesAndTypes",
"version": "1.0.0", "version": "1.0.0",
"sptVersion": "~3.9", "sptVersion": "~3.10",
"loadBefore": [], "loadBefore": [],
"loadAfter": [], "loadAfter": [],
"incompatibilities": [], "incompatibilities": [],

View File

@ -1,14 +1,16 @@
import { ApplicationContext } from "@spt/context/ApplicationContext";
import { BotController } from "@spt/controllers/BotController"; import { BotController } from "@spt/controllers/BotController";
import { IGenerateBotsRequestData } from "@spt/models/eft/bot/IGenerateBotsRequestData"; import { IGenerateBotsRequestData } from "@spt/models/eft/bot/IGenerateBotsRequestData";
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
import { IBotBase } from "@spt/models/eft/common/tables/IBotBase"; import { IBotBase } from "@spt/models/eft/common/tables/IBotBase";
import { Difficulties } from "@spt/models/eft/common/tables/IBotType"; import { IDifficulties } from "@spt/models/eft/common/tables/IBotType";
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil"; import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
export declare class BotCallbacks { export declare class BotCallbacks {
protected botController: BotController; protected botController: BotController;
protected httpResponse: HttpResponseUtil; protected httpResponse: HttpResponseUtil;
constructor(botController: BotController, httpResponse: HttpResponseUtil); protected applicationContext: ApplicationContext;
constructor(botController: BotController, httpResponse: HttpResponseUtil, applicationContext: ApplicationContext);
/** /**
* Handle singleplayer/settings/bot/limit * Handle singleplayer/settings/bot/limit
* Is called by client to define each bot roles wave limit * Is called by client to define each bot roles wave limit
@ -24,7 +26,7 @@ export declare class BotCallbacks {
* Handle singleplayer/settings/bot/difficulties * Handle singleplayer/settings/bot/difficulties
* @returns dictionary of every bot and its diffiulty settings * @returns dictionary of every bot and its diffiulty settings
*/ */
getAllBotDifficulties(url: string, info: IEmptyRequestData, sessionID: string): Record<string, Difficulties>; getAllBotDifficulties(url: string, info: IEmptyRequestData, sessionID: string): Record<string, IDifficulties>;
/** /**
* Handle client/game/bot/generate * Handle client/game/bot/generate
* @returns IGetBodyResponseData * @returns IGetBodyResponseData
@ -34,7 +36,7 @@ export declare class BotCallbacks {
* Handle singleplayer/settings/bot/maxCap * Handle singleplayer/settings/bot/maxCap
* @returns string * @returns string
*/ */
getBotCap(url: string, info: any, sessionID: string): string; getBotCap(url: string, info: IEmptyRequestData, sessionID: string): string;
/** /**
* Handle singleplayer/settings/bot/getBotBehaviours * Handle singleplayer/settings/bot/getBotBehaviours
* @returns string * @returns string

View File

@ -1,5 +1,5 @@
import { HideoutController } from "@spt/controllers/HideoutController"; import { HideoutController } from "@spt/controllers/HideoutController";
import { RagfairController } from "@spt/controllers/RagfairController"; import { TraderController } from "@spt/controllers/TraderController";
import { TraderHelper } from "@spt/helpers/TraderHelper"; import { TraderHelper } from "@spt/helpers/TraderHelper";
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
import { IGlobals } from "@spt/models/eft/common/IGlobals"; import { IGlobals } from "@spt/models/eft/common/IGlobals";
@ -7,8 +7,7 @@ import { ICustomizationItem } from "@spt/models/eft/common/tables/ICustomization
import { IHandbookBase } from "@spt/models/eft/common/tables/IHandbookBase"; import { IHandbookBase } from "@spt/models/eft/common/tables/IHandbookBase";
import { IGetItemPricesResponse } from "@spt/models/eft/game/IGetItemPricesResponse"; import { IGetItemPricesResponse } from "@spt/models/eft/game/IGetItemPricesResponse";
import { IHideoutArea } from "@spt/models/eft/hideout/IHideoutArea"; import { IHideoutArea } from "@spt/models/eft/hideout/IHideoutArea";
import { IHideoutProduction } from "@spt/models/eft/hideout/IHideoutProduction"; import { IHideoutProductionData } from "@spt/models/eft/hideout/IHideoutProduction";
import { IHideoutScavCase } from "@spt/models/eft/hideout/IHideoutScavCase";
import { IHideoutSettingsBase } from "@spt/models/eft/hideout/IHideoutSettingsBase"; import { IHideoutSettingsBase } from "@spt/models/eft/hideout/IHideoutSettingsBase";
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
import { ISettingsBase } from "@spt/models/spt/server/ISettingsBase"; import { ISettingsBase } from "@spt/models/spt/server/ISettingsBase";
@ -23,9 +22,9 @@ export declare class DataCallbacks {
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected databaseService: DatabaseService; protected databaseService: DatabaseService;
protected ragfairController: RagfairController; protected traderController: TraderController;
protected hideoutController: HideoutController; protected hideoutController: HideoutController;
constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, traderHelper: TraderHelper, databaseService: DatabaseService, ragfairController: RagfairController, hideoutController: HideoutController); constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, traderHelper: TraderHelper, databaseService: DatabaseService, traderController: TraderController, hideoutController: HideoutController);
/** /**
* Handle client/settings * Handle client/settings
* @returns ISettingsBase * @returns ISettingsBase
@ -62,8 +61,7 @@ export declare class DataCallbacks {
*/ */
getHideoutSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutSettingsBase>; getHideoutSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutSettingsBase>;
getHideoutAreas(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutArea[]>; getHideoutAreas(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutArea[]>;
gethideoutProduction(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutProduction[]>; getHideoutProduction(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutProductionData>;
getHideoutScavcase(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutScavCase[]>;
/** /**
* Handle client/languages * Handle client/languages
*/ */
@ -83,7 +81,6 @@ export declare class DataCallbacks {
/** /**
* Handle client/items/prices/ * Handle client/items/prices/
* Called when viewing a traders assorts * Called when viewing a traders assorts
* TODO - fully implement this
*/ */
getItemPrices(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetItemPricesResponse>; getItemPrices(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetItemPricesResponse>;
} }

View File

@ -27,7 +27,7 @@ import { ISendMessageRequest } from "@spt/models/eft/dialog/ISendMessageRequest"
import { ISetDialogReadRequestData } from "@spt/models/eft/dialog/ISetDialogReadRequestData"; import { ISetDialogReadRequestData } from "@spt/models/eft/dialog/ISetDialogReadRequestData";
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData"; import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
import { DialogueInfo } from "@spt/models/eft/profile/ISptProfile"; import { IDialogueInfo } from "@spt/models/eft/profile/ISptProfile";
import { HashUtil } from "@spt/utils/HashUtil"; import { HashUtil } from "@spt/utils/HashUtil";
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil"; import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
import { TimeUtil } from "@spt/utils/TimeUtil"; import { TimeUtil } from "@spt/utils/TimeUtil";
@ -48,11 +48,11 @@ export declare class DialogueCallbacks implements OnUpdate {
*/ */
getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<IChatServer[]>; getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<IChatServer[]>;
/** Handle client/mail/dialog/list */ /** Handle client/mail/dialog/list */
getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>; getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<IDialogueInfo[]>;
/** Handle client/mail/dialog/view */ /** Handle client/mail/dialog/view */
getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>; getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>;
/** Handle client/mail/dialog/info */ /** Handle client/mail/dialog/info */
getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo>; getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<IDialogueInfo>;
/** Handle client/mail/dialog/remove */ /** Handle client/mail/dialog/remove */
removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
/** Handle client/mail/dialog/pin */ /** Handle client/mail/dialog/pin */

View File

@ -13,7 +13,9 @@ import { IGameModeResponse } from "@spt/models/eft/game/IGameModeResponse";
import { IGameStartResponse } from "@spt/models/eft/game/IGameStartResponse"; import { IGameStartResponse } from "@spt/models/eft/game/IGameStartResponse";
import { IGetRaidTimeRequest } from "@spt/models/eft/game/IGetRaidTimeRequest"; import { IGetRaidTimeRequest } from "@spt/models/eft/game/IGetRaidTimeRequest";
import { IGetRaidTimeResponse } from "@spt/models/eft/game/IGetRaidTimeResponse"; import { IGetRaidTimeResponse } from "@spt/models/eft/game/IGetRaidTimeResponse";
import { ISendSurveyOpinionRequest } from "@spt/models/eft/game/ISendSurveyOpinionRequest";
import { IServerDetails } from "@spt/models/eft/game/IServerDetails"; import { IServerDetails } from "@spt/models/eft/game/IServerDetails";
import { ISurveyResponseData } from "@spt/models/eft/game/ISurveyResponseData";
import { IVersionValidateRequestData } from "@spt/models/eft/game/IVersionValidateRequestData"; import { IVersionValidateRequestData } from "@spt/models/eft/game/IVersionValidateRequestData";
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData"; import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
@ -76,10 +78,29 @@ export declare class GameCallbacks implements OnLoad {
* @returns string * @returns string
*/ */
getVersion(url: string, info: IEmptyRequestData, sessionID: string): string; getVersion(url: string, info: IEmptyRequestData, sessionID: string): string;
/**
* Handle /client/report/send & /client/reports/lobby/send
* @returns INullResponseData
*/
reportNickname(url: string, info: IUIDRequestData, sessionID: string): INullResponseData; reportNickname(url: string, info: IUIDRequestData, sessionID: string): INullResponseData;
/** /**
* Handle singleplayer/settings/getRaidTime * Handle singleplayer/settings/getRaidTime
* @returns string * @returns string
*/ */
getRaidTime(url: string, request: IGetRaidTimeRequest, sessionID: string): IGetRaidTimeResponse; getRaidTime(url: string, request: IGetRaidTimeRequest, sessionID: string): IGetRaidTimeResponse;
/**
* Handle /client/survey
* @returns INullResponseData
*/
getSurvey(url: string, request: IEmptyRequestData, sessionId: string): INullResponseData | IGetBodyResponseData<ISurveyResponseData>;
/**
* Handle client/survey/view
* @returns INullResponseData
*/
getSurveyView(url: string, request: any, sessionId: string): INullResponseData;
/**
* Handle client/survey/opinion
* @returns INullResponseData
*/
sendSurveyOpinion(url: string, request: ISendSurveyOpinionRequest, sessionId: string): INullResponseData;
} }

View File

@ -4,7 +4,6 @@ import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IHealthTreatmentRequestData } from "@spt/models/eft/health/IHealthTreatmentRequestData"; import { IHealthTreatmentRequestData } from "@spt/models/eft/health/IHealthTreatmentRequestData";
import { IOffraidEatRequestData } from "@spt/models/eft/health/IOffraidEatRequestData"; import { IOffraidEatRequestData } from "@spt/models/eft/health/IOffraidEatRequestData";
import { IOffraidHealRequestData } from "@spt/models/eft/health/IOffraidHealRequestData"; import { IOffraidHealRequestData } from "@spt/models/eft/health/IOffraidHealRequestData";
import { ISyncHealthRequestData } from "@spt/models/eft/health/ISyncHealthRequestData";
import { IWorkoutData } from "@spt/models/eft/health/IWorkoutData"; import { IWorkoutData } from "@spt/models/eft/health/IWorkoutData";
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
@ -14,14 +13,6 @@ export declare class HealthCallbacks {
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected healthController: HealthController; protected healthController: HealthController;
constructor(httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, healthController: HealthController); constructor(httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, healthController: HealthController);
/**
* Custom spt server request found in modules/HealthSynchronizer.cs
* @param url
* @param info HealthListener.Instance.CurrentHealth class
* @param sessionID session id
* @returns empty response, no data sent back to client
*/
syncHealth(url: string, info: ISyncHealthRequestData, sessionID: string): IGetBodyResponseData<string>;
/** /**
* Custom spt server request found in modules/QTEPatch.cs * Custom spt server request found in modules/QTEPatch.cs
* @param url * @param url

View File

@ -3,7 +3,9 @@ import { OnUpdate } from "@spt/di/OnUpdate";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IHandleQTEEventRequestData } from "@spt/models/eft/hideout/IHandleQTEEventRequestData"; import { IHandleQTEEventRequestData } from "@spt/models/eft/hideout/IHandleQTEEventRequestData";
import { IHideoutCancelProductionRequestData } from "@spt/models/eft/hideout/IHideoutCancelProductionRequestData"; import { IHideoutCancelProductionRequestData } from "@spt/models/eft/hideout/IHideoutCancelProductionRequestData";
import { IHideoutCircleOfCultistProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutCircleOfCultistProductionStartRequestData";
import { IHideoutContinuousProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutContinuousProductionStartRequestData"; import { IHideoutContinuousProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutContinuousProductionStartRequestData";
import { IHideoutDeleteProductionRequestData } from "@spt/models/eft/hideout/IHideoutDeleteProductionRequestData";
import { IHideoutImproveAreaRequestData } from "@spt/models/eft/hideout/IHideoutImproveAreaRequestData"; import { IHideoutImproveAreaRequestData } from "@spt/models/eft/hideout/IHideoutImproveAreaRequestData";
import { IHideoutPutItemInRequestData } from "@spt/models/eft/hideout/IHideoutPutItemInRequestData"; import { IHideoutPutItemInRequestData } from "@spt/models/eft/hideout/IHideoutPutItemInRequestData";
import { IHideoutScavCaseStartRequestData } from "@spt/models/eft/hideout/IHideoutScavCaseStartRequestData"; import { IHideoutScavCaseStartRequestData } from "@spt/models/eft/hideout/IHideoutScavCaseStartRequestData";
@ -75,6 +77,14 @@ export declare class HideoutCallbacks implements OnUpdate {
* Handle client/game/profile/items/moving - HideoutCancelProductionCommand * Handle client/game/profile/items/moving - HideoutCancelProductionCommand
*/ */
cancelProduction(pmcData: IPmcData, request: IHideoutCancelProductionRequestData, sessionId: string): IItemEventRouterResponse; cancelProduction(pmcData: IPmcData, request: IHideoutCancelProductionRequestData, sessionId: string): IItemEventRouterResponse;
/**
* Handle client/game/profile/items/moving - HideoutCircleOfCultistProductionStart
*/
circleOfCultistProductionStart(pmcData: IPmcData, request: IHideoutCircleOfCultistProductionStartRequestData, sessionId: string): IItemEventRouterResponse;
/**
* Handle client/game/profile/items/moving - HideoutDeleteProductionCommand
*/
hideoutDeleteProductionCommand(pmcData: IPmcData, request: IHideoutDeleteProductionRequestData, sessionId: string): IItemEventRouterResponse;
onUpdate(timeSinceLastRun: number): Promise<boolean>; onUpdate(timeSinceLastRun: number): Promise<boolean>;
getRoute(): string; getRoute(): string;
} }

View File

@ -1,9 +1,8 @@
import { InraidController } from "@spt/controllers/InraidController"; import { InraidController } from "@spt/controllers/InraidController";
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData"; import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
import { IItemDeliveryRequestData } from "@spt/models/eft/inRaid/IItemDeliveryRequestData";
import { IRegisterPlayerRequestData } from "@spt/models/eft/inRaid/IRegisterPlayerRequestData"; import { IRegisterPlayerRequestData } from "@spt/models/eft/inRaid/IRegisterPlayerRequestData";
import { ISaveProgressRequestData } from "@spt/models/eft/inRaid/ISaveProgressRequestData"; import { IScavSaveRequestData } from "@spt/models/eft/inRaid/IScavSaveRequestData";
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil"; import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
/** /**
* Handle client requests * Handle client requests
@ -22,42 +21,18 @@ export declare class InraidCallbacks {
*/ */
registerPlayer(url: string, info: IRegisterPlayerRequestData, sessionID: string): INullResponseData; registerPlayer(url: string, info: IRegisterPlayerRequestData, sessionID: string): INullResponseData;
/** /**
* Handle raid/profile/save * Handle raid/profile/scavsave
* @param url * @param url
* @param info Save progress request * @param info Save progress request
* @param sessionID Session id * @param sessionID Session id
* @returns Null http response * @returns Null http response
*/ */
saveProgress(url: string, info: ISaveProgressRequestData, sessionID: string): INullResponseData; saveProgress(url: string, info: IScavSaveRequestData, sessionID: string): INullResponseData;
/**
* Handle singleplayer/settings/raid/endstate
* @returns
*/
getRaidEndState(): string;
/** /**
* Handle singleplayer/settings/raid/menu * Handle singleplayer/settings/raid/menu
* @returns JSON as string * @returns JSON as string
*/ */
getRaidMenuSettings(): string; getRaidMenuSettings(): string;
/**
* Handle singleplayer/airdrop/config
* @returns JSON as string
*/
getAirdropConfig(): string;
/**
* Handle singleplayer/btr/config
* @returns JSON as string
*/
getBTRConfig(): string;
/**
* Handle singleplayer/traderServices/getTraderServices
*/
getTraderServices(url: string, info: IEmptyRequestData, sessionId: string): string;
/**
* Handle singleplayer/traderServices/itemDelivery
*/
itemDelivery(url: string, request: IItemDeliveryRequestData, sessionId: string): INullResponseData;
getTraitorScavHostileChance(url: string, info: IEmptyRequestData, sessionId: string): string; getTraitorScavHostileChance(url: string, info: IEmptyRequestData, sessionId: string): string;
getSandboxMaxPatrolValue(url: string, info: IEmptyRequestData, sessionId: string): string;
getBossConvertSettings(url: string, info: IEmptyRequestData, sessionId: string): string; getBossConvertSettings(url: string, info: IEmptyRequestData, sessionId: string): string;
} }

View File

@ -18,6 +18,7 @@ import { IInventoryTagRequestData } from "@spt/models/eft/inventory/IInventoryTa
import { IInventoryToggleRequestData } from "@spt/models/eft/inventory/IInventoryToggleRequestData"; import { IInventoryToggleRequestData } from "@spt/models/eft/inventory/IInventoryToggleRequestData";
import { IInventoryTransferRequestData } from "@spt/models/eft/inventory/IInventoryTransferRequestData"; import { IInventoryTransferRequestData } from "@spt/models/eft/inventory/IInventoryTransferRequestData";
import { IOpenRandomLootContainerRequestData } from "@spt/models/eft/inventory/IOpenRandomLootContainerRequestData"; import { IOpenRandomLootContainerRequestData } from "@spt/models/eft/inventory/IOpenRandomLootContainerRequestData";
import { IPinOrLockItemRequest } from "@spt/models/eft/inventory/IPinOrLockItemRequest";
import { IRedeemProfileRequestData } from "@spt/models/eft/inventory/IRedeemProfileRequestData"; import { IRedeemProfileRequestData } from "@spt/models/eft/inventory/IRedeemProfileRequestData";
import { ISetFavoriteItems } from "@spt/models/eft/inventory/ISetFavoriteItems"; import { ISetFavoriteItems } from "@spt/models/eft/inventory/ISetFavoriteItems";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
@ -58,4 +59,5 @@ export declare class InventoryCallbacks {
* Handle game/profile/items/moving - QuestFail * Handle game/profile/items/moving - QuestFail
*/ */
failQuest(pmcData: IPmcData, request: IFailQuestRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse; failQuest(pmcData: IPmcData, request: IFailQuestRequestData, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
pinOrLock(pmcData: IPmcData, request: IPinOrLockItemRequest, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
} }

View File

@ -1,9 +1,9 @@
import { LocationController } from "@spt/controllers/LocationController"; import { LocationController } from "@spt/controllers/LocationController";
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
import { ILocationBase } from "@spt/models/eft/common/ILocationBase";
import { ILocationsGenerateAllResponse } from "@spt/models/eft/common/ILocationsSourceDestinationBase"; import { ILocationsGenerateAllResponse } from "@spt/models/eft/common/ILocationsSourceDestinationBase";
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
import { IGetLocationRequestData } from "@spt/models/eft/location/IGetLocationRequestData"; import { IGetAirdropLootRequest } from "@spt/models/eft/location/IGetAirdropLootRequest";
import { IGetAirdropLootResponse } from "@spt/models/eft/location/IGetAirdropLootResponse";
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil"; import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
export declare class LocationCallbacks { export declare class LocationCallbacks {
protected httpResponse: HttpResponseUtil; protected httpResponse: HttpResponseUtil;
@ -11,8 +11,6 @@ export declare class LocationCallbacks {
constructor(httpResponse: HttpResponseUtil, locationController: LocationController); constructor(httpResponse: HttpResponseUtil, locationController: LocationController);
/** Handle client/locations */ /** Handle client/locations */
getLocationData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ILocationsGenerateAllResponse>; getLocationData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ILocationsGenerateAllResponse>;
/** Handle client/location/getLocalloot */ /** Handle client/airdrop/loot */
getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData<ILocationBase>; getAirdropLoot(url: string, info: IGetAirdropLootRequest, sessionID: string): IGetBodyResponseData<IGetAirdropLootResponse>;
/** Handle client/location/getAirdropLoot */
getAirdropLoot(url: string, info: IEmptyRequestData, sessionID: string): string;
} }

View File

@ -1,8 +1,9 @@
import { MatchController } from "@spt/controllers/MatchController"; import { MatchController } from "@spt/controllers/MatchController";
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
import { IMetrics } from "@spt/models/eft/common/tables/IMatch";
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData"; import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
import { IEndOfflineRaidRequestData } from "@spt/models/eft/match/IEndOfflineRaidRequestData"; import { IEndLocalRaidRequestData } from "@spt/models/eft/match/IEndLocalRaidRequestData";
import { IGetRaidConfigurationRequestData } from "@spt/models/eft/match/IGetRaidConfigurationRequestData"; import { IGetRaidConfigurationRequestData } from "@spt/models/eft/match/IGetRaidConfigurationRequestData";
import { IGroupCharacter } from "@spt/models/eft/match/IGroupCharacter"; import { IGroupCharacter } from "@spt/models/eft/match/IGroupCharacter";
import { IMatchGroupCurrentResponse } from "@spt/models/eft/match/IMatchGroupCurrentResponse"; import { IMatchGroupCurrentResponse } from "@spt/models/eft/match/IMatchGroupCurrentResponse";
@ -15,6 +16,8 @@ import { IMatchGroupTransferRequest } from "@spt/models/eft/match/IMatchGroupTra
import { IProfileStatusResponse } from "@spt/models/eft/match/IProfileStatusResponse"; import { IProfileStatusResponse } from "@spt/models/eft/match/IProfileStatusResponse";
import { IPutMetricsRequestData } from "@spt/models/eft/match/IPutMetricsRequestData"; import { IPutMetricsRequestData } from "@spt/models/eft/match/IPutMetricsRequestData";
import { IRequestIdRequest } from "@spt/models/eft/match/IRequestIdRequest"; import { IRequestIdRequest } from "@spt/models/eft/match/IRequestIdRequest";
import { IStartLocalRaidRequestData } from "@spt/models/eft/match/IStartLocalRaidRequestData";
import { IStartLocalRaidResponseData } from "@spt/models/eft/match/IStartLocalRaidResponseData";
import { IUpdatePingRequestData } from "@spt/models/eft/match/IUpdatePingRequestData"; import { IUpdatePingRequestData } from "@spt/models/eft/match/IUpdatePingRequestData";
import { DatabaseService } from "@spt/services/DatabaseService"; import { DatabaseService } from "@spt/services/DatabaseService";
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil"; import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
@ -29,9 +32,12 @@ export declare class MatchCallbacks {
updatePing(url: string, info: IUpdatePingRequestData, sessionID: string): INullResponseData; updatePing(url: string, info: IUpdatePingRequestData, sessionID: string): INullResponseData;
exitMatch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; exitMatch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
/** Handle client/match/group/exit_from_menu */ /** Handle client/match/group/exit_from_menu */
exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; exitFromMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
/** Handle client/match/group/current */
groupCurrent(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IMatchGroupCurrentResponse>; groupCurrent(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IMatchGroupCurrentResponse>;
/** Handle client/match/group/looking/start */
startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
/** Handle client/match/group/looking/stop */
stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData; stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
/** Handle client/match/group/invite/send */ /** Handle client/match/group/invite/send */
sendGroupInvite(url: string, info: IMatchGroupInviteSendRequest, sessionID: string): IGetBodyResponseData<string>; sendGroupInvite(url: string, info: IMatchGroupInviteSendRequest, sessionID: string): IGetBodyResponseData<string>;
@ -45,13 +51,15 @@ export declare class MatchCallbacks {
transferGroup(url: string, info: IMatchGroupTransferRequest, sessionId: string): IGetBodyResponseData<boolean>; transferGroup(url: string, info: IMatchGroupTransferRequest, sessionId: string): IGetBodyResponseData<boolean>;
/** Handle client/match/group/invite/cancel-all */ /** Handle client/match/group/invite/cancel-all */
cancelAllGroupInvite(url: string, info: IEmptyRequestData, sessionId: string): IGetBodyResponseData<boolean>; cancelAllGroupInvite(url: string, info: IEmptyRequestData, sessionId: string): IGetBodyResponseData<boolean>;
/** @deprecated - not called on raid start/end or game start/exit */ /** Handle client/putMetrics */
putMetrics(url: string, info: IPutMetricsRequestData, sessionId: string): INullResponseData; putMetrics(url: string, request: IPutMetricsRequestData, sessionId: string): INullResponseData;
/** Handle client/analytics/event-disconnect */
eventDisconnect(url: string, request: IPutMetricsRequestData, sessionId: string): INullResponseData;
serverAvailable(url: string, info: IEmptyRequestData, sessionId: string): IGetBodyResponseData<boolean>; serverAvailable(url: string, info: IEmptyRequestData, sessionId: string): IGetBodyResponseData<boolean>;
/** Handle match/group/start_game */ /** Handle match/group/start_game */
joinMatch(url: string, info: IMatchGroupStartGameRequest, sessionID: string): IGetBodyResponseData<IProfileStatusResponse>; joinMatch(url: string, info: IMatchGroupStartGameRequest, sessionID: string): IGetBodyResponseData<IProfileStatusResponse>;
/** Handle client/getMetricsConfig */ /** Handle client/getMetricsConfig */
getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData<string>; getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData<IMetrics>;
/** /**
* Called periodically while in a group * Called periodically while in a group
* Handle client/match/group/status * Handle client/match/group/status
@ -63,8 +71,10 @@ export declare class MatchCallbacks {
leaveGroup(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<boolean>; leaveGroup(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<boolean>;
/** Handle client/match/group/player/remove */ /** Handle client/match/group/player/remove */
removePlayerFromGroup(url: string, info: IMatchGroupPlayerRemoveRequest, sessionID: string): IGetBodyResponseData<boolean>; removePlayerFromGroup(url: string, info: IMatchGroupPlayerRemoveRequest, sessionID: string): IGetBodyResponseData<boolean>;
/** Handle client/match/offline/end */ /** Handle client/match/local/start */
endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData; startLocalRaid(url: string, info: IStartLocalRaidRequestData, sessionID: string): IGetBodyResponseData<IStartLocalRaidResponseData>;
/** Handle client/match/local/end */
endLocalRaid(url: string, info: IEndLocalRaidRequestData, sessionID: string): INullResponseData;
/** Handle client/raid/configuration */ /** Handle client/raid/configuration */
getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData; getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData;
/** Handle client/raid/configuration-by-profile */ /** Handle client/raid/configuration-by-profile */

View File

@ -5,7 +5,7 @@ import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData"; import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
import { IGetMiniProfileRequestData } from "@spt/models/eft/launcher/IGetMiniProfileRequestData"; import { IGetMiniProfileRequestData } from "@spt/models/eft/launcher/IGetMiniProfileRequestData";
import { GetProfileStatusResponseData } from "@spt/models/eft/profile/GetProfileStatusResponseData"; import { IGetProfileStatusResponseData } from "@spt/models/eft/profile/GetProfileStatusResponseData";
import { ICreateProfileResponse } from "@spt/models/eft/profile/ICreateProfileResponse"; import { ICreateProfileResponse } from "@spt/models/eft/profile/ICreateProfileResponse";
import { IGetOtherProfileRequest } from "@spt/models/eft/profile/IGetOtherProfileRequest"; import { IGetOtherProfileRequest } from "@spt/models/eft/profile/IGetOtherProfileRequest";
import { IGetOtherProfileResponse } from "@spt/models/eft/profile/IGetOtherProfileResponse"; import { IGetOtherProfileResponse } from "@spt/models/eft/profile/IGetOtherProfileResponse";
@ -65,7 +65,7 @@ export declare class ProfileCallbacks {
* Handle client/profile/status * Handle client/profile/status
* Called when creating a character when choosing a character face/voice * Called when creating a character when choosing a character face/voice
*/ */
getProfileStatus(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<GetProfileStatusResponseData>; getProfileStatus(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetProfileStatusResponseData>;
/** /**
* Handle client/profile/view * Handle client/profile/view
* Called when viewing another players profile * Called when viewing another players profile

View File

@ -4,12 +4,15 @@ import { OnUpdate } from "@spt/di/OnUpdate";
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
import { ITraderAssort, ITraderBase } from "@spt/models/eft/common/tables/ITrader"; import { ITraderAssort, ITraderBase } from "@spt/models/eft/common/tables/ITrader";
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
import { IModdedTraders } from "@spt/models/spt/config/ITraderConfig";
import { ConfigServer } from "@spt/servers/ConfigServer";
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil"; import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
export declare class TraderCallbacks implements OnLoad, OnUpdate { export declare class TraderCallbacks implements OnLoad, OnUpdate {
protected httpResponse: HttpResponseUtil; protected httpResponse: HttpResponseUtil;
protected traderController: TraderController; protected traderController: TraderController;
protected configServer: ConfigServer;
constructor(httpResponse: HttpResponseUtil, // TODO: delay required constructor(httpResponse: HttpResponseUtil, // TODO: delay required
traderController: TraderController); traderController: TraderController, configServer: ConfigServer);
onLoad(): Promise<void>; onLoad(): Promise<void>;
onUpdate(): Promise<boolean>; onUpdate(): Promise<boolean>;
getRoute(): string; getRoute(): string;
@ -19,4 +22,6 @@ export declare class TraderCallbacks implements OnLoad, OnUpdate {
getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderBase>; getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderBase>;
/** Handle client/trading/api/getTraderAssort */ /** Handle client/trading/api/getTraderAssort */
getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderAssort>; getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderAssort>;
/** Handle /singleplayer/moddedTraders */
getModdedTraderData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IModdedTraders>;
} }

View File

@ -2,6 +2,7 @@ import { WeatherController } from "@spt/controllers/WeatherController";
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData"; import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
import { IWeatherData } from "@spt/models/eft/weather/IWeatherData"; import { IWeatherData } from "@spt/models/eft/weather/IWeatherData";
import { IGetLocalWeatherResponseData } from "@spt/models/spt/weather/IGetLocalWeatherResponseData";
import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil"; import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
export declare class WeatherCallbacks { export declare class WeatherCallbacks {
protected httpResponse: HttpResponseUtil; protected httpResponse: HttpResponseUtil;
@ -12,4 +13,6 @@ export declare class WeatherCallbacks {
* @returns IWeatherData * @returns IWeatherData
*/ */
getWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IWeatherData>; getWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IWeatherData>;
/** Handle client/localGame/weather */
getLocalWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetLocalWeatherResponseData>;
} }

View File

@ -1,12 +1,16 @@
import { WishlistController } from "@spt/controllers/WishlistController"; import { WishlistController } from "@spt/controllers/WishlistController";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { IWishlistActionData } from "@spt/models/eft/wishlist/IWishlistActionData"; import { IAddToWishlistRequest } from "@spt/models/eft/wishlist/IAddToWishlistRequest";
import { IChangeWishlistItemCategoryRequest } from "@spt/models/eft/wishlist/IChangeWishlistItemCategoryRequest";
import { IRemoveFromWishlistRequest } from "@spt/models/eft/wishlist/IRemoveFromWishlistRequest";
export declare class WishlistCallbacks { export declare class WishlistCallbacks {
protected wishlistController: WishlistController; protected wishlistController: WishlistController;
constructor(wishlistController: WishlistController); constructor(wishlistController: WishlistController);
/** Handle AddToWishList event */ /** Handle AddToWishList event */
addToWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; addToWishlist(pmcData: IPmcData, request: IAddToWishlistRequest, sessionID: string): IItemEventRouterResponse;
/** Handle RemoveFromWishList event */ /** Handle RemoveFromWishList event */
removeFromWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; removeFromWishlist(pmcData: IPmcData, request: IRemoveFromWishlistRequest, sessionID: string): IItemEventRouterResponse;
/** Handle ChangeWishlistItemCategory */
changeWishlistItemCategory(pmcData: IPmcData, request: IChangeWishlistItemCategoryRequest, sessionID: string): IItemEventRouterResponse;
} }

View File

@ -3,9 +3,11 @@ export declare enum ContextVariableType {
SESSION_ID = 0, SESSION_ID = 0,
/** Currently acive raid information */ /** Currently acive raid information */
RAID_CONFIGURATION = 1, RAID_CONFIGURATION = 1,
/** Timestamp when client first connected */ /** SessionID + Timestamp when client first connected, has _ between values */
CLIENT_START_TIMESTAMP = 2, CLIENT_START_TIMESTAMP = 2,
/** When player is loading into map and loot is requested */ /** When player is loading into map and loot is requested */
REGISTER_PLAYER_REQUEST = 3, REGISTER_PLAYER_REQUEST = 3,
RAID_ADJUSTMENTS = 4 RAID_ADJUSTMENTS = 4,
/** Data returned from client request object from endLocalRaid() */
TRANSIT_INFO = 5
} }

View File

@ -5,12 +5,13 @@ import { BotHelper } from "@spt/helpers/BotHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper"; import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { MinMax } from "@spt/models/common/MinMax"; import { MinMax } from "@spt/models/common/MinMax";
import { Condition, IGenerateBotsRequestData } from "@spt/models/eft/bot/IGenerateBotsRequestData"; import { ICondition, IGenerateBotsRequestData } from "@spt/models/eft/bot/IGenerateBotsRequestData";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IBotBase } from "@spt/models/eft/common/tables/IBotBase"; import { IBotBase } from "@spt/models/eft/common/tables/IBotBase";
import { IBotCore } from "@spt/models/eft/common/tables/IBotCore"; import { IBotCore } from "@spt/models/eft/common/tables/IBotCore";
import { Difficulty } from "@spt/models/eft/common/tables/IBotType"; import { IDifficultyCategories } from "@spt/models/eft/common/tables/IBotType";
import { BotGenerationDetails } from "@spt/models/spt/bots/BotGenerationDetails"; import { IGetRaidConfigurationRequestData } from "@spt/models/eft/match/IGetRaidConfigurationRequestData";
import { IBotGenerationDetails } from "@spt/models/spt/bots/BotGenerationDetails";
import { IBotConfig } from "@spt/models/spt/config/IBotConfig"; import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
@ -58,10 +59,11 @@ export declare class BotController {
* Adjust PMC settings to ensure they engage the correct bot types * Adjust PMC settings to ensure they engage the correct bot types
* @param type what bot the server is requesting settings for * @param type what bot the server is requesting settings for
* @param diffLevel difficulty level server requested settings for * @param diffLevel difficulty level server requested settings for
* @param raidConfig OPTIONAL - applicationContext Data stored at start of raid
* @param ignoreRaidSettings should raid settings chosen pre-raid be ignored * @param ignoreRaidSettings should raid settings chosen pre-raid be ignored
* @returns Difficulty object * @returns Difficulty object
*/ */
getBotDifficulty(type: string, diffLevel: string, ignoreRaidSettings?: boolean): Difficulty; getBotDifficulty(type: string, diffLevel: string, raidConfig?: IGetRaidConfigurationRequestData, ignoreRaidSettings?: boolean): IDifficultyCategories;
getAllBotDifficulties(): Record<string, any>; getAllBotDifficulties(): Record<string, any>;
/** /**
* Generate bot profiles and store in cache * Generate bot profiles and store in cache
@ -75,20 +77,27 @@ export declare class BotController {
* @param request Bot generation request object * @param request Bot generation request object
* @param pmcProfile Player profile * @param pmcProfile Player profile
* @param sessionId Session id * @param sessionId Session id
* @returns * @returns IBotBase[]
*/ */
generateBotsFirstTime(request: IGenerateBotsRequestData, pmcProfile: IPmcData, sessionId: string): Promise<IBotBase[]>; protected generateMultipleBotsAndCache(request: IGenerateBotsRequestData, pmcProfile: IPmcData, sessionId: string): Promise<IBotBase[]>;
protected getMostRecentRaidSettings(): IGetRaidConfigurationRequestData;
/**
* Get min/max level range values for a specific map
* @param location Map name e.g. factory4_day
* @returns MinMax
*/
protected getPmcLevelRangeForMap(location: string): MinMax;
/** /**
* Create a BotGenerationDetails for the bot generator to use * Create a BotGenerationDetails for the bot generator to use
* @param condition Client data defining bot type and difficulty * @param condition Client data defining bot type and difficulty
* @param pmcProfile Player who is generating bots * @param pmcProfile Player who is generating bots
* @param allPmcsHaveSameNameAsPlayer Should all PMCs have same name as player * @param allPmcsHaveSameNameAsPlayer Should all PMCs have same name as player
* @param pmcLevelRangeForMap Min/max levels for PMCs to generate within * @param raidSettings Settings chosen pre-raid by player
* @param botCountToGenerate How many bots to generate * @param botCountToGenerate How many bots to generate
* @param generateAsPmc Force bot being generated a PMC * @param generateAsPmc Force bot being generated a PMC
* @returns BotGenerationDetails * @returns BotGenerationDetails
*/ */
protected getBotGenerationDetailsForWave(condition: Condition, pmcProfile: IPmcData, allPmcsHaveSameNameAsPlayer: boolean, pmcLevelRangeForMap: MinMax, botCountToGenerate: number, generateAsPmc: boolean): BotGenerationDetails; protected getBotGenerationDetailsForWave(condition: ICondition, pmcProfile: IPmcData, allPmcsHaveSameNameAsPlayer: boolean, raidSettings: IGetRaidConfigurationRequestData, botCountToGenerate: number, generateAsPmc: boolean): IBotGenerationDetails;
/** /**
* Get players profile level * Get players profile level
* @param pmcProfile Profile to get level from * @param pmcProfile Profile to get level from
@ -102,7 +111,7 @@ export declare class BotController {
* @param sessionId Session id * @param sessionId Session id
* @returns A promise for the bots to be done generating * @returns A promise for the bots to be done generating
*/ */
protected generateWithBotDetails(condition: Condition, botGenerationDetails: BotGenerationDetails, sessionId: string): Promise<void>; protected generateWithBotDetails(condition: ICondition, botGenerationDetails: IBotGenerationDetails, sessionId: string): Promise<void>;
/** /**
* Generate a single bot and store in the cache * Generate a single bot and store in the cache
* @param botGenerationDetails the bot details to generate the bot with * @param botGenerationDetails the bot details to generate the bot with
@ -110,15 +119,16 @@ export declare class BotController {
* @param cacheKey the cache key to store the bot with * @param cacheKey the cache key to store the bot with
* @returns A promise for the bot to be stored * @returns A promise for the bot to be stored
*/ */
protected generateSingleBotAndStoreInCache(botGenerationDetails: BotGenerationDetails, sessionId: string, cacheKey: string): Promise<void>; protected generateSingleBotAndStoreInCache(botGenerationDetails: IBotGenerationDetails, sessionId: string, cacheKey: string): Promise<void>;
/** /**
* Pull a single bot out of cache and return, if cache is empty add bots to it and then return * Pull a single bot out of cache and return, if cache is empty add bots to it and then return
* @param sessionId Session id * @param sessionId Session id
* @param request Bot generation request object * @param request Bot generation request object
* @returns Single IBotBase object * @returns Single IBotBase object
*/ */
returnSingleBotFromCache(sessionId: string, request: IGenerateBotsRequestData): Promise<IBotBase[]>; protected returnSingleBotFromCache(sessionId: string, request: IGenerateBotsRequestData): Promise<IBotBase[]>;
protected updateBotGenerationDetailsToRandomBoss(botGenerationDetails: BotGenerationDetails, possibleBossTypeWeights: Record<string, number>): void; protected getPmcConversionMinMaxForLocation(requestedBotRole: string, location: string): MinMax;
protected updateBotGenerationDetailsToRandomBoss(botGenerationDetails: IBotGenerationDetails, possibleBossTypeWeights: Record<string, number>): void;
/** /**
* Get the difficulty passed in, if its not "asonline", get selected difficulty from config * Get the difficulty passed in, if its not "asonline", get selected difficulty from config
* @param requestedDifficulty * @param requestedDifficulty

View File

@ -1,7 +1,7 @@
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { ISuit } from "@spt/models/eft/common/tables/ITrader"; import { ISuit } from "@spt/models/eft/common/tables/ITrader";
import { ClothingItem, IBuyClothingRequestData } from "@spt/models/eft/customization/IBuyClothingRequestData"; import { IBuyClothingRequestData, IPaymentItemForClothing } from "@spt/models/eft/customization/IBuyClothingRequestData";
import { IWearClothingRequestData } from "@spt/models/eft/customization/IWearClothingRequestData"; import { IWearClothingRequestData } from "@spt/models/eft/customization/IWearClothingRequestData";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
@ -54,17 +54,17 @@ export declare class CustomizationController {
* Update output object and player profile with purchase details * Update output object and player profile with purchase details
* @param sessionId Session id * @param sessionId Session id
* @param pmcData Player profile * @param pmcData Player profile
* @param clothingItems Clothing purchased * @param itemsToPayForClothingWith Clothing purchased
* @param output Client response * @param output Client response
*/ */
protected payForClothingItems(sessionId: string, pmcData: IPmcData, clothingItems: ClothingItem[], output: IItemEventRouterResponse): void; protected payForClothingItems(sessionId: string, pmcData: IPmcData, itemsToPayForClothingWith: IPaymentItemForClothing[], output: IItemEventRouterResponse): void;
/** /**
* Update output object and player profile with purchase details for single piece of clothing * Update output object and player profile with purchase details for single piece of clothing
* @param sessionId Session id * @param sessionId Session id
* @param pmcData Player profile * @param pmcData Player profile
* @param clothingItem Clothing item purchased * @param paymentItemDetails Payment details
* @param output Client response * @param output Client response
*/ */
protected payForClothingItem(sessionId: string, pmcData: IPmcData, clothingItem: ClothingItem, output: IItemEventRouterResponse): void; protected payForClothingItem(sessionId: string, pmcData: IPmcData, paymentItemDetails: IPaymentItemForClothing, output: IItemEventRouterResponse): void;
protected getAllTraderSuits(sessionID: string): ISuit[]; protected getAllTraderSuits(sessionID: string): ISuit[];
} }

View File

@ -7,7 +7,7 @@ import { IGetFriendListDataResponse } from "@spt/models/eft/dialog/IGetFriendLis
import { IGetMailDialogViewRequestData } from "@spt/models/eft/dialog/IGetMailDialogViewRequestData"; import { IGetMailDialogViewRequestData } from "@spt/models/eft/dialog/IGetMailDialogViewRequestData";
import { IGetMailDialogViewResponseData } from "@spt/models/eft/dialog/IGetMailDialogViewResponseData"; import { IGetMailDialogViewResponseData } from "@spt/models/eft/dialog/IGetMailDialogViewResponseData";
import { ISendMessageRequest } from "@spt/models/eft/dialog/ISendMessageRequest"; import { ISendMessageRequest } from "@spt/models/eft/dialog/ISendMessageRequest";
import { Dialogue, DialogueInfo, ISptProfile, IUserDialogInfo, Message } from "@spt/models/eft/profile/ISptProfile"; import { IDialogue, IDialogueInfo, IMessage, ISptProfile, IUserDialogInfo } from "@spt/models/eft/profile/ISptProfile";
import { MessageType } from "@spt/models/enums/MessageType"; import { MessageType } from "@spt/models/enums/MessageType";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
@ -40,14 +40,14 @@ export declare class DialogueController {
* @param sessionID Session Id * @param sessionID Session Id
* @returns array of dialogs * @returns array of dialogs
*/ */
generateDialogueList(sessionID: string): DialogueInfo[]; generateDialogueList(sessionID: string): IDialogueInfo[];
/** /**
* Get the content of a dialogue * Get the content of a dialogue
* @param dialogueID Dialog id * @param dialogueID Dialog id
* @param sessionID Session Id * @param sessionID Session Id
* @returns DialogueInfo * @returns DialogueInfo
*/ */
getDialogueInfo(dialogueID: string, sessionID: string): DialogueInfo; getDialogueInfo(dialogueID: string, sessionID: string): IDialogueInfo;
/** /**
* Get the users involved in a dialog (player + other party) * Get the users involved in a dialog (player + other party)
* @param dialog The dialog to check for users * @param dialog The dialog to check for users
@ -55,7 +55,7 @@ export declare class DialogueController {
* @param sessionID Player id * @param sessionID Player id
* @returns IUserDialogInfo array * @returns IUserDialogInfo array
*/ */
getDialogueUsers(dialog: Dialogue, messageType: MessageType, sessionID: string): IUserDialogInfo[] | undefined; getDialogueUsers(dialog: IDialogue, messageType: MessageType, sessionID: string): IUserDialogInfo[] | undefined;
/** /**
* Handle client/mail/dialog/view * Handle client/mail/dialog/view
* Handle player clicking 'messenger' and seeing all the messages they've recieved * Handle player clicking 'messenger' and seeing all the messages they've recieved
@ -72,7 +72,7 @@ export declare class DialogueController {
* @param request get dialog request (params used when dialog doesnt exist in profile) * @param request get dialog request (params used when dialog doesnt exist in profile)
* @returns Dialogue * @returns Dialogue
*/ */
protected getDialogByIdFromProfile(profile: ISptProfile, request: IGetMailDialogViewRequestData): Dialogue; protected getDialogByIdFromProfile(profile: ISptProfile, request: IGetMailDialogViewRequestData): IDialogue;
/** /**
* Get the users involved in a mail between two entities * Get the users involved in a mail between two entities
* @param fullProfile Player profile * @param fullProfile Player profile
@ -92,7 +92,7 @@ export declare class DialogueController {
* @param messages Messages to check * @param messages Messages to check
* @returns true if uncollected rewards found * @returns true if uncollected rewards found
*/ */
protected messagesHaveUncollectedRewards(messages: Message[]): boolean; protected messagesHaveUncollectedRewards(messages: IMessage[]): boolean;
/** /**
* Handle client/mail/dialog/remove * Handle client/mail/dialog/remove
* Remove an entire dialog with an entity (trader/user) * Remove an entire dialog with an entity (trader/user)
@ -125,13 +125,13 @@ export declare class DialogueController {
* @param dialogueId Dialog to get mail attachments from * @param dialogueId Dialog to get mail attachments from
* @returns Message array * @returns Message array
*/ */
protected getActiveMessagesFromDialog(sessionId: string, dialogueId: string): Message[]; protected getActiveMessagesFromDialog(sessionId: string, dialogueId: string): IMessage[];
/** /**
* Return array of messages with uncollected items (includes expired) * Return array of messages with uncollected items (includes expired)
* @param messages Messages to parse * @param messages Messages to parse
* @returns messages with items to collect * @returns messages with items to collect
*/ */
protected getMessagesWithAttachments(messages: Message[]): Message[]; protected getMessagesWithAttachments(messages: IMessage[]): IMessage[];
/** /**
* Delete expired items from all messages in player profile. triggers when updating traders. * Delete expired items from all messages in player profile. triggers when updating traders.
* @param sessionId Session id * @param sessionId Session id
@ -148,7 +148,7 @@ export declare class DialogueController {
* @param message Message to check expiry of * @param message Message to check expiry of
* @returns true or false * @returns true or false
*/ */
protected messageHasExpired(message: Message): boolean; protected messageHasExpired(message: IMessage): boolean;
/** Handle client/friend/request/send */ /** Handle client/friend/request/send */
sendFriendRequest(sessionID: string, request: IFriendRequestData): IFriendRequestSendResponse; sendFriendRequest(sessionID: string, request: IFriendRequestData): IFriendRequestSendResponse;
} }

View File

@ -1,6 +1,7 @@
import { ApplicationContext } from "@spt/context/ApplicationContext"; import { ApplicationContext } from "@spt/context/ApplicationContext";
import { HideoutHelper } from "@spt/helpers/HideoutHelper"; import { HideoutHelper } from "@spt/helpers/HideoutHelper";
import { HttpServerHelper } from "@spt/helpers/HttpServerHelper"; import { HttpServerHelper } from "@spt/helpers/HttpServerHelper";
import { InventoryHelper } from "@spt/helpers/InventoryHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { PreSptModLoader } from "@spt/loaders/PreSptModLoader"; import { PreSptModLoader } from "@spt/loaders/PreSptModLoader";
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
@ -13,14 +14,12 @@ import { IGameModeRequestData } from "@spt/models/eft/game/IGameModeRequestData"
import { IGetRaidTimeRequest } from "@spt/models/eft/game/IGetRaidTimeRequest"; import { IGetRaidTimeRequest } from "@spt/models/eft/game/IGetRaidTimeRequest";
import { IGetRaidTimeResponse } from "@spt/models/eft/game/IGetRaidTimeResponse"; import { IGetRaidTimeResponse } from "@spt/models/eft/game/IGetRaidTimeResponse";
import { IServerDetails } from "@spt/models/eft/game/IServerDetails"; import { IServerDetails } from "@spt/models/eft/game/IServerDetails";
import { ISurveyResponseData } from "@spt/models/eft/game/ISurveyResponseData";
import { ISptProfile } from "@spt/models/eft/profile/ISptProfile"; import { ISptProfile } from "@spt/models/eft/profile/ISptProfile";
import { IBotConfig } from "@spt/models/spt/config/IBotConfig"; import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
import { ICoreConfig } from "@spt/models/spt/config/ICoreConfig"; import { ICoreConfig } from "@spt/models/spt/config/ICoreConfig";
import { IHideoutConfig } from "@spt/models/spt/config/IHideoutConfig"; import { IHideoutConfig } from "@spt/models/spt/config/IHideoutConfig";
import { IHttpConfig } from "@spt/models/spt/config/IHttpConfig"; import { IHttpConfig } from "@spt/models/spt/config/IHttpConfig";
import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig";
import { ILootConfig } from "@spt/models/spt/config/ILootConfig";
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig"; import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
@ -30,6 +29,7 @@ import { GiftService } from "@spt/services/GiftService";
import { ItemBaseClassService } from "@spt/services/ItemBaseClassService"; import { ItemBaseClassService } from "@spt/services/ItemBaseClassService";
import { LocalisationService } from "@spt/services/LocalisationService"; import { LocalisationService } from "@spt/services/LocalisationService";
import { OpenZoneService } from "@spt/services/OpenZoneService"; import { OpenZoneService } from "@spt/services/OpenZoneService";
import { PostDbLoadService } from "@spt/services/PostDbLoadService";
import { ProfileActivityService } from "@spt/services/ProfileActivityService"; import { ProfileActivityService } from "@spt/services/ProfileActivityService";
import { ProfileFixerService } from "@spt/services/ProfileFixerService"; import { ProfileFixerService } from "@spt/services/ProfileFixerService";
import { RaidTimeAdjustmentService } from "@spt/services/RaidTimeAdjustmentService"; import { RaidTimeAdjustmentService } from "@spt/services/RaidTimeAdjustmentService";
@ -45,11 +45,13 @@ export declare class GameController {
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected preSptModLoader: PreSptModLoader; protected preSptModLoader: PreSptModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected inventoryHelper: InventoryHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected hideoutHelper: HideoutHelper; protected hideoutHelper: HideoutHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected profileFixerService: ProfileFixerService; protected profileFixerService: ProfileFixerService;
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected postDbLoadService: PostDbLoadService;
protected customLocationWaveService: CustomLocationWaveService; protected customLocationWaveService: CustomLocationWaveService;
protected openZoneService: OpenZoneService; protected openZoneService: OpenZoneService;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
@ -62,32 +64,16 @@ export declare class GameController {
protected cloner: ICloner; protected cloner: ICloner;
protected httpConfig: IHttpConfig; protected httpConfig: IHttpConfig;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected locationConfig: ILocationConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected hideoutConfig: IHideoutConfig; protected hideoutConfig: IHideoutConfig;
protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig;
protected botConfig: IBotConfig; protected botConfig: IBotConfig;
constructor(logger: ILogger, databaseService: DatabaseService, timeUtil: TimeUtil, hashUtil: HashUtil, preSptModLoader: PreSptModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, raidTimeAdjustmentService: RaidTimeAdjustmentService, profileActivityService: ProfileActivityService, applicationContext: ApplicationContext, configServer: ConfigServer, cloner: ICloner); constructor(logger: ILogger, databaseService: DatabaseService, timeUtil: TimeUtil, hashUtil: HashUtil, preSptModLoader: PreSptModLoader, httpServerHelper: HttpServerHelper, inventoryHelper: InventoryHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, postDbLoadService: PostDbLoadService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, raidTimeAdjustmentService: RaidTimeAdjustmentService, profileActivityService: ProfileActivityService, applicationContext: ApplicationContext, configServer: ConfigServer, cloner: ICloner);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
*/ */
gameStart(_url: string, _info: IEmptyRequestData, sessionID: string, startTimeStampMS: number): void; gameStart(_url: string, _info: IEmptyRequestData, sessionID: string, startTimeStampMS: number): void;
protected adjustHideoutCraftTimes(overrideSeconds: number): void; protected migrate39xProfile(fullProfile: ISptProfile): void;
/**
* Adjust all hideout craft times to be no higher than the override
*/
protected adjustHideoutBuildTimes(overrideSeconds: number): void;
protected adjustLocationBotValues(): void;
/**
* Out of date/incorrectly made trader mods forget this data
*/
protected checkTraderRepairValuesExist(): void;
protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void;
/** /**
* Handle client/game/config * Handle client/game/config
*/ */
@ -116,48 +102,26 @@ export declare class GameController {
* Handle singleplayer/settings/getRaidTime * Handle singleplayer/settings/getRaidTime
*/ */
getRaidTime(sessionId: string, request: IGetRaidTimeRequest): IGetRaidTimeResponse; getRaidTime(sessionId: string, request: IGetRaidTimeRequest): IGetRaidTimeResponse;
/**
* BSG have two values for shotgun dispersion, we make sure both have the same value
*/
protected fixShotgunDispersions(): void;
/** /**
* Players set botReload to a high value and don't expect the crazy fast reload speeds, give them a warn about it * Players set botReload to a high value and don't expect the crazy fast reload speeds, give them a warn about it
* @param pmcProfile Player profile * @param pmcProfile Player profile
*/ */
protected warnOnActiveBotReloadSkill(pmcProfile: IPmcData): void; protected warnOnActiveBotReloadSkill(pmcProfile: IPmcData): void;
protected setAllDbItemsAsSellableOnFlea(): void;
/** /**
* When player logs in, iterate over all active effects and reduce timer * When player logs in, iterate over all active effects and reduce timer
* @param pmcProfile Profile to adjust values for * @param pmcProfile Profile to adjust values for
*/ */
protected updateProfileHealthValues(pmcProfile: IPmcData): void; protected updateProfileHealthValues(pmcProfile: IPmcData): void;
/**
* Waves with an identical min/max values spawn nothing, the number of bots that spawn is the difference between min and max
*/
protected fixBrokenOfflineMapWaves(): void;
/**
* Make Rogues spawn later to allow for scavs to spawn first instead of rogues filling up all spawn positions
*/
protected fixRoguesSpawningInstantlyOnLighthouse(): void;
/** /**
* Send starting gifts to profile after x days * Send starting gifts to profile after x days
* @param pmcProfile Profile to add gifts to * @param pmcProfile Profile to add gifts to
*/ */
protected sendPraporGiftsToNewProfiles(pmcProfile: IPmcData): void; protected sendPraporGiftsToNewProfiles(pmcProfile: IPmcData): 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 * Get a list of installed mods and save their details to the profile being used
* @param fullProfile Profile to add mod details to * @param fullProfile Profile to add mod details to
*/ */
protected saveActiveModsToProfile(fullProfile: ISptProfile): void; protected saveActiveModsToProfile(fullProfile: ISptProfile): void;
/**
* Check for any missing assorts inside each traders assort.json data, checking against traders questassort.json
*/
protected validateQuestAssortUnlocksExist(): void;
/** /**
* Add the logged in players name to PMC name pool * Add the logged in players name to PMC name pool
* @param pmcProfile Profile of player to get name from * @param pmcProfile Profile of player to get name from
@ -168,13 +132,6 @@ export declare class GameController {
* @param fullProfile Profile to check for dialog in * @param fullProfile Profile to check for dialog in
*/ */
protected checkForAndRemoveUndefinedDialogs(fullProfile: ISptProfile): void; protected checkForAndRemoveUndefinedDialogs(fullProfile: ISptProfile): void;
/**
* Blank out the "test" mail message from prapor
*/
protected removePraporTestMessage(): void;
/**
* Make non-trigger-spawned raiders spawn earlier + always
*/
protected adjustLabsRaiderSpawnRate(): void;
protected logProfileDetails(fullProfile: ISptProfile): void; protected logProfileDetails(fullProfile: ISptProfile): void;
getSurvey(sessionId: string): ISurveyResponseData;
} }

View File

@ -5,7 +5,6 @@ import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IHealthTreatmentRequestData } from "@spt/models/eft/health/IHealthTreatmentRequestData"; import { IHealthTreatmentRequestData } from "@spt/models/eft/health/IHealthTreatmentRequestData";
import { IOffraidEatRequestData } from "@spt/models/eft/health/IOffraidEatRequestData"; import { IOffraidEatRequestData } from "@spt/models/eft/health/IOffraidEatRequestData";
import { IOffraidHealRequestData } from "@spt/models/eft/health/IOffraidHealRequestData"; import { IOffraidHealRequestData } from "@spt/models/eft/health/IOffraidHealRequestData";
import { ISyncHealthRequestData } from "@spt/models/eft/health/ISyncHealthRequestData";
import { IWorkoutData } from "@spt/models/eft/health/IWorkoutData"; import { IWorkoutData } from "@spt/models/eft/health/IWorkoutData";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
@ -25,15 +24,6 @@ export declare class HealthController {
protected healthHelper: HealthHelper; protected healthHelper: HealthHelper;
protected cloner: ICloner; protected cloner: ICloner;
constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, itemHelper: ItemHelper, paymentService: PaymentService, inventoryHelper: InventoryHelper, localisationService: LocalisationService, httpResponse: HttpResponseUtil, healthHelper: HealthHelper, cloner: ICloner); constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, itemHelper: ItemHelper, paymentService: PaymentService, inventoryHelper: InventoryHelper, localisationService: LocalisationService, httpResponse: HttpResponseUtil, healthHelper: HealthHelper, cloner: ICloner);
/**
* stores in-raid player health
* @param pmcData Player profile
* @param info Request data
* @param sessionID Player id
* @param addEffects Should effects found be added or removed from profile
* @param deleteExistingEffects Should all prior effects be removed before apply new ones
*/
saveVitality(pmcData: IPmcData, info: ISyncHealthRequestData, sessionID: string, addEffects?: boolean, deleteExistingEffects?: boolean): void;
/** /**
* When healing in menu * When healing in menu
* @param pmcData Player profile * @param pmcData Player profile

View File

@ -6,12 +6,13 @@ import { PaymentHelper } from "@spt/helpers/PaymentHelper";
import { PresetHelper } from "@spt/helpers/PresetHelper"; import { PresetHelper } from "@spt/helpers/PresetHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { HideoutArea, ITaskConditionCounter, Product } from "@spt/models/eft/common/tables/IBotBase"; import { IBotHideoutArea, IProduct, ITaskConditionCounter } from "@spt/models/eft/common/tables/IBotBase";
import { HideoutUpgradeCompleteRequestData } from "@spt/models/eft/hideout/HideoutUpgradeCompleteRequestData";
import { IHandleQTEEventRequestData } from "@spt/models/eft/hideout/IHandleQTEEventRequestData"; import { IHandleQTEEventRequestData } from "@spt/models/eft/hideout/IHandleQTEEventRequestData";
import { IHideoutArea, Stage } from "@spt/models/eft/hideout/IHideoutArea"; import { IHideoutArea, IStage } from "@spt/models/eft/hideout/IHideoutArea";
import { IHideoutCancelProductionRequestData } from "@spt/models/eft/hideout/IHideoutCancelProductionRequestData"; import { IHideoutCancelProductionRequestData } from "@spt/models/eft/hideout/IHideoutCancelProductionRequestData";
import { IHideoutCircleOfCultistProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutCircleOfCultistProductionStartRequestData";
import { IHideoutContinuousProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutContinuousProductionStartRequestData"; import { IHideoutContinuousProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutContinuousProductionStartRequestData";
import { IHideoutDeleteProductionRequestData } from "@spt/models/eft/hideout/IHideoutDeleteProductionRequestData";
import { IHideoutImproveAreaRequestData } from "@spt/models/eft/hideout/IHideoutImproveAreaRequestData"; import { IHideoutImproveAreaRequestData } from "@spt/models/eft/hideout/IHideoutImproveAreaRequestData";
import { IHideoutProduction } from "@spt/models/eft/hideout/IHideoutProduction"; import { IHideoutProduction } from "@spt/models/eft/hideout/IHideoutProduction";
import { IHideoutPutItemInRequestData } from "@spt/models/eft/hideout/IHideoutPutItemInRequestData"; import { IHideoutPutItemInRequestData } from "@spt/models/eft/hideout/IHideoutPutItemInRequestData";
@ -20,8 +21,9 @@ import { IHideoutSingleProductionStartRequestData } from "@spt/models/eft/hideou
import { IHideoutTakeItemOutRequestData } from "@spt/models/eft/hideout/IHideoutTakeItemOutRequestData"; import { IHideoutTakeItemOutRequestData } from "@spt/models/eft/hideout/IHideoutTakeItemOutRequestData";
import { IHideoutTakeProductionRequestData } from "@spt/models/eft/hideout/IHideoutTakeProductionRequestData"; import { IHideoutTakeProductionRequestData } from "@spt/models/eft/hideout/IHideoutTakeProductionRequestData";
import { IHideoutToggleAreaRequestData } from "@spt/models/eft/hideout/IHideoutToggleAreaRequestData"; import { IHideoutToggleAreaRequestData } from "@spt/models/eft/hideout/IHideoutToggleAreaRequestData";
import { IHideoutUpgradeCompleteRequestData } from "@spt/models/eft/hideout/IHideoutUpgradeCompleteRequestData";
import { IHideoutUpgradeRequestData } from "@spt/models/eft/hideout/IHideoutUpgradeRequestData"; import { IHideoutUpgradeRequestData } from "@spt/models/eft/hideout/IHideoutUpgradeRequestData";
import { IQteData } from "@spt/models/eft/hideout/IQteData"; import { IQteData, IQteResult } from "@spt/models/eft/hideout/IQteData";
import { IRecordShootingRangePoints } from "@spt/models/eft/hideout/IRecordShootingRangePoints"; import { IRecordShootingRangePoints } from "@spt/models/eft/hideout/IRecordShootingRangePoints";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { HideoutAreas } from "@spt/models/enums/HideoutAreas"; import { HideoutAreas } from "@spt/models/enums/HideoutAreas";
@ -30,6 +32,7 @@ import { ILogger } from "@spt/models/spt/utils/ILogger";
import { EventOutputHolder } from "@spt/routers/EventOutputHolder"; import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { SaveServer } from "@spt/servers/SaveServer"; import { SaveServer } from "@spt/servers/SaveServer";
import { CircleOfCultistService } from "@spt/services/CircleOfCultistService";
import { DatabaseService } from "@spt/services/DatabaseService"; import { DatabaseService } from "@spt/services/DatabaseService";
import { FenceService } from "@spt/services/FenceService"; import { FenceService } from "@spt/services/FenceService";
import { LocalisationService } from "@spt/services/LocalisationService"; import { LocalisationService } from "@spt/services/LocalisationService";
@ -61,11 +64,12 @@ export declare class HideoutController {
protected profileActivityService: ProfileActivityService; protected profileActivityService: ProfileActivityService;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected fenceService: FenceService; protected fenceService: FenceService;
protected circleOfCultistService: CircleOfCultistService;
protected cloner: ICloner; protected cloner: ICloner;
/** Key used in TaskConditionCounters array */ /** Key used in TaskConditionCounters array */
protected static nameTaskConditionCountersCrafting: string; protected static nameTaskConditionCountersCraftingId: string;
protected hideoutConfig: IHideoutConfig; protected hideoutConfig: IHideoutConfig;
constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseService: DatabaseService, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, itemHelper: ItemHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, localisationService: LocalisationService, profileActivityService: ProfileActivityService, configServer: ConfigServer, fenceService: FenceService, cloner: ICloner); constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseService: DatabaseService, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, itemHelper: ItemHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, localisationService: LocalisationService, profileActivityService: ProfileActivityService, configServer: ConfigServer, fenceService: FenceService, circleOfCultistService: CircleOfCultistService, cloner: ICloner);
/** /**
* Handle HideoutUpgrade event * Handle HideoutUpgrade event
* Start a hideout area upgrade * Start a hideout area upgrade
@ -83,12 +87,12 @@ export declare class HideoutController {
* @param sessionID Session id * @param sessionID Session id
* @param output Client response * @param output Client response
*/ */
upgradeComplete(pmcData: IPmcData, request: HideoutUpgradeCompleteRequestData, sessionID: string, output: IItemEventRouterResponse): void; upgradeComplete(pmcData: IPmcData, request: IHideoutUpgradeCompleteRequestData, sessionID: string, output: IItemEventRouterResponse): void;
/** /**
* Upgrade wall status to visible in profile if medstation/water collector are both level 1 * Upgrade wall status to visible in profile if medstation/water collector are both level 1
* @param pmcData Player profile * @param pmcData Player profile
*/ */
protected checkAndUpgradeWall(pmcData: IPmcData): void; protected SetWallVisibleIfPrereqsMet(pmcData: IPmcData): void;
/** /**
* @param pmcData Profile to edit * @param pmcData Profile to edit
* @param output Object to send back to client * @param output Object to send back to client
@ -97,14 +101,23 @@ export declare class HideoutController {
* @param dbHideoutArea Hideout area being upgraded * @param dbHideoutArea Hideout area being upgraded
* @param hideoutStage Stage hideout area is being upgraded to * @param hideoutStage Stage hideout area is being upgraded to
*/ */
protected addContainerImprovementToProfile(output: IItemEventRouterResponse, sessionID: string, pmcData: IPmcData, profileParentHideoutArea: HideoutArea, dbHideoutArea: IHideoutArea, hideoutStage: Stage): void; protected addContainerImprovementToProfile(output: IItemEventRouterResponse, sessionID: string, pmcData: IPmcData, profileParentHideoutArea: IBotHideoutArea, dbHideoutArea: IHideoutArea, hideoutStage: IStage): void;
/**
* Add stand1/stand2/stand3 inventory items to profile, depending on passed in hideout stage
* @param sessionId Session id
* @param equipmentPresetStage Current EQUIPMENT_PRESETS_STAND stage data
* @param pmcData Player profile
* @param equipmentPresetHideoutArea
* @param output Response to send back to client
*/
protected addMissingPresetStandItemsToProfile(sessionId: string, equipmentPresetStage: IStage, pmcData: IPmcData, equipmentPresetHideoutArea: IHideoutArea, output: IItemEventRouterResponse): void;
/** /**
* Add an inventory item to profile from a hideout area stage data * Add an inventory item to profile from a hideout area stage data
* @param pmcData Profile to update * @param pmcData Profile to update
* @param dbHideoutData Hideout area from db being upgraded * @param dbHideoutArea Hideout area from db being upgraded
* @param hideoutStage Stage area upgraded to * @param hideoutStage Stage area upgraded to
*/ */
protected addUpdateInventoryItemToProfile(pmcData: IPmcData, dbHideoutData: IHideoutArea, hideoutStage: Stage): void; protected addUpdateInventoryItemToProfile(sessionId: string, pmcData: IPmcData, dbHideoutArea: IHideoutArea, hideoutStage: IStage): void;
/** /**
* @param output Object to send to client * @param output Object to send to client
* @param sessionID Session/player id * @param sessionID Session/player id
@ -112,7 +125,7 @@ export declare class HideoutController {
* @param hideoutDbData Hideout area that caused addition of stash * @param hideoutDbData Hideout area that caused addition of stash
* @param hideoutStage Hideout area upgraded to this * @param hideoutStage Hideout area upgraded to this
*/ */
protected addContainerUpgradeToClientOutput(output: IItemEventRouterResponse, sessionID: string, areaType: HideoutAreas, hideoutDbData: IHideoutArea, hideoutStage: Stage): void; protected addContainerUpgradeToClientOutput(sessionID: string, areaType: HideoutAreas, hideoutDbData: IHideoutArea, hideoutStage: IStage, output: IItemEventRouterResponse): void;
/** /**
* Handle HideoutPutItemsInAreaSlots * Handle HideoutPutItemsInAreaSlots
* Create item in hideout slot item array, remove item from player inventory * Create item in hideout slot item array, remove item from player inventory
@ -140,7 +153,7 @@ export declare class HideoutController {
* @param hideoutArea Area fuel is being removed from * @param hideoutArea Area fuel is being removed from
* @returns IItemEventRouterResponse response * @returns IItemEventRouterResponse response
*/ */
protected removeResourceFromArea(sessionID: string, pmcData: IPmcData, removeResourceRequest: IHideoutTakeItemOutRequestData, output: IItemEventRouterResponse, hideoutArea: HideoutArea): IItemEventRouterResponse; protected removeResourceFromArea(sessionID: string, pmcData: IPmcData, removeResourceRequest: IHideoutTakeItemOutRequestData, output: IItemEventRouterResponse, hideoutArea: IBotHideoutArea): IItemEventRouterResponse;
/** /**
* Handle HideoutToggleArea event * Handle HideoutToggleArea event
* Toggle area on/off * Toggle area on/off
@ -182,7 +195,7 @@ export declare class HideoutController {
* @param rewards reward items to add to profile * @param rewards reward items to add to profile
* @param recipeId recipe id to save into Production dict * @param recipeId recipe id to save into Production dict
*/ */
protected addScavCaseRewardsToProfile(pmcData: IPmcData, rewards: Product[], recipeId: string): void; protected addScavCaseRewardsToProfile(pmcData: IPmcData, rewards: IProduct[], recipeId: string): void;
/** /**
* Start production of continuously created item * Start production of continuously created item
* @param pmcData Player profile * @param pmcData Player profile
@ -239,6 +252,12 @@ export declare class HideoutController {
* @param request QTE result object * @param request QTE result object
*/ */
handleQTEEventOutcome(sessionId: string, pmcData: IPmcData, request: IHandleQTEEventRequestData, output: IItemEventRouterResponse): void; handleQTEEventOutcome(sessionId: string, pmcData: IPmcData, request: IHandleQTEEventRequestData, output: IItemEventRouterResponse): void;
/**
* Apply mild/severe muscle pain after gym use
* @param pmcData Profile to apply effect to
* @param finishEffect Effect data to apply after completing QTE gym event
*/
protected handleMusclePain(pmcData: IPmcData, finishEffect: IQteResult): void;
/** /**
* Record a high score from the shooting range into a player profiles overallcounters * Record a high score from the shooting range into a player profiles overallcounters
* @param sessionId Session id * @param sessionId Session id
@ -263,7 +282,22 @@ export declare class HideoutController {
*/ */
cancelProduction(sessionId: string, pmcData: IPmcData, request: IHideoutCancelProductionRequestData): IItemEventRouterResponse; cancelProduction(sessionId: string, pmcData: IPmcData, request: IHideoutCancelProductionRequestData): IItemEventRouterResponse;
/** /**
* Function called every x seconds as part of onUpdate event * Handle client/game/profile/items/moving - HideoutCircleOfCultistProductionStart
* @param sessionId Session id
* @param pmcData Profile of crafter
* @param request Request data
*/
circleOfCultistProductionStart(sessionId: string, pmcData: IPmcData, request: IHideoutCircleOfCultistProductionStartRequestData): IItemEventRouterResponse;
/**
* Handle HideoutDeleteProductionCommand event
* @param sessionId Session id
* @param pmcData Player profile
* @param request Client request data
* @returns IItemEventRouterResponse
*/
hideoutDeleteProductionCommand(sessionId: string, pmcData: IPmcData, request: IHideoutDeleteProductionRequestData): IItemEventRouterResponse;
/**
* Function called every `hideoutConfig.runIntervalSeconds` seconds as part of onUpdate event
*/ */
update(): void; update(): void;
} }

View File

@ -1,70 +1,26 @@
import { ApplicationContext } from "@spt/context/ApplicationContext"; import { ApplicationContext } from "@spt/context/ApplicationContext";
import { PlayerScavGenerator } from "@spt/generators/PlayerScavGenerator";
import { HealthHelper } from "@spt/helpers/HealthHelper";
import { InRaidHelper } from "@spt/helpers/InRaidHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { QuestHelper } from "@spt/helpers/QuestHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { Item } from "@spt/models/eft/common/tables/IItem";
import { IRegisterPlayerRequestData } from "@spt/models/eft/inRaid/IRegisterPlayerRequestData"; import { IRegisterPlayerRequestData } from "@spt/models/eft/inRaid/IRegisterPlayerRequestData";
import { ISaveProgressRequestData } from "@spt/models/eft/inRaid/ISaveProgressRequestData"; import { IScavSaveRequestData } from "@spt/models/eft/inRaid/IScavSaveRequestData";
import { PlayerRaidEndState } from "@spt/models/enums/PlayerRaidEndState";
import { IAirdropConfig } from "@spt/models/spt/config/IAirdropConfig";
import { IBTRConfig } from "@spt/models/spt/config/IBTRConfig";
import { IBotConfig } from "@spt/models/spt/config/IBotConfig"; import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
import { IHideoutConfig } from "@spt/models/spt/config/IHideoutConfig";
import { IInRaidConfig } from "@spt/models/spt/config/IInRaidConfig"; import { IInRaidConfig } from "@spt/models/spt/config/IInRaidConfig";
import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig";
import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig";
import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig";
import { ITraderServiceModel } from "@spt/models/spt/services/ITraderServiceModel";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { SaveServer } from "@spt/servers/SaveServer"; import { SaveServer } from "@spt/servers/SaveServer";
import { DatabaseService } from "@spt/services/DatabaseService";
import { InsuranceService } from "@spt/services/InsuranceService";
import { LocalisationService } from "@spt/services/LocalisationService"; import { LocalisationService } from "@spt/services/LocalisationService";
import { MailSendService } from "@spt/services/MailSendService";
import { MatchBotDetailsCacheService } from "@spt/services/MatchBotDetailsCacheService";
import { PmcChatResponseService } from "@spt/services/PmcChatResponseService";
import { TraderServicesService } from "@spt/services/TraderServicesService";
import { RandomUtil } from "@spt/utils/RandomUtil";
import { TimeUtil } from "@spt/utils/TimeUtil";
/** /**
* Logic for handling In Raid callbacks * Logic for handling In Raid callbacks
*/ */
export declare class InraidController { export declare class InraidController {
protected logger: ILogger; protected logger: ILogger;
protected saveServer: SaveServer; protected saveServer: SaveServer;
protected timeUtil: TimeUtil;
protected databaseService: DatabaseService;
protected pmcChatResponseService: PmcChatResponseService;
protected matchBotDetailsCacheService: MatchBotDetailsCacheService;
protected questHelper: QuestHelper;
protected itemHelper: ItemHelper;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected playerScavGenerator: PlayerScavGenerator;
protected healthHelper: HealthHelper;
protected traderHelper: TraderHelper;
protected traderServicesService: TraderServicesService;
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected insuranceService: InsuranceService;
protected inRaidHelper: InRaidHelper;
protected applicationContext: ApplicationContext; protected applicationContext: ApplicationContext;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected mailSendService: MailSendService;
protected randomUtil: RandomUtil;
protected airdropConfig: IAirdropConfig;
protected btrConfig: IBTRConfig;
protected inRaidConfig: IInRaidConfig; protected inRaidConfig: IInRaidConfig;
protected traderConfig: ITraderConfig;
protected locationConfig: ILocationConfig;
protected ragfairConfig: IRagfairConfig;
protected hideoutConfig: IHideoutConfig;
protected botConfig: IBotConfig; protected botConfig: IBotConfig;
constructor(logger: ILogger, saveServer: SaveServer, timeUtil: TimeUtil, databaseService: DatabaseService, pmcChatResponseService: PmcChatResponseService, matchBotDetailsCacheService: MatchBotDetailsCacheService, questHelper: QuestHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, playerScavGenerator: PlayerScavGenerator, healthHelper: HealthHelper, traderHelper: TraderHelper, traderServicesService: TraderServicesService, localisationService: LocalisationService, insuranceService: InsuranceService, inRaidHelper: InRaidHelper, applicationContext: ApplicationContext, configServer: ConfigServer, mailSendService: MailSendService, randomUtil: RandomUtil); constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, localisationService: LocalisationService, applicationContext: ApplicationContext, configServer: ConfigServer);
/** /**
* Save locationId to active profiles inraid object AND app context * Save locationId to active profiles inraid object AND app context
* @param sessionID Session id * @param sessionID Session id
@ -72,124 +28,18 @@ export declare class InraidController {
*/ */
addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void; addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void;
/** /**
* Handle raid/profile/save * Handle raid/profile/scavsave
* Save profile state to disk * Save profile state to disk
* Handles pmc/pscav * Handles pmc/pscav
* @param offraidData post-raid request data * @param offraidProfileData Post-raid scav profile data
* @param sessionID Session id * @param sessionID Session id
*/ */
savePostRaidProgress(offraidData: ISaveProgressRequestData, sessionID: string): void; savePostRaidProfileForScav(offraidProfileData: IScavSaveRequestData, sessionID: string): void;
/**
* Handle updating player profile post-pmc raid
* @param sessionID Session id
* @param postRaidRequest Post-raid data
*/
protected savePmcProgress(sessionID: string, postRaidRequest: ISaveProgressRequestData): void;
/**
* Make changes to PMC profile after they've died in raid,
* Alter body part hp, handle insurance, delete inventory items, remove carried quest items
* @param postRaidSaveRequest Post-raid save request
* @param pmcData Pmc profile
* @param sessionID Session id
* @returns Updated profile object
*/
protected performPostRaidActionsWhenDead(postRaidSaveRequest: ISaveProgressRequestData, pmcData: IPmcData, sessionID: string): IPmcData;
/**
* Adjust player characters body part hp post-raid
* @param postRaidSaveRequest post raid data
* @param pmcData player profile
*/
protected updatePmcHealthPostRaid(postRaidSaveRequest: ISaveProgressRequestData, pmcData: IPmcData): void;
/**
* Reduce body part hp to % of max
* @param pmcData profile to edit
* @param multiplier multiplier to apply to max health
*/
protected reducePmcHealthToPercent(pmcData: IPmcData, multiplier: number): void;
/**
* Handle updating the profile post-pscav raid
* @param sessionID Session id
* @param postRaidRequest Post-raid data of raid
*/
protected savePlayerScavProgress(sessionID: string, postRaidRequest: ISaveProgressRequestData): void;
/**
* merge two dictionaries together
* Prioritise pair that has true as a value
* @param primary main dictionary
* @param secondary Secondary dictionary
*/
protected mergePmcAndScavEncyclopedias(primary: IPmcData, secondary: IPmcData): void;
/**
* Post-scav-raid any charisma increase must be propigated into PMC profile
* @param postRaidServerScavProfile Scav profile after adjustments made from raid
* @param postRaidServerPmcProfile Pmc profile after raid
* @param preRaidScavCharismaProgress charisma progress value pre-raid
*/
protected updatePmcCharismaSkillPostScavRaid(postRaidServerScavProfile: IPmcData, postRaidServerPmcProfile: IPmcData, preRaidScavCharismaProgress: number): void;
/**
* Does provided profile contain any condition counters
* @param profile Profile to check for condition counters
* @returns Profile has condition counters
*/
protected profileHasConditionCounters(profile: IPmcData): boolean;
/**
* Scav quest progress isnt transferred automatically from scav to pmc, we do this manually
* @param scavProfile Scav profile with quest progress post-raid
* @param pmcProfile Server pmc profile to copy scav quest progress into
*/
protected migrateScavQuestProgressToPmcProfile(scavProfile: IPmcData, pmcProfile: IPmcData): void;
/**
* Is the player dead after a raid - dead is anything other than "survived" / "runner"
* @param statusOnExit exit value from offraidData object
* @returns true if dead
*/
protected isPlayerDead(statusOnExit: PlayerRaidEndState): boolean;
/**
* Mark inventory items as FiR if player survived raid, otherwise remove FiR from them
* @param offraidData Save Progress Request
*/
protected markOrRemoveFoundInRaidItems(offraidData: ISaveProgressRequestData): void;
/**
* Update profile after player completes scav raid
* @param scavData Scav profile
* @param sessionID Session id
* @param offraidData Post-raid save request
* @param pmcData Pmc profile
* @param isDead Is player dead
*/
protected handlePostRaidPlayerScavProcess(scavData: IPmcData, sessionID: string, offraidData: ISaveProgressRequestData, pmcData: IPmcData, isDead: boolean): void;
/**
* Update profile with scav karma values based on in-raid actions
* @param pmcData Pmc profile
* @param offraidData Post-raid save request
* @param scavData Scav profile
*/
protected handlePostRaidPlayerScavKarmaChanges(pmcData: IPmcData, offraidData: ISaveProgressRequestData, scavData: IPmcData): void;
/** /**
* Get the inraid config from configs/inraid.json * Get the inraid config from configs/inraid.json
* @returns InRaid Config * @returns InRaid Config
*/ */
getInraidConfig(): IInRaidConfig; getInraidConfig(): IInRaidConfig;
/**
* Get airdrop config from configs/airdrop.json
* @returns Airdrop config
*/
getAirdropConfig(): IAirdropConfig;
/**
* Get BTR config from configs/btr.json
* @returns Airdrop config
*/
getBTRConfig(): IBTRConfig;
/**
* Handle singleplayer/traderServices/getTraderServices
* @returns Trader services data
*/
getTraderServices(sessionId: string, traderId: string): ITraderServiceModel[];
/**
* Handle singleplayer/traderServices/itemDelivery
*/
itemDelivery(sessionId: string, traderId: string, items: Item[]): void;
getTraitorScavHostileChance(url: string, sessionID: string): number; getTraitorScavHostileChance(url: string, sessionID: string): number;
getSandboxMaxPatrolValue(url: string, sessionID: string): number;
getBossConvertSettings(url: string, sessionId: string): string[]; getBossConvertSettings(url: string, sessionId: string): string[];
} }

View File

@ -4,12 +4,12 @@ import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper"; import { TraderHelper } from "@spt/helpers/TraderHelper";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper"; import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { IGetInsuranceCostRequestData } from "@spt/models/eft/insurance/IGetInsuranceCostRequestData"; import { IGetInsuranceCostRequestData } from "@spt/models/eft/insurance/IGetInsuranceCostRequestData";
import { IGetInsuranceCostResponseData } from "@spt/models/eft/insurance/IGetInsuranceCostResponseData"; import { IGetInsuranceCostResponseData } from "@spt/models/eft/insurance/IGetInsuranceCostResponseData";
import { IInsureRequestData } from "@spt/models/eft/insurance/IInsureRequestData"; import { IInsureRequestData } from "@spt/models/eft/insurance/IInsureRequestData";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { Insurance } from "@spt/models/eft/profile/ISptProfile"; import { IInsurance } from "@spt/models/eft/profile/ISptProfile";
import { IInsuranceConfig } from "@spt/models/spt/config/IInsuranceConfig"; import { IInsuranceConfig } from "@spt/models/spt/config/IInsuranceConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { EventOutputHolder } from "@spt/routers/EventOutputHolder"; import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
@ -68,7 +68,7 @@ export declare class InsuranceController {
* @param time The time to check ready status against. Current time by default. * @param time The time to check ready status against. Current time by default.
* @returns All insured items that are ready to be processed. * @returns All insured items that are ready to be processed.
*/ */
protected filterInsuredItems(sessionID: string, time?: number): Insurance[]; protected filterInsuredItems(sessionID: string, time?: number): IInsurance[];
/** /**
* This method orchestrates the processing of insured items in a profile. * This method orchestrates the processing of insured items in a profile.
* *
@ -76,13 +76,13 @@ export declare class InsuranceController {
* @param sessionID The session ID that should receive the processed items. * @param sessionID The session ID that should receive the processed items.
* @returns void * @returns void
*/ */
protected processInsuredItems(insuranceDetails: Insurance[], sessionID: string): void; protected processInsuredItems(insuranceDetails: IInsurance[], sessionID: string): void;
/** /**
* Count all items in all insurance packages. * Count all items in all insurance packages.
* @param insurance * @param insurance
* @returns * @returns
*/ */
protected countAllInsuranceItems(insurance: Insurance[]): number; protected countAllInsuranceItems(insurance: IInsurance[]): number;
/** /**
* Remove an insurance package from a profile using the package's system data information. * Remove an insurance package from a profile using the package's system data information.
* *
@ -90,7 +90,7 @@ export declare class InsuranceController {
* @param index The array index of the insurance package to remove. * @param index The array index of the insurance package to remove.
* @returns void * @returns void
*/ */
protected removeInsurancePackageFromProfile(sessionID: string, insPackage: Insurance): void; protected removeInsurancePackageFromProfile(sessionID: string, insPackage: IInsurance): void;
/** /**
* Finds the items that should be deleted based on the given Insurance object. * Finds the items that should be deleted based on the given Insurance object.
* *
@ -98,7 +98,7 @@ export declare class InsuranceController {
* @param insured - The insurance object containing the items to evaluate for deletion. * @param insured - The insurance object containing the items to evaluate for deletion.
* @returns A Set containing the IDs of items that should be deleted. * @returns A Set containing the IDs of items that should be deleted.
*/ */
protected findItemsToDelete(rootItemParentID: string, insured: Insurance): Set<string>; protected findItemsToDelete(rootItemParentID: string, insured: IInsurance): Set<string>;
/** /**
* Initialize a Map object that holds main-parents to all of their attachments. Note that "main-parent" in this * Initialize a Map object that holds main-parents to all of their attachments. Note that "main-parent" in this
* context refers to the parent item that an attachment is attached to. For example, a suppressor attached to a gun, * context refers to the parent item that an attachment is attached to. For example, a suppressor attached to a gun,
@ -109,7 +109,7 @@ export declare class InsuranceController {
* @param itemsMap - A Map object for quick item look-up by item ID. * @param itemsMap - A Map object for quick item look-up by item ID.
* @returns A Map object containing parent item IDs to arrays of their attachment items. * @returns A Map object containing parent item IDs to arrays of their attachment items.
*/ */
protected populateParentAttachmentsMap(rootItemParentID: string, insured: Insurance, itemsMap: Map<string, Item>): Map<string, Item[]>; protected populateParentAttachmentsMap(rootItemParentID: string, insured: IInsurance, itemsMap: Map<string, IItem>): Map<string, IItem[]>;
/** /**
* Remove attachments that can not be moddable in-raid from the parentAttachmentsMap. If no moddable attachments * Remove attachments that can not be moddable in-raid from the parentAttachmentsMap. If no moddable attachments
* remain, the parent is removed from the map as well. * remain, the parent is removed from the map as well.
@ -118,7 +118,7 @@ export declare class InsuranceController {
* @param itemsMap - A Map object for quick item look-up by item ID. * @param itemsMap - A Map object for quick item look-up by item ID.
* @returns A Map object containing parent item IDs to arrays of their attachment items which are not moddable in-raid. * @returns A Map object containing parent item IDs to arrays of their attachment items which are not moddable in-raid.
*/ */
protected removeNonModdableAttachments(parentAttachmentsMap: Map<string, Item[]>, itemsMap: Map<string, Item>): Map<string, Item[]>; protected removeNonModdableAttachments(parentAttachmentsMap: Map<string, IItem[]>, itemsMap: Map<string, IItem>): Map<string, IItem[]>;
/** /**
* Process "regular" insurance items. Any insured item that is not an attached, attachment is considered a "regular" * Process "regular" insurance items. Any insured item that is not an attached, attachment is considered a "regular"
* item. This method iterates over them, preforming item deletion rolls to see if they should be deleted. If so, * item. This method iterates over them, preforming item deletion rolls to see if they should be deleted. If so,
@ -129,7 +129,7 @@ export declare class InsuranceController {
* @param parentAttachmentsMap A Map object containing parent item IDs to arrays of their attachment items. * @param parentAttachmentsMap A Map object containing parent item IDs to arrays of their attachment items.
* @returns void * @returns void
*/ */
protected processRegularItems(insured: Insurance, toDelete: Set<string>, parentAttachmentsMap: Map<string, Item[]>): void; protected processRegularItems(insured: IInsurance, toDelete: Set<string>, parentAttachmentsMap: Map<string, IItem[]>): void;
/** /**
* Process parent items and their attachments, updating the toDelete Set accordingly. * Process parent items and their attachments, updating the toDelete Set accordingly.
* *
@ -138,7 +138,7 @@ export declare class InsuranceController {
* @param traderId The trader ID from the Insurance object. * @param traderId The trader ID from the Insurance object.
* @param toDelete A Set object to keep track of items marked for deletion. * @param toDelete A Set object to keep track of items marked for deletion.
*/ */
protected processAttachments(mainParentToAttachmentsMap: Map<string, Item[]>, itemsMap: Map<string, Item>, traderId: string, toDelete: Set<string>): void; protected processAttachments(mainParentToAttachmentsMap: Map<string, IItem[]>, itemsMap: Map<string, IItem>, traderId: string, toDelete: Set<string>): void;
/** /**
* Takes an array of attachment items that belong to the same main-parent item, sorts them in descending order by * Takes an array of attachment items that belong to the same main-parent item, sorts them in descending order by
* their maximum price. For each attachment, a roll is made to determine if a deletion should be made. Once the * their maximum price. For each attachment, a roll is made to determine if a deletion should be made. Once the
@ -150,9 +150,9 @@ export declare class InsuranceController {
* @param toDelete The array that accumulates the IDs of the items to be deleted. * @param toDelete The array that accumulates the IDs of the items to be deleted.
* @returns void * @returns void
*/ */
protected processAttachmentByParent(attachments: Item[], traderId: string, toDelete: Set<string>): void; protected processAttachmentByParent(attachments: IItem[], traderId: string, toDelete: Set<string>): void;
protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: Item[], attachmentPrices: Record<string, number>): void; protected logAttachmentsBeingRemoved(attachmentIdsToRemove: string[], attachments: IItem[], attachmentPrices: Record<string, number>): void;
protected weightAttachmentsByPrice(attachments: Item[]): Record<string, number>; protected weightAttachmentsByPrice(attachments: IItem[]): Record<string, number>;
/** /**
* Get count of items to remove from weapon (take into account trader + price of attachment) * Get count of items to remove from weapon (take into account trader + price of attachment)
* @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price * @param weightedAttachmentByPrice Dict of item Tpls and thier rouble price
@ -167,7 +167,7 @@ export declare class InsuranceController {
* @param toDelete The items that should be deleted. * @param toDelete The items that should be deleted.
* @returns void * @returns void
*/ */
protected removeItemsFromInsurance(insured: Insurance, toDelete: Set<string>): void; protected removeItemsFromInsurance(insured: IInsurance, toDelete: Set<string>): void;
/** /**
* Handle sending the insurance message to the user that potentially contains the valid insurance items. * Handle sending the insurance message to the user that potentially contains the valid insurance items.
* *
@ -175,7 +175,12 @@ export declare class InsuranceController {
* @param insurance The context of insurance to use. * @param insurance The context of insurance to use.
* @returns void * @returns void
*/ */
protected sendMail(sessionID: string, insurance: Insurance): void; protected sendMail(sessionID: string, insurance: IInsurance): void;
protected IsMapLabsAndInsuranceDisabled(insurance: IInsurance, labsId?: string): boolean;
/**
* Update IInsurance object with new messageTemplateId and wipe out items array data
*/
protected handleLabsInsurance(traderDialogMessages: Record<string, string[]>, insurance: IInsurance): void;
/** /**
* Determines whether an insured item should be removed from the player's inventory based on a random roll and * Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance. * trader-specific return chance.
@ -184,7 +189,7 @@ export declare class InsuranceController {
* @param insuredItem Optional. The item to roll for. Only used for logging. * @param insuredItem Optional. The item to roll for. Only used for logging.
* @returns true if the insured item should be removed from inventory, false otherwise, or undefined on error. * @returns true if the insured item should be removed from inventory, false otherwise, or undefined on error.
*/ */
protected rollForDelete(traderId: string, insuredItem?: Item): boolean | undefined; protected rollForDelete(traderId: string, insuredItem?: IItem): boolean | undefined;
/** /**
* Handle Insure event * Handle Insure event
* Add insurance to an item * Add insurance to an item
@ -195,6 +200,14 @@ export declare class InsuranceController {
* @returns IItemEventRouterResponse object to send to client * @returns IItemEventRouterResponse object to send to client
*/ */
insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse; insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Insure softinserts of Armor that has softinsert slots
* Allows armors to come back after being lost correctly
* @param item Armor item to be insured
* @param pmcData Player profile
* @param body Insurance request data
*/
insureSoftInserts(item: IItem, pmcData: IPmcData, body: IInsureRequestData): void;
/** /**
* Handle client/insurance/items/list/cost * Handle client/insurance/items/list/cost
* Calculate insurance cost * Calculate insurance cost

View File

@ -25,6 +25,7 @@ import { IInventoryTagRequestData } from "@spt/models/eft/inventory/IInventoryTa
import { IInventoryToggleRequestData } from "@spt/models/eft/inventory/IInventoryToggleRequestData"; import { IInventoryToggleRequestData } from "@spt/models/eft/inventory/IInventoryToggleRequestData";
import { IInventoryTransferRequestData } from "@spt/models/eft/inventory/IInventoryTransferRequestData"; import { IInventoryTransferRequestData } from "@spt/models/eft/inventory/IInventoryTransferRequestData";
import { IOpenRandomLootContainerRequestData } from "@spt/models/eft/inventory/IOpenRandomLootContainerRequestData"; import { IOpenRandomLootContainerRequestData } from "@spt/models/eft/inventory/IOpenRandomLootContainerRequestData";
import { IPinOrLockItemRequest } from "@spt/models/eft/inventory/IPinOrLockItemRequest";
import { IRedeemProfileRequestData } from "@spt/models/eft/inventory/IRedeemProfileRequestData"; import { IRedeemProfileRequestData } from "@spt/models/eft/inventory/IRedeemProfileRequestData";
import { ISetFavoriteItems } from "@spt/models/eft/inventory/ISetFavoriteItems"; import { ISetFavoriteItems } from "@spt/models/eft/inventory/ISetFavoriteItems";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
@ -228,4 +229,13 @@ export declare class InventoryController {
openRandomLootContainer(pmcData: IPmcData, body: IOpenRandomLootContainerRequestData, sessionID: string, output: IItemEventRouterResponse): void; openRandomLootContainer(pmcData: IPmcData, body: IOpenRandomLootContainerRequestData, sessionID: string, output: IItemEventRouterResponse): void;
redeemProfileReward(pmcData: IPmcData, request: IRedeemProfileRequestData, sessionId: string): void; redeemProfileReward(pmcData: IPmcData, request: IRedeemProfileRequestData, sessionId: string): void;
setFavoriteItem(pmcData: IPmcData, request: ISetFavoriteItems, sessionId: string): void; setFavoriteItem(pmcData: IPmcData, request: ISetFavoriteItems, sessionId: string): void;
/**
* Handle /client/game/profile/items/moving - PinLock
* Requires no response to client, only server change
* @param pmcData Players profile
* @param request Pin/Lock request data
* @param sessionID Session id
* @param output data to send back to client
*/
pinOrLock(pmcData: IPmcData, request: IPinOrLockItemRequest, sessionID: string, output: IItemEventRouterResponse): IItemEventRouterResponse;
} }

View File

@ -5,7 +5,7 @@ import { IChangeRequestData } from "@spt/models/eft/launcher/IChangeRequestData"
import { ILoginRequestData } from "@spt/models/eft/launcher/ILoginRequestData"; import { ILoginRequestData } from "@spt/models/eft/launcher/ILoginRequestData";
import { IRegisterData } from "@spt/models/eft/launcher/IRegisterData"; import { IRegisterData } from "@spt/models/eft/launcher/IRegisterData";
import { IConnectResponse } from "@spt/models/eft/profile/IConnectResponse"; import { IConnectResponse } from "@spt/models/eft/profile/IConnectResponse";
import { Info, ModDetails } from "@spt/models/eft/profile/ISptProfile"; import { IModDetails, Info } from "@spt/models/eft/profile/ISptProfile";
import { ICoreConfig } from "@spt/models/spt/config/ICoreConfig"; import { ICoreConfig } from "@spt/models/spt/config/ICoreConfig";
import { IPackageJsonData } from "@spt/models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "@spt/models/spt/mod/IPackageJsonData";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
@ -61,5 +61,5 @@ export declare class LauncherController {
* @param sessionId Player id * @param sessionId Player id
* @returns Array of mod details * @returns Array of mod details
*/ */
getServerModsProfileUsed(sessionId: string): ModDetails[]; getServerModsProfileUsed(sessionId: string): IModDetails[];
} }

View File

@ -1,57 +1,20 @@
import { ApplicationContext } from "@spt/context/ApplicationContext";
import { LocationGenerator } from "@spt/generators/LocationGenerator";
import { LootGenerator } from "@spt/generators/LootGenerator";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { ILocationBase } from "@spt/models/eft/common/ILocationBase";
import { ILocationsGenerateAllResponse } from "@spt/models/eft/common/ILocationsSourceDestinationBase"; import { ILocationsGenerateAllResponse } from "@spt/models/eft/common/ILocationsSourceDestinationBase";
import { IAirdropLootResult } from "@spt/models/eft/location/IAirdropLootResult"; import { IGetAirdropLootRequest } from "@spt/models/eft/location/IGetAirdropLootRequest";
import { IGetLocationRequestData } from "@spt/models/eft/location/IGetLocationRequestData"; import { IGetAirdropLootResponse } from "@spt/models/eft/location/IGetAirdropLootResponse";
import { AirdropTypeEnum } from "@spt/models/enums/AirdropType";
import { IAirdropConfig } from "@spt/models/spt/config/IAirdropConfig";
import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig"; import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig";
import { LootRequest } from "@spt/models/spt/services/LootRequest";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { AirdropService } from "@spt/services/AirdropService";
import { DatabaseService } from "@spt/services/DatabaseService"; import { DatabaseService } from "@spt/services/DatabaseService";
import { ItemFilterService } from "@spt/services/ItemFilterService";
import { LocalisationService } from "@spt/services/LocalisationService";
import { RaidTimeAdjustmentService } from "@spt/services/RaidTimeAdjustmentService";
import { HashUtil } from "@spt/utils/HashUtil";
import { RandomUtil } from "@spt/utils/RandomUtil";
import { TimeUtil } from "@spt/utils/TimeUtil";
import { ICloner } from "@spt/utils/cloners/ICloner"; import { ICloner } from "@spt/utils/cloners/ICloner";
export declare class LocationController { export declare class LocationController {
protected hashUtil: HashUtil;
protected randomUtil: RandomUtil;
protected weightedRandomHelper: WeightedRandomHelper;
protected logger: ILogger; protected logger: ILogger;
protected locationGenerator: LocationGenerator;
protected localisationService: LocalisationService;
protected raidTimeAdjustmentService: RaidTimeAdjustmentService;
protected itemFilterService: ItemFilterService;
protected lootGenerator: LootGenerator;
protected databaseService: DatabaseService; protected databaseService: DatabaseService;
protected timeUtil: TimeUtil; protected airdropService: AirdropService;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected applicationContext: ApplicationContext;
protected cloner: ICloner; protected cloner: ICloner;
protected airdropConfig: IAirdropConfig;
protected locationConfig: ILocationConfig; protected locationConfig: ILocationConfig;
constructor(hashUtil: HashUtil, randomUtil: RandomUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, raidTimeAdjustmentService: RaidTimeAdjustmentService, itemFilterService: ItemFilterService, lootGenerator: LootGenerator, databaseService: DatabaseService, timeUtil: TimeUtil, configServer: ConfigServer, applicationContext: ApplicationContext, cloner: ICloner); constructor(logger: ILogger, databaseService: DatabaseService, airdropService: AirdropService, configServer: ConfigServer, cloner: ICloner);
/**
* Handle client/location/getLocalloot
* Get a location (map) with generated loot data
* @param sessionId Player id
* @param request Map request to generate
* @returns ILocationBase
*/
get(sessionId: string, request: IGetLocationRequestData): ILocationBase;
/**
* Generate a maps base location and loot
* @param name Map name
* @returns ILocationBase
*/
protected generate(name: string): ILocationBase;
/** /**
* Handle client/locations * Handle client/locations
* Get all maps base location properties without loot data * Get all maps base location properties without loot data
@ -59,22 +22,6 @@ export declare class LocationController {
* @returns ILocationsGenerateAllResponse * @returns ILocationsGenerateAllResponse
*/ */
generateAll(sessionId: string): ILocationsGenerateAllResponse; generateAll(sessionId: string): ILocationsGenerateAllResponse;
/** /** Handle client/airdrop/loot */
* Handle client/location/getAirdropLoot getAirdropLoot(request: IGetAirdropLootRequest): IGetAirdropLootResponse;
* Get loot for an airdrop container
* Generates it randomly based on config/airdrop.json values
* @returns Array of LootItem objects
*/
getAirdropLoot(): IAirdropLootResult;
/**
* Randomly pick a type of airdrop loot using weighted values from config
* @returns airdrop type value
*/
protected chooseAirdropType(): AirdropTypeEnum;
/**
* Get the configuration for a specific type of airdrop
* @param airdropType Type of airdrop to get settings for
* @returns LootRequest
*/
protected getAirdropLootConfigByType(airdropType: AirdropTypeEnum): LootRequest;
} }

View File

@ -1,50 +1,31 @@
import { ApplicationContext } from "@spt/context/ApplicationContext"; import { ApplicationContext } from "@spt/context/ApplicationContext";
import { LootGenerator } from "@spt/generators/LootGenerator"; import { IEndLocalRaidRequestData } from "@spt/models/eft/match/IEndLocalRaidRequestData";
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IEndOfflineRaidRequestData } from "@spt/models/eft/match/IEndOfflineRaidRequestData";
import { IGetRaidConfigurationRequestData } from "@spt/models/eft/match/IGetRaidConfigurationRequestData"; import { IGetRaidConfigurationRequestData } from "@spt/models/eft/match/IGetRaidConfigurationRequestData";
import { IMatchGroupStartGameRequest } from "@spt/models/eft/match/IMatchGroupStartGameRequest"; import { IMatchGroupStartGameRequest } from "@spt/models/eft/match/IMatchGroupStartGameRequest";
import { IMatchGroupStatusRequest } from "@spt/models/eft/match/IMatchGroupStatusRequest"; import { IMatchGroupStatusRequest } from "@spt/models/eft/match/IMatchGroupStatusRequest";
import { IMatchGroupStatusResponse } from "@spt/models/eft/match/IMatchGroupStatusResponse"; import { IMatchGroupStatusResponse } from "@spt/models/eft/match/IMatchGroupStatusResponse";
import { IProfileStatusResponse } from "@spt/models/eft/match/IProfileStatusResponse"; import { IProfileStatusResponse } from "@spt/models/eft/match/IProfileStatusResponse";
import { IInRaidConfig } from "@spt/models/spt/config/IInRaidConfig"; import { IStartLocalRaidRequestData } from "@spt/models/eft/match/IStartLocalRaidRequestData";
import { IStartLocalRaidResponseData } from "@spt/models/eft/match/IStartLocalRaidResponseData";
import { IMatchConfig } from "@spt/models/spt/config/IMatchConfig"; import { IMatchConfig } from "@spt/models/spt/config/IMatchConfig";
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { SaveServer } from "@spt/servers/SaveServer"; import { SaveServer } from "@spt/servers/SaveServer";
import { BotGenerationCacheService } from "@spt/services/BotGenerationCacheService"; import { LocationLifecycleService } from "@spt/services/LocationLifecycleService";
import { BotLootCacheService } from "@spt/services/BotLootCacheService";
import { MailSendService } from "@spt/services/MailSendService";
import { MatchLocationService } from "@spt/services/MatchLocationService"; import { MatchLocationService } from "@spt/services/MatchLocationService";
import { ProfileSnapshotService } from "@spt/services/ProfileSnapshotService"; import { ICloner } from "@spt/utils/cloners/ICloner";
import { HashUtil } from "@spt/utils/HashUtil";
import { RandomUtil } from "@spt/utils/RandomUtil";
import { TimeUtil } from "@spt/utils/TimeUtil";
export declare class MatchController { export declare class MatchController {
protected logger: ILogger; protected logger: ILogger;
protected saveServer: SaveServer; protected saveServer: SaveServer;
protected timeUtil: TimeUtil;
protected randomUtil: RandomUtil;
protected hashUtil: HashUtil;
protected profileHelper: ProfileHelper;
protected matchLocationService: MatchLocationService; protected matchLocationService: MatchLocationService;
protected traderHelper: TraderHelper;
protected botLootCacheService: BotLootCacheService;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected profileSnapshotService: ProfileSnapshotService;
protected botGenerationCacheService: BotGenerationCacheService;
protected mailSendService: MailSendService;
protected lootGenerator: LootGenerator;
protected applicationContext: ApplicationContext; protected applicationContext: ApplicationContext;
protected locationLifecycleService: LocationLifecycleService;
protected cloner: ICloner;
protected matchConfig: IMatchConfig; protected matchConfig: IMatchConfig;
protected inRaidConfig: IInRaidConfig;
protected traderConfig: ITraderConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(logger: ILogger, saveServer: SaveServer, timeUtil: TimeUtil, randomUtil: RandomUtil, hashUtil: HashUtil, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, botGenerationCacheService: BotGenerationCacheService, mailSendService: MailSendService, lootGenerator: LootGenerator, applicationContext: ApplicationContext); constructor(logger: ILogger, saveServer: SaveServer, matchLocationService: MatchLocationService, configServer: ConfigServer, applicationContext: ApplicationContext, locationLifecycleService: LocationLifecycleService, cloner: ICloner);
getEnabled(): boolean; getEnabled(): boolean;
/** Handle client/match/group/delete */ /** Handle client/match/group/delete */
deleteGroup(info: any): void; deleteGroup(info: any): void;
@ -57,48 +38,15 @@ export declare class MatchController {
* @param request Raid config request * @param request Raid config request
* @param sessionID Session id * @param sessionID Session id
*/ */
startOfflineRaid(request: IGetRaidConfigurationRequestData, sessionID: string): void; configureOfflineRaid(request: IGetRaidConfigurationRequestData, sessionID: string): void;
/** /**
* Convert a difficulty value from pre-raid screen to a bot difficulty * Convert a difficulty value from pre-raid screen to a bot difficulty
* @param botDifficulty dropdown difficulty value * @param botDifficulty dropdown difficulty value
* @returns bot difficulty * @returns bot difficulty
*/ */
protected convertDifficultyDropdownIntoBotDifficulty(botDifficulty: string): string; protected convertDifficultyDropdownIntoBotDifficulty(botDifficulty: string): string;
/** Handle client/match/offline/end */ /** Handle client/match/local/start */
endOfflineRaid(info: IEndOfflineRaidRequestData, sessionId: string): void; startLocalRaid(sessionId: string, request: IStartLocalRaidRequestData): IStartLocalRaidResponseData;
/** /** Handle client/match/local/end */
* Did player take a COOP extract endLocalRaid(sessionId: string, request: IEndLocalRaidRequestData): void;
* @param extractName Name of extract player took
* @returns True if coop extract
*/
protected extractWasViaCoop(extractName: string): boolean;
protected sendCoopTakenFenceMessage(sessionId: string): void;
/**
* Handle when a player extracts using a coop extract - add rep to fence
* @param sessionId Session/player id
* @param pmcData Profile
* @param extractName Name of extract taken
*/
protected handleCoopExtract(sessionId: string, pmcData: IPmcData, extractName: string): void;
/**
* Was extract by car
* @param extractName name of extract
* @returns true if car extract
*/
protected extractWasViaCar(extractName: string): boolean;
/**
* Handle when a player extracts using a car - Add rep to fence
* @param extractName name of the extract used
* @param pmcData Player profile
* @param sessionId Session id
*/
protected handleCarExtract(extractName: string, pmcData: IPmcData, sessionId: string): void;
/**
* Get the fence rep gain from using a car or coop extract
* @param pmcData Profile
* @param baseGain amount gained for the first extract
* @param extractCount Number of times extract was taken
* @returns Fence standing after taking extract
*/
protected getFenceStandingAfterExtract(pmcData: IPmcData, baseGain: number, extractCount: number): number;
} }

View File

@ -7,7 +7,7 @@ import { TraderHelper } from "@spt/helpers/TraderHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { IMiniProfile } from "@spt/models/eft/launcher/IMiniProfile"; import { IMiniProfile } from "@spt/models/eft/launcher/IMiniProfile";
import { GetProfileStatusResponseData } from "@spt/models/eft/profile/GetProfileStatusResponseData"; import { IGetProfileStatusResponseData } from "@spt/models/eft/profile/GetProfileStatusResponseData";
import { IGetOtherProfileRequest } from "@spt/models/eft/profile/IGetOtherProfileRequest"; import { IGetOtherProfileRequest } from "@spt/models/eft/profile/IGetOtherProfileRequest";
import { IGetOtherProfileResponse } from "@spt/models/eft/profile/IGetOtherProfileResponse"; import { IGetOtherProfileResponse } from "@spt/models/eft/profile/IGetOtherProfileResponse";
import { IGetProfileSettingsRequest } from "@spt/models/eft/profile/IGetProfileSettingsRequest"; import { IGetProfileSettingsRequest } from "@spt/models/eft/profile/IGetProfileSettingsRequest";
@ -117,7 +117,7 @@ export declare class ProfileController {
/** /**
* Handle client/profile/status * Handle client/profile/status
*/ */
getProfileStatus(sessionId: string): GetProfileStatusResponseData; getProfileStatus(sessionId: string): IGetProfileStatusResponseData;
getOtherProfile(sessionId: string, request: IGetOtherProfileRequest): IGetOtherProfileResponse; getOtherProfile(sessionId: string, request: IGetOtherProfileRequest): IGetOtherProfileResponse;
/** /**
* Handle client/profile/settings * Handle client/profile/settings

View File

@ -5,8 +5,7 @@ import { QuestConditionHelper } from "@spt/helpers/QuestConditionHelper";
import { QuestHelper } from "@spt/helpers/QuestHelper"; import { QuestHelper } from "@spt/helpers/QuestHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper"; import { TraderHelper } from "@spt/helpers/TraderHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IQuestStatus } from "@spt/models/eft/common/tables/IBotBase"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { Item } from "@spt/models/eft/common/tables/IItem";
import { IQuest, IQuestCondition } from "@spt/models/eft/common/tables/IQuest"; import { IQuest, IQuestCondition } from "@spt/models/eft/common/tables/IQuest";
import { IRepeatableQuest } from "@spt/models/eft/common/tables/IRepeatableQuests"; import { IRepeatableQuest } from "@spt/models/eft/common/tables/IRepeatableQuests";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
@ -54,13 +53,6 @@ export declare class QuestController {
* @returns array of IQuest * @returns array of IQuest
*/ */
getClientQuests(sessionID: string): IQuest[]; getClientQuests(sessionID: string): IQuest[];
/**
* Does a provided quest have a level requirement equal to or below defined level
* @param quest Quest to check
* @param playerLevel level of player to test against quest
* @returns true if quest can be seen/accepted by player of defined level
*/
protected playerLevelFulfillsQuestRequirement(quest: IQuest, playerLevel: number): boolean;
/** /**
* Handle QuestAccept event * Handle QuestAccept event
* Handle the client accepting a quest and starting it * Handle the client accepting a quest and starting it
@ -72,6 +64,13 @@ export declare class QuestController {
* @returns Client response * @returns Client response
*/ */
acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse; acceptQuest(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
/**
*
* @param questConditions Conditions to iterate over and possibly add to profile
* @param pmcData Profile to add to
* @param questId Quest conditions came from
*/
protected addTaskConditionCountersToProfile(questConditions: IQuestCondition[], pmcData: IPmcData, questId: string): void;
/** /**
* Handle the client accepting a repeatable quest and starting it * Handle the client accepting a repeatable quest and starting it
* Send starting rewards if any to player and * Send starting rewards if any to player and
@ -101,49 +100,6 @@ export declare class QuestController {
* @returns ItemEvent client response * @returns ItemEvent client response
*/ */
completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse; completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Return a list of quests that would fail when supplied quest is completed
* @param completedQuestId quest completed id
* @returns array of IQuest objects
*/
protected getQuestsFailedByCompletingQuest(completedQuestId: string, pmcProfile: IPmcData): IQuest[];
/**
* Remove a quest entirely from a profile
* @param sessionId Player id
* @param questIdToRemove Qid of quest to remove
*/
protected removeQuestFromScavProfile(sessionId: string, questIdToRemove: string): void;
/**
* Return quests that have different statuses
* @param preQuestStatusus Quests before
* @param postQuestStatuses Quests after
* @returns QuestStatusChange array
*/
protected getQuestsWithDifferentStatuses(preQuestStatusus: IQuestStatus[], postQuestStatuses: IQuestStatus[]): IQuestStatus[] | undefined;
/**
* Send a popup to player on successful completion of a quest
* @param sessionID session id
* @param pmcData Player profile
* @param completedQuestId Completed quest id
* @param questRewards Rewards given to player
*/
protected sendSuccessDialogMessageOnQuestComplete(sessionID: string, pmcData: IPmcData, completedQuestId: string, questRewards: Item[]): void;
/**
* Look for newly available quests after completing a quest with a requirement to wait x minutes (time-locked) before being available and add data to profile
* @param pmcData Player profile to update
* @param quests Quests to look for wait conditions in
* @param completedQuestId Quest just completed
*/
protected addTimeLockedQuestsToProfile(pmcData: IPmcData, quests: IQuest[], completedQuestId: string): void;
/**
* Fail the provided quests
* Update quest in profile, otherwise add fresh quest object with failed status
* @param sessionID session id
* @param pmcData player profile
* @param questsToFail quests to fail
* @param output Client output
*/
protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[], output: IItemEventRouterResponse): void;
/** /**
* Handle QuestHandover event * Handle QuestHandover event
* @param pmcData Player profile * @param pmcData Player profile
@ -167,7 +123,7 @@ export declare class QuestController {
* @param output Response to send to user * @param output Response to send to user
* @returns IItemEventRouterResponse * @returns IItemEventRouterResponse
*/ */
protected showQuestItemHandoverMatchError(handoverQuestRequest: IHandoverQuestRequestData, itemHandedOver: Item, handoverRequirements: IQuestCondition, output: IItemEventRouterResponse): IItemEventRouterResponse; protected showQuestItemHandoverMatchError(handoverQuestRequest: IHandoverQuestRequestData, itemHandedOver: IItem, handoverRequirements: IQuestCondition, output: IItemEventRouterResponse): IItemEventRouterResponse;
/** /**
* Increment a backend counter stored value by an amount, * Increment a backend counter stored value by an amount,
* Create counter if it does not exist * Create counter if it does not exist

View File

@ -10,11 +10,11 @@ import { RagfairSellHelper } from "@spt/helpers/RagfairSellHelper";
import { RagfairSortHelper } from "@spt/helpers/RagfairSortHelper"; import { RagfairSortHelper } from "@spt/helpers/RagfairSortHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper"; import { TraderHelper } from "@spt/helpers/TraderHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITraderAssort } from "@spt/models/eft/common/tables/ITrader"; import { ITraderAssort } from "@spt/models/eft/common/tables/ITrader";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { ISptProfile } from "@spt/models/eft/profile/ISptProfile"; import { ISptProfile } from "@spt/models/eft/profile/ISptProfile";
import { IAddOfferRequestData, Requirement } from "@spt/models/eft/ragfair/IAddOfferRequestData"; import { IAddOfferRequestData, IRequirement } from "@spt/models/eft/ragfair/IAddOfferRequestData";
import { IExtendOfferRequestData } from "@spt/models/eft/ragfair/IExtendOfferRequestData"; import { IExtendOfferRequestData } from "@spt/models/eft/ragfair/IExtendOfferRequestData";
import { IGetItemPriceResult } from "@spt/models/eft/ragfair/IGetItemPriceResult"; import { IGetItemPriceResult } from "@spt/models/eft/ragfair/IGetItemPriceResult";
import { IGetMarketPriceRequestData } from "@spt/models/eft/ragfair/IGetMarketPriceRequestData"; import { IGetMarketPriceRequestData } from "@spt/models/eft/ragfair/IGetMarketPriceRequestData";
@ -137,10 +137,11 @@ export declare class RagfairController {
update(): void; update(): void;
/** /**
* Called when creating an offer on flea, fills values in top right corner * Called when creating an offer on flea, fills values in top right corner
* @param getPriceRequest * @param getPriceRequest Client request object
* @param ignoreTraderOffers Should trader offers be ignored in the calcualtion
* @returns min/avg/max values for an item based on flea offers available * @returns min/avg/max values for an item based on flea offers available
*/ */
getItemMinAvgMaxFleaPriceValues(getPriceRequest: IGetMarketPriceRequestData): IGetItemPriceResult; getItemMinAvgMaxFleaPriceValues(getPriceRequest: IGetMarketPriceRequestData, ignoreTraderOffers?: boolean): IGetItemPriceResult;
/** /**
* List item(s) on flea for sale * List item(s) on flea for sale
* @param pmcData Player profile * @param pmcData Player profile
@ -199,7 +200,7 @@ export declare class RagfairController {
* @param output IItemEventRouterResponse * @param output IItemEventRouterResponse
* @returns True if charging tax to player failed * @returns True if charging tax to player failed
*/ */
protected chargePlayerTaxFee(sessionID: string, rootItem: Item, pmcData: IPmcData, requirementsPriceInRub: number, itemStackCount: number, offerRequest: IAddOfferRequestData, output: IItemEventRouterResponse): boolean; protected chargePlayerTaxFee(sessionID: string, rootItem: IItem, pmcData: IPmcData, requirementsPriceInRub: number, itemStackCount: number, offerRequest: IAddOfferRequestData, output: IItemEventRouterResponse): boolean;
/** /**
* Is the item to be listed on the flea valid * Is the item to be listed on the flea valid
* @param offerRequest Client offer request * @param offerRequest Client offer request
@ -212,7 +213,7 @@ export declare class RagfairController {
* @param requirements * @param requirements
* @returns Rouble price * @returns Rouble price
*/ */
protected calculateRequirementsPriceInRub(requirements: Requirement[]): number; protected calculateRequirementsPriceInRub(requirements: IRequirement[]): number;
/** /**
* Using item ids from flea offer request, find corresponding items from player inventory and return as array * Using item ids from flea offer request, find corresponding items from player inventory and return as array
* @param pmcData Player profile * @param pmcData Player profile
@ -220,10 +221,10 @@ export declare class RagfairController {
* @returns Array of items from player inventory * @returns Array of items from player inventory
*/ */
protected getItemsToListOnFleaFromInventory(pmcData: IPmcData, itemIdsFromFleaOfferRequest: string[]): { protected getItemsToListOnFleaFromInventory(pmcData: IPmcData, itemIdsFromFleaOfferRequest: string[]): {
items: Item[][] | undefined; items: IItem[][] | undefined;
errorMessage: string | undefined; errorMessage: string | undefined;
}; };
createPlayerOffer(sessionId: string, requirements: Requirement[], items: Item[], sellInOnePiece: boolean): IRagfairOffer; createPlayerOffer(sessionId: string, requirements: IRequirement[], items: IItem[], sellInOnePiece: boolean): IRagfairOffer;
getAllFleaPrices(): Record<string, number>; getAllFleaPrices(): Record<string, number>;
getStaticPrices(): Record<string, number>; getStaticPrices(): Record<string, number>;
/** /**

View File

@ -4,7 +4,7 @@ import { RagfairOfferHelper } from "@spt/helpers/RagfairOfferHelper";
import { TradeHelper } from "@spt/helpers/TradeHelper"; import { TradeHelper } from "@spt/helpers/TradeHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper"; import { TraderHelper } from "@spt/helpers/TraderHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITraderBase } from "@spt/models/eft/common/tables/ITrader"; import { ITraderBase } from "@spt/models/eft/common/tables/ITrader";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { IRagfairOffer } from "@spt/models/eft/ragfair/IRagfairOffer"; import { IRagfairOffer } from "@spt/models/eft/ragfair/IRagfairOffer";
@ -101,5 +101,5 @@ export declare class TradeController {
* @param traderDetails Trader being sold to to perform buy category check against * @param traderDetails Trader being sold to to perform buy category check against
* @returns Rouble price * @returns Rouble price
*/ */
protected getPriceOfItemAndChildren(parentItemId: string, items: Item[], handbookPrices: Record<string, number>, traderDetails: ITraderBase): number; protected getPriceOfItemAndChildren(parentItemId: string, items: IItem[], handbookPrices: Record<string, number>, traderDetails: ITraderBase): number;
} }

View File

@ -3,11 +3,13 @@ import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { TraderAssortHelper } from "@spt/helpers/TraderAssortHelper"; import { TraderAssortHelper } from "@spt/helpers/TraderAssortHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper"; import { TraderHelper } from "@spt/helpers/TraderHelper";
import { ITraderAssort, ITraderBase } from "@spt/models/eft/common/tables/ITrader"; import { ITraderAssort, ITraderBase } from "@spt/models/eft/common/tables/ITrader";
import { IGetItemPricesResponse } from "@spt/models/eft/game/IGetItemPricesResponse";
import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig"; import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { DatabaseService } from "@spt/services/DatabaseService"; import { DatabaseService } from "@spt/services/DatabaseService";
import { FenceService } from "@spt/services/FenceService"; import { FenceService } from "@spt/services/FenceService";
import { RagfairPriceService } from "@spt/services/RagfairPriceService";
import { TraderAssortService } from "@spt/services/TraderAssortService"; import { TraderAssortService } from "@spt/services/TraderAssortService";
import { TraderPurchasePersisterService } from "@spt/services/TraderPurchasePersisterService"; import { TraderPurchasePersisterService } from "@spt/services/TraderPurchasePersisterService";
import { TimeUtil } from "@spt/utils/TimeUtil"; import { TimeUtil } from "@spt/utils/TimeUtil";
@ -20,13 +22,14 @@ export declare class TraderController {
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected traderAssortService: TraderAssortService; protected traderAssortService: TraderAssortService;
protected ragfairPriceService: RagfairPriceService;
protected traderPurchasePersisterService: TraderPurchasePersisterService; protected traderPurchasePersisterService: TraderPurchasePersisterService;
protected fenceService: FenceService; protected fenceService: FenceService;
protected fenceBaseAssortGenerator: FenceBaseAssortGenerator; protected fenceBaseAssortGenerator: FenceBaseAssortGenerator;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected cloner: ICloner; protected cloner: ICloner;
protected traderConfig: ITraderConfig; protected traderConfig: ITraderConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, databaseService: DatabaseService, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, traderAssortService: TraderAssortService, traderPurchasePersisterService: TraderPurchasePersisterService, fenceService: FenceService, fenceBaseAssortGenerator: FenceBaseAssortGenerator, configServer: ConfigServer, cloner: ICloner); constructor(logger: ILogger, timeUtil: TimeUtil, databaseService: DatabaseService, traderAssortHelper: TraderAssortHelper, profileHelper: ProfileHelper, traderHelper: TraderHelper, traderAssortService: TraderAssortService, ragfairPriceService: RagfairPriceService, traderPurchasePersisterService: TraderPurchasePersisterService, fenceService: FenceService, fenceBaseAssortGenerator: FenceBaseAssortGenerator, configServer: ConfigServer, cloner: ICloner);
/** /**
* Runs when onLoad event is fired * Runs when onLoad event is fired
* Iterate over traders, ensure a pristine copy of their assorts is stored in traderAssortService * Iterate over traders, ensure a pristine copy of their assorts is stored in traderAssortService
@ -58,4 +61,6 @@ export declare class TraderController {
getTrader(sessionID: string, traderID: string): ITraderBase; getTrader(sessionID: string, traderID: string): ITraderBase;
/** Handle client/trading/api/getTraderAssort */ /** Handle client/trading/api/getTraderAssort */
getAssort(sessionId: string, traderId: string): ITraderAssort; getAssort(sessionId: string, traderId: string): ITraderAssort;
/** Handle client/items/prices/TRADERID */
getItemPrices(sessionId: string, traderId: string): IGetItemPricesResponse;
} }

View File

@ -1,19 +1,23 @@
import { WeatherGenerator } from "@spt/generators/WeatherGenerator"; import { WeatherGenerator } from "@spt/generators/WeatherGenerator";
import { WeatherHelper } from "@spt/helpers/WeatherHelper";
import { IWeatherData } from "@spt/models/eft/weather/IWeatherData"; import { IWeatherData } from "@spt/models/eft/weather/IWeatherData";
import { IWeatherConfig } from "@spt/models/spt/config/IWeatherConfig"; import { IWeatherConfig } from "@spt/models/spt/config/IWeatherConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { IGetLocalWeatherResponseData } from "@spt/models/spt/weather/IGetLocalWeatherResponseData";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { RaidWeatherService } from "@spt/services/RaidWeatherService";
import { SeasonalEventService } from "@spt/services/SeasonalEventService";
export declare class WeatherController { export declare class WeatherController {
protected weatherGenerator: WeatherGenerator; protected weatherGenerator: WeatherGenerator;
protected logger: ILogger; protected logger: ILogger;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected seasonalEventService: SeasonalEventService;
protected raidWeatherService: RaidWeatherService;
protected weatherHelper: WeatherHelper;
protected weatherConfig: IWeatherConfig; protected weatherConfig: IWeatherConfig;
constructor(weatherGenerator: WeatherGenerator, logger: ILogger, configServer: ConfigServer); constructor(weatherGenerator: WeatherGenerator, logger: ILogger, configServer: ConfigServer, seasonalEventService: SeasonalEventService, raidWeatherService: RaidWeatherService, weatherHelper: WeatherHelper);
/** Handle client/weather */ /** Handle client/weather */
generate(): IWeatherData; generate(): IWeatherData;
/** /** Handle client/localGame/weather */
* Get the current in-raid time (MUST HAVE PLAYER LOGGED INTO CLIENT TO WORK) generateLocal(sesssionId: string): IGetLocalWeatherResponseData;
* @returns Date object
*/
getCurrentInRaidTime(): Date;
} }

View File

@ -1,12 +1,16 @@
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { IWishlistActionData } from "@spt/models/eft/wishlist/IWishlistActionData"; import { IAddToWishlistRequest } from "@spt/models/eft/wishlist/IAddToWishlistRequest";
import { IChangeWishlistItemCategoryRequest } from "@spt/models/eft/wishlist/IChangeWishlistItemCategoryRequest";
import { IRemoveFromWishlistRequest } from "@spt/models/eft/wishlist/IRemoveFromWishlistRequest";
import { EventOutputHolder } from "@spt/routers/EventOutputHolder"; import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
export declare class WishlistController { export declare class WishlistController {
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
constructor(eventOutputHolder: EventOutputHolder); constructor(eventOutputHolder: EventOutputHolder);
/** Handle AddToWishList */ /** Handle AddToWishList */
addToWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; addToWishList(pmcData: IPmcData, request: IAddToWishlistRequest, sessionID: string): IItemEventRouterResponse;
/** Handle RemoveFromWishList event */ /** Handle RemoveFromWishList event */
removeFromWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse; removeFromWishList(pmcData: IPmcData, request: IRemoveFromWishlistRequest, sessionID: string): IItemEventRouterResponse;
/** Handle changeWishlistItemCategory event */
changeWishlistItemCategory(pmcData: IPmcData, request: IChangeWishlistItemCategoryRequest, sessionID: string): IItemEventRouterResponse;
} }

View File

@ -1,5 +1,5 @@
import { IncomingMessage, ServerResponse } from "node:http"; import { IncomingMessage, ServerResponse } from "node:http";
export declare class Serializer { export declare class Serializer {
serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void; serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): Promise<void>;
canHandle(something: string): boolean; canHandle(something: string): boolean;
} }

View File

@ -7,16 +7,17 @@ import { ProbabilityHelper } from "@spt/helpers/ProbabilityHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper"; import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { IPreset } from "@spt/models/eft/common/IGlobals"; import { IPreset } from "@spt/models/eft/common/IGlobals";
import { Mods, ModsChances } from "@spt/models/eft/common/tables/IBotType"; import { IMods, IModsChances } from "@spt/models/eft/common/tables/IBotType";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITemplateItem, Slot } from "@spt/models/eft/common/tables/ITemplateItem"; import { ISlot, ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { ModSpawn } from "@spt/models/enums/ModSpawn"; import { ModSpawn } from "@spt/models/enums/ModSpawn";
import { IChooseRandomCompatibleModResult } from "@spt/models/spt/bots/IChooseRandomCompatibleModResult"; import { IChooseRandomCompatibleModResult } from "@spt/models/spt/bots/IChooseRandomCompatibleModResult";
import { IFilterPlateModsForSlotByLevelResult } from "@spt/models/spt/bots/IFilterPlateModsForSlotByLevelResult"; import { IFilterPlateModsForSlotByLevelResult } from "@spt/models/spt/bots/IFilterPlateModsForSlotByLevelResult";
import { IGenerateEquipmentProperties } from "@spt/models/spt/bots/IGenerateEquipmentProperties"; import { IGenerateEquipmentProperties } from "@spt/models/spt/bots/IGenerateEquipmentProperties";
import { IGenerateWeaponRequest } from "@spt/models/spt/bots/IGenerateWeaponRequest"; import { IGenerateWeaponRequest } from "@spt/models/spt/bots/IGenerateWeaponRequest";
import { IModToSpawnRequest } from "@spt/models/spt/bots/IModToSpawnRequest"; import { IModToSpawnRequest } from "@spt/models/spt/bots/IModToSpawnRequest";
import { EquipmentFilterDetails, EquipmentFilters, IBotConfig } from "@spt/models/spt/config/IBotConfig"; import { EquipmentFilters, IBotConfig, IEquipmentFilterDetails } from "@spt/models/spt/config/IBotConfig";
import { ExhaustableArray } from "@spt/models/spt/server/ExhaustableArray";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { BotEquipmentFilterService } from "@spt/services/BotEquipmentFilterService"; import { BotEquipmentFilterService } from "@spt/services/BotEquipmentFilterService";
@ -55,11 +56,12 @@ export declare class BotEquipmentModGenerator {
* @param equipment Equipment item to add mods to * @param equipment Equipment item to add mods to
* @param modPool Mod list to choose frm * @param modPool Mod list to choose frm
* @param parentId parentid of item to add mod to * @param parentId parentid of item to add mod to
* @param parentTemplate template objet of item to add mods to * @param parentTemplate Template object of item to add mods to
* @param specificBlacklist The relevant blacklist from bot.json equipment dictionary
* @param forceSpawn should this mod be forced to spawn * @param forceSpawn should this mod be forced to spawn
* @returns Item + compatible mods as an array * @returns Item + compatible mods as an array
*/ */
generateModsForEquipment(equipment: Item[], parentId: string, parentTemplate: ITemplateItem, settings: IGenerateEquipmentProperties, shouldForceSpawn?: boolean): Item[]; generateModsForEquipment(equipment: IItem[], parentId: string, parentTemplate: ITemplateItem, settings: IGenerateEquipmentProperties, specificBlacklist: IEquipmentFilterDetails, shouldForceSpawn?: boolean): IItem[];
/** /**
* Filter a bots plate pool based on its current level * Filter a bots plate pool based on its current level
* @param settings Bot equipment generation settings * @param settings Bot equipment generation settings
@ -75,7 +77,7 @@ export declare class BotEquipmentModGenerator {
* @param request Data used to generate the weapon * @param request Data used to generate the weapon
* @returns Weapon + mods array * @returns Weapon + mods array
*/ */
generateModsForWeapon(sessionId: string, request: IGenerateWeaponRequest): Item[]; generateModsForWeapon(sessionId: string, request: IGenerateWeaponRequest): IItem[];
/** /**
* Should the provided bot have its stock chance values altered to 100% * Should the provided bot have its stock chance values altered to 100%
* @param modSlot Slot to check * @param modSlot Slot to check
@ -101,7 +103,7 @@ export declare class BotEquipmentModGenerator {
* Set mod spawn chances to defined amount * Set mod spawn chances to defined amount
* @param modSpawnChances Chance dictionary to update * @param modSpawnChances Chance dictionary to update
*/ */
protected adjustSlotSpawnChances(modSpawnChances: ModsChances, modSlotsToAdjust: string[], newChancePercent: number): void; protected adjustSlotSpawnChances(modSpawnChances: IModsChances, modSlotsToAdjust: string[], newChancePercent: number): void;
/** /**
* Does the provided modSlot allow muzzle-related items * Does the provided modSlot allow muzzle-related items
* @param modSlot Slot id to check * @param modSlot Slot id to check
@ -121,16 +123,16 @@ export declare class BotEquipmentModGenerator {
* @param parentTemplate item template * @param parentTemplate item template
* @returns Slot item * @returns Slot item
*/ */
protected getModItemSlotFromDb(modSlot: string, parentTemplate: ITemplateItem): Slot; protected getModItemSlotFromDb(modSlot: string, parentTemplate: ITemplateItem): ISlot;
/** /**
* Randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot * Randomly choose if a mod should be spawned, 100% for required mods OR mod is ammo slot
* @param itemSlot slot the item sits in * @param itemSlot slot the item sits in from db
* @param modSlot slot the mod sits in * @param modSlotName Name of slot the mod sits in
* @param modSpawnChances Chances for various mod spawns * @param modSpawnChances Chances for various mod spawns
* @param botEquipConfig Various config settings for generating this type of bot * @param botEquipConfig Various config settings for generating this type of bot
* @returns ModSpawn.SPAWN when mod should be spawned, ModSpawn.DEFAULT_MOD when default mod should spawn, ModSpawn.SKIP when mod is skipped * @returns ModSpawn.SPAWN when mod should be spawned, ModSpawn.DEFAULT_MOD when default mod should spawn, ModSpawn.SKIP when mod is skipped
*/ */
protected shouldModBeSpawned(itemSlot: Slot, modSlot: string, modSpawnChances: ModsChances, botEquipConfig: EquipmentFilters): ModSpawn; protected shouldModBeSpawned(itemSlot: ISlot, modSlotName: string, modSpawnChances: IModsChances, botEquipConfig: EquipmentFilters): ModSpawn;
/** /**
* Choose a mod to fit into the desired slot * Choose a mod to fit into the desired slot
* @param request Data used to choose an appropriate mod with * @param request Data used to choose an appropriate mod with
@ -138,7 +140,15 @@ export declare class BotEquipmentModGenerator {
*/ */
protected chooseModToPutIntoSlot(request: IModToSpawnRequest): [boolean, ITemplateItem] | undefined; protected chooseModToPutIntoSlot(request: IModToSpawnRequest): [boolean, ITemplateItem] | undefined;
/** /**
* * Given the passed in array of magaizne tpls, look up the min size set in config and return only those that have that size or larger
* @param modSpawnRequest Request data
* @param modPool Pool of magazine tpls to filter
* @returns Filtered pool of magazine tpls
*/
protected getFilterdMagazinePoolByCapacity(modSpawnRequest: IModToSpawnRequest, modPool: string[]): string[];
/**
* Choose a weapon mod tpl for a given slot from a pool of choices
* Checks chosen tpl is compatible with all existing weapon items
* @param modPool Pool of mods that can be picked from * @param modPool Pool of mods that can be picked from
* @param parentSlot Slot the picked mod will have as a parent * @param parentSlot Slot the picked mod will have as a parent
* @param choiceTypeEnum How should chosen tpl be treated: DEFAULT_MOD/SPAWN/SKIP * @param choiceTypeEnum How should chosen tpl be treated: DEFAULT_MOD/SPAWN/SKIP
@ -146,22 +156,36 @@ export declare class BotEquipmentModGenerator {
* @param modSlotName Name of slot picked mod will be placed into * @param modSlotName Name of slot picked mod will be placed into
* @returns Chosen weapon details * @returns Chosen weapon details
*/ */
protected pickWeaponModTplForSlotFromPool(modPool: string[], parentSlot: Slot, choiceTypeEnum: ModSpawn, weapon: Item[], modSlotName: string): IChooseRandomCompatibleModResult; protected getCompatibleWeaponModTplForSlotFromPool(request: IModToSpawnRequest, modPool: string[], parentSlot: ISlot, choiceTypeEnum: ModSpawn, weapon: IItem[], modSlotName: string): IChooseRandomCompatibleModResult;
/**
*
* @param modPool Pool of item Tpls to choose from
* @param modSpawnType How should the slot choice be handled - forced/normal etc
* @param weapon Weapon mods at current time
* @param modSlotName Name of mod slot being filled
* @returns IChooseRandomCompatibleModResult
*/
protected getCompatibleModFromPool(modPool: string[], modSpawnType: ModSpawn, weapon: IItem[]): IChooseRandomCompatibleModResult;
protected createExhaustableArray<T>(itemsToAddToArray: T[]): ExhaustableArray<T>;
/**
* Get a list of mod tpls that are compatible with the current weapon
* @param modPool
* @param tplBlacklist Tpls that are incompatible and should not be used
* @returns string array of compatible mod tpls with weapon
*/
protected getFilteredModPool(modPool: string[], tplBlacklist: Set<string>): string[];
/** /**
* Filter mod pool down based on various criteria: * Filter mod pool down based on various criteria:
* Is slot flagged as randomisable * Is slot flagged as randomisable
* Is slot required * Is slot required
* Is slot flagged as default mod only * Is slot flagged as default mod only
* @param itemModPool Existing pool of mods to choose * @param request
* @param itemSpawnCategory How should slot be handled
* @param parentTemplate Mods parent
* @param weaponTemplate Mods root parent (weapon/equipment) * @param weaponTemplate Mods root parent (weapon/equipment)
* @param modSlot name of mod slot to choose for
* @param botEquipBlacklist A blacklist of items not allowed to be picked
* @param isRandomisableSlot Slot is flagged as a randomisable slot
* @returns Array of mod tpls * @returns Array of mod tpls
*/ */
protected getModPoolForSlot(itemModPool: Record<string, string[]>, itemSpawnCategory: ModSpawn, parentTemplate: ITemplateItem, weaponTemplate: ITemplateItem, modSlot: string, botEquipBlacklist: EquipmentFilterDetails, isRandomisableSlot: boolean): string[]; protected getModPoolForSlot(request: IModToSpawnRequest, weaponTemplate: ITemplateItem): string[];
protected getModPoolForDefaultSlot(request: IModToSpawnRequest, weaponTemplate: ITemplateItem): string[];
protected getMatchingModFromPreset(request: IModToSpawnRequest, weaponTemplate: ITemplateItem): IItem;
/** /**
* Get default preset for weapon OR get specific weapon presets for edge cases (mp5/silenced dvl) * Get default preset for weapon OR get specific weapon presets for edge cases (mp5/silenced dvl)
* @param weaponTemplate Weapons db template * @param weaponTemplate Weapons db template
@ -175,7 +199,7 @@ export declare class BotEquipmentModGenerator {
* @param modTpl Mod to check compatibility with weapon * @param modTpl Mod to check compatibility with weapon
* @returns True if incompatible * @returns True if incompatible
*/ */
protected weaponModComboIsIncompatible(weapon: Item[], modTpl: string): boolean; protected weaponModComboIsIncompatible(weapon: IItem[], modTpl: string): boolean;
/** /**
* Create a mod item with provided parameters as properties + add upd property * Create a mod item with provided parameters as properties + add upd property
* @param modId _id * @param modId _id
@ -186,7 +210,7 @@ export declare class BotEquipmentModGenerator {
* @param botRole The bots role mod is being created for * @param botRole The bots role mod is being created for
* @returns Item object * @returns Item object
*/ */
protected createModItem(modId: string, modTpl: string, parentId: string, modSlot: string, modTemplate: ITemplateItem, botRole: string): Item; protected createModItem(modId: string, modTpl: string, parentId: string, modSlot: string, modTemplate: ITemplateItem, botRole: string): IItem;
/** /**
* Get a list of containers that hold ammo * Get a list of containers that hold ammo
* e.g. mod_magazine / patron_in_weapon_000 * e.g. mod_magazine / patron_in_weapon_000
@ -201,7 +225,7 @@ export declare class BotEquipmentModGenerator {
* @param items Items to ensure picked mod is compatible with * @param items Items to ensure picked mod is compatible with
* @returns Item tpl * @returns Item tpl
*/ */
protected getRandomModTplFromItemDb(fallbackModTpl: string, parentSlot: Slot, modSlot: string, items: Item[]): string | undefined; protected getRandomModTplFromItemDb(fallbackModTpl: string, parentSlot: ISlot, modSlot: string, items: IItem[]): string | undefined;
/** /**
* Check if mod exists in db + is for a required slot * Check if mod exists in db + is for a required slot
* @param modToAdd Db template of mod to check * @param modToAdd Db template of mod to check
@ -211,7 +235,7 @@ export declare class BotEquipmentModGenerator {
* @param botRole Bots wildspawntype (assault/pmcBot/exUsec etc) * @param botRole Bots wildspawntype (assault/pmcBot/exUsec etc)
* @returns True if valid for slot * @returns True if valid for slot
*/ */
protected isModValidForSlot(modToAdd: [boolean, ITemplateItem], slotAddedToTemplate: Slot, modSlot: string, parentTemplate: ITemplateItem, botRole: string): boolean; protected isModValidForSlot(modToAdd: [boolean, ITemplateItem], slotAddedToTemplate: ISlot, modSlot: string, parentTemplate: ITemplateItem, botRole: string): boolean;
/** /**
* Find mod tpls of a provided type and add to modPool * Find mod tpls of a provided type and add to modPool
* @param desiredSlotName Slot to look up and add we are adding tpls for (e.g mod_scope) * @param desiredSlotName Slot to look up and add we are adding tpls for (e.g mod_scope)
@ -219,7 +243,7 @@ export declare class BotEquipmentModGenerator {
* @param modPool Pool of mods we are adding to * @param modPool Pool of mods we are adding to
* @param botEquipBlacklist A blacklist of items that cannot be picked * @param botEquipBlacklist A blacklist of items that cannot be picked
*/ */
protected addCompatibleModsForProvidedMod(desiredSlotName: string, modTemplate: ITemplateItem, modPool: Mods, botEquipBlacklist: EquipmentFilterDetails): void; protected addCompatibleModsForProvidedMod(desiredSlotName: string, modTemplate: ITemplateItem, modPool: IMods, botEquipBlacklist: IEquipmentFilterDetails): void;
/** /**
* Get the possible items that fit a slot * Get the possible items that fit a slot
* @param parentItemId item tpl to get compatible items for * @param parentItemId item tpl to get compatible items for
@ -227,7 +251,7 @@ export declare class BotEquipmentModGenerator {
* @param botEquipBlacklist Equipment that should not be picked * @param botEquipBlacklist Equipment that should not be picked
* @returns Array of compatible items for that slot * @returns Array of compatible items for that slot
*/ */
protected getDynamicModPool(parentItemId: string, modSlot: string, botEquipBlacklist: EquipmentFilterDetails): string[]; protected getDynamicModPool(parentItemId: string, modSlot: string, botEquipBlacklist: IEquipmentFilterDetails): string[];
/** /**
* Take a list of tpls and filter out blacklisted values using itemFilterService + botEquipmentBlacklist * Take a list of tpls and filter out blacklisted values using itemFilterService + botEquipmentBlacklist
* @param allowedMods Base mods to filter * @param allowedMods Base mods to filter
@ -235,7 +259,7 @@ export declare class BotEquipmentModGenerator {
* @param modSlot Slot mods belong to * @param modSlot Slot mods belong to
* @returns Filtered array of mod tpls * @returns Filtered array of mod tpls
*/ */
protected filterWeaponModsByBlacklist(allowedMods: string[], botEquipBlacklist: EquipmentFilterDetails, modSlot: string): string[]; protected filterModsByBlacklist(allowedMods: string[], botEquipBlacklist: IEquipmentFilterDetails, modSlot: string): string[];
/** /**
* With the shotgun revolver (60db29ce99594040e04c4a27) 12.12 introduced CylinderMagazines. * With the shotgun revolver (60db29ce99594040e04c4a27) 12.12 introduced CylinderMagazines.
* Those magazines (e.g. 60dc519adf4c47305f6d410d) have a "Cartridges" entry with a _max_count=0. * Those magazines (e.g. 60dc519adf4c47305f6d410d) have a "Cartridges" entry with a _max_count=0.
@ -246,7 +270,7 @@ export declare class BotEquipmentModGenerator {
* @param cylinderMagParentId The CylinderMagazine's UID * @param cylinderMagParentId The CylinderMagazine's UID
* @param cylinderMagTemplate The CylinderMagazine's template * @param cylinderMagTemplate The CylinderMagazine's template
*/ */
protected fillCamora(items: Item[], modPool: Mods, cylinderMagParentId: string, cylinderMagTemplate: ITemplateItem): void; protected fillCamora(items: IItem[], modPool: IMods, cylinderMagParentId: string, cylinderMagTemplate: ITemplateItem): void;
/** /**
* Take a record of camoras and merge the compatible shells into one array * Take a record of camoras and merge the compatible shells into one array
* @param camorasWithShells Dictionary of camoras we want to merge into one array * @param camorasWithShells Dictionary of camoras we want to merge into one array
@ -262,5 +286,5 @@ export declare class BotEquipmentModGenerator {
* @param botWeaponSightWhitelist Whitelist of scope types by weapon base type * @param botWeaponSightWhitelist Whitelist of scope types by weapon base type
* @returns Array of scope tpls that have been filtered to just ones allowed for that weapon type * @returns Array of scope tpls that have been filtered to just ones allowed for that weapon type
*/ */
protected filterSightsByWeaponType(weapon: Item, scopes: string[], botWeaponSightWhitelist: Record<string, string[]>): string[]; protected filterSightsByWeaponType(weapon: IItem, scopes: string[], botWeaponSightWhitelist: Record<string, string[]>): string[];
} }

View File

@ -1,20 +1,21 @@
import { BotInventoryGenerator } from "@spt/generators/BotInventoryGenerator"; import { BotInventoryGenerator } from "@spt/generators/BotInventoryGenerator";
import { BotLevelGenerator } from "@spt/generators/BotLevelGenerator"; import { BotLevelGenerator } from "@spt/generators/BotLevelGenerator";
import { BotDifficultyHelper } from "@spt/helpers/BotDifficultyHelper"; import { BotGeneratorHelper } from "@spt/helpers/BotGeneratorHelper";
import { BotHelper } from "@spt/helpers/BotHelper"; import { BotHelper } from "@spt/helpers/BotHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper"; import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { IBaseJsonSkills, IBaseSkill, IBotBase, Info, Health as PmcHealth, Skills as botSkills } from "@spt/models/eft/common/tables/IBotBase"; import { MinMax } from "@spt/models/common/MinMax";
import { Appearance, Health, IBotType, Inventory } from "@spt/models/eft/common/tables/IBotType"; import { IBaseJsonSkills, IBaseSkill, IBotBase, IInfo, IHealth as PmcHealth, ISkills as botSkills } from "@spt/models/eft/common/tables/IBotBase";
import { BotGenerationDetails } from "@spt/models/spt/bots/BotGenerationDetails"; import { IAppearance, IBodyPart, IBotType, IHealth, IInventory } from "@spt/models/eft/common/tables/IBotType";
import { IBotGenerationDetails } from "@spt/models/spt/bots/BotGenerationDetails";
import { IBotConfig } from "@spt/models/spt/config/IBotConfig"; import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { BotEquipmentFilterService } from "@spt/services/BotEquipmentFilterService"; import { BotEquipmentFilterService } from "@spt/services/BotEquipmentFilterService";
import { BotNameService } from "@spt/services/BotNameService";
import { DatabaseService } from "@spt/services/DatabaseService"; import { DatabaseService } from "@spt/services/DatabaseService";
import { ItemFilterService } from "@spt/services/ItemFilterService"; import { ItemFilterService } from "@spt/services/ItemFilterService";
import { LocalisationService } from "@spt/services/LocalisationService";
import { SeasonalEventService } from "@spt/services/SeasonalEventService"; import { SeasonalEventService } from "@spt/services/SeasonalEventService";
import { HashUtil } from "@spt/utils/HashUtil"; import { HashUtil } from "@spt/utils/HashUtil";
import { RandomUtil } from "@spt/utils/RandomUtil"; import { RandomUtil } from "@spt/utils/RandomUtil";
@ -32,15 +33,15 @@ export declare class BotGenerator {
protected botEquipmentFilterService: BotEquipmentFilterService; protected botEquipmentFilterService: BotEquipmentFilterService;
protected weightedRandomHelper: WeightedRandomHelper; protected weightedRandomHelper: WeightedRandomHelper;
protected botHelper: BotHelper; protected botHelper: BotHelper;
protected botDifficultyHelper: BotDifficultyHelper; protected botGeneratorHelper: BotGeneratorHelper;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected localisationService: LocalisationService;
protected itemFilterService: ItemFilterService; protected itemFilterService: ItemFilterService;
protected botNameService: BotNameService;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected cloner: ICloner; protected cloner: ICloner;
protected botConfig: IBotConfig; protected botConfig: IBotConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, profileHelper: ProfileHelper, databaseService: DatabaseService, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, localisationService: LocalisationService, itemFilterService: ItemFilterService, configServer: ConfigServer, cloner: ICloner); constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, profileHelper: ProfileHelper, databaseService: DatabaseService, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botGeneratorHelper: BotGeneratorHelper, seasonalEventService: SeasonalEventService, itemFilterService: ItemFilterService, botNameService: BotNameService, configServer: ConfigServer, cloner: ICloner);
/** /**
* Generate a player scav bot object * Generate a player scav bot object
* @param role e.g. assault / pmcbot * @param role e.g. assault / pmcbot
@ -50,12 +51,12 @@ export declare class BotGenerator {
*/ */
generatePlayerScav(sessionId: string, role: string, difficulty: string, botTemplate: IBotType): IBotBase; generatePlayerScav(sessionId: string, role: string, difficulty: string, botTemplate: IBotType): IBotBase;
/** /**
* Create 1 bots of the type/side/difficulty defined in botGenerationDetails * Create 1 bot of the type/side/difficulty defined in botGenerationDetails
* @param sessionId Session id * @param sessionId Session id
* @param botGenerationDetails details on how to generate bots * @param botGenerationDetails details on how to generate bots
* @returns constructed bot * @returns constructed bot
*/ */
prepareAndGenerateBot(sessionId: string, botGenerationDetails: BotGenerationDetails): IBotBase; prepareAndGenerateBot(sessionId: string, botGenerationDetails: IBotGenerationDetails): IBotBase;
/** /**
* Get a clone of the default bot base object and adjust its role/side/difficulty values * Get a clone of the default bot base object and adjust its role/side/difficulty values
* @param botRole Role bot should have * @param botRole Role bot should have
@ -77,31 +78,50 @@ export declare class BotGenerator {
* @param botGenerationDetails details on how to generate the bot * @param botGenerationDetails details on how to generate the bot
* @returns IBotBase object * @returns IBotBase object
*/ */
protected generateBot(sessionId: string, bot: IBotBase, botJsonTemplate: IBotType, botGenerationDetails: BotGenerationDetails): IBotBase; protected generateBot(sessionId: string, bot: IBotBase, botJsonTemplate: IBotType, botGenerationDetails: IBotGenerationDetails): IBotBase;
/**
* Get exp for kill by bot difficulty
* @param experience Dict of difficulties and experience
* @param botDifficulty the killed bots difficulty
* @param role Role of bot (optional, used for error logging)
* @returns Experience for kill
*/
protected getExperienceRewardForKillByDifficulty(experience: Record<string, MinMax>, botDifficulty: string, role: string): number;
/**
* Get the standing value change when player kills a bot
* @param standingForKill Dictionary of standing values keyed by bot difficulty
* @param botDifficulty Difficulty of bot to look up
* @param role Role of bot (optional, used for error logging)
* @returns Standing change value
*/
protected getStandingChangeForKillByDifficulty(standingForKill: Record<string, number>, botDifficulty: string, role: string): number;
/**
* Get the agressor bonus value when player kills a bot
* @param standingForKill Dictionary of standing values keyed by bot difficulty
* @param botDifficulty Difficulty of bot to look up
* @param role Role of bot (optional, used for error logging)
* @returns Standing change value
*/
protected getAgressorBonusByDifficulty(aggressorBonus: Record<string, number>, botDifficulty: string, role: string): number;
/**
* Set weighting of flagged equipment to 0
* @param botJsonTemplate Bot data to adjust
* @param botGenerationDetails Generation details of bot
*/
protected filterBlacklistedGear(botJsonTemplate: IBotType, botGenerationDetails: IBotGenerationDetails): void;
protected addAdditionalPocketLootWeightsForUnheardBot(botJsonTemplate: IBotType): void; protected addAdditionalPocketLootWeightsForUnheardBot(botJsonTemplate: IBotType): void;
/** /**
* Remove items from item.json/lootableItemBlacklist from bots inventory * Remove items from item.json/lootableItemBlacklist from bots inventory
* @param botInventory Bot to filter * @param botInventory Bot to filter
*/ */
protected removeBlacklistedLootFromBotTemplate(botInventory: Inventory): void; protected removeBlacklistedLootFromBotTemplate(botInventory: IInventory): void;
/** /**
* Choose various appearance settings for a bot using weights: head/body/feet/hands * Choose various appearance settings for a bot using weights: head/body/feet/hands
* @param bot Bot to adjust * @param bot Bot to adjust
* @param appearance Appearance settings to choose from * @param appearance Appearance settings to choose from
* @param botGenerationDetails Generation details * @param botGenerationDetails Generation details
*/ */
protected setBotAppearance(bot: IBotBase, appearance: Appearance, botGenerationDetails: BotGenerationDetails): void; protected setBotAppearance(bot: IBotBase, appearance: IAppearance, botGenerationDetails: IBotGenerationDetails): void;
/**
* Create a bot nickname
* @param botJsonTemplate x.json from database
* @param botGenerationDetails
* @param botRole role of bot e.g. assault
* @param sessionId OPTIONAL: profile session id
* @returns Nickname for bot
*/
protected generateBotNickname(botJsonTemplate: IBotType, botGenerationDetails: BotGenerationDetails, botRole: string, sessionId?: string): string;
protected shouldSimulatePlayerScavName(botRole: string, isPlayerScav: boolean): boolean;
protected addPlayerScavNameSimulationSuffix(nickname: string): string;
/** /**
* Log the number of PMCs generated to the debug console * Log the number of PMCs generated to the debug console
* @param output Generated bot array, ready to send to client * @param output Generated bot array, ready to send to client
@ -113,7 +133,13 @@ export declare class BotGenerator {
* @param playerScav Is a pscav bot being generated * @param playerScav Is a pscav bot being generated
* @returns PmcHealth object * @returns PmcHealth object
*/ */
protected generateHealth(healthObj: Health, playerScav?: boolean): PmcHealth; protected generateHealth(healthObj: IHealth, playerScav?: boolean): PmcHealth;
/**
* Sum up body parts max hp values, return the bodypart collection with lowest value
* @param bodies Body parts to sum up
* @returns Lowest hp collection
*/
protected getLowestHpBody(bodies: IBodyPart[]): IBodyPart | undefined;
/** /**
* Get a bots skills with randomsied progress value between the min and max values * Get a bots skills with randomsied progress value between the min and max values
* @param botSkills Skills that should have their progress value randomised * @param botSkills Skills that should have their progress value randomised
@ -146,7 +172,7 @@ export declare class BotGenerator {
* @param botInfo bot info object to update * @param botInfo bot info object to update
* @returns Chosen game version * @returns Chosen game version
*/ */
protected setRandomisedGameVersionAndCategory(botInfo: Info): string; protected setRandomisedGameVersionAndCategory(botInfo: IInfo): string;
/** /**
* Add a side-specific (usec/bear) dogtag item to a bots inventory * Add a side-specific (usec/bear) dogtag item to a bots inventory
* @param bot bot to add dogtag to * @param bot bot to add dogtag to

View File

@ -1,17 +1,22 @@
import { ApplicationContext } from "@spt/context/ApplicationContext";
import { BotEquipmentModGenerator } from "@spt/generators/BotEquipmentModGenerator"; import { BotEquipmentModGenerator } from "@spt/generators/BotEquipmentModGenerator";
import { BotLootGenerator } from "@spt/generators/BotLootGenerator"; import { BotLootGenerator } from "@spt/generators/BotLootGenerator";
import { BotWeaponGenerator } from "@spt/generators/BotWeaponGenerator"; import { BotWeaponGenerator } from "@spt/generators/BotWeaponGenerator";
import { BotGeneratorHelper } from "@spt/helpers/BotGeneratorHelper"; import { BotGeneratorHelper } from "@spt/helpers/BotGeneratorHelper";
import { BotHelper } from "@spt/helpers/BotHelper"; import { BotHelper } from "@spt/helpers/BotHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { WeatherHelper } from "@spt/helpers/WeatherHelper";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper"; import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { Inventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBase"; import { IInventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBase";
import { Chances, Equipment, Generation, IBotType, Inventory } from "@spt/models/eft/common/tables/IBotType"; import { IBotType, IChances, IEquipment, IGeneration, IInventory } from "@spt/models/eft/common/tables/IBotType";
import { IGetRaidConfigurationRequestData } from "@spt/models/eft/match/IGetRaidConfigurationRequestData";
import { EquipmentSlots } from "@spt/models/enums/EquipmentSlots"; import { EquipmentSlots } from "@spt/models/enums/EquipmentSlots";
import { IGenerateEquipmentProperties } from "@spt/models/spt/bots/IGenerateEquipmentProperties"; import { IGenerateEquipmentProperties } from "@spt/models/spt/bots/IGenerateEquipmentProperties";
import { EquipmentFilterDetails, IBotConfig } from "@spt/models/spt/config/IBotConfig"; import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { BotEquipmentFilterService } from "@spt/services/BotEquipmentFilterService";
import { BotEquipmentModPoolService } from "@spt/services/BotEquipmentModPoolService"; import { BotEquipmentModPoolService } from "@spt/services/BotEquipmentModPoolService";
import { DatabaseService } from "@spt/services/DatabaseService"; import { DatabaseService } from "@spt/services/DatabaseService";
import { LocalisationService } from "@spt/services/LocalisationService"; import { LocalisationService } from "@spt/services/LocalisationService";
@ -22,18 +27,22 @@ export declare class BotInventoryGenerator {
protected hashUtil: HashUtil; protected hashUtil: HashUtil;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected databaseService: DatabaseService; protected databaseService: DatabaseService;
protected applicationContext: ApplicationContext;
protected botWeaponGenerator: BotWeaponGenerator; protected botWeaponGenerator: BotWeaponGenerator;
protected botLootGenerator: BotLootGenerator; protected botLootGenerator: BotLootGenerator;
protected botGeneratorHelper: BotGeneratorHelper; protected botGeneratorHelper: BotGeneratorHelper;
protected profileHelper: ProfileHelper;
protected botHelper: BotHelper; protected botHelper: BotHelper;
protected weightedRandomHelper: WeightedRandomHelper; protected weightedRandomHelper: WeightedRandomHelper;
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected weatherHelper: WeatherHelper;
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected botEquipmentFilterService: BotEquipmentFilterService;
protected botEquipmentModPoolService: BotEquipmentModPoolService; protected botEquipmentModPoolService: BotEquipmentModPoolService;
protected botEquipmentModGenerator: BotEquipmentModGenerator; protected botEquipmentModGenerator: BotEquipmentModGenerator;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected botConfig: IBotConfig; protected botConfig: IBotConfig;
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseService: DatabaseService, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, botHelper: BotHelper, weightedRandomHelper: WeightedRandomHelper, itemHelper: ItemHelper, localisationService: LocalisationService, botEquipmentModPoolService: BotEquipmentModPoolService, botEquipmentModGenerator: BotEquipmentModGenerator, configServer: ConfigServer); constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, databaseService: DatabaseService, applicationContext: ApplicationContext, botWeaponGenerator: BotWeaponGenerator, botLootGenerator: BotLootGenerator, botGeneratorHelper: BotGeneratorHelper, profileHelper: ProfileHelper, botHelper: BotHelper, weightedRandomHelper: WeightedRandomHelper, itemHelper: ItemHelper, weatherHelper: WeatherHelper, localisationService: LocalisationService, botEquipmentFilterService: BotEquipmentFilterService, botEquipmentModPoolService: BotEquipmentModPoolService, botEquipmentModGenerator: BotEquipmentModGenerator, configServer: ConfigServer);
/** /**
* Add equipment/weapons/loot to bot * Add equipment/weapons/loot to bot
* @param sessionId Session id * @param sessionId Session id
@ -52,6 +61,7 @@ export declare class BotInventoryGenerator {
protected generateInventoryBase(): PmcInventory; protected generateInventoryBase(): PmcInventory;
/** /**
* Add equipment to a bot * Add equipment to a bot
* @param sessionId Session id
* @param templateInventory bot/x.json data from db * @param templateInventory bot/x.json data from db
* @param wornItemChances Chances items will be added to bot * @param wornItemChances Chances items will be added to bot
* @param botRole Role bot has (assault/pmcBot) * @param botRole Role bot has (assault/pmcBot)
@ -59,19 +69,23 @@ export declare class BotInventoryGenerator {
* @param botLevel Level of bot * @param botLevel Level of bot
* @param chosenGameVersion Game version for bot, only really applies for PMCs * @param chosenGameVersion Game version for bot, only really applies for PMCs
*/ */
protected generateAndAddEquipmentToBot(templateInventory: Inventory, wornItemChances: Chances, botRole: string, botInventory: PmcInventory, botLevel: number, chosenGameVersion: string): void; protected generateAndAddEquipmentToBot(sessionId: string, templateInventory: IInventory, wornItemChances: IChances, botRole: string, botInventory: PmcInventory, botLevel: number, chosenGameVersion: string, raidConfig: IGetRaidConfigurationRequestData): void;
/** /**
* Remove non-armored rigs from parameter data * Remove non-armored rigs from parameter data
* @param templateEquipment Equpiment to filter TacticalVest of * @param templateEquipment Equpiment to filter TacticalVest of
* @param botRole Role of bot vests are being filtered for
*/ */
protected filterRigsToThoseWithProtection(templateEquipment: Equipment): void; protected filterRigsToThoseWithProtection(templateEquipment: IEquipment, botRole: string): void;
/** /**
* Remove armored rigs from parameter data * Remove armored rigs from parameter data
* @param templateEquipment Equpiment to filter TacticalVest of * @param templateEquipment Equpiment to filter TacticalVest of
* @param botRole Role of bot vests are being filtered for
* @param allowEmptyResult Should the function return all rigs when 0 unarmored are found
*/ */
protected filterRigsToThoseWithoutProtection(templateEquipment: Equipment): void; protected filterRigsToThoseWithoutProtection(templateEquipment: IEquipment, botRole: string, allowEmptyResult?: boolean): void;
/** /**
* Add a piece of equipment with mods to inventory from the provided pools * Add a piece of equipment with mods to inventory from the provided pools
* @param sessionId Session id
* @param settings Values to adjust how item is chosen and added to bot * @param settings Values to adjust how item is chosen and added to bot
* @returns true when item added * @returns true when item added
*/ */
@ -79,10 +93,10 @@ export declare class BotInventoryGenerator {
/** /**
* Get all possible mods for item and filter down based on equipment blacklist from bot.json config * Get all possible mods for item and filter down based on equipment blacklist from bot.json config
* @param itemTpl Item mod pool is being retrieved and filtered * @param itemTpl Item mod pool is being retrieved and filtered
* @param equipmentBlacklist blacklist to filter mod pool with * @param equipmentBlacklist Blacklist to filter mod pool with
* @returns Filtered pool of mods * @returns Filtered pool of mods
*/ */
protected getFilteredDynamicModsForItem(itemTpl: string, equipmentBlacklist: EquipmentFilterDetails[]): Record<string, string[]>; protected getFilteredDynamicModsForItem(itemTpl: string, equipmentBlacklist: Record<string, string[]>): Record<string, string[]>;
/** /**
* Work out what weapons bot should have equipped and add them to bot inventory * Work out what weapons bot should have equipped and add them to bot inventory
* @param templateInventory bot/x.json data from db * @param templateInventory bot/x.json data from db
@ -94,13 +108,13 @@ export declare class BotInventoryGenerator {
* @param itemGenerationLimitsMinMax Limits for items the bot can have * @param itemGenerationLimitsMinMax Limits for items the bot can have
* @param botLevel level of bot having weapon generated * @param botLevel level of bot having weapon generated
*/ */
protected generateAndAddWeaponsToBot(templateInventory: Inventory, equipmentChances: Chances, sessionId: string, botInventory: PmcInventory, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: Generation, botLevel: number): void; protected generateAndAddWeaponsToBot(templateInventory: IInventory, equipmentChances: IChances, sessionId: string, botInventory: PmcInventory, botRole: string, isPmc: boolean, itemGenerationLimitsMinMax: IGeneration, botLevel: number): void;
/** /**
* Calculate if the bot should have weapons in Primary/Secondary/Holster slots * Calculate if the bot should have weapons in Primary/Secondary/Holster slots
* @param equipmentChances Chances bot has certain equipment * @param equipmentChances Chances bot has certain equipment
* @returns What slots bot should have weapons generated for * @returns What slots bot should have weapons generated for
*/ */
protected getDesiredWeaponsForBot(equipmentChances: Chances): { protected getDesiredWeaponsForBot(equipmentChances: IChances): {
slot: EquipmentSlots; slot: EquipmentSlots;
shouldSpawn: boolean; shouldSpawn: boolean;
}[]; }[];
@ -118,5 +132,5 @@ export declare class BotInventoryGenerator {
protected addWeaponAndMagazinesToInventory(sessionId: string, weaponSlot: { protected addWeaponAndMagazinesToInventory(sessionId: string, weaponSlot: {
slot: EquipmentSlots; slot: EquipmentSlots;
shouldSpawn: boolean; shouldSpawn: boolean;
}, templateInventory: Inventory, botInventory: PmcInventory, equipmentChances: Chances, botRole: string, isPmc: boolean, itemGenerationWeights: Generation, botLevel: number): void; }, templateInventory: IInventory, botInventory: PmcInventory, equipmentChances: IChances, botRole: string, isPmc: boolean, itemGenerationWeights: IGeneration, botLevel: number): void;
} }

View File

@ -1,7 +1,7 @@
import { MinMax } from "@spt/models/common/MinMax"; import { MinMax } from "@spt/models/common/MinMax";
import { IRandomisedBotLevelResult } from "@spt/models/eft/bot/IRandomisedBotLevelResult"; import { IRandomisedBotLevelResult } from "@spt/models/eft/bot/IRandomisedBotLevelResult";
import { IBotBase } from "@spt/models/eft/common/tables/IBotBase"; import { IBotBase } from "@spt/models/eft/common/tables/IBotBase";
import { BotGenerationDetails } from "@spt/models/spt/bots/BotGenerationDetails"; import { IBotGenerationDetails } from "@spt/models/spt/bots/BotGenerationDetails";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { DatabaseService } from "@spt/services/DatabaseService"; import { DatabaseService } from "@spt/services/DatabaseService";
import { MathUtil } from "@spt/utils/MathUtil"; import { MathUtil } from "@spt/utils/MathUtil";
@ -19,7 +19,7 @@ export declare class BotLevelGenerator {
* @param bot Bot the level is being generated for * @param bot Bot the level is being generated for
* @returns IRandomisedBotLevelResult object * @returns IRandomisedBotLevelResult object
*/ */
generateBotLevel(levelDetails: MinMax, botGenerationDetails: BotGenerationDetails, bot: IBotBase): IRandomisedBotLevelResult; generateBotLevel(levelDetails: MinMax, botGenerationDetails: IBotGenerationDetails, bot: IBotBase): IRandomisedBotLevelResult;
protected chooseBotLevel(min: number, max: number, shift: number, number: number): number; protected chooseBotLevel(min: number, max: number, shift: number, number: number): number;
/** /**
* Return the min and max bot level based on a relative delta from the PMC level * Return the min and max bot level based on a relative delta from the PMC level
@ -28,5 +28,5 @@ export declare class BotLevelGenerator {
* @param maxlevel Max level allowed * @param maxlevel Max level allowed
* @returns A MinMax of the lowest and highest level to generate the bots * @returns A MinMax of the lowest and highest level to generate the bots
*/ */
protected getRelativeBotLevelRange(botGenerationDetails: BotGenerationDetails, levelDetails: MinMax, maxAvailableLevel: number): MinMax; protected getRelativeBotLevelRange(botGenerationDetails: IBotGenerationDetails, levelDetails: MinMax, maxAvailableLevel: number): MinMax;
} }

View File

@ -5,9 +5,9 @@ import { HandbookHelper } from "@spt/helpers/HandbookHelper";
import { InventoryHelper } from "@spt/helpers/InventoryHelper"; import { InventoryHelper } from "@spt/helpers/InventoryHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper"; import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { Inventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBase"; import { IInventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBase";
import { IBotType, Inventory, ModsChances } from "@spt/models/eft/common/tables/IBotType"; import { IBotType, IInventory, IModsChances } from "@spt/models/eft/common/tables/IBotType";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { EquipmentSlots } from "@spt/models/enums/EquipmentSlots"; import { EquipmentSlots } from "@spt/models/enums/EquipmentSlots";
import { IItemSpawnLimitSettings } from "@spt/models/spt/bots/IItemSpawnLimitSettings"; import { IItemSpawnLimitSettings } from "@spt/models/spt/bots/IItemSpawnLimitSettings";
@ -51,6 +51,14 @@ export declare class BotLootGenerator {
* @param botLevel Level of bot * @param botLevel Level of bot
*/ */
generateLoot(sessionId: string, botJsonTemplate: IBotType, isPmc: boolean, botRole: string, botInventory: PmcInventory, botLevel: number): void; generateLoot(sessionId: string, botJsonTemplate: IBotType, isPmc: boolean, botRole: string, botInventory: PmcInventory, botLevel: number): void;
/**
* Gets the rouble cost total for loot in a bots backpack by the bots levl
* Will return 0 for non PMCs
* @param botLevel Bots level
* @param isPmc Is the bot a PMC
* @returns number
*/
protected getBackpackRoubleTotalByLevel(botLevel: number, isPmc: boolean): number;
/** /**
* Get an array of the containers a bot has on them (pockets/backpack/vest) * Get an array of the containers a bot has on them (pockets/backpack/vest)
* @param botInventory Bot to check * @param botInventory Bot to check
@ -63,14 +71,6 @@ export declare class BotLootGenerator {
* @param botRole Role of bot (pmcBEAR/pmcUSEC) * @param botRole Role of bot (pmcBEAR/pmcUSEC)
*/ */
protected addForcedMedicalItemsToPmcSecure(botInventory: PmcInventory, botRole: string): void; protected addForcedMedicalItemsToPmcSecure(botInventory: PmcInventory, botRole: string): void;
/**
* Get a biased random number
* @param min Smallest size
* @param max Biggest size
* @param nValue Value to bias choice
* @returns Chosen number
*/
protected getRandomisedCount(min: number, max: number, nValue: number): number;
/** /**
* Take random items from a pool and add to an inventory until totalItemCount or totalValueLimit or space limit is reached * Take random items from a pool and add to an inventory until totalItemCount or totalValueLimit or space limit is reached
* @param pool Pool of items to pick from with weight * @param pool Pool of items to pick from with weight
@ -83,7 +83,7 @@ export declare class BotLootGenerator {
* @param isPmc Is bot being generated for a pmc * @param isPmc Is bot being generated for a pmc
*/ */
protected addLootFromPool(pool: Record<string, number>, equipmentSlots: string[], totalItemCount: number, inventoryToAddItemsTo: PmcInventory, botRole: string, itemSpawnLimits?: IItemSpawnLimitSettings, totalValueLimitRub?: number, isPmc?: boolean, containersIdFull?: Set<string>): void; protected addLootFromPool(pool: Record<string, number>, equipmentSlots: string[], totalItemCount: number, inventoryToAddItemsTo: PmcInventory, botRole: string, itemSpawnLimits?: IItemSpawnLimitSettings, totalValueLimitRub?: number, isPmc?: boolean, containersIdFull?: Set<string>): void;
protected createWalletLoot(walletId: string): Item[][]; protected createWalletLoot(walletId: string): IItem[][];
/** /**
* Some items need child items to function, add them to the itemToAddChildrenTo array * Some items need child items to function, add them to the itemToAddChildrenTo array
* @param itemToAddTemplate Db template of item to check * @param itemToAddTemplate Db template of item to check
@ -91,7 +91,7 @@ export declare class BotLootGenerator {
* @param isPmc Is the item being generated for a pmc (affects money/ammo stack sizes) * @param isPmc Is the item being generated for a pmc (affects money/ammo stack sizes)
* @param botRole role bot has that owns item * @param botRole role bot has that owns item
*/ */
protected addRequiredChildItemsToParent(itemToAddTemplate: ITemplateItem, itemToAddChildrenTo: Item[], isPmc: boolean, botRole: string): void; protected addRequiredChildItemsToParent(itemToAddTemplate: ITemplateItem, itemToAddChildrenTo: IItem[], isPmc: boolean, botRole: string): void;
/** /**
* Add generated weapons to inventory as loot * Add generated weapons to inventory as loot
* @param botInventory inventory to add preset to * @param botInventory inventory to add preset to
@ -101,7 +101,7 @@ export declare class BotLootGenerator {
* @param botRole bots role .e.g. pmcBot * @param botRole bots role .e.g. pmcBot
* @param isPmc are we generating for a pmc * @param isPmc are we generating for a pmc
*/ */
protected addLooseWeaponsToInventorySlot(sessionId: string, botInventory: PmcInventory, equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, botRole: string, isPmc: boolean, botLevel: number, containersIdFull?: Set<string>): void; protected addLooseWeaponsToInventorySlot(sessionId: string, botInventory: PmcInventory, equipmentSlot: string, templateInventory: IInventory, modChances: IModsChances, botRole: string, isPmc: boolean, botLevel: number, containersIdFull?: Set<string>): void;
/** /**
* Hydrate item limit array to contain items that have a limit for a specific bot type * Hydrate item limit array to contain items that have a limit for a specific bot type
* All values are set to 0 * All values are set to 0
@ -123,14 +123,14 @@ export declare class BotLootGenerator {
* @param itemTemplate item details from db * @param itemTemplate item details from db
* @param moneyItem Money item to randomise * @param moneyItem Money item to randomise
*/ */
protected randomiseMoneyStackSize(botRole: string, itemTemplate: ITemplateItem, moneyItem: Item): void; protected randomiseMoneyStackSize(botRole: string, itemTemplate: ITemplateItem, moneyItem: IItem): void;
/** /**
* Randomise the size of an ammo stack * Randomise the size of an ammo stack
* @param isPmc Is ammo on a PMC bot * @param isPmc Is ammo on a PMC bot
* @param itemTemplate item details from db * @param itemTemplate item details from db
* @param ammoItem Ammo item to randomise * @param ammoItem Ammo item to randomise
*/ */
protected randomiseAmmoStackSize(isPmc: boolean, itemTemplate: ITemplateItem, ammoItem: Item): void; protected randomiseAmmoStackSize(isPmc: boolean, itemTemplate: ITemplateItem, ammoItem: IItem): void;
/** /**
* Get spawn limits for a specific bot type from bot.json config * Get spawn limits for a specific bot type from bot.json config
* If no limit found for a non pmc bot, fall back to defaults * If no limit found for a non pmc bot, fall back to defaults

View File

@ -4,11 +4,11 @@ import { BotGeneratorHelper } from "@spt/helpers/BotGeneratorHelper";
import { BotWeaponGeneratorHelper } from "@spt/helpers/BotWeaponGeneratorHelper"; import { BotWeaponGeneratorHelper } from "@spt/helpers/BotWeaponGeneratorHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper"; import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { Inventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBase"; import { IInventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBase";
import { GenerationData, Inventory, ModsChances } from "@spt/models/eft/common/tables/IBotType"; import { IGenerationData, IInventory, IModsChances } from "@spt/models/eft/common/tables/IBotType";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { GenerateWeaponResult } from "@spt/models/spt/bots/GenerateWeaponResult"; import { IGenerateWeaponResult } from "@spt/models/spt/bots/IGenerateWeaponResult";
import { IBotConfig } from "@spt/models/spt/config/IBotConfig"; import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
import { IRepairConfig } from "@spt/models/spt/config/IRepairConfig"; import { IRepairConfig } from "@spt/models/spt/config/IRepairConfig";
@ -52,18 +52,18 @@ export declare class BotWeaponGenerator {
* @param isPmc Is weapon generated for a pmc * @param isPmc Is weapon generated for a pmc
* @returns GenerateWeaponResult object * @returns GenerateWeaponResult object
*/ */
generateRandomWeapon(sessionId: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean, botLevel: number): GenerateWeaponResult; generateRandomWeapon(sessionId: string, equipmentSlot: string, botTemplateInventory: IInventory, weaponParentId: string, modChances: IModsChances, botRole: string, isPmc: boolean, botLevel: number): IGenerateWeaponResult;
/** /**
* Get a random weighted weapon from a bots pool of weapons * Get a random weighted weapon from a bots pool of weapons
* @param equipmentSlot Primary/secondary/holster * @param equipmentSlot Primary/secondary/holster
* @param botTemplateInventory e.g. assault.json * @param botTemplateInventory e.g. assault.json
* @returns weapon tpl * @returns weapon tpl
*/ */
pickWeightedWeaponTplFromPool(equipmentSlot: string, botTemplateInventory: Inventory): string; pickWeightedWeaponTplFromPool(equipmentSlot: string, botTemplateInventory: IInventory): string;
/** /**
* Generated a weapon based on the supplied weapon tpl * Generated a weapon based on the supplied weapon tpl
* @param weaponTpl weapon tpl to generate (use pickWeightedWeaponTplFromPool()) * @param weaponTpl Weapon tpl to generate (use pickWeightedWeaponTplFromPool())
* @param equipmentSlot slot to fit into, primary/secondary/holster * @param slotName Slot to fit into, primary/secondary/holster
* @param botTemplateInventory e.g. assault.json * @param botTemplateInventory e.g. assault.json
* @param weaponParentId ParentId of the weapon being generated * @param weaponParentId ParentId of the weapon being generated
* @param modChances Dictionary of item types and % chance weapon will have that mod * @param modChances Dictionary of item types and % chance weapon will have that mod
@ -71,7 +71,7 @@ export declare class BotWeaponGenerator {
* @param isPmc Is weapon being generated for a pmc * @param isPmc Is weapon being generated for a pmc
* @returns GenerateWeaponResult object * @returns GenerateWeaponResult object
*/ */
generateWeaponByTpl(sessionId: string, weaponTpl: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean, botLevel: number): GenerateWeaponResult; generateWeaponByTpl(sessionId: string, weaponTpl: string, slotName: string, botTemplateInventory: IInventory, weaponParentId: string, modChances: IModsChances, botRole: string, isPmc: boolean, botLevel: number): IGenerateWeaponResult;
/** /**
* Insert a cartridge(s) into a weapon * Insert a cartridge(s) into a weapon
* Handles all chambers - patron_in_weapon, patron_in_weapon_000 etc * Handles all chambers - patron_in_weapon, patron_in_weapon_000 etc
@ -79,7 +79,7 @@ export declare class BotWeaponGenerator {
* @param ammoTpl Cartridge to add to weapon * @param ammoTpl Cartridge to add to weapon
* @param chamberSlotIds name of slots to create or add ammo to * @param chamberSlotIds name of slots to create or add ammo to
*/ */
protected addCartridgeToChamber(weaponWithModsArray: Item[], ammoTpl: string, chamberSlotIds: string[]): void; protected addCartridgeToChamber(weaponWithModsArray: IItem[], ammoTpl: string, chamberSlotIds: string[]): void;
/** /**
* Create array with weapon base as only element and * Create array with weapon base as only element and
* add additional properties based on weapon type * add additional properties based on weapon type
@ -90,7 +90,7 @@ export declare class BotWeaponGenerator {
* @param botRole for durability values * @param botRole for durability values
* @returns Base weapon item in array * @returns Base weapon item in array
*/ */
protected constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): Item[]; protected constructWeaponBaseArray(weaponTpl: string, weaponParentId: string, equipmentSlot: string, weaponItemTemplate: ITemplateItem, botRole: string): IItem[];
/** /**
* Get the mods necessary to kit out a weapon to its preset level * Get the mods necessary to kit out a weapon to its preset level
* @param weaponTpl weapon to find preset for * @param weaponTpl weapon to find preset for
@ -98,14 +98,14 @@ export declare class BotWeaponGenerator {
* @param weaponParentId Value used for the parentid * @param weaponParentId Value used for the parentid
* @returns array of weapon mods * @returns array of weapon mods
*/ */
protected getPresetWeaponMods(weaponTpl: string, equipmentSlot: string, weaponParentId: string, itemTemplate: ITemplateItem, botRole: string): Item[]; protected getPresetWeaponMods(weaponTpl: string, equipmentSlot: string, weaponParentId: string, itemTemplate: ITemplateItem, botRole: string): IItem[];
/** /**
* Checks if all required slots are occupied on a weapon and all it's mods * Checks if all required slots are occupied on a weapon and all it's mods
* @param weaponItemArray Weapon + mods * @param weaponItemArray Weapon + mods
* @param botRole role of bot weapon is for * @param botRole role of bot weapon is for
* @returns true if valid * @returns true if valid
*/ */
protected isWeaponValid(weaponItemArray: Item[], botRole: string): boolean; protected isWeaponValid(weaponItemArray: IItem[], botRole: string): boolean;
/** /**
* Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets. * Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets.
* Additionally, adds extra bullets to SecuredContainer * Additionally, adds extra bullets to SecuredContainer
@ -114,14 +114,14 @@ export declare class BotWeaponGenerator {
* @param inventory Inventory to add magazines to * @param inventory Inventory to add magazines to
* @param botRole The bot type we're getting generating extra mags for * @param botRole The bot type we're getting generating extra mags for
*/ */
addExtraMagazinesToInventory(generatedWeaponResult: GenerateWeaponResult, magWeights: GenerationData, inventory: PmcInventory, botRole: string): void; addExtraMagazinesToInventory(generatedWeaponResult: IGenerateWeaponResult, magWeights: IGenerationData, inventory: PmcInventory, botRole: string): void;
/** /**
* Add Grendaes for UBGL to bots vest and secure container * Add Grendaes for UBGL to bots vest and secure container
* @param weaponMods Weapon array with mods * @param weaponMods Weapon array with mods
* @param generatedWeaponResult result of weapon generation * @param generatedWeaponResult result of weapon generation
* @param inventory bot inventory to add grenades to * @param inventory bot inventory to add grenades to
*/ */
protected addUbglGrenadesToBotInventory(weaponMods: Item[], generatedWeaponResult: GenerateWeaponResult, inventory: PmcInventory): void; protected addUbglGrenadesToBotInventory(weaponMods: IItem[], generatedWeaponResult: IGenerateWeaponResult, inventory: PmcInventory): void;
/** /**
* Add ammo to the secure container * Add ammo to the secure container
* @param stackCount How many stacks of ammo to add * @param stackCount How many stacks of ammo to add
@ -137,14 +137,20 @@ export declare class BotWeaponGenerator {
* @param botRole the bot type we are getting the magazine for * @param botRole the bot type we are getting the magazine for
* @returns magazine tpl string * @returns magazine tpl string
*/ */
protected getMagazineTplFromWeaponTemplate(weaponMods: Item[], weaponTemplate: ITemplateItem, botRole: string): string; protected getMagazineTplFromWeaponTemplate(weaponMods: IItem[], weaponTemplate: ITemplateItem, botRole: string): string;
/** /**
* Finds and return a compatible ammo tpl based on the bots ammo weightings (x.json/inventory/equipment/ammo) * Finds and return a compatible ammo tpl based on the bots ammo weightings (x.json/inventory/equipment/ammo)
* @param ammo a list of ammo tpls the weapon can use * @param cartridgePool Dict of all cartridges keyed by type e.g. Caliber556x45NATO
* @param weaponTemplate the weapon we want to pick ammo for * @param weaponTemplate Weapon details from db we want to pick ammo for
* @returns an ammo tpl that works with the desired gun * @returns Ammo tpl that works with the desired gun
*/ */
protected getWeightedCompatibleAmmo(ammo: Record<string, Record<string, number>>, weaponTemplate: ITemplateItem): string; protected getWeightedCompatibleAmmo(cartridgePool: Record<string, Record<string, number>>, weaponTemplate: ITemplateItem): string;
/**
* Get the cartridge ids from a weapon template that work with the weapon
* @param weaponTemplate Weapon db template to get cartridges for
* @returns Array of cartridge tpls
*/
protected getCompatibleCartridgesFromWeaponTemplate(weaponTemplate: ITemplateItem): string[];
/** /**
* Get a weapons compatible cartridge caliber * Get a weapons compatible cartridge caliber
* @param weaponTemplate Weapon to look up caliber of * @param weaponTemplate Weapon to look up caliber of
@ -157,14 +163,14 @@ export declare class BotWeaponGenerator {
* @param magazine Magazine item * @param magazine Magazine item
* @param cartridgeTpl Cartridge to insert into magazine * @param cartridgeTpl Cartridge to insert into magazine
*/ */
protected fillExistingMagazines(weaponMods: Item[], magazine: Item, cartridgeTpl: string): void; protected fillExistingMagazines(weaponMods: IItem[], magazine: IItem, cartridgeTpl: string): void;
/** /**
* Add desired ammo tpl as item to weaponmods array, placed as child to UBGL * Add desired ammo tpl as item to weaponmods array, placed as child to UBGL
* @param weaponMods Weapon with children * @param weaponMods Weapon with children
* @param ubglMod UBGL item * @param ubglMod UBGL item
* @param ubglAmmoTpl Grenade ammo tpl * @param ubglAmmoTpl Grenade ammo tpl
*/ */
protected fillUbgl(weaponMods: Item[], ubglMod: Item, ubglAmmoTpl: string): void; protected fillUbgl(weaponMods: IItem[], ubglMod: IItem, ubglAmmoTpl: string): void;
/** /**
* Add cartridge item to weapon Item array, if it already exists, update * Add cartridge item to weapon Item array, if it already exists, update
* @param weaponWithMods Weapon items array to amend * @param weaponWithMods Weapon items array to amend
@ -173,12 +179,12 @@ export declare class BotWeaponGenerator {
* @param newStackSize how many cartridges should go into the magazine * @param newStackSize how many cartridges should go into the magazine
* @param magazineTemplate magazines db template * @param magazineTemplate magazines db template
*/ */
protected addOrUpdateMagazinesChildWithAmmo(weaponWithMods: Item[], magazine: Item, chosenAmmoTpl: string, magazineTemplate: ITemplateItem): void; protected addOrUpdateMagazinesChildWithAmmo(weaponWithMods: IItem[], magazine: IItem, chosenAmmoTpl: string, magazineTemplate: ITemplateItem): void;
/** /**
* Fill each Camora with a bullet * Fill each Camora with a bullet
* @param weaponMods Weapon mods to find and update camora mod(s) from * @param weaponMods Weapon mods to find and update camora mod(s) from
* @param magazineId magazine id to find and add to * @param magazineId magazine id to find and add to
* @param ammoTpl ammo template id to hydate with * @param ammoTpl ammo template id to hydate with
*/ */
protected fillCamorasWithAmmo(weaponMods: Item[], magazineId: string, ammoTpl: string): void; protected fillCamorasWithAmmo(weaponMods: IItem[], magazineId: string, ammoTpl: string): void;
} }

View File

@ -1,7 +1,7 @@
import { HandbookHelper } from "@spt/helpers/HandbookHelper"; import { HandbookHelper } from "@spt/helpers/HandbookHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { PresetHelper } from "@spt/helpers/PresetHelper"; import { PresetHelper } from "@spt/helpers/PresetHelper";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig"; import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
@ -47,7 +47,7 @@ export declare class FenceBaseAssortGenerator {
* @param armor Armor item array to add mods into * @param armor Armor item array to add mods into
* @param itemDbDetails Armor items db template * @param itemDbDetails Armor items db template
*/ */
protected addChildrenToArmorModSlots(armor: Item[], itemDbDetails: ITemplateItem): void; protected addChildrenToArmorModSlots(armor: IItem[], itemDbDetails: ITemplateItem): void;
/** /**
* Check if item is valid for being added to fence assorts * Check if item is valid for being added to fence assorts
* @param item Item to check * @param item Item to check

View File

@ -3,8 +3,8 @@ import { ItemHelper } from "@spt/helpers/ItemHelper";
import { PresetHelper } from "@spt/helpers/PresetHelper"; import { PresetHelper } from "@spt/helpers/PresetHelper";
import { IContainerMinMax, IStaticAmmoDetails, IStaticContainer, IStaticContainerData, IStaticForcedProps, IStaticLootDetails } from "@spt/models/eft/common/ILocation"; import { IContainerMinMax, IStaticAmmoDetails, IStaticContainer, IStaticContainerData, IStaticForcedProps, IStaticLootDetails } from "@spt/models/eft/common/ILocation";
import { ILocationBase } from "@spt/models/eft/common/ILocationBase"; import { ILocationBase } from "@spt/models/eft/common/ILocationBase";
import { ILooseLoot, Spawnpoint, SpawnpointTemplate, SpawnpointsForced } from "@spt/models/eft/common/ILooseLoot"; import { ILooseLoot, ISpawnpointTemplate, ISpawnpointsForced } from "@spt/models/eft/common/ILooseLoot";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig"; import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
@ -17,7 +17,7 @@ import { ObjectId } from "@spt/utils/ObjectId";
import { ProbabilityObjectArray, RandomUtil } from "@spt/utils/RandomUtil"; import { ProbabilityObjectArray, RandomUtil } from "@spt/utils/RandomUtil";
import { ICloner } from "@spt/utils/cloners/ICloner"; import { ICloner } from "@spt/utils/cloners/ICloner";
export interface IContainerItem { export interface IContainerItem {
items: Item[]; items: IItem[];
width: number; width: number;
height: number; height: number;
} }
@ -27,7 +27,7 @@ export interface IContainerGroupCount {
/** How many containers the map should spawn with this group id */ /** How many containers the map should spawn with this group id */
chosenCount: number; chosenCount: number;
} }
export declare class LocationGenerator { export declare class LocationLootGenerator {
protected logger: ILogger; protected logger: ILogger;
protected databaseService: DatabaseService; protected databaseService: DatabaseService;
protected objectId: ObjectId; protected objectId: ObjectId;
@ -49,7 +49,7 @@ export declare class LocationGenerator {
* @param staticAmmoDist Static ammo distribution * @param staticAmmoDist Static ammo distribution
* @returns Array of container objects * @returns Array of container objects
*/ */
generateStaticContainers(locationBase: ILocationBase, staticAmmoDist: Record<string, IStaticAmmoDetails[]>): SpawnpointTemplate[]; generateStaticContainers(locationBase: ILocationBase, staticAmmoDist: Record<string, IStaticAmmoDetails[]>): ISpawnpointTemplate[];
/** /**
* Get containers with a non-100% chance to spawn OR are NOT on the container type randomistion blacklist * Get containers with a non-100% chance to spawn OR are NOT on the container type randomistion blacklist
* @param staticContainers * @param staticContainers
@ -117,14 +117,14 @@ export declare class LocationGenerator {
* @param locationName Location to generate loot for * @param locationName Location to generate loot for
* @returns Array of spawn points with loot in them * @returns Array of spawn points with loot in them
*/ */
generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, locationName: string): SpawnpointTemplate[]; generateDynamicLoot(dynamicLootDist: ILooseLoot, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, locationName: string): ISpawnpointTemplate[];
/** /**
* Add forced spawn point loot into loot parameter array * Add forced spawn point loot into loot parameter array
* @param lootLocationTemplates array to add forced loot spawn locations to * @param lootLocationTemplates array to add forced loot spawn locations to
* @param forcedSpawnPoints forced Forced loot locations that must be added * @param forcedSpawnPoints forced Forced loot locations that must be added
* @param locationName Name of map currently having force loot created for * @param locationName Name of map currently having force loot created for
*/ */
protected addForcedLoot(lootLocationTemplates: SpawnpointTemplate[], forcedSpawnPoints: SpawnpointsForced[], locationName: string): void; protected addForcedLoot(lootLocationTemplates: ISpawnpointTemplate[], forcedSpawnPoints: ISpawnpointsForced[], locationName: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>): void;
/** /**
* Create array of item (with child items) and return * Create array of item (with child items) and return
* @param chosenComposedKey Key we want to look up items for * @param chosenComposedKey Key we want to look up items for
@ -132,19 +132,13 @@ export declare class LocationGenerator {
* @param staticAmmoDist ammo distributions * @param staticAmmoDist ammo distributions
* @returns IContainerItem * @returns IContainerItem
*/ */
protected createDynamicLootItem(chosenComposedKey: string, spawnPoint: Spawnpoint, staticAmmoDist: Record<string, IStaticAmmoDetails[]>): IContainerItem; protected createDynamicLootItem(chosenComposedKey: string, items: IItem[], staticAmmoDist: Record<string, IStaticAmmoDetails[]>): 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 * Find an item in array by its _tpl, handle differently if chosenTpl is a weapon
* @param items Items array to search * @param items Items array to search
* @param chosenTpl Tpl we want to get item with * @param chosenTpl Tpl we want to get item with
* @returns Item object * @returns Item object
*/ */
protected getItemInArray(items: Item[], chosenTpl: string): Item | undefined; protected getItemInArray(items: IItem[], chosenTpl: string): IItem | undefined;
protected createStaticLootItem(chosenTpl: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, parentId?: string): IContainerItem; protected createStaticLootItem(chosenTpl: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, parentId?: string): IContainerItem;
} }

View File

@ -2,12 +2,12 @@ import { InventoryHelper } from "@spt/helpers/InventoryHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { PresetHelper } from "@spt/helpers/PresetHelper"; import { PresetHelper } from "@spt/helpers/PresetHelper";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper"; import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { MinMax } from "@spt/models/common/MinMax";
import { IPreset } from "@spt/models/eft/common/IGlobals"; import { IPreset } from "@spt/models/eft/common/IGlobals";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { ISealedAirdropContainerSettings, RewardDetails } from "@spt/models/spt/config/IInventoryConfig"; import { IRewardDetails, ISealedAirdropContainerSettings } from "@spt/models/spt/config/IInventoryConfig";
import { LootItem } from "@spt/models/spt/services/LootItem"; import { ILootRequest } from "@spt/models/spt/services/ILootRequest";
import { LootRequest } from "@spt/models/spt/services/LootRequest";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { DatabaseService } from "@spt/services/DatabaseService"; import { DatabaseService } from "@spt/services/DatabaseService";
import { ItemFilterService } from "@spt/services/ItemFilterService"; import { ItemFilterService } from "@spt/services/ItemFilterService";
@ -37,14 +37,33 @@ export declare class LootGenerator {
* @param options parameters to adjust how loot is generated * @param options parameters to adjust how loot is generated
* @returns An array of loot items * @returns An array of loot items
*/ */
createRandomLoot(options: LootRequest): LootItem[]; createRandomLoot(options: ILootRequest): IItem[];
/**
* Generate An array of items
* TODO - handle weapon presets/ammo packs
* @param forcedLootDict Dictionary of item tpls with minmax values
* @returns Array of IItem
*/
createForcedLoot(forcedLootDict: Record<string, MinMax>): IItem[];
/**
* Get pool of items from item db that fit passed in param criteria
* @param itemTplBlacklist Prevent these items
* @param itemTypeWhitelist Only allow these items
* @param useRewardItemBlacklist Should item.json reward item config be used
* @param allowBossItems Should boss items be allowed in result
* @returns results of filtering + blacklist used
*/
protected getItemRewardPool(itemTplBlacklist: string[], itemTypeWhitelist: string[], useRewardItemBlacklist: boolean, allowBossItems: boolean): {
itemPool: [string, ITemplateItem][];
blacklist: Set<string>;
};
/** /**
* Filter armor items by their front plates protection level - top if its a helmet * Filter armor items by their front plates protection level - top if its a helmet
* @param armor Armor preset to check * @param armor Armor preset to check
* @param options Loot request options - armor level etc * @param options Loot request options - armor level etc
* @returns True if item has desired armor level * @returns True if item has desired armor level
*/ */
protected isArmorOfDesiredProtectionLevel(armor: IPreset, options: LootRequest): boolean; protected isArmorOfDesiredProtectionLevel(armor: IPreset, options: ILootRequest): boolean;
/** /**
* Construct item limit record to hold max and current item count for each item type * Construct item limit record to hold max and current item count for each item type
* @param limits limits as defined in config * @param limits limits as defined in config
@ -62,14 +81,14 @@ export declare class LootGenerator {
protected findAndAddRandomItemToLoot(items: [string, ITemplateItem][], itemTypeCounts: Record<string, { protected findAndAddRandomItemToLoot(items: [string, ITemplateItem][], itemTypeCounts: Record<string, {
current: number; current: number;
max: number; max: number;
}>, options: LootRequest, result: LootItem[]): boolean; }>, options: ILootRequest, result: IItem[]): boolean;
/** /**
* Get a randomised stack count for an item between its StackMinRandom and StackMaxSize values * Get a randomised stack count for an item between its StackMinRandom and StackMaxSize values
* @param item item to get stack count of * @param item item to get stack count of
* @param options loot options * @param options loot options
* @returns stack count * @returns stack count
*/ */
protected getRandomisedStackCount(item: ITemplateItem, options: LootRequest): number; protected getRandomisedStackCount(item: ITemplateItem, options: ILootRequest): number;
/** /**
* Find a random item in items.json and add to result array * Find a random item in items.json and add to result array
* @param presetPool Presets to choose from * @param presetPool Presets to choose from
@ -81,20 +100,20 @@ export declare class LootGenerator {
protected findAndAddRandomPresetToLoot(presetPool: IPreset[], itemTypeCounts: Record<string, { protected findAndAddRandomPresetToLoot(presetPool: IPreset[], itemTypeCounts: Record<string, {
current: number; current: number;
max: number; max: number;
}>, itemBlacklist: string[], result: LootItem[]): boolean; }>, itemBlacklist: string[], result: IItem[]): boolean;
/** /**
* Sealed weapon containers have a weapon + associated mods inside them + assortment of other things (food/meds) * Sealed weapon containers have a weapon + associated mods inside them + assortment of other things (food/meds)
* @param containerSettings sealed weapon container settings * @param containerSettings sealed weapon container settings
* @returns Array of item with children arrays * @returns Array of item with children arrays
*/ */
getSealedWeaponCaseLoot(containerSettings: ISealedAirdropContainerSettings): Item[][]; getSealedWeaponCaseLoot(containerSettings: ISealedAirdropContainerSettings): IItem[][];
/** /**
* Get non-weapon mod rewards for a sealed container * Get non-weapon mod rewards for a sealed container
* @param containerSettings Sealed weapon container settings * @param containerSettings Sealed weapon container settings
* @param weaponDetailsDb Details for the weapon to reward player * @param weaponDetailsDb Details for the weapon to reward player
* @returns Array of item with children arrays * @returns Array of item with children arrays
*/ */
protected getSealedContainerNonWeaponModRewards(containerSettings: ISealedAirdropContainerSettings, weaponDetailsDb: ITemplateItem): Item[][]; protected getSealedContainerNonWeaponModRewards(containerSettings: ISealedAirdropContainerSettings, weaponDetailsDb: ITemplateItem): IItem[][];
/** /**
* Iterate over the container weaponModRewardLimits settings and create an array of weapon mods to reward player * Iterate over the container weaponModRewardLimits settings and create an array of weapon mods to reward player
* @param containerSettings Sealed weapon container settings * @param containerSettings Sealed weapon container settings
@ -102,12 +121,18 @@ export declare class LootGenerator {
* @param chosenWeaponPreset The weapon preset given to player as reward * @param chosenWeaponPreset The weapon preset given to player as reward
* @returns Array of item with children arrays * @returns Array of item with children arrays
*/ */
protected getSealedContainerWeaponModRewards(containerSettings: ISealedAirdropContainerSettings, linkedItemsToWeapon: ITemplateItem[], chosenWeaponPreset: IPreset): Item[][]; protected getSealedContainerWeaponModRewards(containerSettings: ISealedAirdropContainerSettings, linkedItemsToWeapon: ITemplateItem[], chosenWeaponPreset: IPreset): IItem[][];
/** /**
* Handle event-related loot containers - currently just the halloween jack-o-lanterns that give food rewards * Handle event-related loot containers - currently just the halloween jack-o-lanterns that give food rewards
* @param rewardContainerDetails * @param rewardContainerDetails
* @returns Array of item with children arrays * @returns Array of item with children arrays
*/ */
getRandomLootContainerLoot(rewardContainerDetails: RewardDetails): Item[][]; getRandomLootContainerLoot(rewardContainerDetails: IRewardDetails): IItem[][];
/**
* Pick a reward item based on the reward details data
* @param rewardContainerDetails
* @returns Single tpl
*/
protected pickRewardItem(rewardContainerDetails: IRewardDetails): string;
} }
export {}; export {};

View File

@ -4,9 +4,9 @@ import { BotHelper } from "@spt/helpers/BotHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IBotBase, Skills, Stats } from "@spt/models/eft/common/tables/IBotBase"; import { IBotBase, ISkills, IStats } from "@spt/models/eft/common/tables/IBotBase";
import { IBotType } from "@spt/models/eft/common/tables/IBotType"; import { IBotType } from "@spt/models/eft/common/tables/IBotType";
import { IPlayerScavConfig, KarmaLevel } from "@spt/models/spt/config/IPlayerScavConfig"; import { IKarmaLevel, IPlayerScavConfig } from "@spt/models/spt/config/IPlayerScavConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { SaveServer } from "@spt/servers/SaveServer"; import { SaveServer } from "@spt/servers/SaveServer";
@ -67,10 +67,10 @@ export declare class PlayerScavGenerator {
* @param karmaSettings Values to modify the bot template with * @param karmaSettings Values to modify the bot template with
* @param baseBotNode bot template to modify according to karama level settings * @param baseBotNode bot template to modify according to karama level settings
*/ */
protected adjustBotTemplateWithKarmaSpecificSettings(karmaSettings: KarmaLevel, baseBotNode: IBotType): void; protected adjustBotTemplateWithKarmaSpecificSettings(karmaSettings: IKarmaLevel, baseBotNode: IBotType): void;
protected getScavSkills(scavProfile: IPmcData): Skills; protected getScavSkills(scavProfile: IPmcData): ISkills;
protected getDefaultScavSkills(): Skills; protected getDefaultScavSkills(): ISkills;
protected getScavStats(scavProfile: IPmcData): Stats; protected getScavStats(scavProfile: IPmcData): IStats;
protected getScavLevel(scavProfile: IPmcData): number; protected getScavLevel(scavProfile: IPmcData): number;
protected getScavExperience(scavProfile: IPmcData): number; protected getScavExperience(scavProfile: IPmcData): number;
/** /**

View File

@ -1,7 +1,7 @@
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { PresetHelper } from "@spt/helpers/PresetHelper"; import { PresetHelper } from "@spt/helpers/PresetHelper";
import { IPreset } from "@spt/models/eft/common/IGlobals"; import { IPreset } from "@spt/models/eft/common/IGlobals";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig"; import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { DatabaseServer } from "@spt/servers/DatabaseServer"; import { DatabaseServer } from "@spt/servers/DatabaseServer";
@ -14,7 +14,7 @@ export declare class RagfairAssortGenerator {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected seasonalEventService: SeasonalEventService; protected seasonalEventService: SeasonalEventService;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected generatedAssortItems: Item[][]; protected generatedAssortItems: IItem[][];
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected ragfairItemInvalidBaseTypes: string[]; protected ragfairItemInvalidBaseTypes: string[];
constructor(hashUtil: HashUtil, itemHelper: ItemHelper, presetHelper: PresetHelper, databaseServer: DatabaseServer, seasonalEventService: SeasonalEventService, configServer: ConfigServer); constructor(hashUtil: HashUtil, itemHelper: ItemHelper, presetHelper: PresetHelper, databaseServer: DatabaseServer, seasonalEventService: SeasonalEventService, configServer: ConfigServer);
@ -23,7 +23,7 @@ export declare class RagfairAssortGenerator {
* Each sub array contains item + children (if any) * Each sub array contains item + children (if any)
* @returns array of arrays * @returns array of arrays
*/ */
getAssortItems(): Item[][]; getAssortItems(): IItem[][];
/** /**
* Check internal generatedAssortItems array has objects * Check internal generatedAssortItems array has objects
* @returns true if array has objects * @returns true if array has objects
@ -33,7 +33,7 @@ export declare class RagfairAssortGenerator {
* Generate an array of arrays (item + children) the flea can sell * Generate an array of arrays (item + children) the flea can sell
* @returns array of arrays (item + children) * @returns array of arrays (item + children)
*/ */
protected generateRagfairAssortItems(): Item[][]; protected generateRagfairAssortItems(): IItem[][];
/** /**
* Get presets from globals to add to flea * Get presets from globals to add to flea
* ragfairConfig.dynamic.showDefaultPresetsOnly decides if its all presets or just defaults * ragfairConfig.dynamic.showDefaultPresetsOnly decides if its all presets or just defaults
@ -46,5 +46,5 @@ export declare class RagfairAssortGenerator {
* @param id id to add to item * @param id id to add to item
* @returns Hydrated Item object * @returns Hydrated Item object
*/ */
protected createRagfairAssortRootItem(tplId: string, id?: string): Item; protected createRagfairAssortRootItem(tplId: string, id?: string): IItem;
} }

View File

@ -6,11 +6,13 @@ import { PaymentHelper } from "@spt/helpers/PaymentHelper";
import { PresetHelper } from "@spt/helpers/PresetHelper"; import { PresetHelper } from "@spt/helpers/PresetHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { RagfairServerHelper } from "@spt/helpers/RagfairServerHelper"; import { RagfairServerHelper } from "@spt/helpers/RagfairServerHelper";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { IBarterScheme } from "@spt/models/eft/common/tables/ITrader"; import { IBarterScheme } from "@spt/models/eft/common/tables/ITrader";
import { IRagfairOffer, IRagfairOfferUser, OfferRequirement } from "@spt/models/eft/ragfair/IRagfairOffer"; import { IOfferRequirement, IRagfairOffer, IRagfairOfferUser } from "@spt/models/eft/ragfair/IRagfairOffer";
import { Dynamic, IArmorPlateBlacklistSettings, IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig"; import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
import { IArmorPlateBlacklistSettings, IBarterDetails, IDynamic, IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig";
import { ITplWithFleaPrice } from "@spt/models/spt/ragfair/ITplWithFleaPrice";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { SaveServer } from "@spt/servers/SaveServer"; import { SaveServer } from "@spt/servers/SaveServer";
@ -45,6 +47,7 @@ export declare class RagfairOfferGenerator {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected cloner: ICloner; protected cloner: ICloner;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected botConfig: IBotConfig;
protected allowedFleaPriceItemsForBarter: { protected allowedFleaPriceItemsForBarter: {
tpl: string; tpl: string;
price: number; price: number;
@ -62,7 +65,7 @@ export declare class RagfairOfferGenerator {
* @param sellInOnePiece Flags sellInOnePiece to be true * @param sellInOnePiece Flags sellInOnePiece to be true
* @returns Created flea offer * @returns Created flea offer
*/ */
createAndAddFleaOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, sellInOnePiece?: boolean): IRagfairOffer; createAndAddFleaOffer(userID: string, time: number, items: IItem[], barterScheme: IBarterScheme[], loyalLevel: number, sellInOnePiece?: boolean): IRagfairOffer;
/** /**
* Create an offer object ready to send to ragfairOfferService.addOffer() * Create an offer object ready to send to ragfairOfferService.addOffer()
* @param userID Owner of the offer * @param userID Owner of the offer
@ -73,7 +76,7 @@ export declare class RagfairOfferGenerator {
* @param isPackOffer Is offer being created flaged as a pack * @param isPackOffer Is offer being created flaged as a pack
* @returns IRagfairOffer * @returns IRagfairOffer
*/ */
protected createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, isPackOffer?: boolean): IRagfairOffer; protected createOffer(userID: string, time: number, items: IItem[], barterScheme: IBarterScheme[], loyalLevel: number, isPackOffer?: boolean): IRagfairOffer;
/** /**
* Create the user object stored inside each flea offer object * Create the user object stored inside each flea offer object
* @param userID user creating the offer * @param userID user creating the offer
@ -86,7 +89,7 @@ export declare class RagfairOfferGenerator {
* @param offerRequirements barter requirements for offer * @param offerRequirements barter requirements for offer
* @returns rouble cost of offer * @returns rouble cost of offer
*/ */
protected convertOfferRequirementsIntoRoubles(offerRequirements: OfferRequirement[]): number; protected convertOfferRequirementsIntoRoubles(offerRequirements: IOfferRequirement[]): number;
/** /**
* Get avatar url from trader table in db * Get avatar url from trader table in db
* @param isTrader Is user we're getting avatar for a trader * @param isTrader Is user we're getting avatar for a trader
@ -130,28 +133,29 @@ export declare class RagfairOfferGenerator {
* Create multiple offers for items by using a unique list of items we've generated previously * Create multiple offers for items by using a unique list of items we've generated previously
* @param expiredOffers optional, expired offers to regenerate * @param expiredOffers optional, expired offers to regenerate
*/ */
generateDynamicOffers(expiredOffers?: Item[][]): Promise<void>; generateDynamicOffers(expiredOffers?: IItem[][]): Promise<void>;
/** /**
* @param assortItemWithChildren Item with its children to process into offers * @param assortItemWithChildren Item with its children to process into offers
* @param isExpiredOffer is an expired offer * @param isExpiredOffer is an expired offer
* @param config Ragfair dynamic config * @param config Ragfair dynamic config
*/ */
protected createOffersFromAssort(assortItemWithChildren: Item[], isExpiredOffer: boolean, config: Dynamic): Promise<void>; protected createOffersFromAssort(assortItemWithChildren: IItem[], isExpiredOffer: boolean, config: IDynamic): Promise<void>;
/** /**
* iterate over an items chidren and look for plates above desired level and remove them * iterate over an items chidren and look for plates above desired level and remove them
* @param presetWithChildren preset to check for plates * @param presetWithChildren preset to check for plates
* @param plateSettings Settings * @param plateSettings Settings
* @returns True if plate removed * @returns True if plate removed
*/ */
protected removeBannedPlatesFromPreset(presetWithChildren: Item[], plateSettings: IArmorPlateBlacklistSettings): boolean; protected removeBannedPlatesFromPreset(presetWithChildren: IItem[], plateSettings: IArmorPlateBlacklistSettings): boolean;
/** /**
* Create one flea offer for a specific item * Create one flea offer for a specific item
* @param sellerId Id of seller
* @param itemWithChildren Item to create offer for * @param itemWithChildren Item to create offer for
* @param isPreset Is item a weapon preset * @param isPreset Is item a weapon preset
* @param itemDetails raw db item details * @param itemToSellDetails Raw db item details
* @returns Item array * @returns Item array
*/ */
protected createSingleOfferForItem(itemWithChildren: Item[], isPreset: boolean, itemDetails: [boolean, ITemplateItem]): Promise<void>; protected createSingleOfferForItem(sellerId: string, itemWithChildren: IItem[], isPreset: boolean, itemToSellDetails: ITemplateItem): Promise<void>;
/** /**
* Generate trader offers on flea using the traders assort data * Generate trader offers on flea using the traders assort data
* @param traderID Trader to generate offers for * @param traderID Trader to generate offers for
@ -164,7 +168,7 @@ export declare class RagfairOfferGenerator {
* @param itemWithMods Item and mods, get condition of first item (only first array item is modified) * @param itemWithMods Item and mods, get condition of first item (only first array item is modified)
* @param itemDetails db details of first item * @param itemDetails db details of first item
*/ */
protected randomiseOfferItemUpdProperties(userID: string, itemWithMods: Item[], itemDetails: ITemplateItem): void; protected randomiseOfferItemUpdProperties(userID: string, itemWithMods: IItem[], itemDetails: ITemplateItem): void;
/** /**
* Get the relevant condition id if item tpl matches in ragfair.json/condition * Get the relevant condition id if item tpl matches in ragfair.json/condition
* @param tpl Item to look for matching condition object * @param tpl Item to look for matching condition object
@ -177,7 +181,7 @@ export declare class RagfairOfferGenerator {
* @param itemWithMods Item to adjust condition details of * @param itemWithMods Item to adjust condition details of
* @param itemDetails db item details of first item in array * @param itemDetails db item details of first item in array
*/ */
protected randomiseItemCondition(conditionSettingsId: string, itemWithMods: Item[], itemDetails: ITemplateItem): void; protected randomiseItemCondition(conditionSettingsId: string, itemWithMods: IItem[], itemDetails: ITemplateItem): void;
/** /**
* Adjust an items durability/maxDurability value * Adjust an items durability/maxDurability value
* @param item item (weapon/armor) to Adjust * @param item item (weapon/armor) to Adjust
@ -185,35 +189,33 @@ export declare class RagfairOfferGenerator {
* @param maxMultiplier Value to multiply max durability by * @param maxMultiplier Value to multiply max durability by
* @param currentMultiplier Value to multiply current durability by * @param currentMultiplier Value to multiply current durability by
*/ */
protected randomiseWeaponDurability(item: Item, itemDbDetails: ITemplateItem, maxMultiplier: number, currentMultiplier: number): void; protected randomiseWeaponDurability(item: IItem, itemDbDetails: ITemplateItem, maxMultiplier: number, currentMultiplier: number): void;
/** /**
* Randomise the durabiltiy values for an armors plates and soft inserts * Randomise the durabiltiy values for an armors plates and soft inserts
* @param armorWithMods Armor item with its child mods * @param armorWithMods Armor item with its child mods
* @param currentMultiplier Chosen multipler to use for current durability value * @param currentMultiplier Chosen multipler to use for current durability value
* @param maxMultiplier Chosen multipler to use for max durability value * @param maxMultiplier Chosen multipler to use for max durability value
*/ */
protected randomiseArmorDurabilityValues(armorWithMods: Item[], currentMultiplier: number, maxMultiplier: number): void; protected randomiseArmorDurabilityValues(armorWithMods: IItem[], currentMultiplier: number, maxMultiplier: number): void;
/** /**
* Add missing conditions to an item if needed * Add missing conditions to an item if needed
* Durabiltiy for repairable items * Durabiltiy for repairable items
* HpResource for medical items * HpResource for medical items
* @param item item to add conditions to * @param item item to add conditions to
*/ */
protected addMissingConditions(item: Item): void; protected addMissingConditions(item: IItem): void;
/** /**
* Create a barter-based barter scheme, if not possible, fall back to making barter scheme currency based * Create a barter-based barter scheme, if not possible, fall back to making barter scheme currency based
* @param offerItems Items for sale in offer * @param offerItems Items for sale in offer
* @param barterConfig Barter config from ragfairConfig.dynamic.barter
* @returns Barter scheme * @returns Barter scheme
*/ */
protected createBarterBarterScheme(offerItems: Item[]): IBarterScheme[]; protected createBarterBarterScheme(offerItems: IItem[], barterConfig: IBarterDetails): IBarterScheme[];
/** /**
* Get an array of flea prices + item tpl, cached in generator class inside `allowedFleaPriceItemsForBarter` * Get an array of flea prices + item tpl, cached in generator class inside `allowedFleaPriceItemsForBarter`
* @returns array with tpl/price values * @returns array with tpl/price values
*/ */
protected getFleaPricesAsArray(): { protected getFleaPricesAsArray(): ITplWithFleaPrice[];
tpl: string;
price: number;
}[];
/** /**
* Create a random currency-based barter scheme for an array of items * Create a random currency-based barter scheme for an array of items
* @param offerWithChildren Items on offer * @param offerWithChildren Items on offer
@ -221,5 +223,5 @@ export declare class RagfairOfferGenerator {
* @param multipler What to multiply the resulting price by * @param multipler What to multiply the resulting price by
* @returns Barter scheme for offer * @returns Barter scheme for offer
*/ */
protected createCurrencyBarterScheme(offerWithChildren: Item[], isPackOffer: boolean, multipler?: number): IBarterScheme[]; protected createCurrencyBarterScheme(offerWithChildren: IItem[], isPackOffer: boolean, multipler?: number): IBarterScheme[];
} }

View File

@ -1,8 +1,8 @@
import { RepeatableQuestRewardGenerator } from "@spt/generators/RepeatableQuestRewardGenerator"; import { RepeatableQuestRewardGenerator } from "@spt/generators/RepeatableQuestRewardGenerator";
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { RepeatableQuestHelper } from "@spt/helpers/RepeatableQuestHelper"; import { RepeatableQuestHelper } from "@spt/helpers/RepeatableQuestHelper";
import { Exit } from "@spt/models/eft/common/ILocationBase"; import { IExit } from "@spt/models/eft/common/ILocationBase";
import { TraderInfo } from "@spt/models/eft/common/tables/IBotBase"; import { ITraderInfo } from "@spt/models/eft/common/tables/IBotBase";
import { IQuestCondition, IQuestConditionCounterCondition } from "@spt/models/eft/common/tables/IQuest"; import { IQuestCondition, IQuestConditionCounterCondition } from "@spt/models/eft/common/tables/IQuest";
import { IRepeatableQuest } from "@spt/models/eft/common/tables/IRepeatableQuests"; import { IRepeatableQuest } from "@spt/models/eft/common/tables/IRepeatableQuests";
import { IBossInfo, IEliminationConfig, IQuestConfig, IRepeatableQuestConfig } from "@spt/models/spt/config/IQuestConfig"; import { IBossInfo, IEliminationConfig, IQuestConfig, IRepeatableQuestConfig } from "@spt/models/spt/config/IQuestConfig";
@ -39,7 +39,7 @@ export declare class RepeatableQuestGenerator {
* @param repeatableConfig Repeatable quest config * @param repeatableConfig Repeatable quest config
* @returns IRepeatableQuest * @returns IRepeatableQuest
*/ */
generateRepeatableQuest(pmcLevel: number, pmcTraderInfo: Record<string, TraderInfo>, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IRepeatableQuest; generateRepeatableQuest(pmcLevel: number, pmcTraderInfo: Record<string, ITraderInfo>, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IRepeatableQuest;
/** /**
* Generate a randomised Elimination quest * Generate a randomised Elimination quest
* @param pmcLevel Player's level for requested items and reward generation * @param pmcLevel Player's level for requested items and reward generation
@ -109,7 +109,7 @@ export declare class RepeatableQuestGenerator {
* @param playerSide Scav/Pmc * @param playerSide Scav/Pmc
* @returns Array of Exit objects * @returns Array of Exit objects
*/ */
protected getLocationExitsForSide(locationKey: string, playerSide: string): Exit[]; protected getLocationExitsForSide(locationKey: string, playerSide: string): IExit[];
protected generatePickupQuest(pmcLevel: number, traderId: string, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IRepeatableQuest; protected generatePickupQuest(pmcLevel: number, traderId: string, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IRepeatableQuest;
/** /**
* Convert a location into an quest code can read (e.g. factory4_day into 55f2d3fd4bdc2d5f408b4567) * Convert a location into an quest code can read (e.g. factory4_day into 55f2d3fd4bdc2d5f408b4567)
@ -124,7 +124,7 @@ export declare class RepeatableQuestGenerator {
* @param {string} exit The exit name to generate the condition for * @param {string} exit The exit name to generate the condition for
* @returns {object} Exit condition * @returns {object} Exit condition
*/ */
protected generateExplorationExitCondition(exit: Exit): IQuestConditionCounterCondition; protected generateExplorationExitCondition(exit: IExit): IQuestConditionCounterCondition;
/** /**
* Generates the base object of quest type format given as templates in assets/database/templates/repeatableQuests.json * Generates the base object of quest type format given as templates in assets/database/templates/repeatableQuests.json
* The templates include Elimination, Completion and Extraction quest types * The templates include Elimination, Completion and Extraction quest types

View File

@ -1,7 +1,7 @@
import { HandbookHelper } from "@spt/helpers/HandbookHelper"; import { HandbookHelper } from "@spt/helpers/HandbookHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { PresetHelper } from "@spt/helpers/PresetHelper"; import { PresetHelper } from "@spt/helpers/PresetHelper";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { IQuestReward, IQuestRewards } from "@spt/models/eft/common/tables/IQuest"; import { IQuestReward, IQuestRewards } from "@spt/models/eft/common/tables/IQuest";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { IBaseQuestConfig, IQuestConfig, IRepeatableQuestConfig, IRewardScaling } from "@spt/models/spt/config/IQuestConfig"; import { IBaseQuestConfig, IQuestConfig, IRepeatableQuestConfig, IRewardScaling } from "@spt/models/spt/config/IQuestConfig";
@ -33,26 +33,30 @@ export declare class RepeatableQuestRewardGenerator {
protected questConfig: IQuestConfig; protected questConfig: IQuestConfig;
constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, databaseService: DatabaseService, itemHelper: ItemHelper, presetHelper: PresetHelper, handbookHelper: HandbookHelper, localisationService: LocalisationService, objectId: ObjectId, itemFilterService: ItemFilterService, seasonalEventService: SeasonalEventService, configServer: ConfigServer, cloner: ICloner); constructor(logger: ILogger, randomUtil: RandomUtil, mathUtil: MathUtil, databaseService: DatabaseService, itemHelper: ItemHelper, presetHelper: PresetHelper, handbookHelper: HandbookHelper, localisationService: LocalisationService, objectId: ObjectId, itemFilterService: ItemFilterService, seasonalEventService: SeasonalEventService, configServer: ConfigServer, cloner: ICloner);
/** /**
* Generate the reward for a mission. A reward can consist of * Generate the reward for a mission. A reward can consist of:
* - Experience * - Experience
* - Money * - Money
* - GP coins
* - Weapon preset
* - Items * - Items
* - Trader Reputation * - Trader Reputation
* - Skill level experience
* *
* The reward is dependent on the player level as given by the wiki. The exact mapping of pmcLevel to * The reward is dependent on the player level as given by the wiki. The exact mapping of pmcLevel to
* experience / money / items / trader reputation can be defined in QuestConfig.js * experience / money / items / trader reputation can be defined in QuestConfig.js
* *
* There's also a random variation of the reward the spread of which can be also defined in the config. * There's also a random variation of the reward the spread of which can be also defined in the config
* *
* Additionally, a scaling factor w.r.t. quest difficulty going from 0.2...1 can be used * Additionally, a scaling factor w.r.t. quest difficulty going from 0.2...1 can be used
* * @param pmcLevel Level of player reward is being generated for
* @param {integer} pmcLevel player's level * @param difficulty Reward scaling factor from 0.2 to 1
* @param {number} difficulty a reward scaling factor from 0.2 to 1 * @param traderId Trader reward will be given by
* @param {string} traderId the trader for reputation gain (and possible in the future filtering of reward item type based on trader) * @param repeatableConfig Config for quest type (daily, weekly)
* @param {object} repeatableConfig The configuration for the repeatable kind (daily, weekly) as configured in QuestConfig for the requested quest * @param questConfig
* @returns {object} object of "Reward"-type that can be given for a repeatable mission * @param rewardTplBlacklist OPTIONAL: list of tpls to NOT use when picking a reward
* @returns IQuestRewards
*/ */
generateReward(pmcLevel: number, difficulty: number, traderId: string, repeatableConfig: IRepeatableQuestConfig, questConfig: IBaseQuestConfig): IQuestRewards; generateReward(pmcLevel: number, difficulty: number, traderId: string, repeatableConfig: IRepeatableQuestConfig, questConfig: IBaseQuestConfig, rewardTplBlacklist?: string[]): IQuestRewards;
protected getQuestRewardValues(rewardScaling: IRewardScaling, difficulty: number, pmcLevel: number): IQuestRewardValues; protected getQuestRewardValues(rewardScaling: IRewardScaling, difficulty: number, pmcLevel: number): IQuestRewardValues;
/** /**
* Get an array of items + stack size to give to player as reward that fit inside of a rouble budget * Get an array of items + stack size to give to player as reward that fit inside of a rouble budget
@ -133,7 +137,7 @@ export declare class RepeatableQuestRewardGenerator {
* @param preset Optional array of preset items * @param preset Optional array of preset items
* @returns {object} Object of "Reward"-item-type * @returns {object} Object of "Reward"-item-type
*/ */
protected generatePresetReward(tpl: string, count: number, index: number, preset?: Item[]): IQuestReward; protected generatePresetReward(tpl: string, count: number, index: number, preset?: IItem[]): IQuestReward;
/** /**
* Picks rewardable items from items.json * Picks rewardable items from items.json
* This means they must: * This means they must:

View File

@ -1,10 +1,10 @@
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { PresetHelper } from "@spt/helpers/PresetHelper"; import { PresetHelper } from "@spt/helpers/PresetHelper";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { IHideoutScavCase } from "@spt/models/eft/hideout/IHideoutScavCase"; import { IScavRecipe } from "@spt/models/eft/hideout/IHideoutProduction";
import { IScavCaseConfig } from "@spt/models/spt/config/IScavCaseConfig"; import { IScavCaseConfig } from "@spt/models/spt/config/IScavCaseConfig";
import { RewardCountAndPriceDetails, ScavCaseRewardCountsAndPrices } from "@spt/models/spt/hideout/ScavCaseRewardCountsAndPrices"; import { IRewardCountAndPriceDetails, IScavCaseRewardCountsAndPrices } from "@spt/models/spt/hideout/ScavCaseRewardCountsAndPrices";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { DatabaseService } from "@spt/services/DatabaseService"; import { DatabaseService } from "@spt/services/DatabaseService";
@ -36,7 +36,7 @@ export declare class ScavCaseRewardGenerator {
* @param recipeId recipe of the scav case craft * @param recipeId recipe of the scav case craft
* @returns Product array * @returns Product array
*/ */
generate(recipeId: string): Item[][]; generate(recipeId: string): IItem[][];
/** /**
* Get all db items that are not blacklisted in scavcase config or global blacklist * Get all db items that are not blacklisted in scavcase config or global blacklist
* Store in class field * Store in class field
@ -48,7 +48,7 @@ export declare class ScavCaseRewardGenerator {
* @param itemFilters how the rewards should be filtered down (by item count) * @param itemFilters how the rewards should be filtered down (by item count)
* @returns * @returns
*/ */
protected pickRandomRewards(items: ITemplateItem[], itemFilters: RewardCountAndPriceDetails, rarity: string): ITemplateItem[]; protected pickRandomRewards(items: ITemplateItem[], itemFilters: IRewardCountAndPriceDetails, rarity: string): ITemplateItem[];
/** /**
* Choose if money should be a reward based on the moneyRewardChancePercent config chance in scavCaseConfig * Choose if money should be a reward based on the moneyRewardChancePercent config chance in scavCaseConfig
* @returns true if reward should be money * @returns true if reward should be money
@ -75,19 +75,19 @@ export declare class ScavCaseRewardGenerator {
* @param rewardItems items to convert * @param rewardItems items to convert
* @returns Product array * @returns Product array
*/ */
protected randomiseContainerItemRewards(rewardItems: ITemplateItem[], rarity: string): Item[][]; protected randomiseContainerItemRewards(rewardItems: ITemplateItem[], rarity: string): IItem[][];
/** /**
* @param dbItems all items from the items.json * @param dbItems all items from the items.json
* @param itemFilters controls how the dbItems will be filtered and returned (handbook price) * @param itemFilters controls how the dbItems will be filtered and returned (handbook price)
* @returns filtered dbItems array * @returns filtered dbItems array
*/ */
protected getFilteredItemsByPrice(dbItems: ITemplateItem[], itemFilters: RewardCountAndPriceDetails): ITemplateItem[]; protected getFilteredItemsByPrice(dbItems: ITemplateItem[], itemFilters: IRewardCountAndPriceDetails): ITemplateItem[];
/** /**
* Gathers the reward min and max count params for each reward quality level from config and scavcase.json into a single object * Gathers the reward min and max count params for each reward quality level from config and scavcase.json into a single object
* @param scavCaseDetails scavcase.json values * @param scavCaseDetails production.json/scavRecipes object
* @returns ScavCaseRewardCountsAndPrices object * @returns ScavCaseRewardCountsAndPrices object
*/ */
protected getScavCaseRewardCountsAndPrices(scavCaseDetails: IHideoutScavCase): ScavCaseRewardCountsAndPrices; protected getScavCaseRewardCountsAndPrices(scavCaseDetails: IScavRecipe): IScavCaseRewardCountsAndPrices;
/** /**
* Randomises the size of ammo and money stacks * Randomises the size of ammo and money stacks
* @param itemToCalculate ammo or money item * @param itemToCalculate ammo or money item

View File

@ -1,6 +1,8 @@
import { ApplicationContext } from "@spt/context/ApplicationContext"; import { ApplicationContext } from "@spt/context/ApplicationContext";
import { WeatherHelper } from "@spt/helpers/WeatherHelper";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper"; import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { IWeather, IWeatherData } from "@spt/models/eft/weather/IWeatherData"; import { IWeather, IWeatherData } from "@spt/models/eft/weather/IWeatherData";
import { Season } from "@spt/models/enums/Season";
import { WindDirection } from "@spt/models/enums/WindDirection"; import { WindDirection } from "@spt/models/enums/WindDirection";
import { IWeatherConfig } from "@spt/models/spt/config/IWeatherConfig"; import { IWeatherConfig } from "@spt/models/spt/config/IWeatherConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
@ -10,6 +12,7 @@ import { RandomUtil } from "@spt/utils/RandomUtil";
import { TimeUtil } from "@spt/utils/TimeUtil"; import { TimeUtil } from "@spt/utils/TimeUtil";
export declare class WeatherGenerator { export declare class WeatherGenerator {
protected weightedRandomHelper: WeightedRandomHelper; protected weightedRandomHelper: WeightedRandomHelper;
protected weatherHelper: WeatherHelper;
protected logger: ILogger; protected logger: ILogger;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
@ -18,7 +21,7 @@ export declare class WeatherGenerator {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected weatherConfig: IWeatherConfig; protected weatherConfig: IWeatherConfig;
private serverStartTimestampMS; private serverStartTimestampMS;
constructor(weightedRandomHelper: WeightedRandomHelper, logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, seasonalEventService: SeasonalEventService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(weightedRandomHelper: WeightedRandomHelper, weatherHelper: WeatherHelper, logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, seasonalEventService: SeasonalEventService, applicationContext: ApplicationContext, configServer: ConfigServer);
/** /**
* Get current + raid datetime and format into correct BSG format and return * Get current + raid datetime and format into correct BSG format and return
* @param data Weather data * @param data Weather data
@ -32,12 +35,6 @@ export declare class WeatherGenerator {
* @returns formatted time * @returns formatted time
*/ */
protected getBsgFormattedInRaidTime(): string; protected getBsgFormattedInRaidTime(): string;
/**
* Get the current in-raid time
* @param currentDate (new Date())
* @returns Date object of current in-raid time
*/
getInRaidTime(): Date;
/** /**
* Get current time formatted to fit BSGs requirement * Get current time formatted to fit BSGs requirement
* @param date date to format into bsg style * @param date date to format into bsg style
@ -46,18 +43,28 @@ export declare class WeatherGenerator {
protected getBSGFormattedTime(date: Date): string; protected getBSGFormattedTime(date: Date): string;
/** /**
* Return randomised Weather data with help of config/weather.json * Return randomised Weather data with help of config/weather.json
* @param currentSeason the currently active season
* @param timestamp OPTIONAL what timestamp to generate the weather data at, defaults to now when not supplied
* @returns Randomised weather data * @returns Randomised weather data
*/ */
generateWeather(): IWeather; generateWeather(currentSeason: Season, timestamp?: number): IWeather;
/**
* Choose a temprature for the raid based on time of day and current season
* @param currentSeason What season tarkov is currently in
* @param inRaidTimestamp What time is the raid running at
* @returns Timestamp
*/
protected getRaidTemperature(currentSeason: Season, inRaidTimestamp: number): number;
/** /**
* Set IWeather date/time/timestamp values to now * Set IWeather date/time/timestamp values to now
* @param weather Object to update * @param weather Object to update
* @param timestamp OPTIONAL, define timestamp used
*/ */
protected setCurrentDateTime(weather: IWeather): void; protected setCurrentDateTime(weather: IWeather, timestamp?: number): void;
protected getWeightedWindDirection(): WindDirection; protected getWeightedWindDirection(): WindDirection;
protected getWeightedClouds(): number; protected getWeightedClouds(): number;
protected getWeightedWindSpeed(): number; protected getWeightedWindSpeed(): number;
protected getWeightedFog(): number; protected getWeightedFog(): number;
protected getWeightedRain(): number; protected getWeightedRain(): number;
protected getRandomFloat(node: string): number; protected getRandomFloat(node: string, precision?: number): number;
} }

View File

@ -1,5 +1,5 @@
import { Inventory } from "@spt/models/eft/common/tables/IBotBase"; import { IInventory } from "@spt/models/eft/common/tables/IBotBase";
import { GenerationData } from "@spt/models/eft/common/tables/IBotType"; import { IGenerationData } from "@spt/models/eft/common/tables/IBotType";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
export declare class InventoryMagGen { export declare class InventoryMagGen {
private magCounts; private magCounts;
@ -7,10 +7,10 @@ export declare class InventoryMagGen {
private weaponTemplate; private weaponTemplate;
private ammoTemplate; private ammoTemplate;
private pmcInventory; private pmcInventory;
constructor(magCounts: GenerationData, magazineTemplate: ITemplateItem, weaponTemplate: ITemplateItem, ammoTemplate: ITemplateItem, pmcInventory: Inventory); constructor(magCounts: IGenerationData, magazineTemplate: ITemplateItem, weaponTemplate: ITemplateItem, ammoTemplate: ITemplateItem, pmcInventory: IInventory);
getMagCount(): GenerationData; getMagCount(): IGenerationData;
getMagazineTemplate(): ITemplateItem; getMagazineTemplate(): ITemplateItem;
getWeaponTemplate(): ITemplateItem; getWeaponTemplate(): ITemplateItem;
getAmmoTemplate(): ITemplateItem; getAmmoTemplate(): ITemplateItem;
getPmcInventory(): Inventory; getPmcInventory(): IInventory;
} }

View File

@ -1,5 +1,6 @@
import { BotHelper } from "@spt/helpers/BotHelper"; import { BotHelper } from "@spt/helpers/BotHelper";
import { Difficulty } from "@spt/models/eft/common/tables/IBotType"; import { IDifficultyCategories } from "@spt/models/eft/common/tables/IBotType";
import { IBots } from "@spt/models/spt/bots/IBots";
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
@ -17,42 +18,21 @@ export declare class BotDifficultyHelper {
protected cloner: ICloner; protected cloner: ICloner;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(logger: ILogger, databaseService: DatabaseService, randomUtil: RandomUtil, localisationService: LocalisationService, botHelper: BotHelper, configServer: ConfigServer, cloner: ICloner); constructor(logger: ILogger, databaseService: DatabaseService, randomUtil: RandomUtil, localisationService: LocalisationService, botHelper: BotHelper, configServer: ConfigServer, cloner: ICloner);
/**
* Get a difficulty object modified to handle fighting other PMCs
* @param pmcType 'bear or 'usec'
* @param difficulty easy / normal / hard / impossible
* @param usecType pmcUSEC
* @param bearType pmcBEAR
* @returns Difficulty object
*/
getPmcDifficultySettings(pmcType: "bear" | "usec", difficulty: string, usecType: string, bearType: string): Difficulty;
/**
* Add bot types to ENEMY_BOT_TYPES array
* @param difficultySettings Bot settings to alter
* @param typesToAdd Bot types to add to enemy list
* @param typeBeingEdited Bot type to ignore and not add to enemy list
*/
protected addBotToEnemyList(difficultySettings: Difficulty, typesToAdd: string[], typeBeingEdited?: string): void;
/**
* Configure difficulty settings to be hostile to USEC and BEAR
* Look up value in bot.json/chanceSameSideIsHostilePercent
* @param difficultySettings pmc difficulty settings
*/
protected setDifficultyToHostileToBearAndUsec(difficultySettings: Difficulty): void;
/** /**
* Get difficulty settings for desired bot type, if not found use assault bot types * Get difficulty settings for desired bot type, if not found use assault bot types
* @param type bot type to retrieve difficulty of * @param type bot type to retrieve difficulty of
* @param difficulty difficulty to get settings for (easy/normal etc) * @param difficulty difficulty to get settings for (easy/normal etc)
* @param botDb bots from database
* @returns Difficulty object * @returns Difficulty object
*/ */
getBotDifficultySettings(type: string, difficulty: string): Difficulty; getBotDifficultySettings(type: string, difficulty: string, botDb: IBots): IDifficultyCategories;
/** /**
* Get difficulty settings for a PMC * Get difficulty settings for a PMC
* @param type "usec" / "bear" * @param type "usec" / "bear"
* @param difficulty what difficulty to retrieve * @param difficulty what difficulty to retrieve
* @returns Difficulty object * @returns Difficulty object
*/ */
protected getDifficultySettings(type: string, difficulty: string): Difficulty; protected getDifficultySettings(type: string, difficulty: string): IDifficultyCategories;
/** /**
* Translate chosen value from pre-raid difficulty dropdown into bot difficulty value * Translate chosen value from pre-raid difficulty dropdown into bot difficulty value
* @param dropDownDifficulty Dropdown difficulty value to convert * @param dropDownDifficulty Dropdown difficulty value to convert

View File

@ -3,9 +3,9 @@ import { ContainerHelper } from "@spt/helpers/ContainerHelper";
import { DurabilityLimitsHelper } from "@spt/helpers/DurabilityLimitsHelper"; import { DurabilityLimitsHelper } from "@spt/helpers/DurabilityLimitsHelper";
import { InventoryHelper } from "@spt/helpers/InventoryHelper"; import { InventoryHelper } from "@spt/helpers/InventoryHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { Inventory } from "@spt/models/eft/common/tables/IBotBase"; import { IInventory } from "@spt/models/eft/common/tables/IBotBase";
import { Item, Repairable, Upd } from "@spt/models/eft/common/tables/IItem"; import { IItem, IUpd, IUpdRepairable } from "@spt/models/eft/common/tables/IItem";
import { Grid, ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { IGrid, ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { ItemAddedResult } from "@spt/models/enums/ItemAddedResult"; import { ItemAddedResult } from "@spt/models/enums/ItemAddedResult";
import { IChooseRandomCompatibleModResult } from "@spt/models/spt/bots/IChooseRandomCompatibleModResult"; import { IChooseRandomCompatibleModResult } from "@spt/models/spt/bots/IChooseRandomCompatibleModResult";
import { EquipmentFilters, IBotConfig, IRandomisedResourceValues } from "@spt/models/spt/config/IBotConfig"; import { EquipmentFilters, IBotConfig, IRandomisedResourceValues } from "@spt/models/spt/config/IBotConfig";
@ -37,7 +37,7 @@ export declare class BotGeneratorHelper {
* @returns Item Upd object with extra properties * @returns Item Upd object with extra properties
*/ */
generateExtraPropertiesForItem(itemTemplate: ITemplateItem, botRole?: string): { generateExtraPropertiesForItem(itemTemplate: ITemplateItem, botRole?: string): {
upd?: Upd; upd?: IUpd;
}; };
/** /**
* Randomize the HpResource for bots e.g (245/400 resources) * Randomize the HpResource for bots e.g (245/400 resources)
@ -60,15 +60,14 @@ export declare class BotGeneratorHelper {
* @param botRole type of bot being generated for * @param botRole type of bot being generated for
* @returns Repairable object * @returns Repairable object
*/ */
protected generateWeaponRepairableProperties(itemTemplate: ITemplateItem, botRole?: string): Repairable; protected generateWeaponRepairableProperties(itemTemplate: ITemplateItem, botRole?: string): IUpdRepairable;
/** /**
* Create a repairable object for an armor that containers durability + max durability properties * Create a repairable object for an armor that containers durability + max durability properties
* @param itemTemplate weapon object being generated for * @param itemTemplate weapon object being generated for
* @param botRole type of bot being generated for * @param botRole type of bot being generated for
* @returns Repairable object * @returns Repairable object
*/ */
protected generateArmorRepairableProperties(itemTemplate: ITemplateItem, botRole?: string): Repairable; protected generateArmorRepairableProperties(itemTemplate: ITemplateItem, botRole?: string): IUpdRepairable;
isWeaponModIncompatibleWithCurrentMods(itemsEquipped: Item[], tplToCheck: string, modSlot: string): IChooseRandomCompatibleModResult;
/** /**
* Can item be added to another item without conflict * Can item be added to another item without conflict
* @param itemsEquipped Items to check compatibilities with * @param itemsEquipped Items to check compatibilities with
@ -76,7 +75,7 @@ export declare class BotGeneratorHelper {
* @param equipmentSlot Slot the item will be placed into * @param equipmentSlot Slot the item will be placed into
* @returns false if no incompatibilities, also has incompatibility reason * @returns false if no incompatibilities, also has incompatibility reason
*/ */
isItemIncompatibleWithCurrentItems(itemsEquipped: Item[], tplToCheck: string, equipmentSlot: string): IChooseRandomCompatibleModResult; isItemIncompatibleWithCurrentItems(itemsEquipped: IItem[], tplToCheck: string, equipmentSlot: string): IChooseRandomCompatibleModResult;
/** /**
* Convert a bots role to the equipment role used in config/bot.json * Convert a bots role to the equipment role used in config/bot.json
* @param botRole Role to convert * @param botRole Role to convert
@ -92,12 +91,12 @@ export declare class BotGeneratorHelper {
* @param inventory Inventory to add item+children into * @param inventory Inventory to add item+children into
* @returns ItemAddedResult result object * @returns ItemAddedResult result object
*/ */
addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], rootItemId: string, rootItemTplId: string, itemWithChildren: Item[], inventory: Inventory, containersIdFull?: Set<string>): ItemAddedResult; addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], rootItemId: string, rootItemTplId: string, itemWithChildren: IItem[], inventory: IInventory, containersIdFull?: Set<string>): ItemAddedResult;
/** /**
* Is the provided item allowed inside a container * Is the provided item allowed inside a container
* @param slotGrid Items sub-grid we want to place item inside * @param slotGrid Items sub-grid we want to place item inside
* @param itemTpl Item tpl being placed * @param itemTpl Item tpl being placed
* @returns True if allowed * @returns True if allowed
*/ */
protected itemAllowedInContainer(slotGrid: Grid, itemTpl: string): boolean; protected itemAllowedInContainer(slotGrid: IGrid, itemTpl: string): boolean;
} }

View File

@ -1,6 +1,6 @@
import { MinMax } from "@spt/models/common/MinMax"; import { MinMax } from "@spt/models/common/MinMax";
import { Difficulty, IBotType } from "@spt/models/eft/common/tables/IBotType"; import { IBotType, IDifficultyCategories } from "@spt/models/eft/common/tables/IBotType";
import { EquipmentFilters, IBotConfig, RandomisationDetails } from "@spt/models/spt/config/IBotConfig"; import { EquipmentFilters, IBotConfig, IRandomisationDetails } from "@spt/models/spt/config/IBotConfig";
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig"; import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
@ -33,20 +33,15 @@ export declare class BotHelper {
* @param difficultySettings bot settings to alter * @param difficultySettings bot settings to alter
* @param typeToAdd bot type to add to friendly list * @param typeToAdd bot type to add to friendly list
*/ */
addBotToFriendlyList(difficultySettings: Difficulty, typeToAdd: string): void; addBotToFriendlyList(difficultySettings: IDifficultyCategories, typeToAdd: string): void;
/** /**
* Add a bot to the REVENGE_BOT_TYPES array * Add a bot to the REVENGE_BOT_TYPES array
* @param difficultySettings bot settings to alter * @param difficultySettings bot settings to alter
* @param typesToAdd bot type to add to revenge list * @param typesToAdd bot type to add to revenge list
*/ */
addBotToRevengeList(difficultySettings: Difficulty, typesToAdd: string[]): void; addBotToRevengeList(difficultySettings: IDifficultyCategories, typesToAdd: string[]): void;
/** rollChanceToBePmc(botConvertMinMax: MinMax): boolean;
* Choose if a bot should become a PMC by checking if bot type is allowed to become a Pmc in botConfig.convertFromChances and doing a random int check protected getPmcConversionValuesForLocation(location: string): Record<string, MinMax>;
* @param botRole the bot role to check if should be a pmc
* @returns true if should be a pmc
*/
shouldBotBePmc(botRole: string): boolean;
rollChanceToBePmc(role: string, botConvertMinMax: MinMax): boolean;
/** /**
* is the provided role a PMC, case-agnostic * is the provided role a PMC, case-agnostic
* @param botRole Role to check * @param botRole Role to check
@ -59,7 +54,7 @@ export declare class BotHelper {
* @param botEquipConfig bot equipment json * @param botEquipConfig bot equipment json
* @returns RandomisationDetails * @returns RandomisationDetails
*/ */
getBotRandomizationDetails(botLevel: number, botEquipConfig: EquipmentFilters): RandomisationDetails | undefined; getBotRandomizationDetails(botLevel: number, botEquipConfig: EquipmentFilters): IRandomisationDetails | undefined;
/** /**
* Choose between pmcBEAR and pmcUSEC at random based on the % defined in pmcConfig.isUsec * Choose between pmcBEAR and pmcUSEC at random based on the % defined in pmcConfig.isUsec
* @returns pmc role * @returns pmc role
@ -76,5 +71,11 @@ export declare class BotHelper {
* @returns pmc side as string * @returns pmc side as string
*/ */
protected getRandomizedPmcSide(): string; protected getRandomizedPmcSide(): string;
getPmcNicknameOfMaxLength(userId: string, maxLength: number): string; /**
* Get a name from a PMC that fits the desired length
* @param maxLength Max length of name, inclusive
* @param side OPTIONAL - what side PMC to get name from (usec/bear)
* @returns name of PMC
*/
getPmcNicknameOfMaxLength(maxLength: number, side?: string): string;
} }

View File

@ -1,9 +1,9 @@
import { BotGeneratorHelper } from "@spt/helpers/BotGeneratorHelper"; import { BotGeneratorHelper } from "@spt/helpers/BotGeneratorHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper"; import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { Inventory } from "@spt/models/eft/common/tables/IBotBase"; import { IInventory } from "@spt/models/eft/common/tables/IBotBase";
import { GenerationData } from "@spt/models/eft/common/tables/IBotType"; import { IGenerationData } from "@spt/models/eft/common/tables/IBotType";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { EquipmentSlots } from "@spt/models/enums/EquipmentSlots"; import { EquipmentSlots } from "@spt/models/enums/EquipmentSlots";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
@ -27,13 +27,13 @@ export declare class BotWeaponGeneratorHelper {
* @param magTemplate magazine to generate bullet count for * @param magTemplate magazine to generate bullet count for
* @returns bullet count number * @returns bullet count number
*/ */
getRandomizedBulletCount(magCounts: GenerationData, magTemplate: ITemplateItem): number; getRandomizedBulletCount(magCounts: IGenerationData, magTemplate: ITemplateItem): number;
/** /**
* Get a randomized count of magazines * Get a randomized count of magazines
* @param magCounts min and max value returned value can be between * @param magCounts min and max value returned value can be between
* @returns numerical value of magazine count * @returns numerical value of magazine count
*/ */
getRandomizedMagazineCount(magCounts: GenerationData): number; getRandomizedMagazineCount(magCounts: IGenerationData): number;
/** /**
* Is this magazine cylinder related (revolvers and grenade launchers) * Is this magazine cylinder related (revolvers and grenade launchers)
* @param magazineParentName the name of the magazines parent * @param magazineParentName the name of the magazines parent
@ -47,7 +47,7 @@ export declare class BotWeaponGeneratorHelper {
* @param magTemplate template object of magazine * @param magTemplate template object of magazine
* @returns Item array * @returns Item array
*/ */
createMagazineWithAmmo(magazineTpl: string, ammoTpl: string, magTemplate: ITemplateItem): Item[]; createMagazineWithAmmo(magazineTpl: string, ammoTpl: string, magTemplate: ITemplateItem): IItem[];
/** /**
* Add a specific number of cartridges to a bots inventory (defaults to vest and pockets) * Add a specific number of cartridges to a bots inventory (defaults to vest and pockets)
* @param ammoTpl Ammo tpl to add to vest/pockets * @param ammoTpl Ammo tpl to add to vest/pockets
@ -55,7 +55,7 @@ export declare class BotWeaponGeneratorHelper {
* @param inventory bot inventory to add cartridges to * @param inventory bot inventory to add cartridges to
* @param equipmentSlotsToAddTo what equipment slots should bullets be added into * @param equipmentSlotsToAddTo what equipment slots should bullets be added into
*/ */
addAmmoIntoEquipmentSlots(ammoTpl: string, cartridgeCount: number, inventory: Inventory, equipmentSlotsToAddTo?: EquipmentSlots[]): void; addAmmoIntoEquipmentSlots(ammoTpl: string, cartridgeCount: number, inventory: IInventory, equipmentSlotsToAddTo?: EquipmentSlots[]): void;
/** /**
* Get a weapons default magazine template id * Get a weapons default magazine template id
* @param weaponTemplate weapon to get default magazine for * @param weaponTemplate weapon to get default magazine for

View File

@ -6,17 +6,21 @@ import { ICoreConfig } from "@spt/models/spt/config/ICoreConfig";
import { IWeatherConfig } from "@spt/models/spt/config/IWeatherConfig"; import { IWeatherConfig } from "@spt/models/spt/config/IWeatherConfig";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { GiftService } from "@spt/services/GiftService"; import { GiftService } from "@spt/services/GiftService";
import { LocalisationService } from "@spt/services/LocalisationService";
import { MailSendService } from "@spt/services/MailSendService"; import { MailSendService } from "@spt/services/MailSendService";
import { SeasonalEventService } from "@spt/services/SeasonalEventService";
import { RandomUtil } from "@spt/utils/RandomUtil"; import { RandomUtil } from "@spt/utils/RandomUtil";
export declare class SptDialogueChatBot implements IDialogueChatBot { export declare class SptDialogueChatBot implements IDialogueChatBot {
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
protected mailSendService: MailSendService; protected mailSendService: MailSendService;
protected seasonalEventService: SeasonalEventService;
protected localisationService: LocalisationService;
protected giftService: GiftService; protected giftService: GiftService;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected weatherConfig: IWeatherConfig; protected weatherConfig: IWeatherConfig;
constructor(profileHelper: ProfileHelper, randomUtil: RandomUtil, mailSendService: MailSendService, giftService: GiftService, configServer: ConfigServer); constructor(profileHelper: ProfileHelper, randomUtil: RandomUtil, mailSendService: MailSendService, seasonalEventService: SeasonalEventService, localisationService: LocalisationService, giftService: GiftService, configServer: ConfigServer);
getChatBot(): IUserDialogInfo; getChatBot(): IUserDialogInfo;
/** /**
* Send responses back to player when they communicate with SPT friend on friends list * Send responses back to player when they communicate with SPT friend on friends list

View File

@ -1,8 +1,8 @@
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { NotificationSendHelper } from "@spt/helpers/NotificationSendHelper"; import { NotificationSendHelper } from "@spt/helpers/NotificationSendHelper";
import { NotifierHelper } from "@spt/helpers/NotifierHelper"; import { NotifierHelper } from "@spt/helpers/NotifierHelper";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { Dialogue, MessagePreview } from "@spt/models/eft/profile/ISptProfile"; import { IDialogue, IMessagePreview } from "@spt/models/eft/profile/ISptProfile";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { DatabaseServer } from "@spt/servers/DatabaseServer"; import { DatabaseServer } from "@spt/servers/DatabaseServer";
import { SaveServer } from "@spt/servers/SaveServer"; import { SaveServer } from "@spt/servers/SaveServer";
@ -23,7 +23,7 @@ export declare class DialogueHelper {
* @param dialogue * @param dialogue
* @returns MessagePreview * @returns MessagePreview
*/ */
getMessagePreview(dialogue: Dialogue): MessagePreview; getMessagePreview(dialogue: IDialogue): IMessagePreview;
/** /**
* Get the item contents for a particular message. * Get the item contents for a particular message.
* @param messageID * @param messageID
@ -31,11 +31,11 @@ export declare class DialogueHelper {
* @param itemId Item being moved to inventory * @param itemId Item being moved to inventory
* @returns * @returns
*/ */
getMessageItemContents(messageID: string, sessionID: string, itemId: string): Item[]; getMessageItemContents(messageID: string, sessionID: string, itemId: string): IItem[];
/** /**
* Get the dialogs dictionary for a profile, create if doesnt exist * Get the dialogs dictionary for a profile, create if doesnt exist
* @param sessionId Session/player id * @param sessionId Session/player id
* @returns Dialog dictionary * @returns Dialog dictionary
*/ */
getDialogsForProfile(sessionId: string): Record<string, Dialogue>; getDialogsForProfile(sessionId: string): Record<string, IDialogue>;
} }

View File

@ -1,5 +1,5 @@
import { Category } from "@spt/models/eft/common/tables/IHandbookBase"; import { IHandbookCategory } from "@spt/models/eft/common/tables/IHandbookBase";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { IItemConfig } from "@spt/models/spt/config/IItemConfig"; import { IItemConfig } from "@spt/models/spt/config/IItemConfig";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { DatabaseService } from "@spt/services/DatabaseService"; import { DatabaseService } from "@spt/services/DatabaseService";
@ -33,7 +33,7 @@ export declare class HandbookHelper {
* @returns price in roubles * @returns price in roubles
*/ */
getTemplatePrice(tpl: string): number; getTemplatePrice(tpl: string): number;
getTemplatePriceForItems(items: Item[]): number; getTemplatePriceForItems(items: IItem[]): number;
/** /**
* Get all items in template with the given parent category * Get all items in template with the given parent category
* @param parentId * @param parentId
@ -66,6 +66,6 @@ export declare class HandbookHelper {
* @returns currency count in desired type * @returns currency count in desired type
*/ */
fromRUB(roubleCurrencyCount: number, currencyTypeTo: string): number; fromRUB(roubleCurrencyCount: number, currencyTypeTo: string): number;
getCategoryById(handbookId: string): Category; getCategoryById(handbookId: string): IHandbookCategory;
} }
export {}; export {};

View File

@ -1,6 +1,7 @@
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IBodyPartsHealth, IHealth } from "@spt/models/eft/common/tables/IBotBase";
import { ISyncHealthRequestData } from "@spt/models/eft/health/ISyncHealthRequestData"; import { ISyncHealthRequestData } from "@spt/models/eft/health/ISyncHealthRequestData";
import { Effects, ISptProfile } from "@spt/models/eft/profile/ISptProfile"; import { IEffects, ISptProfile } from "@spt/models/eft/profile/ISptProfile";
import { IHealthConfig } from "@spt/models/spt/config/IHealthConfig"; import { IHealthConfig } from "@spt/models/spt/config/IHealthConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
@ -21,6 +22,23 @@ export declare class HealthHelper {
* @returns updated profile * @returns updated profile
*/ */
resetVitality(sessionID: string): ISptProfile; resetVitality(sessionID: string): ISptProfile;
/**
* Update player profile vitality values with changes from client request object
* @param pmcData Player profile
* @param postRaidHealth Post raid data
* @param sessionID Session id
* @param isDead Is player dead
* @param addEffects Should effects be added to profile (default - true)
* @param deleteExistingEffects Should all prior effects be removed before apply new ones (default - true)
*/
updateProfileHealthPostRaid(pmcData: IPmcData, postRaidHealth: IHealth, sessionID: string, isDead: boolean): void;
protected storeHydrationEnergyTempInProfile(fullProfile: ISptProfile, hydration: number, energy: number, temprature: number): void;
/**
* Take body part effects from client profile and apply to server profile
* @param postRaidBodyParts Post-raid body part data
* @param profileData Player profile on server
*/
protected transferPostRaidLimbEffectsToProfile(postRaidBodyParts: IBodyPartsHealth, profileData: IPmcData): void;
/** /**
* Update player profile vitality values with changes from client request object * Update player profile vitality values with changes from client request object
* @param pmcData Player profile * @param pmcData Player profile
@ -45,7 +63,7 @@ export declare class HealthHelper {
* @param bodyPartsWithEffects dict of body parts with effects that should be added to profile * @param bodyPartsWithEffects dict of body parts with effects that should be added to profile
* @param addEffects Should effects be added back to profile * @param addEffects Should effects be added back to profile
*/ */
protected saveEffects(pmcData: IPmcData, sessionId: string, bodyPartsWithEffects: Effects, deleteExistingEffects?: boolean): void; protected saveEffects(pmcData: IPmcData, sessionId: string, bodyPartsWithEffects: IEffects, deleteExistingEffects?: boolean): void;
/** /**
* Add effect to body part in profile * Add effect to body part in profile
* @param pmcData Player profile * @param pmcData Player profile

View File

@ -2,14 +2,15 @@ import { InventoryHelper } from "@spt/helpers/InventoryHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { HideoutArea, IHideoutImprovement, Production, Productive } from "@spt/models/eft/common/tables/IBotBase"; import { IBotHideoutArea, IHideoutImprovement, IProduction, IProductive } from "@spt/models/eft/common/tables/IBotBase";
import { Item, Upd } from "@spt/models/eft/common/tables/IItem"; import { IItem, IUpd } from "@spt/models/eft/common/tables/IItem";
import { StageBonus } from "@spt/models/eft/hideout/IHideoutArea"; import { IHideoutArea, IStageBonus } from "@spt/models/eft/hideout/IHideoutArea";
import { IHideoutContinuousProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutContinuousProductionStartRequestData"; import { IHideoutContinuousProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutContinuousProductionStartRequestData";
import { IHideoutProduction } from "@spt/models/eft/hideout/IHideoutProduction"; import { IHideoutProduction } from "@spt/models/eft/hideout/IHideoutProduction";
import { IHideoutSingleProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutSingleProductionStartRequestData"; import { IHideoutSingleProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutSingleProductionStartRequestData";
import { IHideoutTakeProductionRequestData } from "@spt/models/eft/hideout/IHideoutTakeProductionRequestData"; import { IHideoutTakeProductionRequestData } from "@spt/models/eft/hideout/IHideoutTakeProductionRequestData";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { HideoutAreas } from "@spt/models/enums/HideoutAreas";
import { SkillTypes } from "@spt/models/enums/SkillTypes"; import { SkillTypes } from "@spt/models/enums/SkillTypes";
import { IHideoutConfig } from "@spt/models/spt/config/IHideoutConfig"; import { IHideoutConfig } from "@spt/models/spt/config/IHideoutConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
@ -37,6 +38,7 @@ export declare class HideoutHelper {
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected cloner: ICloner; protected cloner: ICloner;
static bitcoinFarm: string; static bitcoinFarm: string;
static cultistCircleCraftId: string;
static bitcoinProductionId: string; static bitcoinProductionId: string;
static waterCollector: string; static waterCollector: string;
static maxSkillPoint: number; static maxSkillPoint: number;
@ -54,19 +56,19 @@ export declare class HideoutHelper {
* This convenience function initializes new Production Object * This convenience function initializes new Production Object
* with all the constants. * with all the constants.
*/ */
initProduction(recipeId: string, productionTime: number, needFuelForAllProductionTime: boolean): Production; initProduction(recipeId: string, productionTime: number, needFuelForAllProductionTime: boolean): IProduction;
/** /**
* Is the provided object a Production type * Is the provided object a Production type
* @param productive * @param productive
* @returns * @returns
*/ */
isProductionType(productive: Productive): productive is Production; isProductionType(productive: IProductive): productive is IProduction;
/** /**
* Apply bonus to player profile given after completing hideout upgrades * Apply bonus to player profile given after completing hideout upgrades
* @param pmcData Profile to add bonus to * @param pmcData Profile to add bonus to
* @param bonus Bonus to add to profile * @param bonus Bonus to add to profile
*/ */
applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void; applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: IStageBonus): void;
/** /**
* Process a players hideout, update areas that use resources + increment production timers * Process a players hideout, update areas that use resources + increment production timers
* @param sessionID Session id * @param sessionID Session id
@ -82,7 +84,7 @@ export declare class HideoutHelper {
isGeneratorOn: boolean; isGeneratorOn: boolean;
waterCollectorHasFilter: boolean; waterCollectorHasFilter: boolean;
}; };
protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean; protected doesWaterCollectorHaveFilter(waterCollector: IBotHideoutArea): boolean;
/** /**
* Iterate over productions and update their progress timers * Iterate over productions and update their progress timers
* @param pmcData Profile to check for productions and update * @param pmcData Profile to check for productions and update
@ -93,6 +95,21 @@ export declare class HideoutHelper {
isGeneratorOn: boolean; isGeneratorOn: boolean;
waterCollectorHasFilter: boolean; waterCollectorHasFilter: boolean;
}): void; }): void;
/**
* Is a craft from a particular hideout area
* @param craft Craft to check
* @param hideoutType Type to check craft against
* @returns True it is from that area
*/
protected isCraftOfType(craft: IProduction, hideoutType: HideoutAreas): boolean;
/**
* Has the craft completed
* Ignores bitcoin farm/cultist circle as they're continuous crafts
* @param craft Craft to check
* @returns True when craft is compelte
*/
protected isCraftComplete(craft: IProduction): boolean;
/** /**
* Update progress timer for water collector * Update progress timer for water collector
* @param pmcData profile to update * @param pmcData profile to update
@ -116,6 +133,8 @@ export declare class HideoutHelper {
isGeneratorOn: boolean; isGeneratorOn: boolean;
waterCollectorHasFilter?: boolean; waterCollectorHasFilter?: boolean;
}): void; }): void;
protected updateCultistCircleCraftProgress(pmcData: IPmcData, prodId: string): void;
protected flagCultistCircleCraftAsComplete(production: IProductive): void;
/** /**
* Check if a productions progress value matches its corresponding recipes production time value * Check if a productions progress value matches its corresponding recipes production time value
* @param pmcData Player profile * @param pmcData Player profile
@ -147,8 +166,8 @@ export declare class HideoutHelper {
* @param pmcData Player profile * @param pmcData Player profile
* @param isGeneratorOn Is the generator turned on since last update * @param isGeneratorOn Is the generator turned on since last update
*/ */
protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData, isGeneratorOn: boolean): void; protected updateFuel(generatorArea: IBotHideoutArea, pmcData: IPmcData, isGeneratorOn: boolean): void;
protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, hideoutProperties: { protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: IBotHideoutArea, hideoutProperties: {
btcFarmCGs: number; btcFarmCGs: number;
isGeneratorOn: boolean; isGeneratorOn: boolean;
waterCollectorHasFilter: boolean; waterCollectorHasFilter: boolean;
@ -168,7 +187,7 @@ export declare class HideoutHelper {
* @param isGeneratorOn is generator enabled * @param isGeneratorOn is generator enabled
* @param pmcData Player profile * @param pmcData Player profile
*/ */
protected updateWaterFilters(waterFilterArea: HideoutArea, production: Production, isGeneratorOn: boolean, pmcData: IPmcData): void; protected updateWaterFilters(waterFilterArea: IBotHideoutArea, production: IProduction, isGeneratorOn: boolean, pmcData: IPmcData): void;
/** /**
* Get an adjusted water filter drain rate based on time elapsed since last run, * Get an adjusted water filter drain rate based on time elapsed since last run,
* handle edge case when craft time has gone on longer than total production time * handle edge case when craft time has gone on longer than total production time
@ -198,15 +217,15 @@ export declare class HideoutHelper {
* @param resourceUnitsConsumed * @param resourceUnitsConsumed
* @returns Upd * @returns Upd
*/ */
protected getAreaUpdObject(stackCount: number, resourceValue: number, resourceUnitsConsumed: number, isFoundInRaid: boolean): Upd; protected getAreaUpdObject(stackCount: number, resourceValue: number, resourceUnitsConsumed: number, isFoundInRaid: boolean): IUpd;
protected updateAirFilters(airFilterArea: HideoutArea, pmcData: IPmcData, isGeneratorOn: boolean): void; protected updateAirFilters(airFilterArea: IBotHideoutArea, pmcData: IPmcData, isGeneratorOn: boolean): void;
protected updateBitcoinFarm(pmcData: IPmcData, btcFarmCGs: number, isGeneratorOn: boolean): Production | undefined; protected updateBitcoinFarm(pmcData: IPmcData, btcProduction: IProductive, btcFarmCGs: number, isGeneratorOn: boolean): void;
/** /**
* Add bitcoin object to btc production products array and set progress time * Add bitcoin object to btc production products array and set progress time
* @param btcProd Bitcoin production object * @param btcProd Bitcoin production object
* @param coinCraftTimeSeconds Time to craft a bitcoin * @param coinCraftTimeSeconds Time to craft a bitcoin
*/ */
protected addBtcToProduction(btcProd: Production, coinCraftTimeSeconds: number): void; protected addBtcToProduction(btcProd: IProduction, coinCraftTimeSeconds: number): void;
/** /**
* Get number of ticks that have passed since hideout areas were last processed, reduced when generator is off * Get number of ticks that have passed since hideout areas were last processed, reduced when generator is off
* @param pmcData Player profile * @param pmcData Player profile
@ -248,7 +267,7 @@ export declare class HideoutHelper {
* @returns Seconds to reduce craft time by * @returns Seconds to reduce craft time by
*/ */
getSkillProductionTimeReduction(pmcData: IPmcData, productionTime: number, skill: SkillTypes, amountPerLevel: number): number; getSkillProductionTimeReduction(pmcData: IPmcData, productionTime: number, skill: SkillTypes, amountPerLevel: number): number;
isProduction(productive: Productive): productive is Production; isProduction(productive: IProductive): productive is IProduction;
/** /**
* Gather crafted BTC from hideout area and add to inventory * Gather crafted BTC from hideout area and add to inventory
* Reset production start timestamp if hideout area at full coin capacity * Reset production start timestamp if hideout area at full coin capacity
@ -286,5 +305,12 @@ export declare class HideoutHelper {
* @param activeDogtags Active dogtags in place of fame dogtag slots * @param activeDogtags Active dogtags in place of fame dogtag slots
* @returns combat bonus * @returns combat bonus
*/ */
protected getDogtagCombatSkillBonusPercent(pmcData: IPmcData, activeDogtags: Item[]): number; protected getDogtagCombatSkillBonusPercent(pmcData: IPmcData, activeDogtags: IItem[]): number;
/**
* The wall pollutes a profile with various temp buffs/debuffs,
* Remove them all
* @param wallAreaDb Hideout area data
* @param pmcData Player profile
*/
removeHideoutWallBuffsAndDebuffs(wallAreaDb: IHideoutArea, pmcData: IPmcData): void;
} }

View File

@ -1,122 +1,35 @@
import { QuestController } from "@spt/controllers/QuestController";
import { InventoryHelper } from "@spt/helpers/InventoryHelper"; import { InventoryHelper } from "@spt/helpers/InventoryHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { PaymentHelper } from "@spt/helpers/PaymentHelper"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { QuestHelper } from "@spt/helpers/QuestHelper";
import { IPmcData, IPostRaidPmcData } from "@spt/models/eft/common/IPmcData";
import { IQuestStatus, TraderInfo } from "@spt/models/eft/common/tables/IBotBase";
import { Item } from "@spt/models/eft/common/tables/IItem";
import { ISaveProgressRequestData } from "@spt/models/eft/inRaid/ISaveProgressRequestData";
import { IInRaidConfig } from "@spt/models/spt/config/IInRaidConfig"; import { IInRaidConfig } from "@spt/models/spt/config/IInRaidConfig";
import { ILostOnDeathConfig } from "@spt/models/spt/config/ILostOnDeathConfig"; import { ILostOnDeathConfig } from "@spt/models/spt/config/ILostOnDeathConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { SaveServer } from "@spt/servers/SaveServer";
import { DatabaseService } from "@spt/services/DatabaseService"; import { DatabaseService } from "@spt/services/DatabaseService";
import { LocalisationService } from "@spt/services/LocalisationService";
import { ProfileFixerService } from "@spt/services/ProfileFixerService";
import { RandomUtil } from "@spt/utils/RandomUtil";
import { TimeUtil } from "@spt/utils/TimeUtil";
import { ICloner } from "@spt/utils/cloners/ICloner"; import { ICloner } from "@spt/utils/cloners/ICloner";
import { ProfileHelper } from "./ProfileHelper";
import { QuestHelper } from "./QuestHelper";
export declare class InRaidHelper { export declare class InRaidHelper {
protected logger: ILogger; protected logger: ILogger;
protected timeUtil: TimeUtil;
protected saveServer: SaveServer;
protected itemHelper: ItemHelper;
protected databaseService: DatabaseService;
protected inventoryHelper: InventoryHelper; protected inventoryHelper: InventoryHelper;
protected itemHelper: ItemHelper;
protected configServer: ConfigServer;
protected cloner: ICloner;
protected databaseService: DatabaseService;
protected questController: QuestController;
protected profileHelper: ProfileHelper; protected profileHelper: ProfileHelper;
protected questHelper: QuestHelper; protected questHelper: QuestHelper;
protected paymentHelper: PaymentHelper;
protected localisationService: LocalisationService;
protected profileFixerService: ProfileFixerService;
protected configServer: ConfigServer;
protected randomUtil: RandomUtil;
protected cloner: ICloner;
protected lostOnDeathConfig: ILostOnDeathConfig; protected lostOnDeathConfig: ILostOnDeathConfig;
protected inRaidConfig: IInRaidConfig; protected inRaidConfig: IInRaidConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, saveServer: SaveServer, itemHelper: ItemHelper, databaseService: DatabaseService, inventoryHelper: InventoryHelper, profileHelper: ProfileHelper, questHelper: QuestHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, profileFixerService: ProfileFixerService, configServer: ConfigServer, randomUtil: RandomUtil, cloner: ICloner); constructor(logger: ILogger, inventoryHelper: InventoryHelper, itemHelper: ItemHelper, configServer: ConfigServer, cloner: ICloner, databaseService: DatabaseService, questController: QuestController, profileHelper: ProfileHelper, questHelper: QuestHelper);
/**
* Lookup quest item loss from lostOnDeath config
* @returns True if items should be removed from inventory
*/
shouldQuestItemsBeRemovedOnDeath(): boolean;
/**
* Check items array and add an upd object to money with a stack count of 1
* Single stack money items have no upd object and thus no StackObjectsCount, causing issues
* @param items Items array to check
*/
addStackCountToMoneyFromRaid(items: Item[]): void;
/**
* Reset a profile to a baseline, used post-raid
* Reset points earned during session property
* Increment exp
* @param profileData Profile to update
* @param saveProgressRequest post raid save data request data
* @param sessionID Session id
* @returns Reset profile object
*/
updateProfileBaseStats(profileData: IPmcData, saveProgressRequest: ISaveProgressRequestData, sessionID: string): void;
/** /**
* @deprecated
* Reset the skill points earned in a raid to 0, ready for next raid * Reset the skill points earned in a raid to 0, ready for next raid
* @param profile Profile to update * @param profile Profile to update
*/ */
protected resetSkillPointsEarnedDuringRaid(profile: IPmcData): void; protected resetSkillPointsEarnedDuringRaid(profile: IPmcData): void;
/** Check counters are correct in profile */
protected validateTaskConditionCounters(saveProgressRequest: ISaveProgressRequestData, profileData: IPmcData): void;
/**
* Update various serverPMC profile values; quests/limb hp/trader standing with values post-raic
* @param pmcData Server PMC profile
* @param saveProgressRequest Post-raid request data
* @param sessionId Session id
*/
updatePmcProfileDataPostRaid(pmcData: IPmcData, saveProgressRequest: ISaveProgressRequestData, sessionId: string): void;
/**
* Update scav quest values on server profile with updated values post-raid
* @param scavData Server scav profile
* @param saveProgressRequest Post-raid request data
* @param sessionId Session id
*/
updateScavProfileDataPostRaid(scavData: IPmcData, saveProgressRequest: ISaveProgressRequestData, sessionId: string): void;
/**
* Look for quests with a status different from what it began the raid with
* @param sessionId Player id
* @param pmcData Player profile
* @param preRaidQuests Quests prior to starting raid
* @param postRaidProfile Profile sent by client with post-raid quests
*/
protected processAlteredQuests(sessionId: string, pmcData: IPmcData, preRaidQuests: IQuestStatus[], postRaidProfile: IPostRaidPmcData): void;
protected handleFailRestartableQuestStatus(pmcData: IPmcData, postRaidProfile: IPostRaidPmcData, postRaidQuest: IQuestStatus): void;
/**
* Take body part effects from client profile and apply to server profile
* @param saveProgressRequest post-raid request
* @param profileData player profile on server
*/
protected transferPostRaidLimbEffectsToProfile(saveProgressRequest: ISaveProgressRequestData, profileData: IPmcData): void;
/**
* Adjust server trader settings if they differ from data sent by client
* @param tradersServerProfile Server
* @param tradersClientProfile Client
*/
protected applyTraderStandingAdjustments(tradersServerProfile: Record<string, TraderInfo>, tradersClientProfile: Record<string, TraderInfo>): void;
/**
* Transfer client achievements into profile
* @param profile Player pmc profile
* @param clientAchievements Achievements from client
*/
protected updateProfileAchievements(profile: IPmcData, clientAchievements: Record<string, number>): void;
/**
* Set the SPT inraid location Profile property to 'none'
* @param sessionID Session id
*/
protected setPlayerInRaidLocationStatusToNone(sessionID: string): void;
/**
* Iterate over inventory items and remove the property that defines an item as Found in Raid
* Only removes property if item had FiR when entering raid
* @param postRaidProfile profile to update items for
* @returns Updated profile with SpawnedInSession removed
*/
removeSpawnedInSessionPropertyFromItems(postRaidProfile: IPostRaidPmcData): IPostRaidPmcData;
/** /**
* Update a players inventory post-raid * Update a players inventory post-raid
* Remove equipped items from pre-raid * Remove equipped items from pre-raid
@ -126,7 +39,18 @@ export declare class InRaidHelper {
* @param serverProfile Profile to update * @param serverProfile Profile to update
* @param postRaidProfile Profile returned by client after a raid * @param postRaidProfile Profile returned by client after a raid
*/ */
setInventory(sessionID: string, serverProfile: IPmcData, postRaidProfile: IPmcData): void; setInventory(sessionID: string, serverProfile: IPmcData, postRaidProfile: IPmcData, isSurvived: boolean, isTransfer: boolean): void;
/**
* Remove FiR status from items
* @param items Items to process
*/
protected removeFiRStatusFromCertainItems(items: IItem[]): void;
/**
* Add items from one parameter into another
* @param itemsToAdd Items we want to add
* @param serverInventoryItems Location to add items to
*/
protected addItemsToInventory(itemsToAdd: IItem[], serverInventoryItems: IItem[]): void;
/** /**
* Clear PMC inventory of all items except those that are exempt * Clear PMC inventory of all items except those that are exempt
* Used post-raid to remove items after death * Used post-raid to remove items after death
@ -134,29 +58,24 @@ export declare class InRaidHelper {
* @param sessionId Session id * @param sessionId Session id
*/ */
deleteInventory(pmcData: IPmcData, sessionId: string): void; deleteInventory(pmcData: IPmcData, sessionId: string): void;
/**
* Remove FiR status from designated container
* @param sessionId Session id
* @param pmcData Player profile
* @param secureContainerSlotId Container slot id to find items for and remove FiR from
*/
removeFiRStatusFromItemsInContainer(sessionId: string, pmcData: IPmcData, secureContainerSlotId: string): void;
/** /**
* Get an array of items from a profile that will be lost on death * Get an array of items from a profile that will be lost on death
* @param pmcProfile Profile to get items from * @param pmcProfile Profile to get items from
* @returns Array of items lost on death * @returns Array of items lost on death
*/ */
protected getInventoryItemsLostOnDeath(pmcProfile: IPmcData): Item[]; protected getInventoryItemsLostOnDeath(pmcProfile: IPmcData): IItem[];
/**
* 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 * Does the provided items slotId mean its kept on the player after death
* @pmcData Player profile * @pmcData Player profile
* @itemToCheck Item to check should be kept * @itemToCheck Item to check should be kept
* @returns true if item is kept after death * @returns true if item is kept after death
*/ */
protected isItemKeptAfterDeath(pmcData: IPmcData, itemToCheck: Item): boolean; protected isItemKeptAfterDeath(pmcData: IPmcData, itemToCheck: IItem): boolean;
/**
* Return the equipped items from a players inventory
* @param items Players inventory to search through
* @returns an array of equipped items
*/
getPlayerGear(items: Item[]): Item[];
} }

View File

@ -6,8 +6,8 @@ import { PresetHelper } from "@spt/helpers/PresetHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { TraderAssortHelper } from "@spt/helpers/TraderAssortHelper"; import { TraderAssortHelper } from "@spt/helpers/TraderAssortHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { Inventory } from "@spt/models/eft/common/tables/IBotBase"; import { IInventory } from "@spt/models/eft/common/tables/IBotBase";
import { Item, Upd } from "@spt/models/eft/common/tables/IItem"; import { IItem, IItemLocation, IUpd } from "@spt/models/eft/common/tables/IItem";
import { IAddItemDirectRequest } from "@spt/models/eft/inventory/IAddItemDirectRequest"; import { IAddItemDirectRequest } from "@spt/models/eft/inventory/IAddItemDirectRequest";
import { IAddItemsDirectRequest } from "@spt/models/eft/inventory/IAddItemsDirectRequest"; import { IAddItemsDirectRequest } from "@spt/models/eft/inventory/IAddItemsDirectRequest";
import { IInventoryMergeRequestData } from "@spt/models/eft/inventory/IInventoryMergeRequestData"; import { IInventoryMergeRequestData } from "@spt/models/eft/inventory/IInventoryMergeRequestData";
@ -16,7 +16,7 @@ import { IInventoryRemoveRequestData } from "@spt/models/eft/inventory/IInventor
import { IInventorySplitRequestData } from "@spt/models/eft/inventory/IInventorySplitRequestData"; import { IInventorySplitRequestData } from "@spt/models/eft/inventory/IInventorySplitRequestData";
import { IInventoryTransferRequestData } from "@spt/models/eft/inventory/IInventoryTransferRequestData"; import { IInventoryTransferRequestData } from "@spt/models/eft/inventory/IInventoryTransferRequestData";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { IInventoryConfig, RewardDetails } from "@spt/models/spt/config/IInventoryConfig"; import { IInventoryConfig, IRewardDetails } from "@spt/models/spt/config/IInventoryConfig";
import { IOwnerInventoryItems } from "@spt/models/spt/inventory/IOwnerInventoryItems"; import { IOwnerInventoryItems } from "@spt/models/spt/inventory/IOwnerInventoryItems";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
@ -65,33 +65,33 @@ export declare class InventoryHelper {
* @param itemWithChildren An item * @param itemWithChildren An item
* @param foundInRaid Item was found in raid * @param foundInRaid Item was found in raid
*/ */
protected setFindInRaidStatusForItem(itemWithChildren: Item[], foundInRaid: boolean): void; protected setFindInRaidStatusForItem(itemWithChildren: IItem[], foundInRaid: boolean): void;
/** /**
* Remove properties from a Upd object used by a trader/ragfair that are unnecessary to a player * Remove properties from a Upd object used by a trader/ragfair that are unnecessary to a player
* @param upd Object to update * @param upd Object to update
*/ */
protected removeTraderRagfairRelatedUpdProperties(upd: Upd): void; protected removeTraderRagfairRelatedUpdProperties(upd: IUpd): void;
/** /**
* Can all probided items be added into player inventory * Can all provided items be added into player inventory
* @param sessionId Player id * @param sessionId Player id
* @param itemsWithChildren array of items with children to try and fit * @param itemsWithChildren array of items with children to try and fit
* @returns True all items fit * @returns True all items fit
*/ */
canPlaceItemsInInventory(sessionId: string, itemsWithChildren: Item[][]): boolean; canPlaceItemsInInventory(sessionId: string, itemsWithChildren: IItem[][]): boolean;
/** /**
* Do the provided items all fit into the grid * Do the provided items all fit into the grid
* @param containerFS2D Container grid to fit items into * @param containerFS2D Container grid to fit items into
* @param itemsWithChildren items to try and fit into grid * @param itemsWithChildren items to try and fit into grid
* @returns True all fit * @returns True all fit
*/ */
canPlaceItemsInContainer(containerFS2D: number[][], itemsWithChildren: Item[][]): boolean; canPlaceItemsInContainer(containerFS2D: number[][], itemsWithChildren: IItem[][]): boolean;
/** /**
* Does an item fit into a container grid * Does an item fit into a container grid
* @param containerFS2D Container grid * @param containerFS2D Container grid
* @param itemWithChildren item to check fits * @param itemWithChildren item to check fits
* @returns True it fits * @returns True it fits
*/ */
canPlaceItemInContainer(containerFS2D: number[][], itemWithChildren: Item[]): boolean; canPlaceItemInContainer(containerFS2D: number[][], itemWithChildren: IItem[]): boolean;
/** /**
* Find a free location inside a container to fit the item * Find a free location inside a container to fit the item
* @param containerFS2D Container grid to add item to * @param containerFS2D Container grid to add item to
@ -99,7 +99,7 @@ export declare class InventoryHelper {
* @param containerId Id of the container we're fitting item into * @param containerId Id of the container we're fitting item into
* @param desiredSlotId slot id value to use, default is "hideout" * @param desiredSlotId slot id value to use, default is "hideout"
*/ */
placeItemInContainer(containerFS2D: number[][], itemWithChildren: Item[], containerId: string, desiredSlotId?: string): void; placeItemInContainer(containerFS2D: number[][], itemWithChildren: IItem[], containerId: string, desiredSlotId?: string): void;
/** /**
* Find a location to place an item into inventory and place it * Find a location to place an item into inventory and place it
* @param stashFS2D 2-dimensional representation of the container slots * @param stashFS2D 2-dimensional representation of the container slots
@ -109,7 +109,7 @@ export declare class InventoryHelper {
* @param useSortingTable Should sorting table to be used if main stash has no space * @param useSortingTable Should sorting table to be used if main stash has no space
* @param output output to send back to client * @param output output to send back to client
*/ */
protected placeItemInInventory(stashFS2D: number[][], sortingTableFS2D: number[][], itemWithChildren: Item[], playerInventory: Inventory, useSortingTable: boolean, output: IItemEventRouterResponse): void; protected placeItemInInventory(stashFS2D: number[][], sortingTableFS2D: number[][], itemWithChildren: IItem[], playerInventory: IInventory, useSortingTable: boolean, output: IItemEventRouterResponse): void;
/** /**
* Handle Remove event * Handle Remove event
* Remove item from player inventory + insured items array * Remove item from player inventory + insured items array
@ -144,7 +144,7 @@ export declare class InventoryHelper {
* @param inventoryItems * @param inventoryItems
* @returns [width, height] * @returns [width, height]
*/ */
getItemSize(itemTpl: string, itemID: string, inventoryItems: Item[]): number[]; getItemSize(itemTpl: string, itemID: string, inventoryItems: IItem[]): number[];
/** /**
* Calculates the size of an item including attachements * Calculates the size of an item including attachements
* takes into account if item is folded * takes into account if item is folded
@ -162,14 +162,16 @@ export declare class InventoryHelper {
*/ */
protected getBlankContainerMap(containerH: number, containerY: number): number[][]; protected getBlankContainerMap(containerH: number, containerY: number): number[][];
/** /**
* Get a 2d mapping of a container with what grid slots are filled
* @param containerH Horizontal size of container * @param containerH Horizontal size of container
* @param containerV Vertical size of container * @param containerV Vertical size of container
* @param itemList * @param itemList Players inventory items
* @param containerId Id of the container * @param containerId Id of the container
* @returns Two-dimensional representation of container * @returns Two-dimensional representation of container
*/ */
getContainerMap(containerH: number, containerV: number, itemList: Item[], containerId: string): number[][]; getContainerMap(containerH: number, containerV: number, itemList: IItem[], containerId: string): number[][];
protected getInventoryItemHash(inventoryItem: Item[]): InventoryHelper.InventoryItemHash; protected isVertical(itemLocation: IItemLocation): boolean;
protected getInventoryItemHash(inventoryItem: IItem[]): InventoryHelper.InventoryItemHash;
/** /**
* Return the inventory that needs to be modified (scav/pmc etc) * Return the inventory that needs to be modified (scav/pmc etc)
* Changes made to result apply to character inventory * Changes made to result apply to character inventory
@ -217,7 +219,7 @@ export declare class InventoryHelper {
* @param toItems Inventory of the destination * @param toItems Inventory of the destination
* @param request Move request * @param request Move request
*/ */
moveItemToProfile(sourceItems: Item[], toItems: Item[], request: IInventoryMoveRequestData): void; moveItemToProfile(sourceItems: IItem[], toItems: IItem[], request: IInventoryMoveRequestData): void;
/** /**
* Internal helper function to move item within the same profile_f. * Internal helper function to move item within the same profile_f.
* @param pmcData profile to edit * @param pmcData profile to edit
@ -225,7 +227,7 @@ export declare class InventoryHelper {
* @param moveRequest client move request * @param moveRequest client move request
* @returns True if move was successful * @returns True if move was successful
*/ */
moveItemInternal(pmcData: IPmcData, inventoryItems: Item[], moveRequest: IInventoryMoveRequestData): { moveItemInternal(pmcData: IPmcData, inventoryItems: IItem[], moveRequest: IInventoryMoveRequestData): {
success: boolean; success: boolean;
errorMessage?: string; errorMessage?: string;
}; };
@ -234,17 +236,17 @@ export declare class InventoryHelper {
* @param pmcData Player profile * @param pmcData Player profile
* @param itemBeingMoved item being moved * @param itemBeingMoved item being moved
*/ */
protected updateFastPanelBinding(pmcData: IPmcData, itemBeingMoved: Item): void; protected updateFastPanelBinding(pmcData: IPmcData, itemBeingMoved: IItem): void;
/** /**
* Internal helper function to handle cartridges in inventory if any of them exist. * Internal helper function to handle cartridges in inventory if any of them exist.
*/ */
protected handleCartridges(items: Item[], request: IInventoryMoveRequestData): void; protected handleCartridges(items: IItem[], request: IInventoryMoveRequestData): void;
/** /**
* Get details for how a random loot container should be handled, max rewards, possible reward tpls * Get details for how a random loot container should be handled, max rewards, possible reward tpls
* @param itemTpl Container being opened * @param itemTpl Container being opened
* @returns Reward details * @returns Reward details
*/ */
getRandomLootContainerRewardDetails(itemTpl: string): RewardDetails; getRandomLootContainerRewardDetails(itemTpl: string): IRewardDetails;
getInventoryConfig(): IInventoryConfig; getInventoryConfig(): IInventoryConfig;
/** /**
* Recursively checks if the given item is * Recursively checks if the given item is
@ -254,12 +256,21 @@ export declare class InventoryHelper {
* @param itemToCheck Item to look for * @param itemToCheck Item to look for
* @returns True if item exists inside stash * @returns True if item exists inside stash
*/ */
isItemInStash(pmcData: IPmcData, itemToCheck: Item): boolean; isItemInStash(pmcData: IPmcData, itemToCheck: IItem): boolean;
validateInventoryUsesMonogoIds(itemsToValidate: IItem[]): void;
/**
* Does the provided item have a root item with the provided id
* @param pmcData Profile with items
* @param item Item to check
* @param rootId Root item id to check for
* @returns True when item has rootId, false when not
*/
doesItemHaveRootId(pmcData: IPmcData, item: IItem, rootId: string): boolean;
} }
declare namespace InventoryHelper { declare namespace InventoryHelper {
interface InventoryItemHash { interface InventoryItemHash {
byItemId: Record<string, Item>; byItemId: Record<string, IItem>;
byParentId: Record<string, Item[]>; byParentId: Record<string, IItem[]>;
} }
} }
export {}; export {};

View File

@ -1,8 +1,8 @@
import { HandbookHelper } from "@spt/helpers/HandbookHelper"; import { HandbookHelper } from "@spt/helpers/HandbookHelper";
import { IStaticAmmoDetails } from "@spt/models/eft/common/ILocation"; import { IStaticAmmoDetails } from "@spt/models/eft/common/ILocation";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { InsuredItem } from "@spt/models/eft/common/tables/IBotBase"; import { IInsuredItem } from "@spt/models/eft/common/tables/IBotBase";
import { Item, Repairable, Upd } from "@spt/models/eft/common/tables/IItem"; import { IItem, IUpd, IUpdRepairable } from "@spt/models/eft/common/tables/IItem";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { ItemTpl } from "@spt/models/enums/ItemTpl"; import { ItemTpl } from "@spt/models/enums/ItemTpl";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
@ -42,7 +42,7 @@ export declare class ItemHelper {
* @param slotId OPTIONAL - slotid of desired item * @param slotId OPTIONAL - slotid of desired item
* @returns True if pool contains item * @returns True if pool contains item
*/ */
hasItemWithTpl(itemPool: Item[], item: ItemTpl, slotId?: string): boolean; hasItemWithTpl(itemPool: IItem[], item: ItemTpl, slotId?: string): boolean;
/** /**
* Get the first item from provided pool with the desired tpl * Get the first item from provided pool with the desired tpl
* @param itemPool Item collection to search * @param itemPool Item collection to search
@ -50,7 +50,7 @@ export declare class ItemHelper {
* @param slotId OPTIONAL - slotid of desired item * @param slotId OPTIONAL - slotid of desired item
* @returns Item or undefined * @returns Item or undefined
*/ */
getItemFromPoolByTpl(itemPool: Item[], item: ItemTpl, slotId?: string): Item | undefined; getItemFromPoolByTpl(itemPool: IItem[], item: ItemTpl, slotId?: string): IItem | undefined;
/** /**
* This method will compare two items (with all its children) and see if the are equivalent. * This method will compare two items (with all its children) and see if the are equivalent.
* This method will NOT compare IDs on the items * This method will NOT compare IDs on the items
@ -59,7 +59,7 @@ export declare class ItemHelper {
* @param compareUpdProperties Upd properties to compare between the items * @param compareUpdProperties Upd properties to compare between the items
* @returns true if they are the same, false if they arent * @returns true if they are the same, false if they arent
*/ */
isSameItems(item1: Item[], item2: Item[], compareUpdProperties?: Set<string>): boolean; isSameItems(item1: IItem[], item2: IItem[], compareUpdProperties?: Set<string>): boolean;
/** /**
* This method will compare two items and see if the are equivalent. * This method will compare two items and see if the are equivalent.
* This method will NOT compare IDs on the items * This method will NOT compare IDs on the items
@ -68,13 +68,13 @@ export declare class ItemHelper {
* @param compareUpdProperties Upd properties to compare between the items * @param compareUpdProperties Upd properties to compare between the items
* @returns true if they are the same, false if they arent * @returns true if they are the same, false if they arent
*/ */
isSameItem(item1: Item, item2: Item, compareUpdProperties?: Set<string>): boolean; isSameItem(item1: IItem, item2: IItem, compareUpdProperties?: Set<string>): boolean;
/** /**
* Helper method to generate a Upd based on a template * Helper method to generate a Upd based on a template
* @param itemTemplate the item template to generate a Upd for * @param itemTemplate the item template to generate a Upd for
* @returns A Upd with all the default properties set * @returns A Upd with all the default properties set
*/ */
generateUpdForItem(itemTemplate: ITemplateItem): Upd; generateUpdForItem(itemTemplate: ITemplateItem): IUpd;
/** /**
* Checks if a tpl is a valid item. Valid meaning that it's an item that be stored in stash * Checks if a tpl is a valid item. Valid meaning that it's an item that be stored in stash
* Valid means: * Valid means:
@ -171,7 +171,7 @@ export declare class ItemHelper {
* @param item Item to update * @param item Item to update
* @returns Fixed item * @returns Fixed item
*/ */
fixItemStackCount(item: Item): Item; fixItemStackCount(item: IItem): IItem;
/** /**
* Get cloned copy of all item data from items.json * Get cloned copy of all item data from items.json
* @returns array of ITemplateItem objects * @returns array of ITemplateItem objects
@ -191,7 +191,7 @@ export declare class ItemHelper {
* @param skipArmorItemsWithoutDurability Skip over armor items without durability * @param skipArmorItemsWithoutDurability Skip over armor items without durability
* @returns % quality modifer between 0 and 1 * @returns % quality modifer between 0 and 1
*/ */
getItemQualityModifierForItems(items: Item[], skipArmorItemsWithoutDurability?: boolean): number; getItemQualityModifierForItems(items: IItem[], skipArmorItemsWithoutDurability?: boolean): number;
/** /**
* get normalized value (0-1) based on item condition * get normalized value (0-1) based on item condition
* Will return -1 for base armor items with 0 durability * Will return -1 for base armor items with 0 durability
@ -199,7 +199,7 @@ export declare class ItemHelper {
* @param skipArmorItemsWithoutDurability return -1 for armor items that have maxdurability of 0 * @param skipArmorItemsWithoutDurability return -1 for armor items that have maxdurability of 0
* @returns Number between 0 and 1 * @returns Number between 0 and 1
*/ */
getItemQualityModifier(item: Item, skipArmorItemsWithoutDurability?: boolean): number; getItemQualityModifier(item: IItem, skipArmorItemsWithoutDurability?: boolean): number;
/** /**
* Get a quality value based on a repairable items (weapon/armor) current state between current and max durability * Get a quality value based on a repairable items (weapon/armor) current state between current and max durability
* @param itemDetails Db details for item we want quality value for * @param itemDetails Db details for item we want quality value for
@ -207,14 +207,14 @@ export declare class ItemHelper {
* @param item Item quality value is for * @param item Item quality value is for
* @returns A number between 0 and 1 * @returns A number between 0 and 1
*/ */
protected getRepairableItemQualityValue(itemDetails: ITemplateItem, repairable: Repairable, item: Item): number; protected getRepairableItemQualityValue(itemDetails: ITemplateItem, repairable: IUpdRepairable, item: IItem): number;
/** /**
* Recursive function that looks at every item from parameter and gets their childrens Ids + includes parent item in results * Recursive function that looks at every item from parameter and gets their childrens Ids + includes parent item in results
* @param items Array of items (item + possible children) * @param items Array of items (item + possible children)
* @param baseItemId Parent items id * @param baseItemId Parent items id
* @returns an array of strings * @returns an array of strings
*/ */
findAndReturnChildrenByItems(items: Item[], baseItemId: string): string[]; findAndReturnChildrenByItems(items: IItem[], baseItemId: string): string[];
/** /**
* A variant of findAndReturnChildren where the output is list of item objects instead of their ids. * A variant of findAndReturnChildren where the output is list of item objects instead of their ids.
* @param items Array of items (item + possible children) * @param items Array of items (item + possible children)
@ -222,20 +222,20 @@ export declare class ItemHelper {
* @param modsOnly Include only mod items, exclude items stored inside root item * @param modsOnly Include only mod items, exclude items stored inside root item
* @returns An array of Item objects * @returns An array of Item objects
*/ */
findAndReturnChildrenAsItems(items: Item[], baseItemId: string, modsOnly?: boolean): Item[]; findAndReturnChildrenAsItems(items: IItem[], baseItemId: string, modsOnly?: boolean): IItem[];
/** /**
* Find children of the item in a given assort (weapons parts for example, need recursive loop function) * Find children of the item in a given assort (weapons parts for example, need recursive loop function)
* @param itemIdToFind Template id of item to check for * @param itemIdToFind Template id of item to check for
* @param assort Array of items to check in * @param assort Array of items to check in
* @returns Array of children of requested item * @returns Array of children of requested item
*/ */
findAndReturnChildrenByAssort(itemIdToFind: string, assort: Item[]): Item[]; findAndReturnChildrenByAssort(itemIdToFind: string, assort: IItem[]): IItem[];
/** /**
* Check if the passed in item has buy count restrictions * Check if the passed in item has buy count restrictions
* @param itemToCheck Item to check * @param itemToCheck Item to check
* @returns true if it has buy restrictions * @returns true if it has buy restrictions
*/ */
hasBuyRestrictions(itemToCheck: Item): boolean; hasBuyRestrictions(itemToCheck: IItem): boolean;
/** /**
* is the passed in template id a dog tag * is the passed in template id a dog tag
* @param tpl Template id to check * @param tpl Template id to check
@ -247,7 +247,7 @@ export declare class ItemHelper {
* @param item * @param item
* @returns "slotId OR slotid,locationX,locationY" * @returns "slotId OR slotid,locationX,locationY"
*/ */
getChildId(item: Item): string; getChildId(item: IItem): string;
/** /**
* Can the passed in item be stacked * Can the passed in item be stacked
* @param tpl item to check * @param tpl item to check
@ -259,21 +259,28 @@ export declare class ItemHelper {
* @param itemToSplit Item to split into smaller stacks * @param itemToSplit Item to split into smaller stacks
* @returns Array of root item + children * @returns Array of root item + children
*/ */
splitStack(itemToSplit: Item): Item[]; splitStack(itemToSplit: IItem): IItem[];
/** /**
* Turn items like money into separate stacks that adhere to max stack size * Turn items like money into separate stacks that adhere to max stack size
* @param itemToSplit Item to split into smaller stacks * @param itemToSplit Item to split into smaller stacks
* @returns * @returns
*/ */
splitStackIntoSeparateItems(itemToSplit: Item): Item[][]; splitStackIntoSeparateItems(itemToSplit: IItem): IItem[][];
/** /**
* Find Barter items from array of items * Find Barter items from array of items
* @param {string} by tpl or id * @param {string} by tpl or id
* @param {Item[]} itemsToSearch Array of items to iterate over * @param {IItem[]} itemsToSearch Array of items to iterate over
* @param {string} desiredBarterItemIds * @param {string} desiredBarterItemIds
* @returns Array of Item objects * @returns Array of Item objects
*/ */
findBarterItems(by: "tpl" | "id", itemsToSearch: Item[], desiredBarterItemIds: string | string[]): Item[]; findBarterItems(by: "tpl" | "id", itemsToSearch: IItem[], desiredBarterItemIds: string | string[]): IItem[];
/**
* Replace the _id value for base item + all children that are children of it
* REPARENTS ROOT ITEM ID, NOTHING ELSE
* @param itemWithChildren Item with mods to update
* @param newId new id to add on chidren of base item
*/
replaceRootItemID(itemWithChildren: IItem[], newId?: string): void;
/** /**
* Regenerate all GUIDs with new IDs, for the exception of special item types (e.g. quest, sorting table, etc.) This * Regenerate all GUIDs with new IDs, for the exception of special item types (e.g. quest, sorting table, etc.) This
* function will not mutate the original items array, but will return a new array with new GUIDs. * function will not mutate the original items array, but will return a new array with new GUIDs.
@ -284,13 +291,13 @@ export declare class ItemHelper {
* @param fastPanel Quick slot panel * @param fastPanel Quick slot panel
* @returns Item[] * @returns Item[]
*/ */
replaceIDs(originalItems: Item[], pmcData?: IPmcData, insuredItems?: InsuredItem[], fastPanel?: any): Item[]; replaceIDs(originalItems: IItem[], pmcData?: IPmcData, insuredItems?: IInsuredItem[], fastPanel?: any): IItem[];
/** /**
* Mark the passed in array of items as found in raid. * Mark the passed in array of items as found in raid.
* Modifies passed in items * Modifies passed in items
* @param items The list of items to mark as FiR * @param items The list of items to mark as FiR
*/ */
setFoundInRaid(items: Item[]): void; setFoundInRaid(items: IItem[]): void;
/** /**
* 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 * 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 Items tpl to check parents of * @param {string} tpl Items tpl to check parents of
@ -315,7 +322,7 @@ export declare class ItemHelper {
* @param parent The parent of the item to be checked * @param parent The parent of the item to be checked
* @returns True if the item is actually moddable, false if it is not, and undefined if the check cannot be performed. * @returns True if the item is actually moddable, false if it is not, and undefined if the check cannot be performed.
*/ */
isRaidModdable(item: Item, parent: Item): boolean | undefined; isRaidModdable(item: IItem, parent: IItem): boolean | undefined;
/** /**
* Retrieves the main parent item for a given attachment item. * Retrieves the main parent item for a given attachment item.
* *
@ -332,14 +339,14 @@ export declare class ItemHelper {
* @param itemsMap - A Map containing item IDs mapped to their corresponding Item objects for quick lookup. * @param itemsMap - A Map containing item IDs mapped to their corresponding Item objects for quick lookup.
* @returns The Item object representing the top-most parent of the given item, or `undefined` if no such parent exists. * @returns The Item object representing the top-most parent of the given item, or `undefined` if no such parent exists.
*/ */
getAttachmentMainParent(itemId: string, itemsMap: Map<string, Item>): Item | undefined; getAttachmentMainParent(itemId: string, itemsMap: Map<string, IItem>): IItem | undefined;
/** /**
* Determines if an item is an attachment that is currently attached to it's parent item. * Determines if an item is an attachment that is currently attached to it's parent item.
* *
* @param item The item to check. * @param item The item to check.
* @returns true if the item is attached attachment, otherwise false. * @returns true if the item is attached attachment, otherwise false.
*/ */
isAttachmentAttached(item: Item): boolean; isAttachmentAttached(item: IItem): boolean;
/** /**
* Retrieves the equipment parent item for a given item. * Retrieves the equipment parent item for a given item.
* *
@ -355,14 +362,14 @@ export declare class ItemHelper {
* @param itemsMap - A Map containing item IDs mapped to their corresponding Item objects for quick lookup. * @param itemsMap - A Map containing item IDs mapped to their corresponding Item objects for quick lookup.
* @returns The Item object representing the equipment parent of the given item, or `undefined` if no such parent exists. * @returns The Item object representing the equipment parent of the given item, or `undefined` if no such parent exists.
*/ */
getEquipmentParent(itemId: string, itemsMap: Map<string, Item>): Item | undefined; getEquipmentParent(itemId: string, itemsMap: Map<string, IItem>): IItem | undefined;
/** /**
* Get the inventory size of an item * Get the inventory size of an item
* @param items Item with children * @param items Item with children
* @param rootItemId * @param rootItemId
* @returns ItemSize object (width and height) * @returns ItemSize object (width and height)
*/ */
getItemSize(items: Item[], rootItemId: string): ItemHelper.ItemSize; getItemSize(items: IItem[], rootItemId: string): ItemHelper.IItemSize;
/** /**
* Get a random cartridge from an items Filter property * Get a random cartridge from an items Filter property
* @param item Db item template to look up Cartridge filter values from * @param item Db item template to look up Cartridge filter values from
@ -374,21 +381,21 @@ export declare class ItemHelper {
* @param ammoBox Box to add cartridges to * @param ammoBox Box to add cartridges to
* @param ammoBoxDetails Item template from items db * @param ammoBoxDetails Item template from items db
*/ */
addCartridgesToAmmoBox(ammoBox: Item[], ammoBoxDetails: ITemplateItem): void; addCartridgesToAmmoBox(ammoBox: IItem[], ammoBoxDetails: ITemplateItem): void;
/** /**
* Add a single stack of cartridges to the ammo box * Add a single stack of cartridges to the ammo box
* @param ammoBox Box to add cartridges to * @param ammoBox Box to add cartridges to
* @param ammoBoxDetails Item template from items db * @param ammoBoxDetails Item template from items db
*/ */
addSingleStackCartridgesToAmmoBox(ammoBox: Item[], ammoBoxDetails: ITemplateItem): void; addSingleStackCartridgesToAmmoBox(ammoBox: IItem[], ammoBoxDetails: ITemplateItem): void;
/** /**
* Check if item is stored inside of a container * Check if item is stored inside of a container
* @param item Item to check is inside of container * @param itemToCheck Item to check is inside of container
* @param desiredContainerSlotId Name of slot to check item is in e.g. SecuredContainer/Backpack * @param desiredContainerSlotId Name of slot to check item is in e.g. SecuredContainer/Backpack
* @param items Inventory with child parent items to check * @param items Inventory with child parent items to check
* @returns True when item is in container * @returns True when item is in container
*/ */
itemIsInsideContainer(item: Item, desiredContainerSlotId: string, items: Item[]): boolean; itemIsInsideContainer(itemToCheck: IItem, desiredContainerSlotId: string, items: IItem[]): boolean;
/** /**
* Add child items (cartridges) to a magazine * Add child items (cartridges) to a magazine
* @param magazine Magazine to add child items to * @param magazine Magazine to add child items to
@ -399,15 +406,15 @@ export declare class ItemHelper {
* @param defaultCartridgeTpl Cartridge to use when none found * @param defaultCartridgeTpl Cartridge to use when none found
* @param weapon Weapon the magazine will be used for (if passed in uses Chamber as whitelist) * @param weapon Weapon the magazine will be used for (if passed in uses Chamber as whitelist)
*/ */
fillMagazineWithRandomCartridge(magazine: Item[], magTemplate: ITemplateItem, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, caliber?: string, minSizePercent?: number, defaultCartridgeTpl?: string, weapon?: ITemplateItem): void; fillMagazineWithRandomCartridge(magazine: IItem[], magTemplate: ITemplateItem, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, caliber?: string, minSizePercent?: number, defaultCartridgeTpl?: string, weapon?: ITemplateItem): void;
/** /**
* Add child items to a magazine of a specific cartridge * Add child items to a magazine of a specific cartridge
* @param magazineWithChildCartridges Magazine to add child items to * @param magazineWithChildCartridges Magazine to add child items to
* @param magTemplate Db template of magazine * @param magTemplate Db template of magazine
* @param cartridgeTpl Cartridge to add to magazine * @param cartridgeTpl Cartridge to add to magazine
* @param minSizePercent % the magazine must be filled to * @param minSizeMultiplier % the magazine must be filled to
*/ */
fillMagazineWithCartridge(magazineWithChildCartridges: Item[], magTemplate: ITemplateItem, cartridgeTpl: string, minSizePercent?: number): void; fillMagazineWithCartridge(magazineWithChildCartridges: IItem[], magTemplate: ITemplateItem, cartridgeTpl: string, minSizeMultiplier?: number): void;
/** /**
* Choose a random bullet type from the list of possible a magazine has * Choose a random bullet type from the list of possible a magazine has
* @param magTemplate Magazine template from Db * @param magTemplate Magazine template from Db
@ -432,13 +439,13 @@ export declare class ItemHelper {
* @param foundInRaid OPTIONAL - Are cartridges found in raid (SpawnedInSession) * @param foundInRaid OPTIONAL - Are cartridges found in raid (SpawnedInSession)
* @returns Item * @returns Item
*/ */
createCartridges(parentId: string, ammoTpl: string, stackCount: number, location: number, foundInRaid?: boolean): Item; createCartridges(parentId: string, ammoTpl: string, stackCount: number, location: number, foundInRaid?: boolean): IItem;
/** /**
* Get the size of a stack, return 1 if no stack object count property found * Get the size of a stack, return 1 if no stack object count property found
* @param item Item to get stack size of * @param item Item to get stack size of
* @returns size of stack * @returns size of stack
*/ */
getItemStackSize(item: Item): number; getItemStackSize(item: IItem): number;
/** /**
* Get the name of an item from the locale file using the item tpl * Get the name of an item from the locale file using the item tpl
* @param itemTpl Tpl of item to get name of * @param itemTpl Tpl of item to get name of
@ -459,7 +466,7 @@ export declare class ItemHelper {
* @param requiredOnly Only add required mods * @param requiredOnly Only add required mods
* @returns Item with children * @returns Item with children
*/ */
addChildSlotItems(itemToAdd: Item[], itemToAddTemplate: ITemplateItem, modSpawnChanceDict?: Record<string, number>, requiredOnly?: boolean): Item[]; addChildSlotItems(itemToAdd: IItem[], itemToAddTemplate: ITemplateItem, modSpawnChanceDict?: Record<string, number>, requiredOnly?: boolean): IItem[];
/** /**
* Get a compatible tpl from the array provided where it is not found in the provided incompatible mod tpls parameter * Get a compatible tpl from the array provided where it is not found in the provided incompatible mod tpls parameter
* @param possibleTpls Tpls to randomly choose from * @param possibleTpls Tpls to randomly choose from
@ -484,14 +491,14 @@ export declare class ItemHelper {
* @param itemWithChildren Primary item + children of primary item * @param itemWithChildren Primary item + children of primary item
* @returns Item array with updated IDs * @returns Item array with updated IDs
*/ */
reparentItemAndChildren(rootItem: Item, itemWithChildren: Item[]): Item[]; reparentItemAndChildren(rootItem: IItem, itemWithChildren: IItem[]): IItem[];
/** /**
* Update a root items _id property value to be unique * Update a root items _id property value to be unique
* @param itemWithChildren Item to update root items _id property * @param itemWithChildren Item to update root items _id property
* @param newId Optional: new id to use * @param newId Optional: new id to use
* @returns New root id * @returns New root id
*/ */
remapRootItemId(itemWithChildren: Item[], newId?: string): string; remapRootItemId(itemWithChildren: IItem[], newId?: string): string;
/** /**
* Adopts orphaned items by resetting them as root "hideout" items. Helpful in situations where a parent has been * Adopts orphaned items by resetting them as root "hideout" items. Helpful in situations where a parent has been
* deleted from a group of items and there are children still referencing the missing parent. This method will * deleted from a group of items and there are children still referencing the missing parent. This method will
@ -501,24 +508,42 @@ export declare class ItemHelper {
* @param items Array of Items that should be adjusted. * @param items Array of Items that should be adjusted.
* @returns Array of Items that have been adopted. * @returns Array of Items that have been adopted.
*/ */
adoptOrphanedItems(rootId: string, items: Item[]): Item[]; adoptOrphanedItems(rootId: string, items: IItem[]): IItem[];
/** /**
* Populate a Map object of items for quick lookup using their ID. * Populate a Map object of items for quick lookup using their ID.
* *
* @param items An array of Items that should be added to a Map. * @param items An array of Items that should be added to a Map.
* @returns A Map where the keys are the item IDs and the values are the corresponding Item objects. * @returns A Map where the keys are the item IDs and the values are the corresponding Item objects.
*/ */
generateItemsMap(items: Item[]): Map<string, Item>; generateItemsMap(items: IItem[]): Map<string, IItem>;
/** /**
* Add a blank upd object to passed in item if it does not exist already * Add a blank upd object to passed in item if it does not exist already
* @param item item to add upd to * @param item item to add upd to
* @param warningMessageWhenMissing text to write to log when upd object was not found * @param warningMessageWhenMissing text to write to log when upd object was not found
* @returns True when upd object was added * @returns True when upd object was added
*/ */
addUpdObjectToItem(item: Item, warningMessageWhenMissing?: string): boolean; addUpdObjectToItem(item: IItem, warningMessageWhenMissing?: string): boolean;
/**
* Return all tpls from Money enum
* @returns string tpls
*/
getMoneyTpls(): string[];
/**
* Get a randomsied stack size for the passed in ammo
* @param ammoItemTemplate Ammo to get stack size for
* @param maxLimit default: Limit to 60 to prevent crazy values when players use stack increase mods
* @returns number
*/
getRandomisedAmmoStackSize(ammoItemTemplate: ITemplateItem, maxLimit?: number): number;
getItemBaseType(tpl: string, rootOnly?: boolean): string;
/**
* Remove FiR status from passed in items
* @param items Items to update FiR status of
*/
removeSpawnedInSessionPropertyFromItems(items: IItem[]): void;
} }
declare namespace ItemHelper { declare namespace ItemHelper {
interface ItemSize { interface IItemSize {
width: number; width: number;
height: number; height: number;
} }

View File

@ -1,4 +1,4 @@
import { Dialogue, IUserDialogInfo } from "@spt/models/eft/profile/ISptProfile"; import { IDialogue, IUserDialogInfo } from "@spt/models/eft/profile/ISptProfile";
import { IWsNotificationEvent } from "@spt/models/eft/ws/IWsNotificationEvent"; import { IWsNotificationEvent } from "@spt/models/eft/ws/IWsNotificationEvent";
import { MessageType } from "@spt/models/enums/MessageType"; import { MessageType } from "@spt/models/enums/MessageType";
import { SaveServer } from "@spt/servers/SaveServer"; import { SaveServer } from "@spt/servers/SaveServer";
@ -32,5 +32,5 @@ export declare class NotificationSendHelper {
* @param senderDetails Who is sending the message * @param senderDetails Who is sending the message
* @returns Dialogue * @returns Dialogue
*/ */
protected getDialog(sessionId: string, messageType: MessageType, senderDetails: IUserDialogInfo): Dialogue; protected getDialog(sessionId: string, messageType: MessageType, senderDetails: IUserDialogInfo): IDialogue;
} }

View File

@ -1,5 +1,5 @@
import { HttpServerHelper } from "@spt/helpers/HttpServerHelper"; import { HttpServerHelper } from "@spt/helpers/HttpServerHelper";
import { Message, MessageContentRagfair } from "@spt/models/eft/profile/ISptProfile"; import { IMessage, IMessageContentRagfair } from "@spt/models/eft/profile/ISptProfile";
import { IWsChatMessageReceived } from "@spt/models/eft/ws/IWsChatMessageReceived"; import { IWsChatMessageReceived } from "@spt/models/eft/ws/IWsChatMessageReceived";
import { IWsNotificationEvent } from "@spt/models/eft/ws/IWsNotificationEvent"; import { IWsNotificationEvent } from "@spt/models/eft/ws/IWsNotificationEvent";
import { IWsRagfairOfferSold } from "@spt/models/eft/ws/IWsRagfairOfferSold"; import { IWsRagfairOfferSold } from "@spt/models/eft/ws/IWsRagfairOfferSold";
@ -17,12 +17,12 @@ export declare class NotifierHelper {
* @param ragfairData Ragfair data to attach to notification * @param ragfairData Ragfair data to attach to notification
* @returns * @returns
*/ */
createRagfairOfferSoldNotification(dialogueMessage: Message, ragfairData: MessageContentRagfair): IWsRagfairOfferSold; createRagfairOfferSoldNotification(dialogueMessage: IMessage, ragfairData: IMessageContentRagfair): IWsRagfairOfferSold;
/** /**
* Create a new notification with the specified dialogueMessage object * Create a new notification with the specified dialogueMessage object
* @param dialogueMessage * @param dialogueMessage
* @returns * @returns
*/ */
createNewMessageNotification(dialogueMessage: Message): IWsChatMessageReceived; createNewMessageNotification(dialogueMessage: IMessage): IWsChatMessageReceived;
getWebSocketServer(sessionID: string): string; getWebSocketServer(sessionID: string): string;
} }

View File

@ -40,9 +40,9 @@ export declare class PresetHelper {
getAllPresets(): IPreset[]; getAllPresets(): IPreset[];
getPresets(templateId: string): IPreset[]; getPresets(templateId: string): IPreset[];
/** /**
* Get the default preset for passed in item id * Get a cloned default preset for passed in item tpl
* @param templateId Item id to get preset for * @param templateId Item tpl to get preset for
* @returns Null if no default preset, otherwise IPreset * @returns undefined if no default preset, otherwise IPreset
*/ */
getDefaultPreset(templateId: string): IPreset | undefined; getDefaultPreset(templateId: string): IPreset | undefined;
getBaseItemTpl(presetId: string): string; getBaseItemTpl(presetId: string): string;

View File

@ -1,6 +1,7 @@
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { Common, CounterKeyValue, Stats } from "@spt/models/eft/common/tables/IBotBase"; import { Common, ICounterKeyValue, IStats } from "@spt/models/eft/common/tables/IBotBase";
import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ISptProfile } from "@spt/models/eft/profile/ISptProfile"; import { ISptProfile } from "@spt/models/eft/profile/ISptProfile";
import { IValidateNicknameRequestData } from "@spt/models/eft/profile/IValidateNicknameRequestData"; import { IValidateNicknameRequestData } from "@spt/models/eft/profile/IValidateNicknameRequestData";
import { BonusType } from "@spt/models/enums/BonusType"; import { BonusType } from "@spt/models/enums/BonusType";
@ -11,7 +12,6 @@ import { ConfigServer } from "@spt/servers/ConfigServer";
import { SaveServer } from "@spt/servers/SaveServer"; import { SaveServer } from "@spt/servers/SaveServer";
import { DatabaseService } from "@spt/services/DatabaseService"; import { DatabaseService } from "@spt/services/DatabaseService";
import { LocalisationService } from "@spt/services/LocalisationService"; import { LocalisationService } from "@spt/services/LocalisationService";
import { ProfileSnapshotService } from "@spt/services/ProfileSnapshotService";
import { HashUtil } from "@spt/utils/HashUtil"; import { HashUtil } from "@spt/utils/HashUtil";
import { TimeUtil } from "@spt/utils/TimeUtil"; import { TimeUtil } from "@spt/utils/TimeUtil";
import { Watermark } from "@spt/utils/Watermark"; import { Watermark } from "@spt/utils/Watermark";
@ -24,12 +24,11 @@ export declare class ProfileHelper {
protected saveServer: SaveServer; protected saveServer: SaveServer;
protected databaseService: DatabaseService; protected databaseService: DatabaseService;
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
protected profileSnapshotService: ProfileSnapshotService;
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected cloner: ICloner; protected cloner: ICloner;
protected inventoryConfig: IInventoryConfig; protected inventoryConfig: IInventoryConfig;
constructor(logger: ILogger, hashUtil: HashUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseService: DatabaseService, itemHelper: ItemHelper, profileSnapshotService: ProfileSnapshotService, localisationService: LocalisationService, configServer: ConfigServer, cloner: ICloner); constructor(logger: ILogger, hashUtil: HashUtil, watermark: Watermark, timeUtil: TimeUtil, saveServer: SaveServer, databaseService: DatabaseService, itemHelper: ItemHelper, localisationService: LocalisationService, configServer: ConfigServer, cloner: ICloner);
/** /**
* Remove/reset a completed quest condtion from players profile quest data * Remove/reset a completed quest condtion from players profile quest data
* @param sessionID Session id * @param sessionID Session id
@ -48,18 +47,10 @@ export declare class ProfileHelper {
*/ */
getCompleteProfile(sessionId: string): IPmcData[]; getCompleteProfile(sessionId: string): IPmcData[];
/** /**
* Fix xp doubling on post-raid xp reward screen by sending a 'dummy' profile to the post-raid screen * Sanitize any information from the profile that the client does not expect to receive
* Server saves the post-raid changes prior to the xp screen getting the profile, this results in the xp screen using * @param clonedProfile A clone of the full player profile
* the now updated profile values as a base, meaning it shows x2 xp gained
* Instead, clone the post-raid profile (so we dont alter its values), apply the pre-raid xp values to the cloned objects and return
* Delete snapshot of pre-raid profile prior to returning profile data
* @param sessionId Session id
* @param output pmc and scav profiles array
* @param pmcProfile post-raid pmc profile
* @param scavProfile post-raid scav profile
* @returns Updated profile array
*/ */
protected postRaidXpWorkaroundFix(sessionId: string, pmcProfile: IPmcData, scavProfile: IPmcData, output: IPmcData[]): IPmcData[]; protected sanitizeProfileForClient(clonedProfile: ISptProfile): void;
/** /**
* Check if a nickname is used by another profile loaded by the server * Check if a nickname is used by another profile loaded by the server
* @param nicknameRequest nickname request object * @param nicknameRequest nickname request object
@ -121,7 +112,7 @@ export declare class ProfileHelper {
* Get baseline counter values for a fresh profile * Get baseline counter values for a fresh profile
* @returns Default profile Stats object * @returns Default profile Stats object
*/ */
getDefaultCounters(): Stats; getDefaultCounters(): IStats;
/** /**
* is this profile flagged for data removal * is this profile flagged for data removal
* @param sessionID Profile id * @param sessionID Profile id
@ -155,7 +146,7 @@ export declare class ProfileHelper {
* @param counters Counters to search for key * @param counters Counters to search for key
* @param keyToIncrement Key * @param keyToIncrement Key
*/ */
incrementStatCounter(counters: CounterKeyValue[], keyToIncrement: string): void; incrementStatCounter(counters: ICounterKeyValue[], keyToIncrement: string): void;
/** /**
* Check if player has a skill at elite level * Check if player has a skill at elite level
* @param skillType Skill to check * @param skillType Skill to check
@ -206,4 +197,16 @@ export declare class ProfileHelper {
*/ */
addAchievementToProfile(pmcProfile: IPmcData, achievementId: string): void; addAchievementToProfile(pmcProfile: IPmcData, achievementId: string): void;
hasAccessToRepeatableFreeRefreshSystem(pmcProfile: IPmcData): boolean; hasAccessToRepeatableFreeRefreshSystem(pmcProfile: IPmcData): boolean;
/**
* Find a profiles "Pockets" item and replace its tpl with passed in value
* @param pmcProfile Player profile
* @param newPocketTpl New tpl to set profiles Pockets to
*/
replaceProfilePocketTpl(pmcProfile: IPmcData, newPocketTpl: string): void;
/**
* Return all quest items current in the supplied profile
* @param profile Profile to get quest items from
* @returns Array of item objects
*/
getQuestItemsInProfile(profile: IPmcData): IItem[];
} }

View File

@ -8,10 +8,11 @@ import { RagfairServerHelper } from "@spt/helpers/RagfairServerHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper"; import { TraderHelper } from "@spt/helpers/TraderHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { Common, IQuestStatus } from "@spt/models/eft/common/tables/IBotBase"; import { Common, IQuestStatus } from "@spt/models/eft/common/tables/IBotBase";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { IQuest, IQuestCondition, IQuestReward } from "@spt/models/eft/common/tables/IQuest"; import { IQuest, IQuestCondition, IQuestReward } from "@spt/models/eft/common/tables/IQuest";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { IAcceptQuestRequestData } from "@spt/models/eft/quests/IAcceptQuestRequestData"; import { IAcceptQuestRequestData } from "@spt/models/eft/quests/IAcceptQuestRequestData";
import { ICompleteQuestRequestData } from "@spt/models/eft/quests/ICompleteQuestRequestData";
import { IFailQuestRequestData } from "@spt/models/eft/quests/IFailQuestRequestData"; import { IFailQuestRequestData } from "@spt/models/eft/quests/IFailQuestRequestData";
import { QuestStatus } from "@spt/models/enums/QuestStatus"; import { QuestStatus } from "@spt/models/enums/QuestStatus";
import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig"; import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig";
@ -22,6 +23,7 @@ import { DatabaseService } from "@spt/services/DatabaseService";
import { LocaleService } from "@spt/services/LocaleService"; import { LocaleService } from "@spt/services/LocaleService";
import { LocalisationService } from "@spt/services/LocalisationService"; import { LocalisationService } from "@spt/services/LocalisationService";
import { MailSendService } from "@spt/services/MailSendService"; import { MailSendService } from "@spt/services/MailSendService";
import { PlayerService } from "@spt/services/PlayerService";
import { SeasonalEventService } from "@spt/services/SeasonalEventService"; import { SeasonalEventService } from "@spt/services/SeasonalEventService";
import { HashUtil } from "@spt/utils/HashUtil"; import { HashUtil } from "@spt/utils/HashUtil";
import { TimeUtil } from "@spt/utils/TimeUtil"; import { TimeUtil } from "@spt/utils/TimeUtil";
@ -44,10 +46,11 @@ export declare class QuestHelper {
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected presetHelper: PresetHelper; protected presetHelper: PresetHelper;
protected mailSendService: MailSendService; protected mailSendService: MailSendService;
protected playerService: PlayerService;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected cloner: ICloner; protected cloner: ICloner;
protected questConfig: IQuestConfig; protected questConfig: IQuestConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseService: DatabaseService, questConditionHelper: QuestConditionHelper, eventOutputHolder: EventOutputHolder, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, seasonalEventService: SeasonalEventService, traderHelper: TraderHelper, presetHelper: PresetHelper, mailSendService: MailSendService, configServer: ConfigServer, cloner: ICloner); constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseService: DatabaseService, questConditionHelper: QuestConditionHelper, eventOutputHolder: EventOutputHolder, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, seasonalEventService: SeasonalEventService, traderHelper: TraderHelper, presetHelper: PresetHelper, mailSendService: MailSendService, playerService: PlayerService, configServer: ConfigServer, cloner: ICloner);
/** /**
* Get status of a quest in player profile by its id * Get status of a quest in player profile by its id
* @param pmcData Profile to search * @param pmcData Profile to search
@ -102,20 +105,20 @@ export declare class QuestHelper {
* @param questReward Reward item to fix * @param questReward Reward item to fix
* @returns Fixed rewards * @returns Fixed rewards
*/ */
protected processReward(questReward: IQuestReward): Item[]; protected processReward(questReward: IQuestReward): IItem[];
/** /**
* Add missing mod items to a quest armor reward * Add missing mod items to a quest armor reward
* @param originalRewardRootItem Original armor reward item from IQuestReward.items object * @param originalRewardRootItem Original armor reward item from IQuestReward.items object
* @param questReward Armor reward from quest * @param questReward Armor reward from quest
*/ */
protected generateArmorRewardChildSlots(originalRewardRootItem: Item, questReward: IQuestReward): void; protected generateArmorRewardChildSlots(originalRewardRootItem: IItem, questReward: IQuestReward): void;
/** /**
* Gets a flat list of reward items for the given quest at a specific state (e.g. Fail/Success) * Gets a flat list of reward items for the given quest at a specific state for the specified game version (e.g. Fail/Success)
* @param quest quest to get rewards for * @param quest quest to get rewards for
* @param status Quest status that holds the items (Started, Success, Fail) * @param status Quest status that holds the items (Started, Success, Fail)
* @returns array of items with the correct maxStack * @returns array of items with the correct maxStack
*/ */
getQuestRewardItems(quest: IQuest, status: QuestStatus): Item[]; getQuestRewardItems(quest: IQuest, status: QuestStatus, gameVersion: string): IItem[];
/** /**
* Look up quest in db by accepted quest id and construct a profile-ready object ready to store in profile * Look up quest in db by accepted quest id and construct a profile-ready object ready to store in profile
* @param pmcData Player profile * @param pmcData Player profile
@ -142,6 +145,22 @@ export declare class QuestHelper {
* @param questId QuestId to check * @param questId QuestId to check
*/ */
questIsForOtherSide(playerSide: string, questId: string): boolean; questIsForOtherSide(playerSide: string, questId: string): boolean;
/**
* Is the provided quest prevented from being viewed by the provided game version
* (Inclusive filter)
* @param gameVersion Game version to check against
* @param questId Quest id to check
* @returns True Quest should not be visible to game version
*/
protected questIsProfileBlacklisted(gameVersion: string, questId: string): boolean;
/**
* Is the provided quest able to be seen by the provided game version
* (Exclusive filter)
* @param gameVersion Game version to check against
* @param questId Quest id to check
* @returns True Quest should be visible to game version
*/
protected questIsProfileWhitelisted(gameVersion: string, questId: string): boolean;
/** /**
* Get quests that can be shown to player after failing a quest * Get quests that can be shown to player after failing a quest
* @param failedQuestId Id of the quest failed by player * @param failedQuestId Id of the quest failed by player
@ -152,7 +171,7 @@ export declare class QuestHelper {
/** /**
* Adjust quest money rewards by passed in multiplier * Adjust quest money rewards by passed in multiplier
* @param quest Quest to multiple money rewards * @param quest Quest to multiple money rewards
* @param bonusPercent Value to adjust money rewards by * @param bonusPercent Pecent to adjust money rewards by
* @param questStatus Status of quest to apply money boost to rewards of * @param questStatus Status of quest to apply money boost to rewards of
* @returns Updated quest * @returns Updated quest
*/ */
@ -173,7 +192,7 @@ export declare class QuestHelper {
* @param sessionId Session id * @param sessionId Session id
* @param item Item that was adjusted * @param item Item that was adjusted
*/ */
protected addItemStackSizeChangeIntoEventResponse(output: IItemEventRouterResponse, sessionId: string, item: Item): void; protected addItemStackSizeChangeIntoEventResponse(output: IItemEventRouterResponse, sessionId: string, item: IItem): void;
/** /**
* Get quests, strip all requirement conditions except level * Get quests, strip all requirement conditions except level
* @param quests quests to process * @param quests quests to process
@ -243,7 +262,14 @@ export declare class QuestHelper {
* @param questResponse Response to send back to client * @param questResponse Response to send back to client
* @returns Array of reward objects * @returns Array of reward objects
*/ */
applyQuestReward(profileData: IPmcData, questId: string, state: QuestStatus, sessionId: string, questResponse: IItemEventRouterResponse): Item[]; applyQuestReward(profileData: IPmcData, questId: string, state: QuestStatus, sessionId: string, questResponse: IItemEventRouterResponse): IItem[];
/**
* Does the provided quest reward have a game version requirement to be given and does it match
* @param reward Reward to check
* @param gameVersion Version of game to check reward against
* @returns True if it has requirement, false if it doesnt pass check
*/
protected questRewardIsForGameEdition(reward: IQuestReward, gameVersion: string): boolean;
/** /**
* WIP - Find hideout craft id and add to unlockedProductionRecipe array in player profile * WIP - Find hideout craft id and add to unlockedProductionRecipe array in player profile
* also update client response recipeUnlocked array with craft id * also update client response recipeUnlocked array with craft id
@ -259,7 +285,7 @@ export declare class QuestHelper {
* @param pmcData player profile * @param pmcData player profile
* @returns bonus as a percent * @returns bonus as a percent
*/ */
protected getQuestMoneyRewardBonus(pmcData: IPmcData): number; protected getQuestMoneyRewardBonusMultiplier(pmcData: IPmcData): number;
/** /**
* Find quest with 'findItem' condition that needs the item tpl be handed in * Find quest with 'findItem' condition that needs the item tpl be handed in
* @param itemTpl item tpl to look for * @param itemTpl item tpl to look for
@ -286,4 +312,72 @@ export declare class QuestHelper {
* @returns Hours item will be available for * @returns Hours item will be available for
*/ */
getMailItemRedeemTimeHoursForProfile(pmcData: IPmcData): number; getMailItemRedeemTimeHoursForProfile(pmcData: IPmcData): number;
completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle client/quest/list
* Get all quests visible to player
* Exclude quests with incomplete preconditions (level/loyalty)
* @param sessionID session id
* @returns array of IQuest
*/
getClientQuests(sessionID: string): IQuest[];
/**
* Create a clone of the given quest array with the rewards updated to reflect the
* given game version
*
* @param quests The list of quests to check
* @param gameVersion The game version of the profile
* @returns array of IQuest objects with the rewards filtered correctly for the game version
*/
protected updateQuestsForGameEdition(quests: IQuest[], gameVersion: string): IQuest[];
/**
* Return a list of quests that would fail when supplied quest is completed
* @param completedQuestId quest completed id
* @returns array of IQuest objects
*/
protected getQuestsFromProfileFailedByCompletingQuest(completedQuestId: string, pmcProfile: IPmcData): IQuest[];
/**
* Fail the provided quests
* Update quest in profile, otherwise add fresh quest object with failed status
* @param sessionID session id
* @param pmcData player profile
* @param questsToFail quests to fail
* @param output Client output
*/
protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[], output: IItemEventRouterResponse): void;
/**
* Send a popup to player on successful completion of a quest
* @param sessionID session id
* @param pmcData Player profile
* @param completedQuestId Completed quest id
* @param questRewards Rewards given to player
*/
protected sendSuccessDialogMessageOnQuestComplete(sessionID: string, pmcData: IPmcData, completedQuestId: string, questRewards: IItem[]): void;
/**
* Look for newly available quests after completing a quest with a requirement to wait x minutes (time-locked) before being available and add data to profile
* @param pmcData Player profile to update
* @param quests Quests to look for wait conditions in
* @param completedQuestId Quest just completed
*/
protected addTimeLockedQuestsToProfile(pmcData: IPmcData, quests: IQuest[], completedQuestId: string): void;
/**
* Remove a quest entirely from a profile
* @param sessionId Player id
* @param questIdToRemove Qid of quest to remove
*/
protected removeQuestFromScavProfile(sessionId: string, questIdToRemove: string): void;
/**
* Return quests that have different statuses
* @param preQuestStatusus Quests before
* @param postQuestStatuses Quests after
* @returns QuestStatusChange array
*/
protected getQuestsWithDifferentStatuses(preQuestStatusus: IQuestStatus[], postQuestStatuses: IQuestStatus[]): IQuestStatus[] | undefined;
/**
* Does a provided quest have a level requirement equal to or below defined level
* @param quest Quest to check
* @param playerLevel level of player to test against quest
* @returns true if quest can be seen/accepted by player of defined level
*/
protected playerLevelFulfillsQuestRequirement(quest: IQuest, playerLevel: number): boolean;
} }

View File

@ -2,7 +2,7 @@ import { HandbookHelper } from "@spt/helpers/HandbookHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { TraderAssortHelper } from "@spt/helpers/TraderAssortHelper"; import { TraderAssortHelper } from "@spt/helpers/TraderAssortHelper";
import { UtilityHelper } from "@spt/helpers/UtilityHelper"; import { UtilityHelper } from "@spt/helpers/UtilityHelper";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITraderAssort } from "@spt/models/eft/common/tables/ITrader"; import { ITraderAssort } from "@spt/models/eft/common/tables/ITrader";
import { ISearchRequestData } from "@spt/models/eft/ragfair/ISearchRequestData"; import { ISearchRequestData } from "@spt/models/eft/ragfair/ISearchRequestData";
import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig"; import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig";
@ -36,7 +36,7 @@ export declare class RagfairHelper {
* Iterate over array of identical items and merge stack count * Iterate over array of identical items and merge stack count
* Ragfair allows abnormally large stacks. * Ragfair allows abnormally large stacks.
*/ */
mergeStackable(items: Item[]): Item[]; mergeStackable(items: IItem[]): IItem[];
/** /**
* Return the symbol for a currency * Return the symbol for a currency
* e.g. 5449016a4bdc2d6f028b456f return * e.g. 5449016a4bdc2d6f028b456f return

View File

@ -9,14 +9,15 @@ import { RagfairServerHelper } from "@spt/helpers/RagfairServerHelper";
import { RagfairSortHelper } from "@spt/helpers/RagfairSortHelper"; import { RagfairSortHelper } from "@spt/helpers/RagfairSortHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper"; import { TraderHelper } from "@spt/helpers/TraderHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITraderAssort } from "@spt/models/eft/common/tables/ITrader"; import { ITraderAssort } from "@spt/models/eft/common/tables/ITrader";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { ISptProfile } from "@spt/models/eft/profile/ISptProfile"; import { ISptProfile } from "@spt/models/eft/profile/ISptProfile";
import { IRagfairOffer } from "@spt/models/eft/ragfair/IRagfairOffer"; import { IRagfairOffer } from "@spt/models/eft/ragfair/IRagfairOffer";
import { ISearchRequestData } from "@spt/models/eft/ragfair/ISearchRequestData"; import { ISearchRequestData } from "@spt/models/eft/ragfair/ISearchRequestData";
import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig"; import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig";
import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig"; import { IRagfairConfig, ITieredFlea } from "@spt/models/spt/config/IRagfairConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { EventOutputHolder } from "@spt/routers/EventOutputHolder"; import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
@ -55,6 +56,7 @@ export declare class RagfairOfferHelper {
protected static goodSoldTemplate: string; protected static goodSoldTemplate: string;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected questConfig: IQuestConfig; protected questConfig: IQuestConfig;
protected botConfig: IBotConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, databaseService: DatabaseService, traderHelper: TraderHelper, saveServer: SaveServer, itemHelper: ItemHelper, botHelper: BotHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, questHelper: QuestHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, localeService: LocaleService, localisationService: LocalisationService, mailSendService: MailSendService, configServer: ConfigServer); constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, databaseService: DatabaseService, traderHelper: TraderHelper, saveServer: SaveServer, itemHelper: ItemHelper, botHelper: BotHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, questHelper: QuestHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, ragfairRequiredItemsService: RagfairRequiredItemsService, localeService: LocaleService, localisationService: LocalisationService, mailSendService: MailSendService, configServer: ConfigServer);
/** /**
* Passthrough to ragfairOfferService.getOffers(), get flea offers a player should see * Passthrough to ragfairOfferService.getOffers(), get flea offers a player should see
@ -65,6 +67,7 @@ export declare class RagfairOfferHelper {
* @returns Offers the player should see * @returns Offers the player should see
*/ */
getValidOffers(searchRequest: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record<string, ITraderAssort>, pmcData: IPmcData): IRagfairOffer[]; getValidOffers(searchRequest: ISearchRequestData, itemsToAdd: string[], traderAssorts: Record<string, ITraderAssort>, pmcData: IPmcData): IRagfairOffer[];
protected checkAndLockOfferFromPlayerTieredFlea(tieredFlea: ITieredFlea, offer: IRagfairOffer, tieredFleaLimitTypes: string[], playerLevel: number): void;
/** /**
* Get matching offers that require the desired item and filter out offers from non traders if player is below ragfair unlock level * Get matching offers that require the desired item and filter out offers from non traders if player is below ragfair unlock level
* @param searchRequest Search request from client * @param searchRequest Search request from client
@ -125,7 +128,7 @@ export declare class RagfairOfferHelper {
* @param itemsInInventoryToList items to sum up * @param itemsInInventoryToList items to sum up
* @returns Total count * @returns Total count
*/ */
getTotalStackCountSize(itemsInInventoryToList: Item[][]): number; getTotalStackCountSize(itemsInInventoryToList: IItem[][]): number;
/** /**
* Add amount to players ragfair rating * Add amount to players ragfair rating
* @param sessionId Profile to update * @param sessionId Profile to update
@ -173,7 +176,7 @@ export declare class RagfairOfferHelper {
* @param offer The flea offer * @param offer The flea offer
* @returns True if the given item is functional * @returns True if the given item is functional
*/ */
isItemFunctional(offerRootItem: Item, offer: IRagfairOffer): boolean; isItemFunctional(offerRootItem: IItem, offer: IRagfairOffer): boolean;
/** /**
* Should a ragfair offer be visible to the player * Should a ragfair offer be visible to the player
* @param searchRequest Search request * @param searchRequest Search request
@ -190,7 +193,7 @@ export declare class RagfairOfferHelper {
* @param item Item to check * @param item Item to check
* @returns True if has condition * @returns True if has condition
*/ */
protected isConditionItem(item: Item): boolean; protected isConditionItem(item: IItem): boolean;
/** /**
* Is items quality value within desired range * Is items quality value within desired range
* @param item Item to check quality of * @param item Item to check quality of
@ -198,5 +201,5 @@ export declare class RagfairOfferHelper {
* @param max Desired maximum quality * @param max Desired maximum quality
* @returns True if in range * @returns True if in range
*/ */
protected itemQualityInRange(item: Item, min: number, max: number): boolean; protected itemQualityInRange(item: IItem, min: number, max: number): boolean;
} }

View File

@ -1,4 +1,4 @@
import { SellResult } from "@spt/models/eft/ragfair/IRagfairOffer"; import { ISellResult } from "@spt/models/eft/ragfair/IRagfairOffer";
import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig"; import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
@ -28,5 +28,5 @@ export declare class RagfairSellHelper {
* @param sellInOneGo All items listed get sold at once * @param sellInOneGo All items listed get sold at once
* @returns Array of purchases of item(s) listed * @returns Array of purchases of item(s) listed
*/ */
rollForSale(sellChancePercent: number, itemSellCount: number, sellInOneGo?: boolean): SellResult[]; rollForSale(sellChancePercent: number, itemSellCount: number, sellInOneGo?: boolean): ISellResult[];
} }

View File

@ -1,7 +1,7 @@
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper"; import { TraderHelper } from "@spt/helpers/TraderHelper";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig"; import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig";
import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig"; import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig";
@ -65,7 +65,7 @@ export declare class RagfairServerHelper {
* @param sessionID Player to send items to * @param sessionID Player to send items to
* @param returnedItems Items to send to player * @param returnedItems Items to send to player
*/ */
returnItems(sessionID: string, returnedItems: Item[]): void; returnItems(sessionID: string, returnedItems: IItem[]): void;
calculateDynamicStackCount(tplId: string, isWeaponPreset: boolean): number; calculateDynamicStackCount(tplId: string, isWeaponPreset: boolean): number;
/** /**
* Choose a currency at random with bias * Choose a currency at random with bias
@ -77,11 +77,11 @@ export declare class RagfairServerHelper {
* @param item Preset item * @param item Preset item
* @returns Array of weapon and its children * @returns Array of weapon and its children
*/ */
getPresetItems(item: Item): Item[]; getPresetItems(item: IItem): IItem[];
/** /**
* Possible bug, returns all items associated with an items tpl, could be multiple presets from globals.json * Possible bug, returns all items associated with an items tpl, could be multiple presets from globals.json
* @param item Preset item * @param item Preset item
* @returns * @returns
*/ */
getPresetItemsByTpl(item: Item): Item[]; getPresetItemsByTpl(item: IItem): IItem[];
} }

View File

@ -1,5 +1,5 @@
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITemplateItem, Props } from "@spt/models/eft/common/tables/ITemplateItem"; import { IProps, ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { IRepairConfig } from "@spt/models/spt/config/IRepairConfig"; import { IRepairConfig } from "@spt/models/spt/config/IRepairConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
@ -24,7 +24,7 @@ export declare class RepairHelper {
* @param traderQualityMultipler Trader quality value from traders base json * @param traderQualityMultipler Trader quality value from traders base json
* @param applyMaxDurabilityDegradation should item have max durability reduced * @param applyMaxDurabilityDegradation should item have max durability reduced
*/ */
updateItemDurability(itemToRepair: Item, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit: boolean, traderQualityMultipler: number, applyMaxDurabilityDegradation?: boolean): void; updateItemDurability(itemToRepair: IItem, itemToRepairDetails: ITemplateItem, isArmor: boolean, amountToRepair: number, useRepairKit: boolean, traderQualityMultipler: number, applyMaxDurabilityDegradation?: boolean): void;
/** /**
* Repairing armor reduces the total durability value slightly, get a randomised (to 2dp) amount based on armor material * Repairing armor reduces the total durability value slightly, get a randomised (to 2dp) amount based on armor material
* @param armorMaterial What material is the armor being repaired made of * @param armorMaterial What material is the armor being repaired made of
@ -42,5 +42,5 @@ export declare class RepairHelper {
* @param traderQualityMultipler Different traders produce different loss values * @param traderQualityMultipler Different traders produce different loss values
* @returns Amount to reduce max durability by * @returns Amount to reduce max durability by
*/ */
protected getRandomisedWeaponRepairDegradationValue(itemProps: Props, isRepairKit: boolean, weaponMax: number, traderQualityMultipler: number): number; protected getRandomisedWeaponRepairDegradationValue(itemProps: IProps, isRepairKit: boolean, weaponMax: number, traderQualityMultipler: number): number;
} }

View File

@ -1,8 +1,8 @@
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
export interface OwnerInventoryItems { export interface IOwnerInventoryItems {
from: Item[]; from: IItem[];
to: Item[]; to: IItem[];
sameInventory: boolean; sameInventory: boolean;
isMail: boolean; isMail: boolean;
} }
@ -14,5 +14,5 @@ export declare class SecureContainerHelper {
* @param items Inventory items to look for secure container in * @param items Inventory items to look for secure container in
* @returns Array of ids * @returns Array of ids
*/ */
getSecureContainerItems(items: Item[]): string[]; getSecureContainerItems(items: IItem[]): string[];
} }

View File

@ -3,7 +3,7 @@ import { ItemHelper } from "@spt/helpers/ItemHelper";
import { TraderAssortHelper } from "@spt/helpers/TraderAssortHelper"; import { TraderAssortHelper } from "@spt/helpers/TraderAssortHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper"; import { TraderHelper } from "@spt/helpers/TraderHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse"; import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { IProcessBuyTradeRequestData } from "@spt/models/eft/trade/IProcessBuyTradeRequestData"; import { IProcessBuyTradeRequestData } from "@spt/models/eft/trade/IProcessBuyTradeRequestData";
import { IProcessSellTradeRequestData } from "@spt/models/eft/trade/IProcessSellTradeRequestData"; import { IProcessSellTradeRequestData } from "@spt/models/eft/trade/IProcessSellTradeRequestData";
@ -13,6 +13,7 @@ import { ILogger } from "@spt/models/spt/utils/ILogger";
import { EventOutputHolder } from "@spt/routers/EventOutputHolder"; import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
import { ConfigServer } from "@spt/servers/ConfigServer"; import { ConfigServer } from "@spt/servers/ConfigServer";
import { RagfairServer } from "@spt/servers/RagfairServer"; import { RagfairServer } from "@spt/servers/RagfairServer";
import { DatabaseService } from "@spt/services/DatabaseService";
import { FenceService } from "@spt/services/FenceService"; import { FenceService } from "@spt/services/FenceService";
import { LocalisationService } from "@spt/services/LocalisationService"; import { LocalisationService } from "@spt/services/LocalisationService";
import { PaymentService } from "@spt/services/PaymentService"; import { PaymentService } from "@spt/services/PaymentService";
@ -21,6 +22,7 @@ import { HttpResponseUtil } from "@spt/utils/HttpResponseUtil";
import { ICloner } from "@spt/utils/cloners/ICloner"; import { ICloner } from "@spt/utils/cloners/ICloner";
export declare class TradeHelper { export declare class TradeHelper {
protected logger: ILogger; protected logger: ILogger;
protected databaseService: DatabaseService;
protected eventOutputHolder: EventOutputHolder; protected eventOutputHolder: EventOutputHolder;
protected traderHelper: TraderHelper; protected traderHelper: TraderHelper;
protected itemHelper: ItemHelper; protected itemHelper: ItemHelper;
@ -36,7 +38,7 @@ export declare class TradeHelper {
protected cloner: ICloner; protected cloner: ICloner;
protected traderConfig: ITraderConfig; protected traderConfig: ITraderConfig;
protected inventoryConfig: IInventoryConfig; protected inventoryConfig: IInventoryConfig;
constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, traderHelper: TraderHelper, itemHelper: ItemHelper, paymentService: PaymentService, fenceService: FenceService, localisationService: LocalisationService, httpResponse: HttpResponseUtil, inventoryHelper: InventoryHelper, ragfairServer: RagfairServer, traderAssortHelper: TraderAssortHelper, traderPurchasePersisterService: TraderPurchasePersisterService, configServer: ConfigServer, cloner: ICloner); constructor(logger: ILogger, databaseService: DatabaseService, eventOutputHolder: EventOutputHolder, traderHelper: TraderHelper, itemHelper: ItemHelper, paymentService: PaymentService, fenceService: FenceService, localisationService: LocalisationService, httpResponse: HttpResponseUtil, inventoryHelper: InventoryHelper, ragfairServer: RagfairServer, traderAssortHelper: TraderAssortHelper, traderPurchasePersisterService: TraderPurchasePersisterService, configServer: ConfigServer, cloner: ICloner);
/** /**
* Buy item from flea or trader * Buy item from flea or trader
* @param pmcData Player profile * @param pmcData Player profile
@ -56,6 +58,7 @@ export declare class TradeHelper {
* @param output IItemEventRouterResponse * @param output IItemEventRouterResponse
*/ */
sellItem(profileWithItemsToSell: IPmcData, profileToReceiveMoney: IPmcData, sellRequest: IProcessSellTradeRequestData, sessionID: string, output: IItemEventRouterResponse): void; sellItem(profileWithItemsToSell: IPmcData, profileToReceiveMoney: IPmcData, sellRequest: IProcessSellTradeRequestData, sessionID: string, output: IItemEventRouterResponse): void;
protected incrementCirculateSoldToTraderCounter(profileWithItemsToSell: IPmcData, profileToReceiveMoney: IPmcData, sellRequest: IProcessSellTradeRequestData): void;
/** /**
* Traders allow a limited number of purchases per refresh cycle (default 60 mins) * Traders allow a limited number of purchases per refresh cycle (default 60 mins)
* @param sessionId Session id * @param sessionId Session id
@ -65,5 +68,5 @@ export declare class TradeHelper {
* @param assortId Id of assort being purchased * @param assortId Id of assort being purchased
* @param count How many of the item are being bought * @param count How many of the item are being bought
*/ */
protected checkPurchaseIsWithinTraderItemLimit(sessionId: string, pmcData: IPmcData, traderId: string, assortBeingPurchased: Item, assortId: string, count: number): void; protected checkPurchaseIsWithinTraderItemLimit(sessionId: string, pmcData: IPmcData, traderId: string, assortBeingPurchased: IItem, assortId: string, count: number): void;
} }

View File

@ -4,7 +4,7 @@ import { AssortHelper } from "@spt/helpers/AssortHelper";
import { PaymentHelper } from "@spt/helpers/PaymentHelper"; import { PaymentHelper } from "@spt/helpers/PaymentHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper"; import { TraderHelper } from "@spt/helpers/TraderHelper";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITrader, ITraderAssort } from "@spt/models/eft/common/tables/ITrader"; import { ITrader, ITraderAssort } from "@spt/models/eft/common/tables/ITrader";
import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig"; import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger"; import { ILogger } from "@spt/models/spt/utils/ILogger";
@ -58,7 +58,7 @@ export declare class TraderAssortHelper {
* Reset every traders root item `BuyRestrictionCurrent` property to 0 * Reset every traders root item `BuyRestrictionCurrent` property to 0
* @param assortItems Items to adjust * @param assortItems Items to adjust
*/ */
protected resetBuyRestrictionCurrentValue(assortItems: Item[]): void; protected resetBuyRestrictionCurrentValue(assortItems: IItem[]): void;
/** /**
* Create a dict of all assort id = quest id mappings used to work out what items should be shown to player based on the quests they've started/completed/failed * Create a dict of all assort id = quest id mappings used to work out what items should be shown to player based on the quests they've started/completed/failed
*/ */
@ -85,7 +85,7 @@ export declare class TraderAssortHelper {
* @param traderId trader id * @param traderId trader id
* @returns array of Items * @returns array of Items
*/ */
protected getPristineTraderAssorts(traderId: string): Item[]; protected getPristineTraderAssorts(traderId: string): IItem[];
/** /**
* Returns generated ragfair offers in a trader assort format * Returns generated ragfair offers in a trader assort format
* @returns Trader assort object * @returns Trader assort object

View File

@ -2,9 +2,9 @@ import { HandbookHelper } from "@spt/helpers/HandbookHelper";
import { ItemHelper } from "@spt/helpers/ItemHelper"; import { ItemHelper } from "@spt/helpers/ItemHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper"; import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ProfileTraderTemplate } from "@spt/models/eft/common/tables/IProfileTemplate"; import { IProfileTraderTemplate } from "@spt/models/eft/common/tables/IProfileTemplate";
import { ITraderAssort, ITraderBase, LoyaltyLevel } from "@spt/models/eft/common/tables/ITrader"; import { ITraderAssort, ITraderBase, ITraderLoyaltyLevel } from "@spt/models/eft/common/tables/ITrader";
import { ISptProfile } from "@spt/models/eft/profile/ISptProfile"; import { ISptProfile } from "@spt/models/eft/profile/ISptProfile";
import { Traders } from "@spt/models/enums/Traders"; import { Traders } from "@spt/models/enums/Traders";
import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig"; import { ITraderConfig } from "@spt/models/spt/config/ITraderConfig";
@ -39,7 +39,7 @@ export declare class TraderHelper {
* @param sessionID Players id * @param sessionID Players id
* @returns Trader base * @returns Trader base
*/ */
getTrader(traderID: string, sessionID: string): ITraderBase | undefined; getTrader(traderID: string, sessionID: string): ITraderBase | any;
/** /**
* Get all assort data for a particular trader * Get all assort data for a particular trader
* @param traderId Trader to get assorts for * @param traderId Trader to get assorts for
@ -52,7 +52,7 @@ export declare class TraderHelper {
* @param assortId Id of assort to find * @param assortId Id of assort to find
* @returns Item object * @returns Item object
*/ */
getTraderAssortItemByAssortId(traderId: string, assortId: string): Item | undefined; getTraderAssortItemByAssortId(traderId: string, assortId: string): IItem | undefined;
/** /**
* Reset a profiles trader data back to its initial state as seen by a level 1 player * Reset a profiles trader data back to its initial state as seen by a level 1 player
* Does NOT take into account different profile levels * Does NOT take into account different profile levels
@ -66,7 +66,7 @@ export declare class TraderHelper {
* @param rawProfileTemplate Raw profile from profiles.json to look up standing from * @param rawProfileTemplate Raw profile from profiles.json to look up standing from
* @returns Standing value * @returns Standing value
*/ */
protected getStartingStanding(traderId: string, rawProfileTemplate: ProfileTraderTemplate): number; protected getStartingStanding(traderId: string, rawProfileTemplate: IProfileTraderTemplate): number;
/** /**
* Add an array of suit ids to a profiles suit array, no duplicates * Add an array of suit ids to a profiles suit array, no duplicates
* @param fullProfile Profile to add to * @param fullProfile Profile to add to
@ -118,7 +118,7 @@ export declare class TraderHelper {
* @returns Time in seconds * @returns Time in seconds
*/ */
getTraderUpdateSeconds(traderId: string): number | undefined; getTraderUpdateSeconds(traderId: string): number | undefined;
getLoyaltyLevel(traderID: string, pmcData: IPmcData): LoyaltyLevel; getLoyaltyLevel(traderID: string, pmcData: IPmcData): ITraderLoyaltyLevel;
/** /**
* Store the purchase of an assort from a trader in the player profile * Store the purchase of an assort from a trader in the player profile
* @param sessionID Session id * @param sessionID Session id
@ -130,7 +130,7 @@ export declare class TraderHelper {
count: number; count: number;
}[]; }[];
traderId: string; traderId: string;
}, itemPurchased: Item): void; }, itemPurchased: IItem): void;
/** /**
* EoD and Unheard get a 20% bonus to personal trader limit purchases * EoD and Unheard get a 20% bonus to personal trader limit purchases
* @param buyRestrictionMax Existing value from trader item * @param buyRestrictionMax Existing value from trader item

View File

@ -0,0 +1,25 @@
import { DateTime } from "@spt/models/enums/DateTime";
import { IWeatherConfig } from "@spt/models/spt/config/IWeatherConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer";
import { TimeUtil } from "@spt/utils/TimeUtil";
export declare class WeatherHelper {
protected logger: ILogger;
protected timeUtil: TimeUtil;
protected configServer: ConfigServer;
protected weatherConfig: IWeatherConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, configServer: ConfigServer);
/**
* Get the current in-raid time - does not include an accurate date, only time
* @param currentDate (new Date())
* @returns Date object of current in-raid time
*/
getInRaidTime(timestamp?: number): Date;
/**
* Is the current raid at nighttime
* @param timeVariant PASS OR CURR (from raid settings)
* @returns True when nighttime
*/
isNightTime(timeVariant: DateTime): boolean;
isHourAtNightTime(currentHour: number): boolean;
}

View File

@ -1,13 +1,4 @@
export declare class WeightedRandomHelper { export declare class WeightedRandomHelper {
/**
* @deprecated USE getWeightedValue() WHERE POSSIBLE
* Gets a tplId from a weighted dictionary
* @param {tplId: weighting[]} itemArray
* @returns tplId
*/
getWeightedInventoryItem(itemArray: {
[tplId: string]: unknown;
} | ArrayLike<unknown>): string;
/** /**
* Choos an item from the passed in array based on the weightings of each * Choos an item from the passed in array based on the weightings of each
* @param itemArray Items and weights to use * @param itemArray Items and weights to use

View File

@ -8,7 +8,7 @@ export declare class BundleInfo {
filename: string; filename: string;
crc: number; crc: number;
dependencies: string[]; dependencies: string[];
constructor(modpath: string, bundle: BundleManifestEntry, bundleHash: number); constructor(modpath: string, bundle: IBundleManifestEntry, bundleHash: number);
} }
export declare class BundleLoader { export declare class BundleLoader {
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
@ -26,10 +26,10 @@ export declare class BundleLoader {
addBundles(modpath: string): void; addBundles(modpath: string): void;
addBundle(key: string, b: BundleInfo): void; addBundle(key: string, b: BundleInfo): void;
} }
export interface BundleManifest { export interface IBundleManifest {
manifest: BundleManifestEntry[]; manifest: IBundleManifestEntry[];
} }
export interface BundleManifestEntry { export interface IBundleManifestEntry {
key: string; key: string;
dependencyKeys: string[]; dependencyKeys: string[];
} }

View File

@ -1,6 +1,6 @@
import { ModLoadOrder } from "@spt/loaders/ModLoadOrder"; import { ModLoadOrder } from "@spt/loaders/ModLoadOrder";
import { ModTypeCheck } from "@spt/loaders/ModTypeCheck"; import { ModTypeCheck } from "@spt/loaders/ModTypeCheck";
import { ModDetails } from "@spt/models/eft/profile/ISptProfile"; import { IModDetails } from "@spt/models/eft/profile/ISptProfile";
import { ICoreConfig } from "@spt/models/spt/config/ICoreConfig"; import { ICoreConfig } from "@spt/models/spt/config/ICoreConfig";
import { IModLoader } from "@spt/models/spt/mod/IModLoader"; import { IModLoader } from "@spt/models/spt/mod/IModLoader";
import { IPackageJsonData } from "@spt/models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "@spt/models/spt/mod/IPackageJsonData";
@ -36,7 +36,7 @@ export declare class PreSptModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[]; getProfileModsGroupedByModName(profileMods: IModDetails[]): IModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importModsAsync(): Promise<void>; protected importModsAsync(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -1,7 +1,7 @@
export interface IGenerateBotsRequestData { export interface IGenerateBotsRequestData {
conditions: Condition[]; conditions: ICondition[];
} }
export interface Condition { export interface ICondition {
/** e.g. assault/pmcBot/bossKilla */ /** e.g. assault/pmcBot/bossKilla */
Role: string; Role: string;
Limit: number; Limit: number;

View File

@ -1,15 +1,101 @@
import { Ixyz } from "@spt/models/eft/common/Ixyz"; import { Ixyz } from "@spt/models/eft/common/Ixyz";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
export interface IGlobals { export interface IGlobals {
time: number; time: number;
config: IConfig; config: IConfig;
LocationInfection: ILocationInfection;
bot_presets: IBotPreset[]; bot_presets: IBotPreset[];
AudioSettings: IAudioSettings; AudioSettings: IAudioSettings;
EnvironmentSettings: IEnvironmentSettings; EnvironmentSettings: IEnvironmentSettings;
BotWeaponScatterings: IBotWeaponScattering[]; BotWeaponScatterings: IBotWeaponScattering[];
ItemPresets: Record<string, IPreset>; ItemPresets: Record<string, IPreset>;
} }
export interface ILocationInfection {
Interchange: number;
Lighthouse: number;
RezervBase: number;
Sandbox: number;
Shoreline: number;
TarkovStreets: number;
Woods: number;
bigmap: number;
factory4: number;
laboratory: number;
}
export interface IArtilleryShelling {
ArtilleryMapsConfigs: Record<string, IArtilleryMapSettings>;
ProjectileExplosionParams: IProjectileExplosionParams;
MaxCalledShellingCount: number;
}
export interface IArtilleryMapSettings {
PlanedShellingOn: boolean;
InitShellingTimer: number;
BeforeShellingSignalTime: number;
ShellingCount: number;
ZonesInShelling: number;
NewZonesForEachShelling: boolean;
InitCalledShellingTime: number;
ShellingZones: IShellingZone[];
Brigades: IBrigade[];
ArtilleryShellingAirDropSettings: IArtilleryShellingAirDropSettings;
PauseBetweenShellings: Ixyz;
}
export interface IShellingZone {
ID: number;
PointsInShellings: Ixyz;
ShellingRounds: number;
ShotCount: number;
PauseBetweenRounds: Ixyz;
PauseBetweenShots: Ixyz;
Center: Ixyz;
Rotate: number;
GridStep: Ixyz;
Points: Ixyz;
PointRadius: number;
ExplosionDistanceRange: Ixyz;
AlarmStages: IAlarmStage[];
BeforeShellingSignalTime: number;
UsedInPlanedShelling: boolean;
UseInCalledShelling: boolean;
IsActive: boolean;
}
export interface IAlarmStage {
Value: {
x: number;
y: number;
};
}
export interface IBrigade {
ID: number;
ArtilleryGuns: IArtilleryGun[];
}
export interface IArtilleryGun {
Position: Ixyz;
}
export interface IArtilleryShellingAirDropSettings {
UseAirDrop: boolean;
AirDropTime: number;
AirDropPosition: Ixyz;
LootTemplateId: string;
}
export interface IProjectileExplosionParams {
Blindness: Ixyz;
Contusion: Ixyz;
ArmorDistanceDistanceDamage: Ixyz;
MinExplosionDistance: number;
MaxExplosionDistance: number;
FragmentsCount: number;
Strength: number;
ArmorDamage: number;
StaminaBurnRate: number;
PenetrationPower: number;
DirectionalDamageAngle: number;
DirectionalDamageMultiplier: number;
FragmentType: string;
DeadlyDistance: number;
}
export interface IConfig { export interface IConfig {
ArtilleryShelling: IArtilleryShelling;
content: IContent; content: IContent;
AimPunchMagnitude: number; AimPunchMagnitude: number;
WeaponSkillProgressRate: number; WeaponSkillProgressRate: number;
@ -23,14 +109,19 @@ export interface IConfig {
MaxBotsAliveOnMapPvE: number; MaxBotsAliveOnMapPvE: number;
SavagePlayCooldown: number; SavagePlayCooldown: number;
SavagePlayCooldownNdaFree: number; SavagePlayCooldownNdaFree: number;
SeasonActivity: ISeasonActivity;
MarksmanAccuracy: number; MarksmanAccuracy: number;
SavagePlayCooldownDevelop: number; SavagePlayCooldownDevelop: number;
TODSkyDate: string; TODSkyDate: string;
Mastering: IMastering[]; Mastering: IMastering[];
GlobalItemPriceModifier: number; GlobalItemPriceModifier: number;
TradingUnlimitedItems: boolean; TradingUnlimitedItems: boolean;
TransitSettings: ITransitSettings;
TripwiresSettings: ITripwiresSettings;
MaxLoyaltyLevelForAll: boolean; MaxLoyaltyLevelForAll: boolean;
MountingSettings: IMountingSettings;
GlobalLootChanceModifier: number; GlobalLootChanceModifier: number;
GlobalLootChanceModifierPvE: number;
GraphicSettings: IGraphicSettings; GraphicSettings: IGraphicSettings;
TimeBeforeDeploy: number; TimeBeforeDeploy: number;
TimeBeforeDeployLocal: number; TimeBeforeDeployLocal: number;
@ -47,8 +138,10 @@ export interface IConfig {
UncheckOnShot: boolean; UncheckOnShot: boolean;
BotsEnabled: boolean; BotsEnabled: boolean;
BufferZone: IBufferZone; BufferZone: IBufferZone;
Airdrop: IAirdropGlobalSettings;
ArmorMaterials: IArmorMaterials; ArmorMaterials: IArmorMaterials;
ArenaEftTransferSettings: IArenaEftTransferSettings; ArenaEftTransferSettings: IArenaEftTransferSettings;
KarmaCalculationSettings: IKarmaCalculationSettings;
LegsOverdamage: number; LegsOverdamage: number;
HandsOverdamage: number; HandsOverdamage: number;
StomachOverdamage: number; StomachOverdamage: number;
@ -103,6 +196,14 @@ export interface IConfig {
Ballistic: IBallistic; Ballistic: IBallistic;
RepairSettings: IRepairSettings; RepairSettings: IRepairSettings;
} }
export interface ISeasonActivity {
InfectionHalloween: ISeasonActivityHalloween;
}
export interface ISeasonActivityHalloween {
DisplayUIEnabled: boolean;
Enabled: boolean;
ZombieBleedMul: number;
}
export interface IEnvironmentSetting2 { export interface IEnvironmentSetting2 {
EnvironmentUIData: IEnvironmentUIData; EnvironmentUIData: IEnvironmentUIData;
} }
@ -173,6 +274,81 @@ export interface IEventWeather {
Wind: number; Wind: number;
WindDirection: number; WindDirection: number;
} }
export interface ITransitSettings {
BearPriceMod: number;
ClearAllPlayerEffectsOnTransit: boolean;
CoefficientDiscountCharisma: number;
DeliveryMinPrice: number;
DeliveryPrice: number;
ModDeliveryCost: number;
PercentageOfMissingEnergyRestore: number;
PercentageOfMissingHealthRestore: number;
PercentageOfMissingWaterRestore: number;
RestoreHealthOnDestroyedParts: boolean;
ScavPriceMod: number;
UsecPriceMod: number;
active: boolean;
}
export interface ITripwiresSettings {
CollisionCapsuleCheckCoef: number;
CollisionCapsuleRadius: number;
DefuseTimeSeconds: number;
DestroyedSeconds: number;
GroundDotProductTolerance: number;
InertSeconds: number;
InteractionSqrDistance: number;
MaxHeightDifference: number;
MaxLength: number;
MaxPreviewLength: number;
MaxTripwireToPlayerDistance: number;
MinLength: number;
MultitoolDefuseTimeSeconds: number;
ShotSqrDistance: number;
}
export interface IMountingSettings {
MovementSettings: IMountingMovementSettings;
PointDetectionSettings: IMountingPointDetectionSettings;
}
export interface IMountingMovementSettings {
ApproachTime: number;
ApproachTimeDeltaAngleModifier: number;
ExitTime: number;
MaxApproachTime: number;
MaxPitchLimitExcess: number;
MaxVerticalMountAngle: number;
MaxYawLimitExcess: number;
MinApproachTime: number;
MountingCameraSpeed: number;
MountingSwayFactorModifier: number;
PitchLimitHorizontal: Ixyz;
PitchLimitHorizontalBipod: Ixyz;
PitchLimitVertical: Ixyz;
RotationSpeedClamp: number;
SensitivityMultiplier: number;
}
export interface IMountingPointDetectionSettings {
CheckHorizontalSecondaryOffset: number;
CheckWallOffset: number;
EdgeDetectionDistance: number;
GridMaxHeight: number;
GridMinHeight: number;
HorizontalGridFromTopOffset: number;
HorizontalGridSize: number;
HorizontalGridStepsAmount: number;
MaxFramesForRaycast: number;
MaxHorizontalMountAngleDotDelta: number;
MaxProneMountAngleDotDelta: number;
MaxVerticalMountAngleDotDelta: number;
PointHorizontalMountOffset: number;
PointVerticalMountOffset: number;
RaycastDistance: number;
SecondCheckVerticalDistance: number;
SecondCheckVerticalGridOffset: number;
SecondCheckVerticalGridSize: number;
SecondCheckVerticalGridSizeStepsAmount: number;
VerticalGridSize: number;
VerticalGridStepsAmount: number;
}
export interface IGraphicSettings { export interface IGraphicSettings {
ExperimentalFogInCity: boolean; ExperimentalFogInCity: boolean;
} }
@ -229,6 +405,8 @@ export interface IMatchEnd {
survivedMult: number; survivedMult: number;
runnerMult: number; runnerMult: number;
killedMult: number; killedMult: number;
transit_exp_reward: number;
transit_mult: number[][];
} }
export interface IKill { export interface IKill {
combo: ICombo[]; combo: ICombo[];
@ -392,10 +570,30 @@ export interface IBodyParts {
Feet: string; Feet: string;
Hands: string; Hands: string;
} }
export interface IArenaEftTransferSettings { export interface IAirdropGlobalSettings {
ArenaEftTransferSettings: ArenaEftTransferSettings; ParachuteEndOpenHeight: number;
ParachuteStartOpenHeight: number;
PlaneAdditionalDistance: number;
PlaneAirdropDuration: number;
PlaneAirdropFlareWait: number;
PlaneAirdropSmoke: number;
PlaneMaxFlightHeight: number;
PlaneMinFlightHeight: number;
PlaneSpeed: number;
SmokeActivateHeight: number;
} }
export interface ArenaEftTransferSettings { export interface IKarmaCalculationSettings {
defaultPveKarmaValue: number;
enable: boolean;
expireDaysAfterLastRaid: number;
maxKarmaThresholdPercentile: number;
minKarmaThresholdPercentile: number;
minSurvivedRaidCount: number;
}
export interface IArenaEftTransferSettings {
ArenaEftTransferSettings: IArenaEftTransferSettings;
}
export interface IArenaEftTransferSettings {
ArenaManagerReputationTaxMultiplier: number; ArenaManagerReputationTaxMultiplier: number;
CharismaTaxMultiplier: number; CharismaTaxMultiplier: number;
CreditPriceTaxMultiplier: number; CreditPriceTaxMultiplier: number;
@ -459,6 +657,12 @@ export interface IEffects {
HeavyBleeding: IHeavyBleeding; HeavyBleeding: IHeavyBleeding;
LightBleeding: ILightBleeding; LightBleeding: ILightBleeding;
BodyTemperature: IBodyTemperature; BodyTemperature: IBodyTemperature;
ZombieInfection: IZombieInfection;
}
export interface IZombieInfection {
Dehydration: number;
HearingDebuffPercentage: number;
СumulativeTime: number;
} }
export interface IExistence { export interface IExistence {
EnergyLoopTime: number; EnergyLoopTime: number;
@ -805,6 +1009,7 @@ export interface IRagFair {
balancerAveragePriceCoefficient: number; balancerAveragePriceCoefficient: number;
delaySinceOfferAdd: number; delaySinceOfferAdd: number;
uniqueBuyerTimeoutInDays: number; uniqueBuyerTimeoutInDays: number;
userRatingChangeFrequencyMultiplayer: number;
ratingSumForIncrease: number; ratingSumForIncrease: number;
ratingIncreaseCount: number; ratingIncreaseCount: number;
ratingSumForDecrease: number; ratingSumForDecrease: number;
@ -813,6 +1018,7 @@ export interface IRagFair {
maxSumForDecreaseRatingPerOneSale: number; maxSumForDecreaseRatingPerOneSale: number;
maxSumForRarity: IMaxSumForRarity; maxSumForRarity: IMaxSumForRarity;
ChangePriceCoef: number; ChangePriceCoef: number;
ItemRestrictions: IItemGlobalRestrictions[];
balancerUserItemSaleCooldownEnabled: boolean; balancerUserItemSaleCooldownEnabled: boolean;
balancerUserItemSaleCooldown: number; balancerUserItemSaleCooldown: number;
youSellOfferMaxStorageTimeInHour: number; youSellOfferMaxStorageTimeInHour: number;
@ -820,11 +1026,15 @@ export interface IRagFair {
isOnlyFoundInRaidAllowed: boolean; isOnlyFoundInRaidAllowed: boolean;
sellInOnePiece: number; sellInOnePiece: number;
} }
export interface IItemGlobalRestrictions {
MaxFlea: number;
MaxFleaStacked: number;
TemplateId: string;
}
export interface IMaxActiveOfferCount { export interface IMaxActiveOfferCount {
from: number; from: number;
to: number; to: number;
count: number; count: number;
countForSpecialEditions: number;
} }
export interface IMaxSumForRarity { export interface IMaxSumForRarity {
Common: IRarityMaxSum; Common: IRarityMaxSum;
@ -842,7 +1052,10 @@ export interface IStamina {
Capacity: number; Capacity: number;
SprintDrainRate: number; SprintDrainRate: number;
BaseRestorationRate: number; BaseRestorationRate: number;
BipodAimDrainRateMultiplier: number;
JumpConsumption: number; JumpConsumption: number;
MountingHorizontalAimDrainRateMultiplier: number;
MountingVerticalAimDrainRateMultiplier: number;
GrenadeHighThrow: number; GrenadeHighThrow: number;
GrenadeLowThrow: number; GrenadeLowThrow: number;
AimDrainRate: number; AimDrainRate: number;
@ -913,8 +1126,9 @@ export interface IAlpinist {
RequirementTip: string; RequirementTip: string;
} }
export interface IRestrictionsInRaid { export interface IRestrictionsInRaid {
MaxInLobby: number;
MaxInRaid: number;
TemplateId: string; TemplateId: string;
Value: number;
} }
export interface IFavoriteItemsSettings { export interface IFavoriteItemsSettings {
WeaponStandMaxItemsCount: number; WeaponStandMaxItemsCount: number;
@ -1013,10 +1227,12 @@ export interface ISquadSettings {
SendRequestDelaySeconds: number; SendRequestDelaySeconds: number;
} }
export interface IInsurance { export interface IInsurance {
ChangeForReturnItemsInOfflineRaid: number;
MaxStorageTimeInHour: number; MaxStorageTimeInHour: number;
CoefOfSendingMessageTime: number; CoefOfSendingMessageTime: number;
CoefOfHavingMarkOfUnknown: number; CoefOfHavingMarkOfUnknown: number;
EditionSendingMessageTime: Record<string, IMessageSendTImeMultipler>; EditionSendingMessageTime: Record<string, IMessageSendTImeMultipler>;
OnlyInDeathCase: boolean;
} }
export interface IMessageSendTImeMultipler { export interface IMessageSendTImeMultipler {
multiplier: number; multiplier: number;
@ -1028,6 +1244,7 @@ export interface ISkillsSettings {
HideoutManagement: IHideoutManagement; HideoutManagement: IHideoutManagement;
Crafting: ICrafting; Crafting: ICrafting;
Metabolism: IMetabolism; Metabolism: IMetabolism;
MountingErgonomicsBonusPerLevel: number;
Immunity: Immunity; Immunity: Immunity;
Endurance: IEndurance; Endurance: IEndurance;
Strength: IStrength; Strength: IStrength;
@ -1053,6 +1270,7 @@ export interface ISkillsSettings {
BearAksystems: any[]; BearAksystems: any[];
BearHeavycaliber: any[]; BearHeavycaliber: any[];
BearRawpower: any[]; BearRawpower: any[];
BipodErgonomicsBonusPerLevel: number;
UsecArsystems: any[]; UsecArsystems: any[];
UsecDeepweaponmodding_Settings: any[]; UsecDeepweaponmodding_Settings: any[];
UsecLongrangeoptics_Settings: any[]; UsecLongrangeoptics_Settings: any[];
@ -1112,6 +1330,7 @@ export interface IArmorCounters {
export interface IHideoutManagement { export interface IHideoutManagement {
SkillPointsPerAreaUpgrade: number; SkillPointsPerAreaUpgrade: number;
SkillPointsPerCraft: number; SkillPointsPerCraft: number;
CircleOfCultistsBonusPercent: number;
ConsumptionReductionPerLevel: number; ConsumptionReductionPerLevel: number;
SkillBoostPercent: number; SkillBoostPercent: number;
SkillPointsRate: ISkillPointsRate; SkillPointsRate: ISkillPointsRate;
@ -1417,6 +1636,7 @@ export interface IFenceLevel {
PaidExitCostModifier: number; PaidExitCostModifier: number;
BotFollowChance: number; BotFollowChance: number;
ScavEquipmentSpawnChanceModifier: number; ScavEquipmentSpawnChanceModifier: number;
TransitGridSize: Ixyz;
PriceModifier: number; PriceModifier: number;
HostileBosses: boolean; HostileBosses: boolean;
HostileScavs: boolean; HostileScavs: boolean;
@ -1435,6 +1655,7 @@ export interface IFenceLevel {
ReactOnMarkOnUnknownsPVE: boolean; ReactOnMarkOnUnknownsPVE: boolean;
DeliveryGridSize: Ixyz; DeliveryGridSize: Ixyz;
CanInteractWithBtr: boolean; CanInteractWithBtr: boolean;
CircleOfCultistsBonusPercent: number;
} }
export interface IInertia { export interface IInertia {
InertiaLimits: Ixyz; InertiaLimits: Ixyz;
@ -1550,7 +1771,7 @@ export interface IPreset {
_changeWeaponName: boolean; _changeWeaponName: boolean;
_name: string; _name: string;
_parent: string; _parent: string;
_items: Item[]; _items: IItem[];
/** Default presets have this property */ /** Default presets have this property */
_encyclopedia?: string; _encyclopedia?: string;
} }

View File

@ -1,7 +1,7 @@
import { Exit, ILocationBase } from "@spt/models/eft/common/ILocationBase"; import { IExit, ILocationBase } from "@spt/models/eft/common/ILocationBase";
import { ILooseLoot } from "@spt/models/eft/common/ILooseLoot"; import { IGroupPostion, ILooseLoot } from "@spt/models/eft/common/ILooseLoot";
import { Ixyz } from "@spt/models/eft/common/Ixyz"; import { Ixyz } from "@spt/models/eft/common/Ixyz";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
export interface ILocation { export interface ILocation {
/** Map meta-data */ /** Map meta-data */
base: ILocationBase; base: ILocationBase;
@ -15,7 +15,7 @@ export interface ILocation {
/** All possible static containers on map + their assign groupings */ /** All possible static containers on map + their assign groupings */
statics: IStaticContainer; statics: IStaticContainer;
/** All possible map extracts */ /** All possible map extracts */
allExtracts: Exit[]; allExtracts: IExit[];
} }
export interface IStaticContainer { export interface IStaticContainer {
containersGroups: Record<string, IContainerMinMax>; containersGroups: Record<string, IContainerMinMax>;
@ -51,12 +51,12 @@ export interface IStaticPropsBase {
Rotation: Ixyz; Rotation: Ixyz;
IsGroupPosition: boolean; IsGroupPosition: boolean;
IsAlwaysSpawn: boolean; IsAlwaysSpawn: boolean;
GroupPositions: any[]; GroupPositions: IGroupPostion[];
Root: string; Root: string;
Items: any[]; Items: IItem[];
} }
export interface IStaticWeaponProps extends IStaticPropsBase { export interface IStaticWeaponProps extends IStaticPropsBase {
Items: Item[]; Items: IItem[];
} }
export interface IStaticContainerDetails { export interface IStaticContainerDetails {
staticWeapons: IStaticWeaponProps[]; staticWeapons: IStaticWeaponProps[];
@ -76,9 +76,9 @@ export interface IStaticForcedProps {
itemTpl: string; itemTpl: string;
} }
export interface IStaticContainerProps extends IStaticPropsBase { export interface IStaticContainerProps extends IStaticPropsBase {
Items: StaticItem[]; Items: IStaticItem[];
} }
export interface StaticItem { export interface IStaticItem {
_id: string; _id: string;
_tpl: string; _tpl: string;
} }

View File

@ -1,18 +1,20 @@
import { MinMax } from "@spt/models/common/MinMax"; import { MinMax } from "@spt/models/common/MinMax";
import { Ixyz } from "@spt/models/eft/common/Ixyz"; import { Ixyz } from "@spt/models/eft/common/Ixyz";
import { ISpawnpointTemplate } from "./ILooseLoot";
export interface ILocationBase { export interface ILocationBase {
AccessKeys: string[]; AccessKeys: string[];
AirdropParameters: AirdropParameter[]; AccessKeysPvE: string[];
AirdropParameters: IAirdropParameter[];
Area: number; Area: number;
AveragePlayTime: number; AveragePlayTime: number;
AveragePlayerLevel: number; AveragePlayerLevel: number;
Banners: Banner[]; Banners: IBanner[];
BossLocationSpawn: BossLocationSpawn[]; BossLocationSpawn: IBossLocationSpawn[];
BotAssault: number; BotAssault: number;
BotEasy: number; BotEasy: number;
BotHard: number; BotHard: number;
BotImpossible: number; BotImpossible: number;
BotLocationModifier: BotLocationModifier; BotLocationModifier: IBotLocationModifier;
BotMarksman: number; BotMarksman: number;
BotMax: number; BotMax: number;
BotMaxPlayer: number; BotMaxPlayer: number;
@ -41,14 +43,14 @@ export interface ILocationBase {
Insurance: boolean; Insurance: boolean;
IsSecret: boolean; IsSecret: boolean;
Locked: boolean; Locked: boolean;
Loot: any[]; Loot: ISpawnpointTemplate[];
MatchMakerMinPlayersByWaitTime: MinPlayerWaitTime[]; MatchMakerMinPlayersByWaitTime: IMinPlayerWaitTime[];
MaxBotPerZone: number; MaxBotPerZone: number;
MaxDistToFreePoint: number; MaxDistToFreePoint: number;
MaxPlayers: number; MaxPlayers: number;
MinDistToExitPoint: number; MinDistToExitPoint: number;
MinDistToFreePoint: number; MinDistToFreePoint: number;
MinMaxBots: MinMaxBot[]; MinMaxBots: IMinMaxBot[];
MinPlayers: number; MinPlayers: number;
MaxCoopGroup: number; MaxCoopGroup: number;
Name: string; Name: string;
@ -57,7 +59,7 @@ export interface ILocationBase {
OcculsionCullingEnabled: boolean; OcculsionCullingEnabled: boolean;
OldSpawn: boolean; OldSpawn: boolean;
OpenZones: string; OpenZones: string;
Preview: Preview; Preview: IPreview;
PlayersRequestCount: number; PlayersRequestCount: number;
RequiredPlayerLevel?: number; RequiredPlayerLevel?: number;
RequiredPlayerLevelMin?: number; RequiredPlayerLevelMin?: number;
@ -67,30 +69,44 @@ export interface ILocationBase {
ScavMaxPlayersInGroup: number; ScavMaxPlayersInGroup: number;
Rules: string; Rules: string;
SafeLocation: boolean; SafeLocation: boolean;
Scene: Scene; Scene: IScene;
SpawnPointParams: SpawnPointParam[]; SpawnPointParams: ISpawnPointParam[];
UnixDateTime: number; UnixDateTime: number;
_Id: string; _Id: string;
doors: any[]; doors: any[];
EscapeTimeLimit: number; EscapeTimeLimit: number;
EscapeTimeLimitCoop: number; EscapeTimeLimitCoop: number;
EscapeTimeLimitPVE: number; EscapeTimeLimitPVE: number;
Events: ILocationEvents;
exit_access_time: number; exit_access_time: number;
ForceOnlineRaidInPVE: boolean;
exit_count: number; exit_count: number;
exit_time: number; exit_time: number;
exits: Exit[]; exits: IExit[];
filter_ex: string[]; filter_ex: string[];
limits: ILimit[]; limits: ILimit[];
matching_min_seconds: number; matching_min_seconds: number;
GenerateLocalLootCache: boolean; GenerateLocalLootCache: boolean;
maxItemCountInLocation: MaxItemCountInLocation[]; maxItemCountInLocation: IMaxItemCountInLocation[];
sav_summon_seconds: number; sav_summon_seconds: number;
tmp_location_field_remove_me: number; tmp_location_field_remove_me: number;
transits: ITransit[];
users_gather_seconds: number; users_gather_seconds: number;
users_spawn_seconds_n: number; users_spawn_seconds_n: number;
users_spawn_seconds_n2: number; users_spawn_seconds_n2: number;
users_summon_seconds: number; users_summon_seconds: number;
waves: Wave[]; waves: IWave[];
}
export interface ITransit {
activateAfterSec: string;
active: boolean;
name: string;
conditions: string;
description: string;
id: number;
location: string;
target: string;
time: number;
} }
export interface INonWaveGroupScenario { export interface INonWaveGroupScenario {
Chance: number; Chance: number;
@ -101,7 +117,7 @@ export interface INonWaveGroupScenario {
export interface ILimit extends MinMax { export interface ILimit extends MinMax {
items: any[]; items: any[];
} }
export interface AirdropParameter { export interface IAirdropParameter {
AirdropPointDeactivateDistance: number; AirdropPointDeactivateDistance: number;
MinPlayersCountToSpawnAirdrop: number; MinPlayersCountToSpawnAirdrop: number;
PlaneAirdropChance: number; PlaneAirdropChance: number;
@ -113,15 +129,15 @@ export interface AirdropParameter {
PlaneAirdropStartMin: number; PlaneAirdropStartMin: number;
UnsuccessfulTryPenalty: number; UnsuccessfulTryPenalty: number;
} }
export interface Banner { export interface IBanner {
id: string; id: string;
pic: Pic; pic: IPic;
} }
export interface Pic { export interface IPic {
path: string; path: string;
rcid: string; rcid: string;
} }
export interface BossLocationSpawn { export interface IBossLocationSpawn {
BossChance: number; BossChance: number;
BossDifficult: string; BossDifficult: string;
BossEscortAmount: string; BossEscortAmount: string;
@ -135,48 +151,73 @@ export interface BossLocationSpawn {
TriggerId: string; TriggerId: string;
TriggerName: string; TriggerName: string;
Delay?: number; Delay?: number;
DependKarma?: boolean;
DependKarmaPVE?: boolean;
ForceSpawn?: boolean; ForceSpawn?: boolean;
IgnoreMaxBots?: boolean; IgnoreMaxBots?: boolean;
Supports?: BossSupport[]; Supports?: IBossSupport[];
sptId?: string; sptId?: string;
spawnMode: string[]; spawnMode: string[];
} }
export interface BossSupport { export interface IBossSupport {
BossEscortAmount: string; BossEscortAmount: string;
BossEscortDifficult: string[]; BossEscortDifficult: string[];
BossEscortType: string; BossEscortType: string;
} }
export interface BotLocationModifier { export interface IBotLocationModifier {
AccuracySpeed: number; AccuracySpeed: number;
AdditionalHostilitySettings: IAdditionalHostilitySettings[];
DistToActivate: number; DistToActivate: number;
DistToActivatePvE: number;
DistToPersueAxemanCoef: number; DistToPersueAxemanCoef: number;
DistToSleep: number; DistToSleep: number;
DistToSleepPvE: number;
GainSight: number; GainSight: number;
KhorovodChance: number; KhorovodChance: number;
MagnetPower: number; MagnetPower: number;
MarksmanAccuratyCoef: number; MarksmanAccuratyCoef: number;
Scattering: number; Scattering: number;
VisibleDistance: number; VisibleDistance: number;
MaxExfiltrationTime: number;
MinExfiltrationTime: number;
} }
export interface MinMaxBot extends MinMax { export interface IAdditionalHostilitySettings {
AlwaysEnemies: string[];
AlwaysFriends: string[];
BearEnemyChance: number;
BearPlayerBehaviour: string;
BotRole: string;
ChancedEnemies: IChancedEnemy[];
Neutral: string[];
SavagePlayerBehaviour: string;
SavageEnemyChance?: number;
UsecEnemyChance: number;
UsecPlayerBehaviour: string;
Warn: string[];
}
export interface IChancedEnemy {
EnemyChance: number;
Role: string;
}
export interface IMinMaxBot extends MinMax {
WildSpawnType: WildSpawnType | string; WildSpawnType: WildSpawnType | string;
} }
export interface MinPlayerWaitTime { export interface IMinPlayerWaitTime {
minPlayers: number; minPlayers: number;
time: number; time: number;
} }
export interface Preview { export interface IPreview {
path: string; path: string;
rcid: string; rcid: string;
} }
export interface Scene { export interface IScene {
path: string; path: string;
rcid: string; rcid: string;
} }
export interface SpawnPointParam { export interface ISpawnPointParam {
BotZoneName: string; BotZoneName: string;
Categories: string[]; Categories: string[];
ColliderParams: ColliderParams; ColliderParams: IColliderParams;
CorePointId: number; CorePointId: number;
DelayToCanSpawnSec: number; DelayToCanSpawnSec: number;
Id: string; Id: string;
@ -185,15 +226,15 @@ export interface SpawnPointParam {
Rotation: number; Rotation: number;
Sides: string[]; Sides: string[];
} }
export interface ColliderParams { export interface IColliderParams {
_parent: string; _parent: string;
_props: Props; _props: IProps;
} }
export interface Props { export interface IProps {
Center: Ixyz; Center: Ixyz;
Radius: number; Radius: number;
} }
export interface Exit { export interface IExit {
/** % Chance out of 100 exit will appear in raid */ /** % Chance out of 100 exit will appear in raid */
Chance: number; Chance: number;
ChancePVE: number; ChancePVE: number;
@ -217,11 +258,11 @@ export interface Exit {
RequirementTip: string; RequirementTip: string;
Side?: string; Side?: string;
} }
export interface MaxItemCountInLocation { export interface IMaxItemCountInLocation {
TemplateId: string; TemplateId: string;
Value: number; Value: number;
} }
export interface Wave { export interface IWave {
BotPreset: string; BotPreset: string;
BotSide: string; BotSide: string;
SpawnPoints: string; SpawnPoints: string;
@ -232,11 +273,40 @@ export interface Wave {
slots_min: number; slots_min: number;
time_max: number; time_max: number;
time_min: number; time_min: number;
/** OPTIONAL - Needs to be unique - Used by custom wave service to ensure same wave isnt added multiple times */
sptId?: string; sptId?: string;
ChanceGroup?: number; ChanceGroup?: number;
/** 'pve' and/or 'regular' */
SpawnMode: string[];
}
export interface ILocationEvents {
Halloween2024: IHalloween2024;
}
export interface IHalloween2024 {
CrowdAttackBlockRadius: number;
CrowdAttackSpawnParams: CrowdAttackSpawnParam[];
CrowdCooldownPerPlayerSec: number;
CrowdsLimit: number;
InfectedLookCoeff: number;
MaxCrowdAttackSpawnLimit: number;
MinInfectionPercentage: number;
MinSpawnDistToPlayer: number;
TargetPointSearchRadiusLimit: number;
ZombieCallDeltaRadius: number;
ZombieCallPeriodSec: number;
ZombieCallRadiusLimit: number;
ZombieMultiplier: number;
InfectionPercentage: number;
}
export interface CrowdAttackSpawnParam {
Difficulty: string;
Role: string;
Weight: number;
} }
export declare enum WildSpawnType { export declare enum WildSpawnType {
ASSAULT = "assault", ASSAULT = "assault",
MARKSMAN = "marksman", MARKSMAN = "marksman",
PMCBOT = "pmcbot" PMCBOT = "pmcbot",
BOSSKILLA = "bosskilla",
BOSSKNIGHT = "bossknight"
} }

View File

@ -1,9 +1,9 @@
import { ILocations } from "@spt/models/spt/server/ILocations"; import { ILocations } from "@spt/models/spt/server/ILocations";
export interface ILocationsGenerateAllResponse { export interface ILocationsGenerateAllResponse {
locations: ILocations; locations: ILocations;
paths: Path[]; paths: IPath[];
} }
export interface Path { export interface IPath {
Source: string; Source: string;
Destination: string; Destination: string;
} }

View File

@ -1,20 +1,20 @@
import { Ixyz } from "@spt/models/eft/common/Ixyz"; import { Ixyz } from "@spt/models/eft/common/Ixyz";
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
export interface ILooseLoot { export interface ILooseLoot {
spawnpointCount: SpawnpointCount; spawnpointCount: ISpawnpointCount;
spawnpointsForced: SpawnpointsForced[]; spawnpointsForced: ISpawnpointsForced[];
spawnpoints: Spawnpoint[]; spawnpoints: ISpawnpoint[];
} }
export interface SpawnpointCount { export interface ISpawnpointCount {
mean: number; mean: number;
std: number; std: number;
} }
export interface SpawnpointsForced { export interface ISpawnpointsForced {
locationId: string; locationId: string;
probability: number; probability: number;
template: SpawnpointTemplate; template: ISpawnpointTemplate;
} }
export interface SpawnpointTemplate { export interface ISpawnpointTemplate {
Id: string; Id: string;
IsContainer: boolean; IsContainer: boolean;
useGravity: boolean; useGravity: boolean;
@ -23,20 +23,26 @@ export interface SpawnpointTemplate {
Rotation: Ixyz; Rotation: Ixyz;
IsAlwaysSpawn: boolean; IsAlwaysSpawn: boolean;
IsGroupPosition: boolean; IsGroupPosition: boolean;
GroupPositions: any[]; GroupPositions: IGroupPostion[];
Root: string; Root: string;
Items: Item[]; Items: IItem[];
} }
export interface Spawnpoint { export interface IGroupPostion {
Name: string;
Weight: number;
Postion: Ixyz;
Rotation: Ixyz;
}
export interface ISpawnpoint {
locationId: string; locationId: string;
probability: number; probability: number;
template: SpawnpointTemplate; template: ISpawnpointTemplate;
itemDistribution: ItemDistribution[]; itemDistribution: ItemDistribution[];
} }
export interface ItemDistribution { export interface ItemDistribution {
composedKey: ComposedKey; composedKey: IComposedKey;
relativeProbability: number; relativeProbability: number;
} }
export interface ComposedKey { export interface IComposedKey {
key: string; key: string;
} }

View File

@ -1,4 +1,4 @@
import { Item, Upd } from "@spt/models/eft/common/tables/IItem"; import { IItem, IUpd } from "@spt/models/eft/common/tables/IItem";
import { IPmcDataRepeatableQuest } from "@spt/models/eft/common/tables/IRepeatableQuests"; import { IPmcDataRepeatableQuest } from "@spt/models/eft/common/tables/IRepeatableQuests";
import { IRagfairOffer } from "@spt/models/eft/ragfair/IRagfairOffer"; import { IRagfairOffer } from "@spt/models/eft/ragfair/IRagfairOffer";
import { BonusSkillType } from "@spt/models/enums/BonusSkillType"; import { BonusSkillType } from "@spt/models/enums/BonusSkillType";
@ -12,29 +12,30 @@ export interface IBotBase {
/** SPT property - use to store player id - TODO - move to AID ( account id as guid of choice) */ /** SPT property - use to store player id - TODO - move to AID ( account id as guid of choice) */
sessionId: string; sessionId: string;
savage?: string; savage?: string;
Info: Info; karmaValue: number;
Customization: Customization; Info: IInfo;
Health: Health; Customization: ICustomization;
Inventory: Inventory; Health: IHealth;
Skills: Skills; Inventory: IInventory;
Stats: Stats; Skills: ISkills;
Stats: IStats;
Encyclopedia: Record<string, boolean>; Encyclopedia: Record<string, boolean>;
TaskConditionCounters: Record<string, ITaskConditionCounter>; TaskConditionCounters: Record<string, ITaskConditionCounter>;
InsuredItems: InsuredItem[]; InsuredItems: IInsuredItem[];
Hideout: Hideout; Hideout: IHideout;
Quests: IQuestStatus[]; Quests: IQuestStatus[];
TradersInfo: Record<string, TraderInfo>; TradersInfo: Record<string, ITraderInfo>;
UnlockedInfo: IUnlockedInfo; UnlockedInfo: IUnlockedInfo;
RagfairInfo: RagfairInfo; RagfairInfo: IRagfairInfo;
/** Achievement id and timestamp */ /** Achievement id and timestamp */
Achievements: Record<string, number>; Achievements: Record<string, number>;
RepeatableQuests: IPmcDataRepeatableQuest[]; RepeatableQuests: IPmcDataRepeatableQuest[];
Bonuses: Bonus[]; Bonuses: IBonus[];
Notes: Notes; Notes: INotes;
CarExtractCounts: Record<string, number>; CarExtractCounts: Record<string, number>;
CoopExtractCounts: Record<string, number>; CoopExtractCounts: Record<string, number>;
SurvivorClass: SurvivorClass; SurvivorClass: SurvivorClass;
WishList: string[]; WishList: Record<string, number>;
moneyTransferLimitData: IMoneyTransferLimits; moneyTransferLimitData: IMoneyTransferLimits;
/** SPT specific property used during bot generation in raid */ /** SPT specific property used during bot generation in raid */
sptIsPmc?: boolean; sptIsPmc?: boolean;
@ -56,13 +57,14 @@ export interface ITaskConditionCounter {
export interface IUnlockedInfo { export interface IUnlockedInfo {
unlockedProductionRecipe: string[]; unlockedProductionRecipe: string[];
} }
export interface Info { export interface IInfo {
EntryPoint: string; EntryPoint: string;
Nickname: string; Nickname: string;
LowerNickname: string; LowerNickname: string;
Side: string; Side: string;
SquadInviteRestriction: boolean; SquadInviteRestriction: boolean;
HasCoopExtension: boolean; HasCoopExtension: boolean;
HasPveGame: boolean;
Voice: string; Voice: string;
Level: number; Level: number;
Experience: number; Experience: number;
@ -70,27 +72,28 @@ export interface Info {
GameVersion: string; GameVersion: string;
AccountType: number; AccountType: number;
MemberCategory: MemberCategory; MemberCategory: MemberCategory;
SelectedMemberCategory: MemberCategory;
lockedMoveCommands: boolean; lockedMoveCommands: boolean;
SavageLockTime: number; SavageLockTime: number;
LastTimePlayedAsSavage: number; LastTimePlayedAsSavage: number;
Settings: Settings; Settings: IBotInfoSettings;
NicknameChangeDate: number; NicknameChangeDate: number;
NeedWipeOptions: any[]; NeedWipeOptions: any[];
lastCompletedWipe: LastCompleted; lastCompletedWipe: ILastCompleted;
Bans: IBan[]; Bans: IBan[];
BannedState: boolean; BannedState: boolean;
BannedUntil: number; BannedUntil: number;
IsStreamerModeAvailable: boolean; IsStreamerModeAvailable: boolean;
lastCompletedEvent?: LastCompleted; lastCompletedEvent?: ILastCompleted;
SelectedMemberCategory: number;
isMigratedSkills: boolean; isMigratedSkills: boolean;
} }
export interface Settings { export interface IBotInfoSettings {
Role: string; Role: string;
BotDifficulty: string; BotDifficulty: string;
Experience: number; Experience: number;
StandingForKill: number; StandingForKill: number;
AggressorBonus: number; AggressorBonus: number;
UseSimpleAnimator: boolean;
} }
export interface IBan { export interface IBan {
banType: BanType; banType: BanType;
@ -105,42 +108,43 @@ export declare enum BanType {
FRIENDS = 5, FRIENDS = 5,
CHANGE_NICKNAME = 6 CHANGE_NICKNAME = 6
} }
export interface Customization { export interface ICustomization {
Head: string; Head: string;
Body: string; Body: string;
Feet: string; Feet: string;
Hands: string; Hands: string;
} }
export interface Health { export interface IHealth {
Hydration: CurrentMax; Hydration: ICurrentMax;
Energy: CurrentMax; Energy: ICurrentMax;
Temperature: CurrentMax; Temperature: ICurrentMax;
BodyParts: BodyPartsHealth; BodyParts: IBodyPartsHealth;
UpdateTime: number; UpdateTime: number;
Immortal?: boolean; Immortal?: boolean;
} }
export interface BodyPartsHealth { export interface IBodyPartsHealth {
Head: BodyPartHealth; Head: IBodyPartHealth;
Chest: BodyPartHealth; Chest: IBodyPartHealth;
Stomach: BodyPartHealth; Stomach: IBodyPartHealth;
LeftArm: BodyPartHealth; LeftArm: IBodyPartHealth;
RightArm: BodyPartHealth; RightArm: IBodyPartHealth;
LeftLeg: BodyPartHealth; LeftLeg: IBodyPartHealth;
RightLeg: BodyPartHealth; RightLeg: IBodyPartHealth;
} }
export interface BodyPartHealth { export interface IBodyPartHealth {
Health: CurrentMax; Health: ICurrentMax;
Effects?: Record<string, BodyPartEffectProperties>; Effects?: Record<string, IBodyPartEffectProperties>;
} }
export interface BodyPartEffectProperties { export interface IBodyPartEffectProperties {
ExtraData?: any;
Time: number; Time: number;
} }
export interface CurrentMax { export interface ICurrentMax {
Current: number; Current: number;
Maximum: number; Maximum: number;
} }
export interface Inventory { export interface IInventory {
items: Item[]; items: IItem[];
equipment: string; equipment: string;
stash: string; stash: string;
sortingTable: string; sortingTable: string;
@ -149,16 +153,16 @@ export interface Inventory {
/** Key is hideout area enum numeric as string e.g. "24", value is area _id */ /** Key is hideout area enum numeric as string e.g. "24", value is area _id */
hideoutAreaStashes: Record<string, string>; hideoutAreaStashes: Record<string, string>;
fastPanel: Record<string, string>; fastPanel: Record<string, string>;
favoriteItems: string[]; favoriteItems: IItem[];
} }
export interface IBaseJsonSkills { export interface IBaseJsonSkills {
Common: Record<string, Common>; Common: Record<string, Common>;
Mastering: Record<string, Mastering>; Mastering: Record<string, IMastering>;
Points: number; Points: number;
} }
export interface Skills { export interface ISkills {
Common: Common[]; Common: Common[];
Mastering: Mastering[]; Mastering: IMastering[];
Points: number; Points: number;
} }
export interface IBaseSkill { export interface IBaseSkill {
@ -171,26 +175,26 @@ export interface Common extends IBaseSkill {
PointsEarnedDuringSession?: number; PointsEarnedDuringSession?: number;
LastAccess?: number; LastAccess?: number;
} }
export interface Mastering extends IBaseSkill { export interface IMastering extends IBaseSkill {
} }
export interface Stats { export interface IStats {
Eft?: IEftStats; Eft?: IEftStats;
} }
export interface IEftStats { export interface IEftStats {
CarriedQuestItems: string[]; CarriedQuestItems: string[];
Victims: Victim[]; Victims: IVictim[];
TotalSessionExperience: number; TotalSessionExperience: number;
LastSessionDate: number; LastSessionDate: number;
SessionCounters: SessionCounters; SessionCounters: ISessionCounters;
OverallCounters: OverallCounters; OverallCounters: IOverallCounters;
SessionExperienceMult?: number; SessionExperienceMult?: number;
ExperienceBonusMult?: number; ExperienceBonusMult?: number;
Aggressor?: Aggressor; Aggressor?: IAggressor;
DroppedItems?: IDroppedItem[]; DroppedItems?: IDroppedItem[];
FoundInRaidItems?: FoundInRaidItem[]; FoundInRaidItems?: IFoundInRaidItem[];
DamageHistory?: DamageHistory; DamageHistory?: IDamageHistory;
DeathCause?: DeathCause; DeathCause?: IDeathCause;
LastPlayerState?: LastPlayerState; LastPlayerState?: ILastPlayerState;
TotalInGameTime: number; TotalInGameTime: number;
SurvivorClass?: string; SurvivorClass?: string;
sptLastRaidFenceRepChange?: number; sptLastRaidFenceRepChange?: number;
@ -200,11 +204,11 @@ export interface IDroppedItem {
ItemId: string; ItemId: string;
ZoneId: string; ZoneId: string;
} }
export interface FoundInRaidItem { export interface IFoundInRaidItem {
QuestId: string; QuestId: string;
ItemId: string; ItemId: string;
} }
export interface Victim { export interface IVictim {
AccountId: string; AccountId: string;
ProfileId: string; ProfileId: string;
Name: string; Name: string;
@ -215,18 +219,19 @@ export interface Victim {
Level: number; Level: number;
Weapon: string; Weapon: string;
Role: string; Role: string;
Location: string;
} }
export interface SessionCounters { export interface ISessionCounters {
Items: CounterKeyValue[]; Items: ICounterKeyValue[];
} }
export interface OverallCounters { export interface IOverallCounters {
Items: CounterKeyValue[]; Items: ICounterKeyValue[];
} }
export interface CounterKeyValue { export interface ICounterKeyValue {
Key: string[]; Key: string[];
Value: number; Value: number;
} }
export interface Aggressor { export interface IAggressor {
AccountId: string; AccountId: string;
ProfileId: string; ProfileId: string;
MainProfileNickname: string; MainProfileNickname: string;
@ -237,12 +242,12 @@ export interface Aggressor {
WeaponName: string; WeaponName: string;
Category: string; Category: string;
} }
export interface DamageHistory { export interface IDamageHistory {
LethalDamagePart: string; LethalDamagePart: string;
LethalDamage: LethalDamage; LethalDamage: ILethalDamage;
BodyParts: BodyPartsDamageHistory; BodyParts: IBodyPartsDamageHistory;
} }
export interface LethalDamage { export interface ILethalDamage {
Amount: number; Amount: number;
Type: string; Type: string;
SourceId: string; SourceId: string;
@ -250,17 +255,17 @@ export interface LethalDamage {
Blunt: boolean; Blunt: boolean;
ImpactsCount: number; ImpactsCount: number;
} }
export interface BodyPartsDamageHistory { export interface IBodyPartsDamageHistory {
Head: DamageStats[]; Head: IDamageStats[];
Chest: DamageStats[]; Chest: IDamageStats[];
Stomach: DamageStats[]; Stomach: IDamageStats[];
LeftArm: DamageStats[]; LeftArm: IDamageStats[];
RightArm: DamageStats[]; RightArm: IDamageStats[];
LeftLeg: DamageStats[]; LeftLeg: IDamageStats[];
RightLeg: DamageStats[]; RightLeg: IDamageStats[];
Common: DamageStats[]; Common: IDamageStats[];
} }
export interface DamageStats { export interface IDamageStats {
Amount: number; Amount: number;
Type: string; Type: string;
SourceId: string; SourceId: string;
@ -268,55 +273,63 @@ export interface DamageStats {
Blunt: boolean; Blunt: boolean;
ImpactsCount: number; ImpactsCount: number;
} }
export interface DeathCause { export interface IDeathCause {
DamageType: string; DamageType: string;
Side: string; Side: string;
Role: string; Role: string;
WeaponId: string; WeaponId: string;
} }
export interface LastPlayerState { export interface ILastPlayerState {
Info: LastPlayerStateInfo; Info: ILastPlayerStateInfo;
Customization: Record<string, string>; Customization: Record<string, string>;
Equipment: any; Equipment: any;
} }
export interface LastPlayerStateInfo { export interface ILastPlayerStateInfo {
Nickname: string; Nickname: string;
Side: string; Side: string;
Level: number; Level: number;
MemberCategory: MemberCategory; MemberCategory: MemberCategory;
} }
export interface BackendCounter { export interface IBackendCounter {
id: string; id: string;
qid?: string; qid?: string;
value: number; value: number;
} }
export interface InsuredItem { export interface IInsuredItem {
/** Trader Id item was insured by */ /** Trader Id item was insured by */
tid: string; tid: string;
itemId: string; itemId: string;
} }
export interface Hideout { export interface IHideout {
Production: Record<string, Productive>; Production: Record<string, IProduction>;
Areas: HideoutArea[]; Areas: IBotHideoutArea[];
Improvement: Record<string, IHideoutImprovement>; Improvements: Record<string, IHideoutImprovement>;
HideoutCounters: IHideoutCounters;
Seed: number; Seed: number;
MannequinPoses: string[];
sptUpdateLastRunTimestamp: number; sptUpdateLastRunTimestamp: number;
} }
export interface IHideoutCounters {
fuelCounter: number;
airFilterCounter: number;
waterFilterCounter: number;
craftingTimeCounter: number;
}
export interface IHideoutImprovement { export interface IHideoutImprovement {
completed: boolean; completed: boolean;
improveCompleteTimestamp: number; improveCompleteTimestamp: number;
} }
export interface Productive { export interface IProductive {
Products: Product[]; Products: IProduct[];
/** Seconds passed of production */ /** Seconds passed of production */
Progress?: number; Progress?: number;
/** Is craft in some state of being worked on by client (crafting/ready to pick up) */ /** Is craft in some state of being worked on by client (crafting/ready to pick up) */
inProgress?: boolean; inProgress?: boolean;
StartTimestamp?: number; StartTimestamp?: string;
SkipTime?: number; SkipTime?: number;
/** Seconds needed to fully craft */ /** Seconds needed to fully craft */
ProductionTime?: number; ProductionTime?: number;
GivenItemsInStart?: string[]; GivenItemsInStart?: IItem[];
Interrupted?: boolean; Interrupted?: boolean;
Code?: string; Code?: string;
Decoded?: boolean; Decoded?: boolean;
@ -331,22 +344,23 @@ export interface Productive {
/** Is the craft a Continuous, e.g bitcoins/water collector */ /** Is the craft a Continuous, e.g bitcoins/water collector */
sptIsContinuous?: boolean; sptIsContinuous?: boolean;
/** Stores a list of tools used in this craft and whether they're FiR, to give back once the craft is done */ /** Stores a list of tools used in this craft and whether they're FiR, to give back once the craft is done */
sptRequiredTools?: Item[]; sptRequiredTools?: IItem[];
sptIsCultistCircle?: boolean;
} }
export interface Production extends Productive { export interface IProduction extends IProductive {
RecipeId: string; RecipeId: string;
SkipTime: number; SkipTime?: number;
ProductionTime: number; ProductionTime?: number;
} }
export interface ScavCase extends Productive { export interface IScavCase extends IProductive {
RecipeId: string; RecipeId: string;
} }
export interface Product { export interface IProduct {
_id: string; _id: string;
_tpl: string; _tpl: string;
upd?: Upd; upd?: IUpd;
} }
export interface HideoutArea { export interface IBotHideoutArea {
type: HideoutAreas; type: HideoutAreas;
level: number; level: number;
active: boolean; active: boolean;
@ -354,26 +368,25 @@ export interface HideoutArea {
/** Must be integer */ /** Must be integer */
completeTime: number; completeTime: number;
constructing: boolean; constructing: boolean;
slots: HideoutSlot[]; slots: IHideoutSlot[];
lastRecipe: string; lastRecipe: string;
} }
export interface HideoutSlot { export interface IHideoutSlot {
/** SPT specific value to keep track of what index this slot is (0,1,2,3 etc) */ /** SPT specific value to keep track of what index this slot is (0,1,2,3 etc) */
locationIndex: number; locationIndex: number;
item?: HideoutItem[]; item?: IHideoutItem[];
} }
export interface HideoutItem { export interface IHideoutItem {
_id: string; _id: string;
_tpl: string; _tpl: string;
upd?: Upd; upd?: IUpd;
} }
export interface LastCompleted { export interface ILastCompleted {
$oid: string; $oid: string;
} }
export interface Notes { export interface INotes {
Notes: Note[]; Notes: INote[];
} }
export type CarExtractCounts = {};
export declare enum SurvivorClass { export declare enum SurvivorClass {
UNKNOWN = 0, UNKNOWN = 0,
NEUTRALIZER = 1, NEUTRALIZER = 1,
@ -390,20 +403,20 @@ export interface IQuestStatus {
completedConditions?: string[]; completedConditions?: string[];
availableAfter?: number; availableAfter?: number;
} }
export interface TraderInfo { export interface ITraderInfo {
loyaltyLevel: number; loyaltyLevel?: number;
salesSum: number; salesSum: number;
standing: number; standing: number;
nextResupply: number; nextResupply: number;
unlocked: boolean; unlocked: boolean;
disabled: boolean; disabled: boolean;
} }
export interface RagfairInfo { export interface IRagfairInfo {
rating: number; rating: number;
isRatingGrowing: boolean; isRatingGrowing: boolean;
offers: IRagfairOffer[]; offers: IRagfairOffer[];
} }
export interface Bonus { export interface IBonus {
id?: string; id?: string;
type: BonusType; type: BonusType;
templateId?: string; templateId?: string;
@ -415,7 +428,7 @@ export interface Bonus {
filter?: string[]; filter?: string[];
skillType?: BonusSkillType; skillType?: BonusSkillType;
} }
export interface Note { export interface INote {
Time: number; Time: number;
Text: string; Text: string;
} }

View File

@ -1,28 +1,28 @@
import { MinMax } from "@spt/models/common/MinMax"; import { MinMax } from "@spt/models/common/MinMax";
import { Skills } from "@spt/models/eft/common/tables/IBotBase"; import { ISkills } from "@spt/models/eft/common/tables/IBotBase";
export interface IBotType { export interface IBotType {
appearance: Appearance; appearance: IAppearance;
chances: Chances; chances: IChances;
difficulty: Difficulties; difficulty: IDifficulties;
experience: Experience; experience: IExperience;
firstName: string[]; firstName: string[];
generation: Generation; generation: IGeneration;
health: Health; health: IHealth;
inventory: Inventory; inventory: IInventory;
lastName: string[]; lastName: string[];
skills: Skills; skills: ISkills;
} }
export interface Appearance { export interface IAppearance {
body: Record<string, number>; body: Record<string, number>;
feet: Record<string, number>; feet: Record<string, number>;
hands: Record<string, number>; hands: Record<string, number>;
head: Record<string, number>; head: Record<string, number>;
voice: Record<string, number>; voice: Record<string, number>;
} }
export interface Chances { export interface IChances {
equipment: EquipmentChances; equipment: EquipmentChances;
weaponMods: ModsChances; weaponMods: IModsChances;
equipmentMods: ModsChances; equipmentMods: IModsChances;
} }
export interface EquipmentChances { export interface EquipmentChances {
ArmBand: number; ArmBand: number;
@ -40,7 +40,7 @@ export interface EquipmentChances {
SecuredContainer: number; SecuredContainer: number;
TacticalVest: number; TacticalVest: number;
} }
export interface ModsChances { export interface IModsChances {
mod_charge: number; mod_charge: number;
mod_equipment: number; mod_equipment: number;
mod_equipment_000: number; mod_equipment_000: number;
@ -74,13 +74,13 @@ export interface ModsChances {
mod_tactical_003: number; mod_tactical_003: number;
mod_handguard: number; mod_handguard: number;
} }
export interface Difficulties { export interface IDifficulties {
easy: Difficulty; easy: IDifficultyCategories;
normal: Difficulty; normal: IDifficultyCategories;
hard: Difficulty; hard: IDifficultyCategories;
impossible: Difficulty; impossible: IDifficultyCategories;
} }
export interface Difficulty { export interface IDifficultyCategories {
Aiming: Record<string, string | number | boolean>; Aiming: Record<string, string | number | boolean>;
Boss: Record<string, string | number | boolean>; Boss: Record<string, string | number | boolean>;
Change: Record<string, string | number | boolean>; Change: Record<string, string | number | boolean>;
@ -96,42 +96,46 @@ export interface Difficulty {
Scattering: Record<string, string | number | boolean>; Scattering: Record<string, string | number | boolean>;
Shoot: Record<string, string | number | boolean>; Shoot: Record<string, string | number | boolean>;
} }
export interface Experience { export interface IExperience {
aggressorBonus: number; /** key = bot difficulty */
aggressorBonus: Record<string, number>;
level: MinMax; level: MinMax;
reward: MinMax; /** key = bot difficulty */
standingForKill: number; reward: Record<string, MinMax>;
/** key = bot difficulty */
standingForKill: Record<string, number>;
useSimpleAnimator: boolean;
} }
export interface Generation { export interface IGeneration {
items: GenerationWeightingItems; items: IGenerationWeightingItems;
} }
export interface GenerationWeightingItems { export interface IGenerationWeightingItems {
grenades: GenerationData; grenades: IGenerationData;
healing: GenerationData; healing: IGenerationData;
drugs: GenerationData; drugs: IGenerationData;
food: GenerationData; food: IGenerationData;
drink: GenerationData; drink: IGenerationData;
currency: GenerationData; currency: IGenerationData;
stims: GenerationData; stims: IGenerationData;
backpackLoot: GenerationData; backpackLoot: IGenerationData;
pocketLoot: GenerationData; pocketLoot: IGenerationData;
vestLoot: GenerationData; vestLoot: IGenerationData;
magazines: GenerationData; magazines: IGenerationData;
specialItems: GenerationData; specialItems: IGenerationData;
} }
export interface GenerationData { export interface IGenerationData {
/** key: number of items, value: weighting */ /** key: number of items, value: weighting */
weights: Record<string, number>; weights: Record<string, number>;
/** Array of item tpls */ /** Array of item tpls */
whitelist: Record<string, number>; whitelist: Record<string, number>;
} }
export interface Health { export interface IHealth {
BodyParts: BodyPart[]; BodyParts: IBodyPart[];
Energy: MinMax; Energy: MinMax;
Hydration: MinMax; Hydration: MinMax;
Temperature: MinMax; Temperature: MinMax;
} }
export interface BodyPart { export interface IBodyPart {
Chest: MinMax; Chest: MinMax;
Head: MinMax; Head: MinMax;
LeftArm: MinMax; LeftArm: MinMax;
@ -140,13 +144,13 @@ export interface BodyPart {
RightLeg: MinMax; RightLeg: MinMax;
Stomach: MinMax; Stomach: MinMax;
} }
export interface Inventory { export interface IInventory {
equipment: Equipment; equipment: IEquipment;
Ammo: Record<string, Record<string, number>>; Ammo: IAmmo;
items: Items; items: IItemPools;
mods: Mods; mods: IMods;
} }
export interface Equipment { export interface IEquipment {
ArmBand: Record<string, number>; ArmBand: Record<string, number>;
ArmorVest: Record<string, number>; ArmorVest: Record<string, number>;
Backpack: Record<string, number>; Backpack: Record<string, number>;
@ -162,11 +166,12 @@ export interface Equipment {
SecuredContainer: Record<string, number>; SecuredContainer: Record<string, number>;
TacticalVest: Record<string, number>; TacticalVest: Record<string, number>;
} }
export interface Items { export interface IItemPools {
Backpack: Record<string, number>; Backpack: Record<string, number>;
Pockets: Record<string, number>; Pockets: Record<string, number>;
SecuredContainer: Record<string, number>; SecuredContainer: Record<string, number>;
SpecialLoot: Record<string, number>; SpecialLoot: Record<string, number>;
TacticalVest: Record<string, number>; TacticalVest: Record<string, number>;
} }
export type Mods = Record<string, Record<string, string[]>>; export type IAmmo = Record<string, Record<string, number>>;
export type IMods = Record<string, Record<string, string[]>>;

View File

@ -4,26 +4,27 @@ export interface ICustomizationItem {
_name: string; _name: string;
_parent: string; _parent: string;
_type: string; _type: string;
_props: Props; _props: IProps;
_proto: string; _proto: string;
} }
export interface Props { export interface IProps {
Name: string; Name: string;
ShortName: string; ShortName: string;
Description: string; Description: string;
Game: string[];
Side: string[]; Side: string[];
BodyPart: string; BodyPart: string;
AvailableAsDefault?: boolean; AvailableAsDefault?: boolean;
Body: string; Body: string;
Hands: string; Hands: string;
Feet: string; Feet: string;
Prefab: Prefab; Prefab: IPrefab;
WatchPrefab: Prefab; WatchPrefab: IPrefab;
IntegratedArmorVest: boolean; IntegratedArmorVest: boolean;
WatchPosition: Ixyz; WatchPosition: Ixyz;
WatchRotation: Ixyz; WatchRotation: Ixyz;
} }
export interface Prefab { export interface IPrefab {
path: string; path: string;
rcid: string; rcid: string;
} }

View File

@ -1,15 +1,15 @@
export interface IHandbookBase { export interface IHandbookBase {
Categories: Category[]; Categories: IHandbookCategory[];
Items: HandbookItem[]; Items: IHandbookItem[];
} }
export interface Category { export interface IHandbookCategory {
Id: string; Id: string;
ParentId?: string; ParentId?: string;
Icon: string; Icon: string;
Color: string; Color: string;
Order: string; Order: string;
} }
export interface HandbookItem { export interface IHandbookItem {
Id: string; Id: string;
ParentId: string; ParentId: string;
Price: number; Price: number;

View File

@ -1,99 +1,113 @@
export interface Item { export interface IItem {
_id: string; _id: string;
_tpl: string; _tpl: string;
parentId?: string; parentId?: string;
slotId?: string; slotId?: string;
location?: Location | number; location?: IItemLocation | number;
upd?: Upd; upd?: IUpd;
} }
export interface Upd { export interface IItemLocation {
Buff?: Buff; x: number;
y: number;
r: string | number;
isSearched?: boolean;
/** SPT property? */
rotation?: string | boolean;
}
export interface IUpd {
Buff?: IUpdBuff;
OriginalStackObjectsCount?: number; OriginalStackObjectsCount?: number;
Togglable?: Togglable; Togglable?: IUpdTogglable;
Map?: Map; Map?: IUpdMap;
Tag?: Tag; Tag?: IUpdTag;
/** SPT specific property, not made by BSG */ /** SPT specific property, not made by BSG */
sptPresetId?: string; sptPresetId?: string;
FaceShield?: FaceShield; FaceShield?: IUpdFaceShield;
StackObjectsCount?: number; StackObjectsCount?: number;
UnlimitedCount?: boolean; UnlimitedCount?: boolean;
Repairable?: Repairable; Repairable?: IUpdRepairable;
RecodableComponent?: RecodableComponent; RecodableComponent?: IUpdRecodableComponent;
FireMode?: FireMode; FireMode?: IUpdFireMode;
SpawnedInSession?: boolean; SpawnedInSession?: boolean;
Light?: Light; Light?: IUpdLight;
Key?: Key; Key?: IUpdKey;
Resource?: Resource; Resource?: IUpdResource;
Sight?: Sight; Sight?: IUpdSight;
MedKit?: MedKit; MedKit?: IUpdMedKit;
FoodDrink?: FoodDrink; FoodDrink?: IUpdFoodDrink;
Dogtag?: Dogtag; Dogtag?: IUpdDogtag;
BuyRestrictionMax?: number; BuyRestrictionMax?: number;
BuyRestrictionCurrent?: number; BuyRestrictionCurrent?: number;
Foldable?: Foldable; Foldable?: IUpdFoldable;
SideEffect?: SideEffect; SideEffect?: IUpdSideEffect;
RepairKit?: RepairKit; RepairKit?: IUpdRepairKit;
CultistAmulet?: ICultistAmulet; CultistAmulet?: IUpdCultistAmulet;
PinLockState?: PinLockState;
} }
export interface Buff { export declare enum PinLockState {
rarity: string; FREE = "Free",
buffType: string; LOCKED = "Locked",
value: number; PINNED = "Pinned"
thresholdDurability?: number;
} }
export interface Togglable { export interface IUpdBuff {
Rarity: string;
BuffType: string;
Value: number;
ThresholdDurability?: number;
}
export interface IUpdTogglable {
On: boolean; On: boolean;
} }
export interface Map { export interface IUpdMap {
Markers: MapMarker[]; Markers: IMapMarker[];
} }
export interface MapMarker { export interface IMapMarker {
X: number; X: number;
Y: number; Y: number;
} }
export interface Tag { export interface IUpdTag {
Color: number; Color: number;
Name: string; Name: string;
} }
export interface FaceShield { export interface IUpdFaceShield {
Hits: number; Hits: number;
} }
export interface Repairable { export interface IUpdRepairable {
Durability: number; Durability: number;
MaxDurability: number; MaxDurability: number;
} }
export interface RecodableComponent { export interface IUpdRecodableComponent {
IsEncoded: boolean; IsEncoded: boolean;
} }
export interface MedKit { export interface IUpdMedKit {
HpResource: number; HpResource: number;
} }
export interface Sight { export interface IUpdSight {
ScopesCurrentCalibPointIndexes: number[]; ScopesCurrentCalibPointIndexes: number[];
ScopesSelectedModes: number[]; ScopesSelectedModes: number[];
SelectedScope: number; SelectedScope: number;
} }
export interface Foldable { export interface IUpdFoldable {
Folded: boolean; Folded: boolean;
} }
export interface FireMode { export interface IUpdFireMode {
FireMode: string; FireMode: string;
} }
export interface FoodDrink { export interface IUpdFoodDrink {
HpPercent: number; HpPercent: number;
} }
export interface Key { export interface IUpdKey {
NumberOfUsages: number; NumberOfUsages: number;
} }
export interface Resource { export interface IUpdResource {
Value: number; Value: number;
UnitsConsumed: number; UnitsConsumed: number;
} }
export interface Light { export interface IUpdLight {
IsActive: boolean; IsActive: boolean;
SelectedMode: number; SelectedMode: number;
} }
export interface Dogtag { export interface IUpdDogtag {
AccountId: string; AccountId: string;
ProfileId: string; ProfileId: string;
Nickname: string; Nickname: string;
@ -106,20 +120,12 @@ export interface Dogtag {
KillerName: string; KillerName: string;
WeaponName: string; WeaponName: string;
} }
export interface Location { export interface IUpdSideEffect {
x: number;
y: number;
r: string | number;
isSearched?: boolean;
/** SPT property? */
rotation?: string | boolean;
}
export interface SideEffect {
Value: number; Value: number;
} }
export interface RepairKit { export interface IUpdRepairKit {
Resource: number; Resource: number;
} }
export interface ICultistAmulet { export interface IUpdCultistAmulet {
NumberOfUsages: number; NumberOfUsages: number;
} }

View File

@ -0,0 +1,71 @@
import { Ixyz } from "@spt/models/eft/common/Ixyz";
export interface ILocationServices {
TraderServerSettings: ITraderServerSettings;
BTRServerSettings: IBtrServerSettings;
}
export interface ITraderServerSettings {
TraderServices: ITraderServices;
}
export interface ITraderServices {
ExUsecLoyalty: ITraderService;
ZryachiyAid: ITraderService;
CultistsAid: ITraderService;
PlayerTaxi: ITraderService;
BtrItemsDelivery: ITraderService;
BtrBotCover: ITraderService;
TransitItemsDelivery: ITraderService;
}
export interface ITraderService {
TraderId: string;
TraderServiceType: string;
Requirements: IServiceRequirements;
ServiceItemCost: Record<string, IServiceItemCostDetails>;
UniqueItems: string[];
}
export interface IServiceRequirements {
CompletedQuests: ICompletedQuest[];
Standings: Record<string, IStandingRequirement>;
}
export interface ICompletedQuest {
QuestId: string;
}
export interface IStandingRequirement {
Value: number;
}
export interface IServiceItemCostDetails {
Count: number;
}
export interface IBtrServerSettings {
ChanceSpawn: number;
SpawnPeriod: Ixyz;
MoveSpeed: number;
ReadyToDepartureTime: number;
CheckTurnDistanceTime: number;
TurnCheckSensitivity: number;
DecreaseSpeedOnTurnLimit: number;
EndSplineDecelerationDistance: number;
AccelerationSpeed: number;
DecelerationSpeed: number;
PauseDurationRange: Ixyz;
BodySwingReturnSpeed: number;
BodySwingDamping: number;
BodySwingIntensity: number;
ServerMapBTRSettings: Record<string, IServerMapBtrsettings>;
}
export interface IServerMapBtrsettings {
MapID: string;
ChanceSpawn: number;
SpawnPeriod: Ixyz;
MoveSpeed: number;
ReadyToDepartureTime: number;
CheckTurnDistanceTime: number;
TurnCheckSensitivity: number;
DecreaseSpeedOnTurnLimit: number;
EndSplineDecelerationDistance: number;
AccelerationSpeed: number;
DecelerationSpeed: number;
PauseDurationRange: Ixyz;
BodySwingReturnSpeed: number;
BodySwingDamping: number;
BodySwingIntensity: number;
}

View File

@ -1,9 +1,9 @@
export interface ILocationsBase { export interface ILocationsBase {
locations: Locations; locations: ILocations;
paths: Path[]; paths: IPath[];
} }
export type Locations = {}; export type ILocations = {};
export interface Path { export interface IPath {
Source: string; Source: string;
Destination: string; Destination: string;
} }

View File

@ -1,7 +1,7 @@
export interface IMatch { export interface IMatch {
metrics: Metrics; metrics: IMetrics;
} }
export interface Metrics { export interface IMetrics {
Keys: number[]; Keys: number[];
NetProcessingBins: number[]; NetProcessingBins: number[];
RenderBins: number[]; RenderBins: number[];

View File

@ -1,5 +1,5 @@
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { Dialogue, IUserBuilds } from "@spt/models/eft/profile/ISptProfile"; import { IDialogue, IUserBuilds } from "@spt/models/eft/profile/ISptProfile";
export interface IProfileTemplates { export interface IProfileTemplates {
Standard: IProfileSides; Standard: IProfileSides;
"Left Behind": IProfileSides; "Left Behind": IProfileSides;
@ -19,11 +19,11 @@ export interface IProfileSides {
export interface ITemplateSide { export interface ITemplateSide {
character: IPmcData; character: IPmcData;
suits: string[]; suits: string[];
dialogues: Record<string, Dialogue>; dialogues: Record<string, IDialogue>;
userbuilds: IUserBuilds; userbuilds: IUserBuilds;
trader: ProfileTraderTemplate; trader: IProfileTraderTemplate;
} }
export interface ProfileTraderTemplate { export interface IProfileTraderTemplate {
initialLoyaltyLevel: Record<string, number>; initialLoyaltyLevel: Record<string, number>;
initialStanding: Record<string, number>; initialStanding: Record<string, number>;
setQuestsAvailableForStart?: boolean; setQuestsAvailableForStart?: boolean;

View File

@ -1,4 +1,4 @@
import { Item } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { QuestRewardType } from "@spt/models/enums/QuestRewardType"; import { QuestRewardType } from "@spt/models/enums/QuestRewardType";
import { QuestStatus } from "@spt/models/enums/QuestStatus"; import { QuestStatus } from "@spt/models/enums/QuestStatus";
import { QuestTypeEnum } from "@spt/models/enums/QuestTypeEnum"; import { QuestTypeEnum } from "@spt/models/enums/QuestTypeEnum";
@ -17,21 +17,19 @@ export interface IQuest {
image: string; image: string;
type: QuestTypeEnum; type: QuestTypeEnum;
isKey: boolean; isKey: boolean;
/** @deprecated - Likely not used, use 'status' instead */
questStatus: QuestStatus;
restartable: boolean; restartable: boolean;
instantComplete: boolean; instantComplete: boolean;
secretQuest: boolean; secretQuest: boolean;
startedMessageText: string; startedMessageText: string;
successMessageText: string; successMessageText: string;
acceptPlayerMessage: string; acceptPlayerMessage?: string;
declinePlayerMessage: string; declinePlayerMessage: string;
completePlayerMessage: string; completePlayerMessage?: string;
templateId: string; templateId?: string;
rewards: IQuestRewards; rewards: IQuestRewards;
/** Becomes 'AppearStatus' inside client */ /** Becomes 'AppearStatus' inside client */
status: string | number; status?: string | number;
KeyQuest: boolean; KeyQuest?: boolean;
changeQuestMessageText: string; changeQuestMessageText: string;
/** "Pmc" or "Scav" */ /** "Pmc" or "Scav" */
side: string; side: string;
@ -39,10 +37,10 @@ export interface IQuest {
sptStatus?: QuestStatus; sptStatus?: QuestStatus;
} }
export interface IQuestConditionTypes { export interface IQuestConditionTypes {
Started: IQuestCondition[]; Started?: IQuestCondition[];
AvailableForFinish: IQuestCondition[]; AvailableForFinish: IQuestCondition[];
AvailableForStart: IQuestCondition[]; AvailableForStart: IQuestCondition[];
Success: IQuestCondition[]; Success?: IQuestCondition[];
Fail: IQuestCondition[]; Fail: IQuestCondition[];
} }
export interface IQuestCondition { export interface IQuestCondition {
@ -50,21 +48,24 @@ export interface IQuestCondition {
index?: number; index?: number;
compareMethod?: string; compareMethod?: string;
dynamicLocale: boolean; dynamicLocale: boolean;
visibilityConditions?: VisibilityCondition[]; visibilityConditions?: IVisibilityCondition[];
globalQuestCounterId?: string; globalQuestCounterId?: string;
parentId?: string; parentId?: string;
target: string[] | string; target?: string[] | string;
value?: string | number; value?: string | number;
type?: boolean; type?: boolean | string;
status?: QuestStatus[]; status?: QuestStatus[];
availableAfter?: number; availableAfter?: number;
dispersion?: number; dispersion?: number;
onlyFoundInRaid?: boolean; onlyFoundInRaid?: boolean;
oneSessionOnly?: boolean; oneSessionOnly?: boolean;
isResetOnConditionFailed?: boolean;
isNecessary?: boolean;
doNotResetIfCounterCompleted?: boolean; doNotResetIfCounterCompleted?: boolean;
dogtagLevel?: number; dogtagLevel?: number | string;
maxDurability?: number; traderId?: string;
minDurability?: number; maxDurability?: number | string;
minDurability?: number | string;
counter?: IQuestConditionCounter; counter?: IQuestConditionCounter;
plantTime?: number; plantTime?: number;
zoneId?: string; zoneId?: string;
@ -79,7 +80,7 @@ export interface IQuestConditionCounter {
} }
export interface IQuestConditionCounterCondition { export interface IQuestConditionCounterCondition {
id: string; id: string;
dynamicLocale: boolean; dynamicLocale?: boolean;
target?: string[] | string; target?: string[] | string;
completeInSeconds?: number; completeInSeconds?: number;
energy?: IValueCompare; energy?: IValueCompare;
@ -87,7 +88,7 @@ export interface IQuestConditionCounterCondition {
hydration?: IValueCompare; hydration?: IValueCompare;
time?: IValueCompare; time?: IValueCompare;
compareMethod?: string; compareMethod?: string;
value?: number; value?: number | string;
weapon?: string[]; weapon?: string[];
distance?: ICounterConditionDistance; distance?: ICounterConditionDistance;
equipmentInclusive?: string[][]; equipmentInclusive?: string[][];
@ -120,12 +121,12 @@ export interface IDaytimeCounter {
from: number; from: number;
to: number; to: number;
} }
export interface VisibilityCondition { export interface IVisibilityCondition {
id: string; id: string;
target: string; target: string;
value?: number; value?: number;
dynamicLocale?: boolean; dynamicLocale?: boolean;
oneSessionOnly: boolean; oneSessionOnly?: boolean;
conditionType: string; conditionType: string;
} }
export interface IQuestRewards { export interface IQuestRewards {
@ -143,10 +144,14 @@ export interface IQuestReward {
type: QuestRewardType; type: QuestRewardType;
index: number; index: number;
target?: string; target?: string;
items?: Item[]; items?: IItem[];
loyaltyLevel?: number; loyaltyLevel?: number;
/** Hideout area id */ /** Hideout area id */
traderId?: string; traderId?: string;
unknown?: boolean; unknown?: boolean;
findInRaid?: boolean; findInRaid?: boolean;
/** Game editions whitelisted to get reward */
availableInGameEditions?: string[];
/** Game editions blacklisted from getting reward */
notAvailableInGameEditions?: string[];
} }

View File

@ -41,14 +41,14 @@ export interface IOptions {
Completion: ICompletionFilter; Completion: ICompletionFilter;
} }
export interface ICompletionFilter { export interface ICompletionFilter {
itemsBlacklist: ItemsBlacklist[]; itemsBlacklist: IItemsBlacklist[];
itemsWhitelist: ItemsWhitelist[]; itemsWhitelist: IItemsWhitelist[];
} }
export interface ItemsBlacklist { export interface IItemsBlacklist {
minPlayerLevel: number; minPlayerLevel: number;
itemIds: string[]; itemIds: string[];
} }
export interface ItemsWhitelist { export interface IItemsWhitelist {
minPlayerLevel: number; minPlayerLevel: number;
itemIds: string[]; itemIds: string[];
} }

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