Updated examples

This commit is contained in:
Dev 2024-10-19 12:56:23 +01:00
parent 60d5a870ad
commit 07483af828
3637 changed files with 23068 additions and 15452 deletions

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

@ -2,6 +2,7 @@ import { LocationController } from "@spt/controllers/LocationController";
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData"; import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
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 { IGetAirdropLootRequest } from "@spt/models/eft/location/IGetAirdropLootRequest";
import { IGetAirdropLootResponse } from "@spt/models/eft/location/IGetAirdropLootResponse"; 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 {
@ -11,5 +12,5 @@ export declare class LocationCallbacks {
/** 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/airdrop/loot */ /** Handle client/airdrop/loot */
getAirdropLoot(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetAirdropLootResponse>; getAirdropLoot(url: string, info: IGetAirdropLootRequest, sessionID: string): IGetBodyResponseData<IGetAirdropLootResponse>;
} }

View File

@ -4,7 +4,7 @@ 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 { ModdedTraders } from "@spt/models/spt/config/ITraderConfig"; import { IModdedTraders } from "@spt/models/spt/config/ITraderConfig";
import { ConfigServer } from "@spt/servers/ConfigServer"; 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 {
@ -23,5 +23,5 @@ export declare class TraderCallbacks implements OnLoad, OnUpdate {
/** 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 */ /** Handle /singleplayer/moddedTraders */
getModdedTraderData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ModdedTraders>; getModdedTraderData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IModdedTraders>;
} }

View File

@ -13,5 +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>; getLocalWeather(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetLocalWeatherResponseData>;
} }

View File

@ -7,5 +7,7 @@ export declare enum ContextVariableType {
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

@ -11,7 +11,7 @@ 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 { IDifficultyCategories } from "@spt/models/eft/common/tables/IBotType"; import { IDifficultyCategories } from "@spt/models/eft/common/tables/IBotType";
import { IGetRaidConfigurationRequestData } from "@spt/models/eft/match/IGetRaidConfigurationRequestData"; import { IGetRaidConfigurationRequestData } from "@spt/models/eft/match/IGetRaidConfigurationRequestData";
import { BotGenerationDetails } from "@spt/models/spt/bots/BotGenerationDetails"; 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";
@ -97,7 +97,7 @@ export declare class BotController {
* @param generateAsPmc Force bot being generated a PMC * @param generateAsPmc Force bot being generated a PMC
* @returns BotGenerationDetails * @returns BotGenerationDetails
*/ */
protected getBotGenerationDetailsForWave(condition: ICondition, pmcProfile: IPmcData, allPmcsHaveSameNameAsPlayer: boolean, raidSettings: IGetRaidConfigurationRequestData, 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
@ -111,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: ICondition, 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
@ -119,7 +119,7 @@ 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
@ -128,7 +128,7 @@ export declare class BotController {
*/ */
protected returnSingleBotFromCache(sessionId: string, request: IGenerateBotsRequestData): Promise<IBotBase[]>; protected returnSingleBotFromCache(sessionId: string, request: IGenerateBotsRequestData): Promise<IBotBase[]>;
protected getPmcConversionMinMaxForLocation(requestedBotRole: string, location: string): MinMax; protected getPmcConversionMinMaxForLocation(requestedBotRole: string, location: string): MinMax;
protected updateBotGenerationDetailsToRandomBoss(botGenerationDetails: BotGenerationDetails, possibleBossTypeWeights: Record<string, number>): void; 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

@ -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

@ -7,9 +7,8 @@ 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 { IBotHideoutArea, IProduct, ITaskConditionCounter } 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 { IHideoutCircleOfCultistProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutCircleOfCultistProductionStartRequestData";
import { IHideoutContinuousProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutContinuousProductionStartRequestData"; import { IHideoutContinuousProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutContinuousProductionStartRequestData";
@ -22,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";
@ -87,7 +87,7 @@ 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
@ -101,7 +101,7 @@ 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: IBotHideoutArea, 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 * Add stand1/stand2/stand3 inventory items to profile, depending on passed in hideout stage
* @param sessionId Session id * @param sessionId Session id
@ -110,14 +110,14 @@ export declare class HideoutController {
* @param equipmentPresetHideoutArea * @param equipmentPresetHideoutArea
* @param output Response to send back to client * @param output Response to send back to client
*/ */
protected addMissingPresetStandItemsToProfile(sessionId: string, equipmentPresetStage: Stage, pmcData: IPmcData, equipmentPresetHideoutArea: IHideoutArea, output: IItemEventRouterResponse): void; 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 dbHideoutArea 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(sessionId: string, pmcData: IPmcData, dbHideoutArea: 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
@ -125,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(sessionID: string, areaType: HideoutAreas, hideoutDbData: IHideoutArea, hideoutStage: Stage, output: IItemEventRouterResponse): 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
@ -252,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

View File

@ -9,7 +9,7 @@ import { IGetInsuranceCostRequestData } from "@spt/models/eft/insurance/IGetInsu
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, IItem>): Map<string, IItem[]>; 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.
@ -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, IItem[]>): 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.
* *
@ -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,7 @@ 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;
/** /**
* 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.

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,4 +1,5 @@
import { ILocationsGenerateAllResponse } from "@spt/models/eft/common/ILocationsSourceDestinationBase"; import { ILocationsGenerateAllResponse } from "@spt/models/eft/common/ILocationsSourceDestinationBase";
import { IGetAirdropLootRequest } from "@spt/models/eft/location/IGetAirdropLootRequest";
import { IGetAirdropLootResponse } from "@spt/models/eft/location/IGetAirdropLootResponse"; import { IGetAirdropLootResponse } from "@spt/models/eft/location/IGetAirdropLootResponse";
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";
@ -22,5 +23,5 @@ export declare class LocationController {
*/ */
generateAll(sessionId: string): ILocationsGenerateAllResponse; generateAll(sessionId: string): ILocationsGenerateAllResponse;
/** Handle client/airdrop/loot */ /** Handle client/airdrop/loot */
getAirdropLoot(): IGetAirdropLootResponse; getAirdropLoot(request: IGetAirdropLootRequest): IGetAirdropLootResponse;
} }

View File

@ -14,20 +14,18 @@ import { ConfigServer } from "@spt/servers/ConfigServer";
import { SaveServer } from "@spt/servers/SaveServer"; import { SaveServer } from "@spt/servers/SaveServer";
import { LocationLifecycleService } from "@spt/services/LocationLifecycleService"; import { LocationLifecycleService } from "@spt/services/LocationLifecycleService";
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 { ICloner } from "@spt/utils/cloners/ICloner";
export declare class MatchController { export declare class MatchController {
protected logger: ILogger; protected logger: ILogger;
protected saveServer: SaveServer; protected saveServer: SaveServer;
protected matchLocationService: MatchLocationService; protected matchLocationService: MatchLocationService;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected profileSnapshotService: ProfileSnapshotService;
protected applicationContext: ApplicationContext; protected applicationContext: ApplicationContext;
protected locationLifecycleService: LocationLifecycleService; protected locationLifecycleService: LocationLifecycleService;
protected cloner: ICloner; protected cloner: ICloner;
protected matchConfig: IMatchConfig; protected matchConfig: IMatchConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
constructor(logger: ILogger, saveServer: SaveServer, matchLocationService: MatchLocationService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, applicationContext: ApplicationContext, locationLifecycleService: LocationLifecycleService, cloner: ICloner); 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;

View File

@ -14,7 +14,7 @@ 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
@ -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
@ -223,7 +224,7 @@ export declare class RagfairController {
items: IItem[][] | undefined; items: IItem[][] | undefined;
errorMessage: string | undefined; errorMessage: string | undefined;
}; };
createPlayerOffer(sessionId: string, requirements: Requirement[], items: IItem[], 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

@ -1,17 +1,21 @@
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 { 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"; 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 seasonalEventService: SeasonalEventService;
protected raidWeatherService: RaidWeatherService;
protected weatherHelper: WeatherHelper;
protected weatherConfig: IWeatherConfig; protected weatherConfig: IWeatherConfig;
constructor(weatherGenerator: WeatherGenerator, logger: ILogger, configServer: ConfigServer, seasonalEventService: SeasonalEventService); constructor(weatherGenerator: WeatherGenerator, logger: ILogger, configServer: ConfigServer, seasonalEventService: SeasonalEventService, raidWeatherService: RaidWeatherService, weatherHelper: WeatherHelper);
/** Handle client/weather */ /** Handle client/weather */
generate(): IWeatherData; generate(): IWeatherData;
/** /**
@ -19,5 +23,6 @@ export declare class WeatherController {
* @returns Date object * @returns Date object
*/ */
getCurrentInRaidTime(): Date; getCurrentInRaidTime(): Date;
generateLocal(sesssionID: string): IGetLocalWeatherResponseData; /** Handle client/localGame/weather */
generateLocal(sesssionId: string): IGetLocalWeatherResponseData;
} }

View File

@ -16,7 +16,7 @@ import { IFilterPlateModsForSlotByLevelResult } from "@spt/models/spt/bots/IFilt
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 { 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";
@ -56,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: IItem[], parentId: string, parentTemplate: ITemplateItem, settings: IGenerateEquipmentProperties, shouldForceSpawn?: boolean): IItem[]; 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
@ -125,13 +126,13 @@ export declare class BotEquipmentModGenerator {
protected getModItemSlotFromDb(modSlot: string, parentTemplate: ITemplateItem): ISlot; 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: ISlot, modSlot: string, modSpawnChances: IModsChances, 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
@ -235,7 +236,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: IMods, 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
@ -243,7 +244,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
@ -251,7 +252,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.

View File

@ -5,7 +5,7 @@ import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper"; import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { IBaseJsonSkills, IBaseSkill, IBotBase, IInfo, IHealth as PmcHealth, ISkills as botSkills } from "@spt/models/eft/common/tables/IBotBase"; import { IBaseJsonSkills, IBaseSkill, IBotBase, IInfo, IHealth as PmcHealth, ISkills as botSkills } from "@spt/models/eft/common/tables/IBotBase";
import { IAppearance, IBodyPart, IBotType, IHealth, IInventory } from "@spt/models/eft/common/tables/IBotType"; import { IAppearance, IBodyPart, IBotType, IHealth, IInventory } from "@spt/models/eft/common/tables/IBotType";
import { BotGenerationDetails } from "@spt/models/spt/bots/BotGenerationDetails"; 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";
@ -53,7 +53,7 @@ export declare class BotGenerator {
* @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
@ -75,7 +75,7 @@ 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;
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
@ -88,7 +88,7 @@ export declare class BotGenerator {
* @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: IAppearance, botGenerationDetails: BotGenerationDetails): void; protected setBotAppearance(bot: IBotBase, appearance: IAppearance, botGenerationDetails: IBotGenerationDetails): void;
/** /**
* 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

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 { IInventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBase"; import { IInventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBase";
import { IBotType, IChances, IEquipment, IGeneration, IInventory } 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,7 +69,7 @@ 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: IInventory, wornItemChances: IChances, 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
@ -75,6 +85,7 @@ export declare class BotInventoryGenerator {
protected filterRigsToThoseWithoutProtection(templateEquipment: IEquipment, botRole: string, allowEmptyResult?: boolean): 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
*/ */
@ -82,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

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

@ -8,7 +8,7 @@ import { IInventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBa
import { IGenerationData, IInventory, IModsChances } from "@spt/models/eft/common/tables/IBotType"; import { IGenerationData, IInventory, IModsChances } from "@spt/models/eft/common/tables/IBotType";
import { IItem } 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,7 +52,7 @@ 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: IInventory, weaponParentId: string, modChances: IModsChances, 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
@ -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, slotName: string, botTemplateInventory: IInventory, weaponParentId: string, modChances: IModsChances, 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
@ -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: IGenerationData, 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: IItem[], 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

View File

@ -2,11 +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 { IItem } 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 { LootRequest } from "@spt/models/spt/services/LootRequest"; import { ILootRequest } from "@spt/models/spt/services/ILootRequest";
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";
@ -36,7 +37,22 @@ 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): IItem[]; 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): { protected getItemRewardPool(itemTplBlacklist: string[], itemTypeWhitelist: string[], useRewardItemBlacklist: boolean, allowBossItems: boolean): {
itemPool: [string, ITemplateItem][]; itemPool: [string, ITemplateItem][];
blacklist: Set<string>; blacklist: Set<string>;
@ -47,7 +63,7 @@ export declare class LootGenerator {
* @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
@ -65,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: IItem[]): 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
@ -111,12 +127,12 @@ export declare class LootGenerator {
* @param rewardContainerDetails * @param rewardContainerDetails
* @returns Array of item with children arrays * @returns Array of item with children arrays
*/ */
getRandomLootContainerLoot(rewardContainerDetails: RewardDetails): IItem[][]; getRandomLootContainerLoot(rewardContainerDetails: IRewardDetails): IItem[][];
/** /**
* Pick a reward item based on the reward details data * Pick a reward item based on the reward details data
* @param rewardContainerDetails * @param rewardContainerDetails
* @returns Single tpl * @returns Single tpl
*/ */
protected pickRewardItem(rewardContainerDetails: RewardDetails): string; protected pickRewardItem(rewardContainerDetails: IRewardDetails): string;
} }
export {}; export {};

View File

@ -6,7 +6,7 @@ import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IBotBase, ISkills, IStats } 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,7 +67,7 @@ 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): ISkills; protected getScavSkills(scavProfile: IPmcData): ISkills;
protected getDefaultScavSkills(): ISkills; protected getDefaultScavSkills(): ISkills;
protected getScavStats(scavProfile: IPmcData): IStats; protected getScavStats(scavProfile: IPmcData): IStats;

View File

@ -9,8 +9,10 @@ import { RagfairServerHelper } from "@spt/helpers/RagfairServerHelper";
import { IItem } 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;
@ -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
@ -136,7 +139,7 @@ export declare class RagfairOfferGenerator {
* @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: IItem[], 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
@ -203,17 +206,15 @@ export declare class RagfairOfferGenerator {
/** /**
* 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: IItem[]): 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

View File

@ -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

View File

@ -4,7 +4,7 @@ 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 { IHideoutScavCase } from "@spt/models/eft/hideout/IHideoutScavCase";
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";
@ -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
@ -81,13 +81,13 @@ export declare class ScavCaseRewardGenerator {
* @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 scavcase.json values
* @returns ScavCaseRewardCountsAndPrices object * @returns ScavCaseRewardCountsAndPrices object
*/ */
protected getScavCaseRewardCountsAndPrices(scavCaseDetails: IHideoutScavCase): ScavCaseRewardCountsAndPrices; protected getScavCaseRewardCountsAndPrices(scavCaseDetails: IHideoutScavCase): 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,14 +43,24 @@ 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;

View File

@ -1,6 +1,6 @@
import { MinMax } from "@spt/models/common/MinMax"; import { MinMax } from "@spt/models/common/MinMax";
import { IBotType, IDifficultyCategories } 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";
@ -54,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
@ -71,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

@ -2,7 +2,7 @@ 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 { IItem } 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
@ -37,5 +37,5 @@ export declare class DialogueHelper {
* @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,7 +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 { 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";
@ -63,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

@ -4,12 +4,13 @@ import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { IPmcData } from "@spt/models/eft/common/IPmcData"; import { IPmcData } from "@spt/models/eft/common/IPmcData";
import { IBotHideoutArea, IHideoutImprovement, IProduction, IProductive } from "@spt/models/eft/common/tables/IBotBase"; import { IBotHideoutArea, IHideoutImprovement, IProduction, IProductive } from "@spt/models/eft/common/tables/IBotBase";
import { IItem, IUpd } from "@spt/models/eft/common/tables/IItem"; import { IItem, IUpd } from "@spt/models/eft/common/tables/IItem";
import { IHideoutArea, 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";
@ -55,7 +56,7 @@ 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, isCultistCircle?: boolean): IProduction; 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
@ -67,7 +68,7 @@ export declare class HideoutHelper {
* @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
@ -94,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

View File

@ -39,7 +39,7 @@ 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, isSurvived: boolean): void; setInventory(sessionID: string, serverProfile: IPmcData, postRaidProfile: IPmcData, isSurvived: boolean, isTransfer: boolean): void;
/** /**
* Iterate over inventory items and remove the property that defines an item as Found in Raid * 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 * Only removes property if item had FiR when entering raid

View File

@ -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";
@ -246,7 +246,7 @@ export declare class InventoryHelper {
* @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

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

@ -11,7 +11,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 +23,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
@ -47,19 +45,6 @@ export declare class ProfileHelper {
* @returns Array of IPmcData objects * @returns Array of IPmcData objects
*/ */
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
* Server saves the post-raid changes prior to the xp screen getting the profile, this results in the xp screen using
* the now updated profile values as a base, meaning it shows x2 xp gained
* Instead, clone the post-raid profile (so we dont alter its values), apply the pre-raid xp values to the cloned objects and return
* Delete snapshot of pre-raid profile prior to returning profile data
* @param sessionId Session id
* @param output pmc and scav profiles array
* @param pmcProfile post-raid pmc profile
* @param scavProfile post-raid scav profile
* @returns Updated profile array
*/
protected postRaidXpWorkaroundFix(sessionId: string, clonedPmc: IPmcData, clonedScav: IPmcData, output: IPmcData[]): IPmcData[];
/** /**
* Sanitize any information from the profile that the client does not expect to receive * Sanitize any information from the profile that the client does not expect to receive
* @param clonedProfile A clone of the full player profile * @param clonedProfile A clone of the full player profile

View File

@ -15,6 +15,7 @@ import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRo
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, ITieredFlea } 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";
@ -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,7 +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 offerIsHiddenFromPlayerTieredFlea(tieredFlea: ITieredFlea, offer: IRagfairOffer, tieredFleaLimitTypes: string[], playerLevel: number): boolean; 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

View File

@ -1,5 +1,5 @@
import { IItem } 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";
@ -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

@ -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
* @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,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

@ -299,7 +299,7 @@ export interface IInsuredItem {
itemId: string; itemId: string;
} }
export interface IHideout { export interface IHideout {
Production: Record<string, IProductive>; Production: Record<string, IProduction>;
Areas: IBotHideoutArea[]; Areas: IBotHideoutArea[];
Improvements: Record<string, IHideoutImprovement>; Improvements: Record<string, IHideoutImprovement>;
HideoutCounters: IHideoutCounters; HideoutCounters: IHideoutCounters;
@ -347,8 +347,8 @@ export interface IProductive {
} }
export interface IProduction extends IProductive { export interface IProduction extends IProductive {
RecipeId: string; RecipeId: string;
SkipTime: number; SkipTime?: number;
ProductionTime: number; ProductionTime?: number;
} }
export interface IScavCase extends IProductive { export interface IScavCase extends IProductive {
RecipeId: string; RecipeId: string;

View File

@ -4,10 +4,10 @@ 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;

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,7 +19,7 @@ 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: IProfileTraderTemplate; trader: IProfileTraderTemplate;
} }

View File

@ -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 {
@ -53,9 +51,9 @@ export interface IQuestCondition {
visibilityConditions?: IVisibilityCondition[]; 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;
@ -64,10 +62,10 @@ export interface IQuestCondition {
isResetOnConditionFailed?: boolean; isResetOnConditionFailed?: boolean;
isNecessary?: boolean; isNecessary?: boolean;
doNotResetIfCounterCompleted?: boolean; doNotResetIfCounterCompleted?: boolean;
dogtagLevel?: number; dogtagLevel?: number | string;
traderId?: string; traderId?: string;
maxDurability?: number; maxDurability?: number | string;
minDurability?: number; minDurability?: number | string;
counter?: IQuestConditionCounter; counter?: IQuestConditionCounter;
plantTime?: number; plantTime?: number;
zoneId?: string; zoneId?: string;
@ -82,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;
@ -90,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[][];
@ -128,7 +126,7 @@ export interface IVisibilityCondition {
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 {
@ -152,4 +150,8 @@ export interface IQuestReward {
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

@ -4,11 +4,11 @@ export interface ITemplateItem {
_name: string; _name: string;
_parent: string; _parent: string;
_type: ItemType; _type: ItemType;
_props: Props; _props: IProps;
_proto?: string; _proto?: string;
} }
export interface Props { export interface IProps {
AllowSpawnOnLocations?: any[]; AllowSpawnOnLocations?: string[];
BeltMagazineRefreshCount?: number; BeltMagazineRefreshCount?: number;
ChangePriceCoef?: number; ChangePriceCoef?: number;
FixedPrice?: boolean; FixedPrice?: boolean;
@ -175,7 +175,7 @@ export interface Props {
spawnRarity?: string; spawnRarity?: string;
minCountSpawn?: number; minCountSpawn?: number;
maxCountSpawn?: number; maxCountSpawn?: number;
openedByKeyID?: any[]; openedByKeyID?: string[];
RigLayoutName?: string; RigLayoutName?: string;
MaxDurability?: number; MaxDurability?: number;
armorZone?: string[]; armorZone?: string[];

View File

@ -1,6 +1,6 @@
import { Message } from "@spt/models/eft/profile/ISptProfile"; import { IMessage } from "@spt/models/eft/profile/ISptProfile";
export interface IGetAllAttachmentsResponse { export interface IGetAllAttachmentsResponse {
messages: Message[]; messages: IMessage[];
profiles: any[]; profiles: any[];
hasMessagesWithRewards: boolean; hasMessagesWithRewards: boolean;
} }

View File

@ -1,6 +1,6 @@
import { IUserDialogInfo, Message } from "@spt/models/eft/profile/ISptProfile"; import { IMessage, IUserDialogInfo } from "@spt/models/eft/profile/ISptProfile";
export interface IGetMailDialogViewResponseData { export interface IGetMailDialogViewResponseData {
messages: Message[]; messages: IMessage[];
profiles: IUserDialogInfo[]; profiles: IUserDialogInfo[];
hasMessagesWithRewards: boolean; hasMessagesWithRewards: boolean;
} }

View File

@ -1,8 +1,8 @@
export interface IVersionValidateRequestData { export interface IVersionValidateRequestData {
version: Version; version: IVersion;
develop: boolean; develop: boolean;
} }
export interface Version { export interface IVersion {
major: string; major: string;
minor: string; minor: string;
game: string; game: string;

View File

@ -1,4 +1,36 @@
export interface IWorkoutData extends Record<string, any> { export interface IWorkoutData extends Record<string, any> {
skills: any; skills: IWorkoutSkills;
effects: any; effects: IWorkoutEffects;
}
export interface IWorkoutSkills {
Common: IWorkoutSkillCommon[];
Mastering: any[];
Bonuses: any;
Points: number;
}
export interface IWorkoutSkillCommon {
Id: string;
Progress: number;
PointsEarnedDuringSession: number;
LastAccess: number;
}
export interface IWorkoutEffects {
Effects: IWorkoutEffectsParts;
Hydration: number;
Energy: number;
}
export interface IWorkoutEffectsParts {
Head: IWorkoutBodyPart;
Chest: IWorkoutBodyPart;
Stomach: IWorkoutBodyPart;
LeftArm: IWorkoutBodyPart;
RightArm: IWorkoutBodyPart;
LeftLeg: IWorkoutBodyPart;
RightLeg: IWorkoutBodyPart;
Common: IWorkoutBodyPart;
}
export interface IWorkoutBodyPart {
Regeneration: number;
Fracture: number;
MildMusclePain: number;
} }

View File

@ -1,5 +0,0 @@
export interface HideoutUpgradeCompleteRequestData {
Action: string;
areaType: number;
timestamp: number;
}

View File

@ -12,16 +12,16 @@ export interface IHideoutArea {
displayLevel: boolean; displayLevel: boolean;
enableAreaRequirements: boolean; enableAreaRequirements: boolean;
parentArea?: string; parentArea?: string;
stages: Record<string, Stage>; stages: Record<string, IStage>;
} }
export interface IAreaRequirement { export interface IAreaRequirement {
areaType: number; areaType: number;
requiredlevel: number; requiredlevel: number;
type: string; type: string;
} }
export interface Stage { export interface IStage {
autoUpgrade: boolean; autoUpgrade: boolean;
bonuses: StageBonus[]; bonuses: IStageBonus[];
constructionTime: number; constructionTime: number;
/** Containers inventory tpl */ /** Containers inventory tpl */
container?: string; container?: string;
@ -63,7 +63,7 @@ export interface IStageRequirement extends IRequirementBase {
skillName?: string; skillName?: string;
skillLevel?: number; skillLevel?: number;
} }
export interface StageBonus { export interface IStageBonus {
value: number; value: number;
passive: boolean; passive: boolean;
production: boolean; production: boolean;

View File

@ -3,10 +3,10 @@ export interface IHideoutImproveAreaRequestData {
/** Hideout area id from areas.json */ /** Hideout area id from areas.json */
id: string; id: string;
areaType: number; areaType: number;
items: HideoutItem[]; items: IHideoutItem[];
timestamp: number; timestamp: number;
} }
export interface HideoutItem { export interface IHideoutItem {
/** Hideout inventory id that was used by improvement action */ /** Hideout inventory id that was used by improvement action */
id: string; id: string;
count: number; count: number;

View File

@ -7,7 +7,7 @@ export interface IHideoutProductionData {
export interface IHideoutProduction { export interface IHideoutProduction {
_id: string; _id: string;
areaType: number; areaType: number;
requirements: Requirement[]; requirements: IRequirement[];
productionTime: number; productionTime: number;
/** Tpl of item being crafted */ /** Tpl of item being crafted */
endProduct: string; endProduct: string;
@ -18,7 +18,7 @@ export interface IHideoutProduction {
count: number; count: number;
productionLimitCount: number; productionLimitCount: number;
} }
export interface Requirement extends IRequirementBase { export interface IRequirement extends IRequirementBase {
templateId?: string; templateId?: string;
count?: number; count?: number;
isEncoded?: boolean; isEncoded?: boolean;
@ -33,7 +33,7 @@ export interface IRequirementBase {
} }
export type IScavRecipe = { export type IScavRecipe = {
_id: string; _id: string;
requirements: Requirement[]; requirements: IRequirement[];
productionTime: number; productionTime: number;
endProducts: IEndProducts; endProducts: IEndProducts;
}; };

View File

@ -2,16 +2,16 @@ import { MinMax } from "@spt/models/common/MinMax";
export interface IHideoutScavCase { export interface IHideoutScavCase {
_id: string; _id: string;
ProductionTime: number; ProductionTime: number;
Requirements: Requirement[]; Requirements: IRequirement[];
EndProducts: EndProducts; EndProducts: IEndProducts;
} }
export interface Requirement { export interface IRequirement {
templateId: string; templateId: string;
count: number; count: number;
isFunctional: boolean; isFunctional: boolean;
type: string; type: string;
} }
export interface EndProducts { export interface IEndProducts {
Common: MinMax; Common: MinMax;
Rare: MinMax; Rare: MinMax;
Superrare: MinMax; Superrare: MinMax;

View File

@ -1,15 +1,15 @@
export interface IHideoutScavCaseStartRequestData { export interface IHideoutScavCaseStartRequestData {
Action: "HideoutScavCaseProductionStart"; Action: "HideoutScavCaseProductionStart";
recipeId: string; recipeId: string;
items: HideoutItem[]; items: IHideoutItem[];
tools: Tool[]; tools: ITool[];
timestamp: number; timestamp: number;
} }
export interface HideoutItem { export interface IHideoutItem {
id: string; id: string;
count: number; count: number;
} }
export interface Tool { export interface ITool {
id: string; id: string;
count: number; count: number;
} }

View File

@ -1,10 +1,10 @@
export interface IHideoutUpgradeRequestData { export interface IHideoutUpgradeRequestData {
Action: "HideoutUpgrade"; Action: "HideoutUpgrade";
areaType: number; areaType: number;
items: HideoutItem[]; items: IHideoutItem[];
timestamp: number; timestamp: number;
} }
export interface HideoutItem { export interface IHideoutItem {
count: number; count: number;
id: string; id: string;
} }

View File

@ -1,6 +1,6 @@
import { Container, IInventoryBaseActionRequestData } from "@spt/models/eft/inventory/IInventoryBaseActionRequestData"; import { IContainer, IInventoryBaseActionRequestData } from "@spt/models/eft/inventory/IInventoryBaseActionRequestData";
export interface IInventoryAddRequestData extends IInventoryBaseActionRequestData { export interface IInventoryAddRequestData extends IInventoryBaseActionRequestData {
Action: "Add"; Action: "Add";
item: string; item: string;
container: Container; container: IContainer;
} }

View File

@ -2,18 +2,18 @@ import { IBaseInteractionRequestData } from "@spt/models/eft/common/request/IBas
import { IItemLocation } from "@spt/models/eft/common/tables/IItem"; import { IItemLocation } from "@spt/models/eft/common/tables/IItem";
export interface IInventoryBaseActionRequestData extends IBaseInteractionRequestData { export interface IInventoryBaseActionRequestData extends IBaseInteractionRequestData {
} }
export interface To { export interface ITo {
id: string; id: string;
container: string; container: string;
location?: IItemLocation | number; location?: IItemLocation | number;
isSearched?: boolean; isSearched?: boolean;
} }
export interface Container { export interface IContainer {
id: string; id: string;
container: string; container: string;
location?: Location | number; location?: ILocation | number;
} }
export interface Location { export interface ILocation {
x: number; x: number;
y: number; y: number;
r: string; r: string;

View File

@ -2,9 +2,9 @@ import { IInventoryBaseActionRequestData } from "@spt/models/eft/inventory/IInve
export interface IInventoryCreateMarkerRequestData extends IInventoryBaseActionRequestData { export interface IInventoryCreateMarkerRequestData extends IInventoryBaseActionRequestData {
Action: "CreateMapMarker"; Action: "CreateMapMarker";
item: string; item: string;
mapMarker: MapMarker; mapMarker: IMapMarker;
} }
export interface MapMarker { export interface IMapMarker {
Type: string; Type: string;
X: number; X: number;
Y: number; Y: number;

View File

@ -4,9 +4,9 @@ export interface IInventoryEditMarkerRequestData extends IInventoryBaseActionReq
item: string; item: string;
X: number; X: number;
Y: number; Y: number;
mapMarker: MapMarker; mapMarker: IMapMarker;
} }
export interface MapMarker { export interface IMapMarker {
Type: string; Type: string;
X: number; X: number;
Y: number; Y: number;

View File

@ -1,6 +1,6 @@
import { IInventoryBaseActionRequestData, To } from "@spt/models/eft/inventory/IInventoryBaseActionRequestData"; import { IInventoryBaseActionRequestData, ITo } from "@spt/models/eft/inventory/IInventoryBaseActionRequestData";
export interface IInventoryMoveRequestData extends IInventoryBaseActionRequestData { export interface IInventoryMoveRequestData extends IInventoryBaseActionRequestData {
Action: "Move"; Action: "Move";
item: string; item: string;
to: To; to: ITo;
} }

View File

@ -1,4 +1,4 @@
import { Container, IInventoryBaseActionRequestData } from "@spt/models/eft/inventory/IInventoryBaseActionRequestData"; import { IContainer, IInventoryBaseActionRequestData } from "@spt/models/eft/inventory/IInventoryBaseActionRequestData";
export interface IInventorySplitRequestData extends IInventoryBaseActionRequestData { export interface IInventorySplitRequestData extends IInventoryBaseActionRequestData {
Action: "Split"; Action: "Split";
/** Id of item to split */ /** Id of item to split */
@ -6,6 +6,6 @@ export interface IInventorySplitRequestData extends IInventoryBaseActionRequestD
/** Id of new item stack */ /** Id of new item stack */
newItem: string; newItem: string;
/** Destination new item will be placed in */ /** Destination new item will be placed in */
container: Container; container: IContainer;
count: number; count: number;
} }

View File

@ -1,11 +1,11 @@
import { OwnerInfo } from "@spt/models/eft/common/request/IBaseInteractionRequestData"; import { OwnerInfo } from "@spt/models/eft/common/request/IBaseInteractionRequestData";
import { IInventoryBaseActionRequestData, To } from "@spt/models/eft/inventory/IInventoryBaseActionRequestData"; import { IInventoryBaseActionRequestData, ITo } from "@spt/models/eft/inventory/IInventoryBaseActionRequestData";
export interface IInventorySwapRequestData extends IInventoryBaseActionRequestData { export interface IInventorySwapRequestData extends IInventoryBaseActionRequestData {
Action: "Swap"; Action: "Swap";
item: string; item: string;
to: To; to: ITo;
item2: string; item2: string;
to2: To; to2: ITo;
fromOwner2: OwnerInfo; fromOwner2: OwnerInfo;
toOwner2: OwnerInfo; toOwner2: OwnerInfo;
} }

View File

@ -3,9 +3,9 @@ export interface IOpenRandomLootContainerRequestData extends IInventoryBaseActio
Action: "OpenRandomLootContainer"; Action: "OpenRandomLootContainer";
/** Container item id being opened */ /** Container item id being opened */
item: string; item: string;
to: To[]; to: ITo[];
} }
export interface To { export interface ITo {
/** Player character (pmc/scav) id items will be sent to */ /** Player character (pmc/scav) id items will be sent to */
id: string; id: string;
} }

View File

@ -28,7 +28,7 @@ export interface IProfileChange {
improvements: Record<string, IHideoutImprovement>; improvements: Record<string, IHideoutImprovement>;
skills: ISkills; skills: ISkills;
health: IHealth; health: IHealth;
traderRelations: Record<string, TraderData>; traderRelations: Record<string, ITraderData>;
moneyTransferLimitData: IMoneyTransferLimits; moneyTransferLimitData: IMoneyTransferLimits;
repeatableQuests?: IPmcDataRepeatableQuest[]; repeatableQuests?: IPmcDataRepeatableQuest[];
recipeUnlocked: Record<string, boolean>; recipeUnlocked: Record<string, boolean>;
@ -60,7 +60,7 @@ export interface IItemChanges {
del: IProduct[]; del: IProduct[];
} }
/** Related to TraderInfo */ /** Related to TraderInfo */
export interface TraderData { export interface ITraderData {
salesSum: number; salesSum: number;
standing: number; standing: number;
loyalty: number; loyalty: number;

View File

@ -1,19 +1,19 @@
export interface IItemEventRouterRequest { export interface IItemEventRouterRequest {
data: Daum[]; data: IDaum[];
tm: number; tm: number;
reload: number; reload: number;
} }
export interface Daum { export interface IDaum {
Action: string; Action: string;
item: string; item: string;
to: To; to: ITo;
} }
export interface To { export interface ITo {
id: string; id: string;
container: string; container: string;
location?: Location; location?: ILocation;
} }
export interface Location { export interface ILocation {
x: number; x: number;
y: number; y: number;
r: string; r: string;

View File

@ -1,4 +1,4 @@
import { Spt } from "../profile/ISptProfile"; import { ISpt } from "../profile/ISptProfile";
export interface IMiniProfile { export interface IMiniProfile {
username: string; username: string;
nickname: string; nickname: string;
@ -10,5 +10,5 @@ export interface IMiniProfile {
maxlvl: number; maxlvl: number;
edition: string; edition: string;
profileId: string; profileId: string;
sptData: Spt; sptData: ISpt;
} }

View File

@ -1,5 +1,5 @@
import { LootItem } from "@spt/models/spt/services/LootItem"; import { ILootItem } from "@spt/models/spt/services/LootItem";
export interface IAirdropLootResult { export interface IAirdropLootResult {
dropType: string; dropType: string;
loot: LootItem[]; loot: ILootItem[];
} }

View File

@ -0,0 +1,3 @@
export interface IGetAirdropLootRequest {
containerId: string;
}

View File

@ -13,6 +13,7 @@ export interface IEndLocalRaidRequestData {
} }
export interface IEndRaidResult { export interface IEndRaidResult {
profile: IPmcData; profile: IPmcData;
/** "Survived/Transit etc" */
result: string; result: string;
ExitStatus: ExitStatus; ExitStatus: ExitStatus;
killerId: string; killerId: string;

View File

@ -15,15 +15,15 @@ export interface IRaidSettings {
isLocationTransition: boolean; isLocationTransition: boolean;
timeVariant: DateTime; timeVariant: DateTime;
metabolismDisabled: boolean; metabolismDisabled: boolean;
timeAndWeatherSettings: TimeAndWeatherSettings; timeAndWeatherSettings: ITimeAndWeatherSettings;
botSettings: BotSettings; botSettings: IBotSettings;
wavesSettings: WavesSettings; wavesSettings: IWavesSettings;
side: SideType; side: SideType;
raidMode: RaidMode; raidMode: RaidMode;
playersSpawnPlace: PlayersSpawnPlace; playersSpawnPlace: PlayersSpawnPlace;
CanShowGroupPreview: boolean; CanShowGroupPreview: boolean;
} }
export interface TimeAndWeatherSettings { export interface ITimeAndWeatherSettings {
isRandomTime: boolean; isRandomTime: boolean;
isRandomWeather: boolean; isRandomWeather: boolean;
cloudinessType: CloudinessType; cloudinessType: CloudinessType;
@ -33,11 +33,11 @@ export interface TimeAndWeatherSettings {
timeFlowType: TimeFlowType; timeFlowType: TimeFlowType;
hourOfDay: number; hourOfDay: number;
} }
export interface BotSettings { export interface IBotSettings {
isScavWars: boolean; isScavWars: boolean;
botAmount: BotAmount; botAmount: BotAmount;
} }
export interface WavesSettings { export interface IWavesSettings {
botAmount: BotAmount; botAmount: BotAmount;
botDifficulty: BotDifficulty; botDifficulty: BotDifficulty;
isBosses: boolean; isBosses: boolean;

View File

@ -6,6 +6,8 @@ export interface IStartLocalRaidRequestData {
playerSide: string; playerSide: string;
isLocationTransition: boolean; isLocationTransition: boolean;
transition: IStartLocalRaidTransition; transition: IStartLocalRaidTransition;
/** Should loot generation be skipped, default false */
sptSkipLootGeneration?: boolean;
} }
export interface IStartLocalRaidTransition { export interface IStartLocalRaidTransition {
isLocationTransition: boolean; isLocationTransition: boolean;

View File

@ -6,21 +6,21 @@ import { MessageType } from "@spt/models/enums/MessageType";
import { IProfileChangeEvent } from "@spt/models/spt/dialog/ISendMessageDetails"; import { IProfileChangeEvent } from "@spt/models/spt/dialog/ISendMessageDetails";
export interface ISptProfile { export interface ISptProfile {
info: Info; info: Info;
characters: Characters; characters: ICharacters;
/** Clothing purchases */ /** Clothing purchases */
suits: string[]; suits: string[];
userbuilds: IUserBuilds; userbuilds: IUserBuilds;
dialogues: Record<string, Dialogue>; dialogues: Record<string, IDialogue>;
spt: Spt; spt: ISpt;
vitality: Vitality; vitality: IVitality;
inraid: Inraid; inraid: IInraid;
insurance: Insurance[]; insurance: IInsurance[];
/** Assort purchases made by player since last trader refresh */ /** Assort purchases made by player since last trader refresh */
traderPurchases?: Record<string, Record<string, TraderPurchaseData>>; traderPurchases?: Record<string, Record<string, ITraderPurchaseData>>;
/** Achievements earned by player */ /** Achievements earned by player */
achievements: Record<string, number>; achievements: Record<string, number>;
} }
export declare class TraderPurchaseData { export declare class ITraderPurchaseData {
count: number; count: number;
purchaseTimestamp: number; purchaseTimestamp: number;
} }
@ -34,7 +34,7 @@ export interface Info {
wipe: boolean; wipe: boolean;
edition: string; edition: string;
} }
export interface Characters { export interface ICharacters {
pmc: IPmcData; pmc: IPmcData;
scav: IPmcData; scav: IPmcData;
} }
@ -74,13 +74,13 @@ export interface IDefaultEquipmentPreset extends IUserBuild {
BuildType: EquipmentBuildType; BuildType: EquipmentBuildType;
type: string; type: string;
} }
export interface Dialogue { export interface IDialogue {
attachmentsNew: number; attachmentsNew: number;
new: number; new: number;
type: MessageType; type: MessageType;
Users?: IUserDialogInfo[]; Users?: IUserDialogInfo[];
pinned: boolean; pinned: boolean;
messages: Message[]; messages: IMessage[];
_id: string; _id: string;
} }
export interface IUserDialogInfo { export interface IUserDialogInfo {
@ -95,16 +95,16 @@ export interface IUserDialogDetails {
MemberCategory: MemberCategory; MemberCategory: MemberCategory;
SelectedMemberCategory: MemberCategory; SelectedMemberCategory: MemberCategory;
} }
export interface DialogueInfo { export interface IDialogueInfo {
attachmentsNew: number; attachmentsNew: number;
new: number; new: number;
_id: string; _id: string;
type: MessageType; type: MessageType;
pinned: boolean; pinned: boolean;
Users?: IUserDialogInfo[]; Users?: IUserDialogInfo[];
message: MessagePreview; message: IMessagePreview;
} }
export interface Message { export interface IMessage {
_id: string; _id: string;
uid: string; uid: string;
type: MessageType; type: MessageType;
@ -116,7 +116,7 @@ export interface Message {
replyTo?: IReplyTo; replyTo?: IReplyTo;
hasRewards?: boolean; hasRewards?: boolean;
rewardCollected: boolean; rewardCollected: boolean;
items?: MessageItems; items?: IMessageItems;
maxStorageTime?: number; maxStorageTime?: number;
systemData?: ISystemData; systemData?: ISystemData;
profileChangeEvents?: IProfileChangeEvent[]; profileChangeEvents?: IProfileChangeEvent[];
@ -128,7 +128,7 @@ export interface IReplyTo {
dt: number; dt: number;
text?: string; text?: string;
} }
export interface MessagePreview { export interface IMessagePreview {
uid: string; uid: string;
type: MessageType; type: MessageType;
dt: number; dt: number;
@ -136,7 +136,7 @@ export interface MessagePreview {
text?: string; text?: string;
systemData?: ISystemData; systemData?: ISystemData;
} }
export interface MessageItems { export interface IMessageItems {
stash?: string; stash?: string;
data?: IItem[]; data?: IItem[];
} }
@ -156,17 +156,13 @@ export interface IUpdatableChatMember {
Ignored: boolean; Ignored: boolean;
Banned: boolean; Banned: boolean;
} }
export interface DateTime { export interface ISpt {
date: string;
time: string;
}
export interface Spt {
/** What version of SPT was this profile made with */ /** What version of SPT was this profile made with */
version: string; version: string;
/** What mods has this profile loaded at any point in time */ /** What mods has this profile loaded at any point in time */
mods?: ModDetails[]; mods?: IModDetails[];
/** What gifts has this profile received and how many */ /** What gifts has this profile received and how many */
receivedGifts?: ReceivedGift[]; receivedGifts?: IReceivedGift[];
/** item TPLs blacklisted from being sold on flea for this profile */ /** item TPLs blacklisted from being sold on flea for this profile */
blacklistedItemTpls?: string[]; blacklistedItemTpls?: string[];
/** key: daily type */ /** key: daily type */
@ -174,23 +170,23 @@ export interface Spt {
/** When was a profile migrated, value is timestamp */ /** When was a profile migrated, value is timestamp */
migrations?: Record<string, number>; migrations?: Record<string, number>;
} }
export interface ModDetails { export interface IModDetails {
name: string; name: string;
version: string; version: string;
author: string; author: string;
dateAdded: number; dateAdded: number;
url: string; url: string;
} }
export interface ReceivedGift { export interface IReceivedGift {
giftId: string; giftId: string;
timestampLastAccepted: number; timestampLastAccepted: number;
current: number; current: number;
} }
export interface Vitality { export interface IVitality {
health: Health; health: IHealth;
effects: Effects; effects: IEffects;
} }
export interface Health { export interface IHealth {
Hydration: number; Hydration: number;
Energy: number; Energy: number;
Temperature: number; Temperature: number;
@ -202,35 +198,35 @@ export interface Health {
LeftLeg: number; LeftLeg: number;
RightLeg: number; RightLeg: number;
} }
export interface Effects { export interface IEffects {
Head: Head; Head: IHead;
Chest: Chest; Chest: IChest;
Stomach: Stomach; Stomach: IStomach;
LeftArm: LeftArm; LeftArm: ILeftArm;
RightArm: RightArm; RightArm: IRightArm;
LeftLeg: LeftLeg; LeftLeg: ILeftLeg;
RightLeg: RightLeg; RightLeg: IRightLeg;
} }
export type Head = {}; export type IHead = {};
export type Chest = {}; export type IChest = {};
export type Stomach = {}; export type IStomach = {};
export interface LeftArm { export interface ILeftArm {
Fracture?: number; Fracture?: number;
} }
export interface RightArm { export interface IRightArm {
Fracture?: number; Fracture?: number;
} }
export interface LeftLeg { export interface ILeftLeg {
Fracture?: number; Fracture?: number;
} }
export interface RightLeg { export interface IRightLeg {
Fracture?: number; Fracture?: number;
} }
export interface Inraid { export interface IInraid {
location: string; location: string;
character: string; character: string;
} }
export interface Insurance { export interface IInsurance {
scheduledTime: number; scheduledTime: number;
traderId: string; traderId: string;
maxStorageTime: number; maxStorageTime: number;
@ -239,7 +235,7 @@ export interface Insurance {
messageTemplateId: string; messageTemplateId: string;
items: IItem[]; items: IItem[];
} }
export interface MessageContentRagfair { export interface IMessageContentRagfair {
offerId: string; offerId: string;
count: number; count: number;
handbookId: string; handbookId: string;

View File

@ -2,9 +2,9 @@ export interface IAddOfferRequestData {
Action: string; Action: string;
sellInOnePiece: boolean; sellInOnePiece: boolean;
items: string[]; items: string[];
requirements: Requirement[]; requirements: IRequirement[];
} }
export interface Requirement { export interface IRequirement {
_tpl: string; _tpl: string;
count: number; count: number;
level: number; level: number;

View File

@ -5,7 +5,7 @@ export interface IRagfairOffer {
sellResult?: ISellResult[]; sellResult?: ISellResult[];
_id: string; _id: string;
items: IItem[]; items: IItem[];
requirements: OfferRequirement[]; requirements: IOfferRequirement[];
root: string; root: string;
intId: number; intId: number;
/** Handbook price */ /** Handbook price */
@ -14,6 +14,7 @@ export interface IRagfairOffer {
requirementsCost: number; requirementsCost: number;
startTime: number; startTime: number;
endTime: number; endTime: number;
/** True when offer is sold as pack */
sellInOnePiece: boolean; sellInOnePiece: boolean;
/** Rouble price - same as requirementsCost */ /** Rouble price - same as requirementsCost */
summaryCost: number; summaryCost: number;
@ -25,7 +26,7 @@ export interface IRagfairOffer {
buyRestrictionCurrent?: number; buyRestrictionCurrent?: number;
locked?: boolean; locked?: boolean;
} }
export interface OfferRequirement { export interface IOfferRequirement {
_tpl: string; _tpl: string;
count: number; count: number;
onlyFunctional: boolean; onlyFunctional: boolean;

View File

@ -1,10 +1,10 @@
import { IBaseRepairActionDataRequest } from "@spt/models/eft/repair/IBaseRepairActionDataRequest"; import { IBaseRepairActionDataRequest } from "@spt/models/eft/repair/IBaseRepairActionDataRequest";
export interface IRepairActionDataRequest extends IBaseRepairActionDataRequest { export interface IRepairActionDataRequest extends IBaseRepairActionDataRequest {
Action: "Repair"; Action: "Repair";
repairKitsInfo: RepairKitsInfo[]; repairKitsInfo: IRepairKitsInfo[];
target: string; target: string;
} }
export interface RepairKitsInfo { export interface IRepairKitsInfo {
_id: string; _id: string;
count: number; count: number;
} }

View File

@ -2,9 +2,9 @@ import { IBaseRepairActionDataRequest } from "@spt/models/eft/repair/IBaseRepair
export interface ITraderRepairActionDataRequest extends IBaseRepairActionDataRequest { export interface ITraderRepairActionDataRequest extends IBaseRepairActionDataRequest {
Action: "TraderRepair"; Action: "TraderRepair";
tid: string; tid: string;
repairItems: RepairItem[]; repairItems: IRepairItem[];
} }
export interface RepairItem { export interface IRepairItem {
_id: string; _id: string;
count: number; count: number;
} }

View File

@ -12,12 +12,15 @@ export interface IWeather {
temp: number; temp: number;
fog: number; fog: number;
rain_intensity: number; rain_intensity: number;
/** 1 - 3 light rain, 3+ 'rain' */
rain: number; rain: number;
wind_gustiness: number; wind_gustiness: number;
wind_direction: WindDirection; wind_direction: WindDirection;
wind_speed: number; wind_speed: number;
/** < -0.4 = clear day */
cloud: number; cloud: number;
time: string; time: string;
date: string; date: string;
timestamp: number; timestamp: number;
sptInRaidTimestamp: number;
} }

View File

@ -1,8 +1,8 @@
import { IGroupCharacter } from "@spt/models/eft/match/IGroupCharacter"; import { IGroupCharacter } from "@spt/models/eft/match/IGroupCharacter";
import { Message } from "@spt/models/eft/profile/ISptProfile"; import { IMessage } from "@spt/models/eft/profile/ISptProfile";
import { IWsNotificationEvent } from "@spt/models/eft/ws/IWsNotificationEvent"; import { IWsNotificationEvent } from "@spt/models/eft/ws/IWsNotificationEvent";
export interface IWsChatMessageReceived extends IWsNotificationEvent { export interface IWsChatMessageReceived extends IWsNotificationEvent {
dialogId: string; dialogId: string;
message: Message; message: IMessage;
profiles?: IGroupCharacter[]; profiles?: IGroupCharacter[];
} }

View File

@ -1,6 +1,13 @@
export declare enum AirdropTypeEnum { export declare enum AirdropTypeEnum {
COMMON = "Common",
SUPPLY = "Supply",
MEDICAL = "Medical",
WEAPON_ARMOR = "Weapon"
}
export declare enum SptAirdropTypeEnum {
COMMON = "mixed", COMMON = "mixed",
SUPPLY = "barter", SUPPLY = "barter",
FOOD_MEDICAL = "foodMedical", FOOD_MEDICAL = "foodMedical",
WEAPON_ARMOR = "weaponArmor" WEAPON_ARMOR = "weaponArmor",
RADAR = "radar"
} }

View File

@ -54,7 +54,5 @@ export declare enum WildSpawnTypeNumber {
SKIER = 53, SKIER = 53,
SECTANTPREDVESTNIK = 57, SECTANTPREDVESTNIK = 57,
SECTANTPRIZRAK = 58, SECTANTPRIZRAK = 58,
SECTANTONI = 59, SECTANTONI = 59
SPTUSEC = 100,
SPTBEAR = 101
} }

View File

@ -1,5 +1,5 @@
export declare enum QteEffectType { export declare enum QteEffectType {
FINISH_EFFECT = "FinishEffect", FINISH_EFFECT = "finishEffect",
SINGLE_SUCCESS_EFFECT = "SingleSuccessEffect", SINGLE_SUCCESS_EFFECT = "singleSuccessEffect",
SINGLE_FAIL_EFFECT = "SingleFailEffect" SINGLE_FAIL_EFFECT = "singleFailEffect"
} }

View File

@ -1,5 +1,5 @@
import { MinMax } from "@spt/models/common/MinMax"; import { MinMax } from "@spt/models/common/MinMax";
export interface BotGenerationDetails { export interface IBotGenerationDetails {
/** Should the bot be generated as a PMC */ /** Should the bot be generated as a PMC */
isPmc: boolean; isPmc: boolean;
/** assault/pmcBot etc */ /** assault/pmcBot etc */

View File

@ -1,6 +1,7 @@
import { IInventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBase"; import { IInventory as PmcInventory } from "@spt/models/eft/common/tables/IBotBase";
import { IChances, IMods } from "@spt/models/eft/common/tables/IBotType"; import { IChances, IMods } from "@spt/models/eft/common/tables/IBotType";
import { EquipmentFilters, RandomisationDetails } from "@spt/models/spt/config/IBotConfig"; import { EquipmentFilters, IRandomisationDetails } from "@spt/models/spt/config/IBotConfig";
import { IBotData } from "./IGenerateWeaponRequest";
export interface IGenerateEquipmentProperties { export interface IGenerateEquipmentProperties {
/** Root Slot being generated */ /** Root Slot being generated */
rootEquipmentSlot: string; rootEquipmentSlot: string;
@ -9,14 +10,13 @@ export interface IGenerateEquipmentProperties {
modPool: IMods; modPool: IMods;
/** Dictionary of mod items and their chance to spawn for this bot type */ /** Dictionary of mod items and their chance to spawn for this bot type */
spawnChances: IChances; spawnChances: IChances;
/** Role being generated for */ /** Bot-specific properties */
botRole: string; botData: IBotData;
/** Level of bot being generated */
botLevel: number;
inventory: PmcInventory; inventory: PmcInventory;
botEquipmentConfig: EquipmentFilters; botEquipmentConfig: EquipmentFilters;
/** Settings from bot.json to adjust how item is generated */ /** Settings from bot.json to adjust how item is generated */
randomisationDetails: RandomisationDetails; randomisationDetails: IRandomisationDetails;
/** OPTIONAL - Do not generate mods for tpls in this array */ /** OPTIONAL - Do not generate mods for tpls in this array */
generateModsBlacklist?: string[]; generateModsBlacklist?: string[];
generatingPlayerLevel: number;
} }

View File

@ -1,7 +1,7 @@
import { IMods } from "@spt/models/eft/common/tables/IBotType"; import { IMods } from "@spt/models/eft/common/tables/IBotType";
import { IItem } 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";
export declare class GenerateWeaponResult { export interface IGenerateWeaponResult {
weapon: IItem[]; weapon: IItem[];
chosenAmmoTpl: string; chosenAmmoTpl: string;
chosenUbglAmmoTpl: string; chosenUbglAmmoTpl: string;

View File

@ -2,7 +2,7 @@ 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 { ModSpawn } from "@spt/models/enums/ModSpawn"; import { ModSpawn } from "@spt/models/enums/ModSpawn";
import { IBotData, IWeaponStats } from "@spt/models/spt/bots/IGenerateWeaponRequest"; import { IBotData, IWeaponStats } from "@spt/models/spt/bots/IGenerateWeaponRequest";
import { EquipmentFilterDetails } from "@spt/models/spt/config/IBotConfig"; import { IEquipmentFilterDetails } from "@spt/models/spt/config/IBotConfig";
export interface IModToSpawnRequest { export interface IModToSpawnRequest {
/** Slot mod will fit into */ /** Slot mod will fit into */
modSlot: string; modSlot: string;
@ -11,7 +11,7 @@ export interface IModToSpawnRequest {
/** Parent slot the item will be a part of */ /** Parent slot the item will be a part of */
botWeaponSightWhitelist: Record<string, string[]>; botWeaponSightWhitelist: Record<string, string[]>;
/** Blacklist to prevent mods from being picked */ /** Blacklist to prevent mods from being picked */
botEquipBlacklist: EquipmentFilterDetails; botEquipBlacklist: IEquipmentFilterDetails;
/** Pool of items to pick from */ /** Pool of items to pick from */
itemModPool: Record<string, string[]>; itemModPool: Record<string, string[]>;
/** Array with only weapon tpl in it, ready for mods to be added */ /** Array with only weapon tpl in it, ready for mods to be added */

View File

@ -14,11 +14,11 @@ 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";
export interface IDialogueCallbacks { export interface IDialogueCallbacks {
getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>; getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>;
getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<any[]>; getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<any[]>;
getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo[]>; getMailDialogList(url: string, info: IGetMailDialogListRequestData, sessionID: string): IGetBodyResponseData<IDialogueInfo[]>;
getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>; getMailDialogView(url: string, info: IGetMailDialogViewRequestData, sessionID: string): IGetBodyResponseData<IGetMailDialogViewResponseData>;
getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<any>; getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<any>;
removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>; removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;

View File

@ -1,11 +1,12 @@
import { MinMax } from "@spt/models/common/MinMax"; import { MinMax } from "@spt/models/common/MinMax";
import { AirdropTypeEnum } from "@spt/models/enums/AirdropType"; import { AirdropTypeEnum, SptAirdropTypeEnum } from "@spt/models/enums/AirdropType";
import { IBaseConfig } from "@spt/models/spt/config/IBaseConfig"; import { IBaseConfig } from "@spt/models/spt/config/IBaseConfig";
export interface IAirdropConfig extends IBaseConfig { export interface IAirdropConfig extends IBaseConfig {
kind: "spt-airdrop"; kind: "spt-airdrop";
airdropTypeWeightings: Record<AirdropTypeEnum, number>; airdropTypeWeightings: Record<SptAirdropTypeEnum, number>;
/** What rewards will the loot crate contain, keyed by drop type e.g. mixed/weaponArmor/foodMedical/barter */ /** What rewards will the loot crate contain, keyed by drop type e.g. mixed/weaponArmor/foodMedical/barter */
loot: Record<string, IAirdropLoot>; loot: Record<string, IAirdropLoot>;
customAirdropMapping: Record<string, SptAirdropTypeEnum>;
} }
/** Chance map will have an airdrop occur out of 100 - locations not included count as 0% */ /** Chance map will have an airdrop occur out of 100 - locations not included count as 0% */
export interface IAirdropChancePercent { export interface IAirdropChancePercent {
@ -20,6 +21,7 @@ export interface IAirdropChancePercent {
} }
/** Loot inside crate */ /** Loot inside crate */
export interface IAirdropLoot { export interface IAirdropLoot {
icon: AirdropTypeEnum;
/** Min/max of weapons inside crate */ /** Min/max of weapons inside crate */
weaponPresetCount?: MinMax; weaponPresetCount?: MinMax;
/** Min/max of armors (head/chest/rig) inside crate */ /** Min/max of armors (head/chest/rig) inside crate */
@ -40,4 +42,6 @@ export interface IAirdropLoot {
armorLevelWhitelist?: number[]; armorLevelWhitelist?: number[];
/** Should boss items be added to airdrop crate */ /** Should boss items be added to airdrop crate */
allowBossItems: boolean; allowBossItems: boolean;
useForcedLoot?: boolean;
forcedLoot?: Record<string, MinMax>;
} }

View File

@ -5,7 +5,7 @@ import { IBotDurability } from "@spt/models/spt/config/IBotDurability";
export interface IBotConfig extends IBaseConfig { export interface IBotConfig extends IBaseConfig {
kind: "spt-bot"; kind: "spt-bot";
/** How many variants of each bot should be generated on raid start */ /** How many variants of each bot should be generated on raid start */
presetBatch: PresetBatch; presetBatch: IPresetBatch;
/** Bot roles that should not have PMC types (pmcBEAR/pmcUSEC) added as enemies to */ /** Bot roles that should not have PMC types (pmcBEAR/pmcUSEC) added as enemies to */
botsToNotAddPMCsAsEnemiesTo: string[]; botsToNotAddPMCsAsEnemiesTo: string[];
/** What bot types should be classified as bosses */ /** What bot types should be classified as bosses */
@ -44,6 +44,10 @@ export interface IBotConfig extends IBaseConfig {
/** What bottypes should be excluded from having loot generated on them (backpack/pocket/vest) does not disable food/drink/special/ */ /** What bottypes should be excluded from having loot generated on them (backpack/pocket/vest) does not disable food/drink/special/ */
disableLootOnBotTypes: string[]; disableLootOnBotTypes: string[];
assaultToBossConversion: IAssaultToBossConversion; assaultToBossConversion: IAssaultToBossConversion;
/** Max length a bots name can be */
botNameLengthLimit: number;
/** Bot roles that must have a unique name when generated vs other bots in raid */
botRolesThatMustHaveUniqueName: string[];
} }
export interface IAssaultToBossConversion { export interface IAssaultToBossConversion {
bossConvertEnabled: boolean; bossConvertEnabled: boolean;
@ -51,7 +55,7 @@ export interface IAssaultToBossConversion {
bossConvertMinMax: Record<string, MinMax>; bossConvertMinMax: Record<string, MinMax>;
} }
/** Number of bots to generate and store in cache on raid start per bot type */ /** Number of bots to generate and store in cache on raid start per bot type */
export interface PresetBatch { export interface IPresetBatch {
assault: number; assault: number;
bossBully: number; bossBully: number;
bossGluhar: number; bossGluhar: number;
@ -100,7 +104,7 @@ export interface IWalletLootSettings {
} }
export interface EquipmentFilters { export interface EquipmentFilters {
/** Limits for mod types per weapon .e.g. scopes */ /** Limits for mod types per weapon .e.g. scopes */
weaponModLimits: ModLimits; weaponModLimits: IModLimits;
/** Whitelist for weapon sight types allowed per gun */ /** Whitelist for weapon sight types allowed per gun */
weaponSightWhitelist: Record<string, string[]>; weaponSightWhitelist: Record<string, string[]>;
/** Chance face shield is down/active */ /** Chance face shield is down/active */
@ -121,27 +125,27 @@ export interface EquipmentFilters {
/** What additional slot ids should be seen as required when choosing a mod to add to a weapon */ /** What additional slot ids should be seen as required when choosing a mod to add to a weapon */
weaponSlotIdsToMakeRequired?: string[]; weaponSlotIdsToMakeRequired?: string[];
/** Adjust weighting/chances of items on bot by level of bot */ /** Adjust weighting/chances of items on bot by level of bot */
randomisation: RandomisationDetails[]; randomisation: IRandomisationDetails[];
/** Blacklist equipment by level of bot */ /** Blacklist equipment by level of bot */
blacklist: EquipmentFilterDetails[]; blacklist: IEquipmentFilterDetails[];
/** Whitelist equipment by level of bot */ /** Whitelist equipment by level of bot */
whitelist: EquipmentFilterDetails[]; whitelist: IEquipmentFilterDetails[];
/** Adjust equipment/ammo */ /** Adjust equipment/ammo */
weightingAdjustmentsByBotLevel: WeightingAdjustmentDetails[]; weightingAdjustmentsByBotLevel: IWeightingAdjustmentDetails[];
/** Same as weightingAdjustments but based on player level instead of bot level */ /** Same as weightingAdjustments but based on player level instead of bot level */
weightingAdjustmentsByPlayerLevel?: WeightingAdjustmentDetails[]; weightingAdjustmentsByPlayerLevel?: IWeightingAdjustmentDetails[];
/** Should the stock mod be forced to spawn on bot */ /** Should the stock mod be forced to spawn on bot */
forceStock?: boolean; forceStock?: boolean;
armorPlateWeighting?: IArmorPlateWeights[]; armorPlateWeighting?: IArmorPlateWeights[];
forceRigWhenNoVest?: boolean; forceRigWhenNoVest?: boolean;
} }
export interface ModLimits { export interface IModLimits {
/** How many scopes are allowed on a weapon - hard coded to work with OPTIC_SCOPE, ASSAULT_SCOPE, COLLIMATOR, COMPACT_COLLIMATOR */ /** How many scopes are allowed on a weapon - hard coded to work with OPTIC_SCOPE, ASSAULT_SCOPE, COLLIMATOR, COMPACT_COLLIMATOR */
scopeLimit?: number; scopeLimit?: number;
/** How many lasers or lights are allowed on a weapon - hard coded to work with TACTICAL_COMBO, and FLASHLIGHT */ /** How many lasers or lights are allowed on a weapon - hard coded to work with TACTICAL_COMBO, and FLASHLIGHT */
lightLaserLimit?: number; lightLaserLimit?: number;
} }
export interface RandomisationDetails { export interface IRandomisationDetails {
/** Between what levels do these randomisation setting apply to */ /** Between what levels do these randomisation setting apply to */
levelRange: MinMax; levelRange: MinMax;
generation?: Record<string, IGenerationData>; generation?: Record<string, IGenerationData>;
@ -155,8 +159,13 @@ export interface RandomisationDetails {
weaponMods?: Record<string, number>; weaponMods?: Record<string, number>;
/** Equipment mod chances */ /** Equipment mod chances */
equipmentMods?: Record<string, number>; equipmentMods?: Record<string, number>;
nighttimeChanges?: INighttimeChanges;
} }
export interface EquipmentFilterDetails { export interface INighttimeChanges {
/** Applies changes to values stored in equipmentMods */
equipmentModsModifiers: Record<string, number>;
}
export interface IEquipmentFilterDetails {
/** Between what levels do these equipment filter setting apply to */ /** Between what levels do these equipment filter setting apply to */
levelRange: MinMax; levelRange: MinMax;
/** Key: mod slot name e.g. mod_magazine, value: item tpls */ /** Key: mod slot name e.g. mod_magazine, value: item tpls */
@ -164,7 +173,7 @@ export interface EquipmentFilterDetails {
/** Key: cartridge type e.g. Caliber23x75, value: item tpls */ /** Key: cartridge type e.g. Caliber23x75, value: item tpls */
cartridge: Record<string, string[]>; cartridge: Record<string, string[]>;
} }
export interface WeightingAdjustmentDetails { export interface IWeightingAdjustmentDetails {
/** Between what levels do these weight settings apply to */ /** Between what levels do these weight settings apply to */
levelRange: MinMax; levelRange: MinMax;
/** Key: ammo type e.g. Caliber556x45NATO, value: item tpl + weight */ /** Key: ammo type e.g. Caliber556x45NATO, value: item tpl + weight */

View File

@ -1,6 +1,6 @@
export interface IBotDurability { export interface IBotDurability {
default: IDefaultDurability; default: IDefaultDurability;
pmc: PmcDurability; pmc: IPmcDurability;
boss: IBotDurability; boss: IBotDurability;
follower: IBotDurability; follower: IBotDurability;
assault: IBotDurability; assault: IBotDurability;
@ -20,7 +20,7 @@ export interface IDefaultDurability {
armor: IArmorDurability; armor: IArmorDurability;
weapon: IWeaponDurability; weapon: IWeaponDurability;
} }
export interface PmcDurability { export interface IPmcDurability {
armor: IPmcDurabilityArmor; armor: IPmcDurabilityArmor;
weapon: IWeaponDurability; weapon: IWeaponDurability;
} }

View File

@ -1,14 +1,14 @@
import { IBaseConfig } from "@spt/models/spt/config/IBaseConfig"; import { IBaseConfig } from "@spt/models/spt/config/IBaseConfig";
export interface IHealthConfig extends IBaseConfig { export interface IHealthConfig extends IBaseConfig {
kind: "spt-health"; kind: "spt-health";
healthMultipliers: HealthMultipliers; healthMultipliers: IHealthMultipliers;
save: Save; save: ISave;
} }
export interface HealthMultipliers { export interface IHealthMultipliers {
death: number; death: number;
blacked: number; blacked: number;
} }
export interface Save { export interface ISave {
health: boolean; health: boolean;
effects: boolean; effects: boolean;
} }

View File

@ -18,11 +18,11 @@ export interface ICultistCircleSettings {
maxRewardItemCount: number; maxRewardItemCount: number;
maxAttemptsToPickRewardsWithinBudget: number; maxAttemptsToPickRewardsWithinBudget: number;
rewardPriceMultiplerMinMax: MinMax; rewardPriceMultiplerMinMax: MinMax;
craftTimeThreshholds: CraftTimeThreshhold[]; craftTimeThreshholds: ICraftTimeThreshhold[];
/** -1 means no override */ /** -1 means no override */
craftTimeOverride: number; craftTimeOverride: number;
/** Specific reward pool when player sacrificed one specific item */ /** Specific reward pool when player sacrificed one specific item */
directRewards: Record<string, DirectRewardSettings>; directRewards: Record<string, IDirectRewardSettings>;
directRewardStackSize: Record<string, MinMax>; directRewardStackSize: Record<string, MinMax>;
/** Item tpls to exclude from the reward pool */ /** Item tpls to exclude from the reward pool */
rewardItemBlacklist: string[]; rewardItemBlacklist: string[];
@ -30,10 +30,10 @@ export interface ICultistCircleSettings {
additionalRewardItemPool: string[]; additionalRewardItemPool: string[];
currencyRewards: Record<string, MinMax>; currencyRewards: Record<string, MinMax>;
} }
export interface CraftTimeThreshhold extends MinMax { export interface ICraftTimeThreshhold extends MinMax {
craftTimeSeconds: number; craftTimeSeconds: number;
} }
export interface DirectRewardSettings { export interface IDirectRewardSettings {
rewardTpls: string[]; rewardTpls: string[];
craftTimeSeconds: number; craftTimeSeconds: number;
} }

View File

@ -2,9 +2,9 @@ import { IBaseConfig } from "@spt/models/spt/config/IBaseConfig";
export interface IInRaidConfig extends IBaseConfig { export interface IInRaidConfig extends IBaseConfig {
kind: "spt-inraid"; kind: "spt-inraid";
/** Overrides to apply to the pre-raid settings screen */ /** Overrides to apply to the pre-raid settings screen */
raidMenuSettings: RaidMenuSettings; raidMenuSettings: IRaidMenuSettings;
/** What effects should be saved post-raid */ /** What effects should be saved post-raid */
save: Save; save: ISave;
/** Names of car extracts */ /** Names of car extracts */
carExtracts: string[]; carExtracts: string[];
/** Names of coop extracts */ /** Names of coop extracts */
@ -14,7 +14,7 @@ export interface IInRaidConfig extends IBaseConfig {
/** Fence rep gain from a single coop extract */ /** Fence rep gain from a single coop extract */
coopExtractBaseStandingGain: number; coopExtractBaseStandingGain: number;
/** Fence rep gain when successfully extracting as pscav */ /** Fence rep gain when successfully extracting as pscav */
scavExtractGain: number; scavExtractStandingGain: number;
/** The likelihood of PMC eliminating a minimum of 2 scavs while you engage them as a pscav. */ /** The likelihood of PMC eliminating a minimum of 2 scavs while you engage them as a pscav. */
pmcKillProbabilityForScavGain: number; pmcKillProbabilityForScavGain: number;
/** On death should items in your secure keep their Find in raid status regardless of how you finished the raid */ /** On death should items in your secure keep their Find in raid status regardless of how you finished the raid */
@ -24,7 +24,7 @@ export interface IInRaidConfig extends IBaseConfig {
/** Percentage chance a player scav hot is hostile to the player when scavving */ /** Percentage chance a player scav hot is hostile to the player when scavving */
playerScavHostileChancePercent: number; playerScavHostileChancePercent: number;
} }
export interface RaidMenuSettings { export interface IRaidMenuSettings {
aiAmount: string; aiAmount: string;
aiDifficulty: string; aiDifficulty: string;
bossEnabled: boolean; bossEnabled: boolean;
@ -34,7 +34,7 @@ export interface RaidMenuSettings {
randomWeather: boolean; randomWeather: boolean;
randomTime: boolean; randomTime: boolean;
} }
export interface Save { export interface ISave {
/** Should loot gained from raid be saved */ /** Should loot gained from raid be saved */
loot: boolean; loot: boolean;
} }

View File

@ -4,14 +4,14 @@ export interface IInventoryConfig extends IBaseConfig {
kind: "spt-inventory"; kind: "spt-inventory";
/** Should new items purchased by flagged as found in raid */ /** Should new items purchased by flagged as found in raid */
newItemsMarkedFound: boolean; newItemsMarkedFound: boolean;
randomLootContainers: Record<string, RewardDetails>; randomLootContainers: Record<string, IRewardDetails>;
sealedAirdropContainer: ISealedAirdropContainerSettings; sealedAirdropContainer: ISealedAirdropContainerSettings;
/** Contains item tpls that the server should consider money and treat the same as roubles/euros/dollars */ /** Contains item tpls that the server should consider money and treat the same as roubles/euros/dollars */
customMoneyTpls: string[]; customMoneyTpls: string[];
/** Multipliers for skill gain when inside menus, NOT in-game */ /** Multipliers for skill gain when inside menus, NOT in-game */
skillGainMultiplers: Record<string, number>; skillGainMultiplers: Record<string, number>;
} }
export interface RewardDetails { export interface IRewardDetails {
rewardCount: number; rewardCount: number;
foundInRaid: boolean; foundInRaid: boolean;
rewardTplPool?: Record<string, number>; rewardTplPool?: Record<string, number>;

View File

@ -2,16 +2,16 @@ import { IGenerationData } from "@spt/models/eft/common/tables/IBotType";
import { IBaseConfig } from "@spt/models/spt/config/IBaseConfig"; import { IBaseConfig } from "@spt/models/spt/config/IBaseConfig";
export interface IPlayerScavConfig extends IBaseConfig { export interface IPlayerScavConfig extends IBaseConfig {
kind: "spt-playerscav"; kind: "spt-playerscav";
karmaLevel: Record<string, KarmaLevel>; karmaLevel: Record<string, IKarmaLevel>;
} }
export interface KarmaLevel { export interface IKarmaLevel {
botTypeForLoot: string; botTypeForLoot: string;
modifiers: Modifiers; modifiers: IModifiers;
itemLimits: ItemLimits; itemLimits: ItemLimits;
equipmentBlacklist: Record<string, string[]>; equipmentBlacklist: Record<string, string[]>;
lootItemsToAddChancePercent: Record<string, number>; lootItemsToAddChancePercent: Record<string, number>;
} }
export interface Modifiers { export interface IModifiers {
equipment: Record<string, number>; equipment: Record<string, number>;
mod: Record<string, number>; mod: Record<string, number>;
} }

View File

@ -9,11 +9,11 @@ export interface IPmcConfig extends IBaseConfig {
/** What account type should the PMC have */ /** What account type should the PMC have */
accountTypeWeight: Record<MemberCategory, number>; accountTypeWeight: Record<MemberCategory, number>;
/** Global whitelist/blacklist of vest loot for PMCs */ /** Global whitelist/blacklist of vest loot for PMCs */
vestLoot: SlotLootSettings; vestLoot: ISlotLootSettings;
/** Global whitelist/blacklist of pocket loot for PMCs */ /** Global whitelist/blacklist of pocket loot for PMCs */
pocketLoot: SlotLootSettings; pocketLoot: ISlotLootSettings;
/** Global whitelist/blacklist of backpack loot for PMCs */ /** Global whitelist/blacklist of backpack loot for PMCs */
backpackLoot: SlotLootSettings; backpackLoot: ISlotLootSettings;
/** Use difficulty defined in config/bot.json/difficulty instead of chosen difficulty dropdown value */ /** Use difficulty defined in config/bot.json/difficulty instead of chosen difficulty dropdown value */
useDifficultyOverride: boolean; useDifficultyOverride: boolean;
/** Difficulty override e.g. "AsOnline/Hard" */ /** Difficulty override e.g. "AsOnline/Hard" */
@ -32,7 +32,7 @@ export interface IPmcConfig extends IBaseConfig {
bearType: string; bearType: string;
/** What 'brain' does a PMC use, keyed by map and side (USEC/BEAR) key: map location, value: type for usec/bear */ /** What 'brain' does a PMC use, keyed by map and side (USEC/BEAR) key: map location, value: type for usec/bear */
pmcType: Record<string, Record<string, Record<string, number>>>; pmcType: Record<string, Record<string, Record<string, number>>>;
maxBackpackLootTotalRub: MinMaxLootValue[]; maxBackpackLootTotalRub: IMinMaxLootValue[];
maxPocketLootTotalRub: number; maxPocketLootTotalRub: number;
maxVestLootTotalRub: number; maxVestLootTotalRub: number;
/** Percentage chance a bot from a wave is converted into a PMC, first key = map, second key = bot wildspawn type (assault/exusec), value: min+max chance to be converted */ /** Percentage chance a bot from a wave is converted into a PMC, first key = map, second key = bot wildspawn type (assault/exusec), value: min+max chance to be converted */
@ -61,14 +61,14 @@ export interface IHostilitySettings {
additionalFriendlyTypes?: string[]; additionalFriendlyTypes?: string[];
savagePlayerBehaviour?: string; savagePlayerBehaviour?: string;
} }
export interface PmcTypes { export interface IPmcTypes {
usec: string; usec: string;
bear: string; bear: string;
} }
export interface SlotLootSettings { export interface ISlotLootSettings {
whitelist: string[]; whitelist: string[];
blacklist: string[]; blacklist: string[];
} }
export interface MinMaxLootValue extends MinMax { export interface IMinMaxLootValue extends MinMax {
value: number; value: number;
} }

View File

@ -7,13 +7,13 @@ export interface IRagfairConfig extends IBaseConfig {
/** Default values used to hydrate `runIntervalSeconds` with */ /** Default values used to hydrate `runIntervalSeconds` with */
runIntervalValues: IRunIntervalValues; runIntervalValues: IRunIntervalValues;
/** Player listing settings */ /** Player listing settings */
sell: Sell; sell: ISell;
/** Trader ids + should their assorts be listed on flea */ /** Trader ids + should their assorts be listed on flea */
traders: Record<string, boolean>; traders: Record<string, boolean>;
dynamic: Dynamic; dynamic: IDynamic;
tieredFlea: ITieredFlea; tieredFlea: ITieredFlea;
} }
export interface Sell { export interface ISell {
/** Should a fee be deducted from player when liting an item for sale */ /** Should a fee be deducted from player when liting an item for sale */
fees: boolean; fees: boolean;
/** Settings to control chances of offer being sold */ /** Settings to control chances of offer being sold */
@ -33,7 +33,7 @@ export interface Chance {
/** Min possible sell chance % for a player listed offer */ /** Min possible sell chance % for a player listed offer */
minSellChancePercent: number; minSellChancePercent: number;
} }
export interface Dynamic { export interface IDynamic {
purchasesAreFoundInRaid: boolean; purchasesAreFoundInRaid: boolean;
/** Use the highest trader price for an offer if its greater than the price in templates/prices.json */ /** Use the highest trader price for an offer if its greater than the price in templates/prices.json */
useTraderPriceForOffersIfHigher: boolean; useTraderPriceForOffersIfHigher: boolean;
@ -41,7 +41,7 @@ export interface Dynamic {
barter: IBarterDetails; barter: IBarterDetails;
pack: IPackDetails; pack: IPackDetails;
/** Dynamic offer price below handbook adjustment values */ /** Dynamic offer price below handbook adjustment values */
offerAdjustment: OfferAdjustment; offerAdjustment: IOfferAdjustment;
/** How many offers should expire before an offer regeneration occurs */ /** How many offers should expire before an offer regeneration occurs */
expiredOfferThreshold: number; expiredOfferThreshold: number;
/** How many offers should be listed */ /** How many offers should be listed */
@ -70,7 +70,7 @@ export interface Dynamic {
/** Should christmas/halloween items be removed from flea when not within the seasonal bounds */ /** Should christmas/halloween items be removed from flea when not within the seasonal bounds */
removeSeasonalItemsWhenNotInEvent: boolean; removeSeasonalItemsWhenNotInEvent: boolean;
/** Flea blacklist settings */ /** Flea blacklist settings */
blacklist: Blacklist; blacklist: IRagfairBlacklist;
/** Dict of price limits keyed by item type */ /** Dict of price limits keyed by item type */
unreasonableModPrices: Record<string, IUnreasonableModPrices>; unreasonableModPrices: Record<string, IUnreasonableModPrices>;
} }
@ -103,7 +103,7 @@ export interface IPackDetails {
/** item types to allow being a pack */ /** item types to allow being a pack */
itemTypeWhitelist: string[]; itemTypeWhitelist: string[];
} }
export interface OfferAdjustment { export interface IOfferAdjustment {
/** Shuld offer price be adjusted when below handbook price */ /** Shuld offer price be adjusted when below handbook price */
adjustPriceWhenBelowHandbookPrice: boolean; adjustPriceWhenBelowHandbookPrice: boolean;
/** How big a percentage difference does price need to vary from handbook to be considered for adjustment */ /** How big a percentage difference does price need to vary from handbook to be considered for adjustment */
@ -119,7 +119,7 @@ export interface Condition {
current: MinMax; current: MinMax;
max: MinMax; max: MinMax;
} }
export interface Blacklist { export interface IRagfairBlacklist {
/** Damaged ammo packs */ /** Damaged ammo packs */
damagedAmmoPacks: boolean; damagedAmmoPacks: boolean;
/** Custom blacklist for item Tpls */ /** Custom blacklist for item Tpls */
@ -159,7 +159,10 @@ export interface IArmorSettings {
} }
export interface ITieredFlea { export interface ITieredFlea {
enabled: boolean; enabled: boolean;
unlocks: Record<string, number>; /** key: tpl, value: playerlevel */
unlocksTpl: Record<string, number>;
/** key: item type id, value: playerlevel */
unlocksType: Record<string, number>;
ammoTiersEnabled: boolean; ammoTiersEnabled: boolean;
ammoTplUnlocks: Record<string, number>; ammoTplUnlocks: Record<string, number>;
} }

View File

@ -10,7 +10,7 @@ export interface IRepairConfig extends IBaseConfig {
repairKitIntellectGainMultiplier: IIntellectGainValues; repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues; maxIntellectGainPerRepair: IMaxIntellectGainValues;
weaponTreatment: IWeaponTreatmentRepairValues; weaponTreatment: IWeaponTreatmentRepairValues;
repairKit: RepairKit; repairKit: IRepairKit;
} }
export interface IIntellectGainValues { export interface IIntellectGainValues {
weapon: number; weapon: number;
@ -30,17 +30,17 @@ export interface IWeaponTreatmentRepairValues {
/** The multiplier used for calculating weapon maintenance XP */ /** The multiplier used for calculating weapon maintenance XP */
pointGainMultiplier: number; pointGainMultiplier: number;
} }
export interface RepairKit { export interface IRepairKit {
armor: BonusSettings; armor: IBonusSettings;
weapon: BonusSettings; weapon: IBonusSettings;
} }
export interface BonusSettings { export interface IBonusSettings {
rarityWeight: Record<string, number>; rarityWeight: Record<string, number>;
bonusTypeWeight: Record<string, number>; bonusTypeWeight: Record<string, number>;
common: Record<string, BonusValues>; common: Record<string, IBonusValues>;
rare: Record<string, BonusValues>; rare: Record<string, IBonusValues>;
} }
export interface BonusValues { export interface IBonusValues {
valuesMinMax: MinMax; valuesMinMax: MinMax;
/** What dura is buff active between (min max of current max) */ /** What dura is buff active between (min max of current max) */
activeDurabilityPercentMinMax: MinMax; activeDurabilityPercentMinMax: MinMax;

View File

@ -1,24 +1,24 @@
import { MinMax } from "@spt/models/common/MinMax"; import { MinMax } from "@spt/models/common/MinMax";
import { IBaseConfig } from "@spt/models/spt/config/IBaseConfig"; import { IBaseConfig } from "@spt/models/spt/config/IBaseConfig";
import { LootRequest } from "@spt/models/spt/services/LootRequest"; import { ILootRequest } from "@spt/models/spt/services/ILootRequest";
export interface ITraderConfig extends IBaseConfig { export interface ITraderConfig extends IBaseConfig {
kind: "spt-trader"; kind: "spt-trader";
updateTime: UpdateTime[]; updateTime: IUpdateTime[];
purchasesAreFoundInRaid: boolean; purchasesAreFoundInRaid: boolean;
/** Should trader reset times be set based on server start time (false = bsg time - on the hour) */ /** Should trader reset times be set based on server start time (false = bsg time - on the hour) */
tradersResetFromServerStart: boolean; tradersResetFromServerStart: boolean;
updateTimeDefault: number; updateTimeDefault: number;
traderPriceMultipler: number; traderPriceMultipler: number;
fence: FenceConfig; fence: IFenceConfig;
moddedTraders: ModdedTraders; moddedTraders: IModdedTraders;
} }
export interface UpdateTime { export interface IUpdateTime {
traderId: string; traderId: string;
/** Seconds between trader resets */ /** Seconds between trader resets */
seconds: MinMax; seconds: MinMax;
} }
export interface FenceConfig { export interface IFenceConfig {
discountOptions: DiscountOptions; discountOptions: IDiscountOptions;
partialRefreshTimeSeconds: number; partialRefreshTimeSeconds: number;
partialRefreshChangePercent: number; partialRefreshChangePercent: number;
assortSize: number; assortSize: number;
@ -45,19 +45,19 @@ export interface FenceConfig {
/** Max pen value allowed to be listed on flea - affects ammo + ammo boxes */ /** Max pen value allowed to be listed on flea - affects ammo + ammo boxes */
ammoMaxPenLimit: number; ammoMaxPenLimit: number;
blacklist: string[]; blacklist: string[];
coopExtractGift: CoopExtractReward; coopExtractGift: ICoopExtractReward;
btrDeliveryExpireHours: number; btrDeliveryExpireHours: number;
} }
export interface IItemDurabilityCurrentMax { export interface IItemDurabilityCurrentMax {
current: MinMax; current: MinMax;
max: MinMax; max: MinMax;
} }
export interface CoopExtractReward extends LootRequest { export interface ICoopExtractReward extends ILootRequest {
sendGift: boolean; sendGift: boolean;
messageLocaleIds: string[]; messageLocaleIds: string[];
giftExpiryHours: number; giftExpiryHours: number;
} }
export interface DiscountOptions { export interface IDiscountOptions {
assortSize: number; assortSize: number;
itemPriceMult: number; itemPriceMult: number;
presetPriceMult: number; presetPriceMult: number;
@ -65,7 +65,7 @@ export interface DiscountOptions {
equipmentPresetMinMax: MinMax; equipmentPresetMinMax: MinMax;
} }
/** Custom trader data needed client side for things such as the clothing service */ /** Custom trader data needed client side for things such as the clothing service */
export interface ModdedTraders { export interface IModdedTraders {
/** Trader Ids to enable the clothing service for */ /** Trader Ids to enable the clothing service for */
clothingService: string[]; clothingService: string[];
} }

View File

@ -5,7 +5,7 @@ import { IBaseConfig } from "@spt/models/spt/config/IBaseConfig";
export interface IWeatherConfig extends IBaseConfig { export interface IWeatherConfig extends IBaseConfig {
kind: "spt-weather"; kind: "spt-weather";
acceleration: number; acceleration: number;
weather: Weather; weather: IWeatherValues;
seasonDates: ISeasonDateTimes[]; seasonDates: ISeasonDateTimes[];
overrideSeason?: Season; overrideSeason?: Season;
} }
@ -17,7 +17,9 @@ export interface ISeasonDateTimes {
endDay: number; endDay: number;
endMonth: number; endMonth: number;
} }
export interface Weather { export interface IWeatherValues {
/** How many hours to generate weather data into the future */
generateWeatherAmountHours: number;
clouds: WeatherSettings<string>; clouds: WeatherSettings<string>;
windSpeed: WeatherSettings<number>; windSpeed: WeatherSettings<number>;
windDirection: WeatherSettings<WindDirection>; windDirection: WeatherSettings<WindDirection>;
@ -25,8 +27,14 @@ export interface Weather {
rain: WeatherSettings<number>; rain: WeatherSettings<number>;
rainIntensity: MinMax; rainIntensity: MinMax;
fog: WeatherSettings<string>; fog: WeatherSettings<string>;
temp: MinMax; temp: Record<Season, ITempDayNight>;
pressure: MinMax; pressure: MinMax;
/** Length of each weather period */
timePeriod: WeatherSettings<number>;
}
export interface ITempDayNight {
day: MinMax;
night: MinMax;
} }
export interface WeatherSettings<T> { export interface WeatherSettings<T> {
values: T[]; values: T[];

View File

@ -1,5 +1,5 @@
import { IItem } from "@spt/models/eft/common/tables/IItem"; import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ISystemData, IUserDialogInfo, MessageContentRagfair } from "@spt/models/eft/profile/ISptProfile"; import { IMessageContentRagfair, ISystemData, IUserDialogInfo } from "@spt/models/eft/profile/ISptProfile";
import { MessageType } from "@spt/models/enums/MessageType"; import { MessageType } from "@spt/models/enums/MessageType";
import { Traders } from "@spt/models/enums/Traders"; import { Traders } from "@spt/models/enums/Traders";
export interface ISendMessageDetails { export interface ISendMessageDetails {
@ -24,7 +24,7 @@ export interface ISendMessageDetails {
/** Optional - ragfair related */ /** Optional - ragfair related */
systemData?: ISystemData; systemData?: ISystemData;
/** Optional - Used by ragfair messages */ /** Optional - Used by ragfair messages */
ragfairDetails?: MessageContentRagfair; ragfairDetails?: IMessageContentRagfair;
/** OPTIONAL - allows modification of profile settings via mail */ /** OPTIONAL - allows modification of profile settings via mail */
profileChangeEvents?: IProfileChangeEvent[]; profileChangeEvents?: IProfileChangeEvent[];
} }

View File

@ -1,9 +1,9 @@
export interface ScavCaseRewardCountsAndPrices { export interface IScavCaseRewardCountsAndPrices {
Common: RewardCountAndPriceDetails; Common: IRewardCountAndPriceDetails;
Rare: RewardCountAndPriceDetails; Rare: IRewardCountAndPriceDetails;
Superrare: RewardCountAndPriceDetails; Superrare: IRewardCountAndPriceDetails;
} }
export interface RewardCountAndPriceDetails { export interface IRewardCountAndPriceDetails {
minCount: number; minCount: number;
maxCount: number; maxCount: number;
minPriceRub: number; minPriceRub: number;

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