Updated types

This commit is contained in:
Dev 2024-11-17 17:47:25 +00:00
parent 07483af828
commit 55ec8d0db4
1736 changed files with 13776 additions and 5684 deletions

View File

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

View File

@ -21,7 +21,7 @@ export declare class InraidCallbacks {
*/
registerPlayer(url: string, info: IRegisterPlayerRequestData, sessionID: string): INullResponseData;
/**
* Handle raid/profile/save
* Handle raid/profile/scavsave
* @param url
* @param info Save progress request
* @param sessionID Session id

View File

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

View File

@ -1,5 +1,6 @@
import { MatchController } from "@spt/controllers/MatchController";
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
import { IMetrics } from "@spt/models/eft/common/tables/IMatch";
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
import { IEndLocalRaidRequestData } from "@spt/models/eft/match/IEndLocalRaidRequestData";
@ -53,7 +54,7 @@ export declare class MatchCallbacks {
/** Handle match/group/start_game */
joinMatch(url: string, info: IMatchGroupStartGameRequest, sessionID: string): IGetBodyResponseData<IProfileStatusResponse>;
/** Handle client/getMetricsConfig */
getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData<string>;
getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData<IMetrics>;
/**
* Called periodically while in a group
* Handle client/match/group/status

View File

@ -3,7 +3,7 @@ export declare enum ContextVariableType {
SESSION_ID = 0,
/** Currently acive raid information */
RAID_CONFIGURATION = 1,
/** Timestamp when client first connected */
/** SessionID + Timestamp when client first connected, has _ between values */
CLIENT_START_TIMESTAMP = 2,
/** When player is loading into map and loot is requested */
REGISTER_PLAYER_REQUEST = 3,

View File

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

View File

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

View File

@ -28,13 +28,13 @@ export declare class InraidController {
*/
addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void;
/**
* Handle raid/profile/save
* Handle raid/profile/scavsave
* Save profile state to disk
* Handles pmc/pscav
* @param offraidData post-raid request data
* @param offraidProfileData Post-raid scav profile data
* @param sessionID Session id
*/
savePostRaidProfileForScav(offraidData: IScavSaveRequestData, sessionID: string): void;
savePostRaidProfileForScav(offraidProfileData: IScavSaveRequestData, sessionID: string): void;
/**
* Get the inraid config from configs/inraid.json
* @returns InRaid Config

View File

@ -176,6 +176,11 @@ export declare class InsuranceController {
* @returns void
*/
protected sendMail(sessionID: string, insurance: IInsurance): void;
protected IsMapLabsAndInsuranceDisabled(insurance: IInsurance, labsId?: string): boolean;
/**
* Update IInsurance object with new messageTemplateId and wipe out items array data
*/
protected handleLabsInsurance(traderDialogMessages: Record<string, string[]>, insurance: IInsurance): void;
/**
* Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance.

View File

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

View File

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

View File

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

View File

@ -139,6 +139,13 @@ export declare class BotEquipmentModGenerator {
* @returns itemHelper.getItem() result
*/
protected chooseModToPutIntoSlot(request: IModToSpawnRequest): [boolean, ITemplateItem] | undefined;
/**
* Given the passed in array of magaizne tpls, look up the min size set in config and return only those that have that size or larger
* @param modSpawnRequest Request data
* @param modPool Pool of magazine tpls to filter
* @returns Filtered pool of magazine tpls
*/
protected getFilterdMagazinePoolByCapacity(modSpawnRequest: IModToSpawnRequest, modPool: string[]): string[];
/**
* Choose a weapon mod tpl for a given slot from a pool of choices
* Checks chosen tpl is compatible with all existing weapon items

View File

@ -1,8 +1,10 @@
import { BotInventoryGenerator } from "@spt/generators/BotInventoryGenerator";
import { BotLevelGenerator } from "@spt/generators/BotLevelGenerator";
import { BotGeneratorHelper } from "@spt/helpers/BotGeneratorHelper";
import { BotHelper } from "@spt/helpers/BotHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { MinMax } from "@spt/models/common/MinMax";
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 { IBotGenerationDetails } from "@spt/models/spt/bots/BotGenerationDetails";
@ -31,6 +33,7 @@ export declare class BotGenerator {
protected botEquipmentFilterService: BotEquipmentFilterService;
protected weightedRandomHelper: WeightedRandomHelper;
protected botHelper: BotHelper;
protected botGeneratorHelper: BotGeneratorHelper;
protected seasonalEventService: SeasonalEventService;
protected itemFilterService: ItemFilterService;
protected botNameService: BotNameService;
@ -38,7 +41,7 @@ export declare class BotGenerator {
protected cloner: ICloner;
protected botConfig: IBotConfig;
protected pmcConfig: IPmcConfig;
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, profileHelper: ProfileHelper, databaseService: DatabaseService, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, seasonalEventService: SeasonalEventService, itemFilterService: ItemFilterService, botNameService: BotNameService, configServer: ConfigServer, cloner: ICloner);
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, profileHelper: ProfileHelper, databaseService: DatabaseService, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botGeneratorHelper: BotGeneratorHelper, seasonalEventService: SeasonalEventService, itemFilterService: ItemFilterService, botNameService: BotNameService, configServer: ConfigServer, cloner: ICloner);
/**
* Generate a player scav bot object
* @param role e.g. assault / pmcbot
@ -48,7 +51,7 @@ export declare class BotGenerator {
*/
generatePlayerScav(sessionId: string, role: string, difficulty: string, botTemplate: IBotType): IBotBase;
/**
* Create 1 bots of the type/side/difficulty defined in botGenerationDetails
* Create 1 bot of the type/side/difficulty defined in botGenerationDetails
* @param sessionId Session id
* @param botGenerationDetails details on how to generate bots
* @returns constructed bot
@ -76,6 +79,36 @@ export declare class BotGenerator {
* @returns IBotBase object
*/
protected generateBot(sessionId: string, bot: IBotBase, botJsonTemplate: IBotType, botGenerationDetails: IBotGenerationDetails): IBotBase;
/**
* Get exp for kill by bot difficulty
* @param experience Dict of difficulties and experience
* @param botDifficulty the killed bots difficulty
* @param role Role of bot (optional, used for error logging)
* @returns Experience for kill
*/
protected getExperienceRewardForKillByDifficulty(experience: Record<string, MinMax>, botDifficulty: string, role: string): number;
/**
* Get the standing value change when player kills a bot
* @param standingForKill Dictionary of standing values keyed by bot difficulty
* @param botDifficulty Difficulty of bot to look up
* @param role Role of bot (optional, used for error logging)
* @returns Standing change value
*/
protected getStandingChangeForKillByDifficulty(standingForKill: Record<string, number>, botDifficulty: string, role: string): number;
/**
* Get the agressor bonus value when player kills a bot
* @param standingForKill Dictionary of standing values keyed by bot difficulty
* @param botDifficulty Difficulty of bot to look up
* @param role Role of bot (optional, used for error logging)
* @returns Standing change value
*/
protected getAgressorBonusByDifficulty(aggressorBonus: Record<string, number>, botDifficulty: string, role: string): number;
/**
* Set weighting of flagged equipment to 0
* @param botJsonTemplate Bot data to adjust
* @param botGenerationDetails Generation details of bot
*/
protected filterBlacklistedGear(botJsonTemplate: IBotType, botGenerationDetails: IBotGenerationDetails): void;
protected addAdditionalPocketLootWeightsForUnheardBot(botJsonTemplate: IBotType): void;
/**
* Remove items from item.json/lootableItemBlacklist from bots inventory

View File

@ -71,14 +71,6 @@ export declare class BotLootGenerator {
* @param botRole Role of bot (pmcBEAR/pmcUSEC)
*/
protected addForcedMedicalItemsToPmcSecure(botInventory: PmcInventory, botRole: string): void;
/**
* Get a biased random number
* @param min Smallest size
* @param max Biggest size
* @param nValue Value to bias choice
* @returns Chosen number
*/
protected getRandomisedCount(min: number, max: number, nValue: number): number;
/**
* Take random items from a pool and add to an inventory until totalItemCount or totalValueLimit or space limit is reached
* @param pool Pool of items to pick from with weight

View File

@ -3,7 +3,7 @@ import { ItemHelper } from "@spt/helpers/ItemHelper";
import { PresetHelper } from "@spt/helpers/PresetHelper";
import { IContainerMinMax, IStaticAmmoDetails, IStaticContainer, IStaticContainerData, IStaticForcedProps, IStaticLootDetails } from "@spt/models/eft/common/ILocation";
import { ILocationBase } from "@spt/models/eft/common/ILocationBase";
import { ILooseLoot, ISpawnpoint, ISpawnpointTemplate, ISpawnpointsForced } from "@spt/models/eft/common/ILooseLoot";
import { ILooseLoot, ISpawnpointTemplate, ISpawnpointsForced } from "@spt/models/eft/common/ILooseLoot";
import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger";
@ -124,7 +124,7 @@ export declare class LocationLootGenerator {
* @param forcedSpawnPoints forced Forced loot locations that must be added
* @param locationName Name of map currently having force loot created for
*/
protected addForcedLoot(lootLocationTemplates: ISpawnpointTemplate[], forcedSpawnPoints: ISpawnpointsForced[], locationName: string): void;
protected addForcedLoot(lootLocationTemplates: ISpawnpointTemplate[], forcedSpawnPoints: ISpawnpointsForced[], locationName: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>): void;
/**
* Create array of item (with child items) and return
* @param chosenComposedKey Key we want to look up items for
@ -132,7 +132,7 @@ export declare class LocationLootGenerator {
* @param staticAmmoDist ammo distributions
* @returns IContainerItem
*/
protected createDynamicLootItem(chosenComposedKey: string, spawnPoint: ISpawnpoint, staticAmmoDist: Record<string, IStaticAmmoDetails[]>): IContainerItem;
protected createDynamicLootItem(chosenComposedKey: string, items: IItem[], staticAmmoDist: Record<string, IStaticAmmoDetails[]>): IContainerItem;
/**
* Find an item in array by its _tpl, handle differently if chosenTpl is a weapon
* @param items Items array to search

View File

@ -149,12 +149,13 @@ export declare class RagfairOfferGenerator {
protected removeBannedPlatesFromPreset(presetWithChildren: IItem[], plateSettings: IArmorPlateBlacklistSettings): boolean;
/**
* Create one flea offer for a specific item
* @param sellerId Id of seller
* @param itemWithChildren Item to create offer for
* @param isPreset Is item a weapon preset
* @param itemDetails raw db item details
* @param itemToSellDetails Raw db item details
* @returns Item array
*/
protected createSingleOfferForItem(itemWithChildren: IItem[], isPreset: boolean, itemDetails: [boolean, ITemplateItem]): Promise<void>;
protected createSingleOfferForItem(sellerId: string, itemWithChildren: IItem[], isPreset: boolean, itemToSellDetails: ITemplateItem): Promise<void>;
/**
* Generate trader offers on flea using the traders assort data
* @param traderID Trader to generate offers for

View File

@ -66,5 +66,5 @@ export declare class WeatherGenerator {
protected getWeightedWindSpeed(): number;
protected getWeightedFog(): number;
protected getWeightedRain(): number;
protected getRandomFloat(node: string): number;
protected getRandomFloat(node: string, precision?: number): number;
}

View File

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

View File

@ -41,12 +41,16 @@ export declare class InRaidHelper {
*/
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
* Only removes property if item had FiR when entering raid
* @param postRaidProfile profile to update items for
* @returns Updated profile with SpawnedInSession removed
* Remove FiR status from items
* @param items Items to process
*/
removeSpawnedInSessionPropertyFromItems(postRaidProfile: IPmcData): IPmcData;
protected removeFiRStatusFromCertainItems(items: IItem[]): void;
/**
* Add items from one parameter into another
* @param itemsToAdd Items we want to add
* @param serverInventoryItems Location to add items to
*/
protected addItemsToInventory(itemsToAdd: IItem[], serverInventoryItems: IItem[]): void;
/**
* Clear PMC inventory of all items except those that are exempt
* Used post-raid to remove items after death

View File

@ -536,6 +536,11 @@ export declare class ItemHelper {
*/
getRandomisedAmmoStackSize(ammoItemTemplate: ITemplateItem, maxLimit?: number): number;
getItemBaseType(tpl: string, rootOnly?: boolean): string;
/**
* Remove FiR status from passed in items
* @param items Items to update FiR status of
*/
removeSpawnedInSessionPropertyFromItems(items: IItem[]): void;
}
declare namespace ItemHelper {
interface IItemSize {

View File

@ -12,6 +12,7 @@ import { IItem } from "@spt/models/eft/common/tables/IItem";
import { IQuest, IQuestCondition, IQuestReward } from "@spt/models/eft/common/tables/IQuest";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { IAcceptQuestRequestData } from "@spt/models/eft/quests/IAcceptQuestRequestData";
import { ICompleteQuestRequestData } from "@spt/models/eft/quests/ICompleteQuestRequestData";
import { IFailQuestRequestData } from "@spt/models/eft/quests/IFailQuestRequestData";
import { QuestStatus } from "@spt/models/enums/QuestStatus";
import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig";
@ -22,6 +23,7 @@ import { DatabaseService } from "@spt/services/DatabaseService";
import { LocaleService } from "@spt/services/LocaleService";
import { LocalisationService } from "@spt/services/LocalisationService";
import { MailSendService } from "@spt/services/MailSendService";
import { PlayerService } from "@spt/services/PlayerService";
import { SeasonalEventService } from "@spt/services/SeasonalEventService";
import { HashUtil } from "@spt/utils/HashUtil";
import { TimeUtil } from "@spt/utils/TimeUtil";
@ -44,10 +46,11 @@ export declare class QuestHelper {
protected traderHelper: TraderHelper;
protected presetHelper: PresetHelper;
protected mailSendService: MailSendService;
protected playerService: PlayerService;
protected configServer: ConfigServer;
protected cloner: ICloner;
protected questConfig: IQuestConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseService: DatabaseService, questConditionHelper: QuestConditionHelper, eventOutputHolder: EventOutputHolder, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, seasonalEventService: SeasonalEventService, traderHelper: TraderHelper, presetHelper: PresetHelper, mailSendService: MailSendService, configServer: ConfigServer, cloner: ICloner);
constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseService: DatabaseService, questConditionHelper: QuestConditionHelper, eventOutputHolder: EventOutputHolder, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, seasonalEventService: SeasonalEventService, traderHelper: TraderHelper, presetHelper: PresetHelper, mailSendService: MailSendService, playerService: PlayerService, configServer: ConfigServer, cloner: ICloner);
/**
* Get status of a quest in player profile by its id
* @param pmcData Profile to search
@ -260,6 +263,13 @@ export declare class QuestHelper {
* @returns Array of reward objects
*/
applyQuestReward(profileData: IPmcData, questId: string, state: QuestStatus, sessionId: string, questResponse: IItemEventRouterResponse): IItem[];
/**
* Does the provided quest reward have a game version requirement to be given and does it match
* @param reward Reward to check
* @param gameVersion Version of game to check reward against
* @returns True if it has requirement, false if it doesnt pass check
*/
protected questRewardIsForGameEdition(reward: IQuestReward, gameVersion: string): boolean;
/**
* WIP - Find hideout craft id and add to unlockedProductionRecipe array in player profile
* also update client response recipeUnlocked array with craft id
@ -302,4 +312,63 @@ export declare class QuestHelper {
* @returns Hours item will be available for
*/
getMailItemRedeemTimeHoursForProfile(pmcData: IPmcData): number;
completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle client/quest/list
* Get all quests visible to player
* Exclude quests with incomplete preconditions (level/loyalty)
* @param sessionID session id
* @returns array of IQuest
*/
getClientQuests(sessionID: string): IQuest[];
/**
* Return a list of quests that would fail when supplied quest is completed
* @param completedQuestId quest completed id
* @returns array of IQuest objects
*/
protected getQuestsFromProfileFailedByCompletingQuest(completedQuestId: string, pmcProfile: IPmcData): IQuest[];
/**
* Fail the provided quests
* Update quest in profile, otherwise add fresh quest object with failed status
* @param sessionID session id
* @param pmcData player profile
* @param questsToFail quests to fail
* @param output Client output
*/
protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[], output: IItemEventRouterResponse): void;
/**
* Send a popup to player on successful completion of a quest
* @param sessionID session id
* @param pmcData Player profile
* @param completedQuestId Completed quest id
* @param questRewards Rewards given to player
*/
protected sendSuccessDialogMessageOnQuestComplete(sessionID: string, pmcData: IPmcData, completedQuestId: string, questRewards: IItem[]): void;
/**
* Look for newly available quests after completing a quest with a requirement to wait x minutes (time-locked) before being available and add data to profile
* @param pmcData Player profile to update
* @param quests Quests to look for wait conditions in
* @param completedQuestId Quest just completed
*/
protected addTimeLockedQuestsToProfile(pmcData: IPmcData, quests: IQuest[], completedQuestId: string): void;
/**
* Remove a quest entirely from a profile
* @param sessionId Player id
* @param questIdToRemove Qid of quest to remove
*/
protected removeQuestFromScavProfile(sessionId: string, questIdToRemove: string): void;
/**
* Return quests that have different statuses
* @param preQuestStatusus Quests before
* @param postQuestStatuses Quests after
* @returns QuestStatusChange array
*/
protected getQuestsWithDifferentStatuses(preQuestStatusus: IQuestStatus[], postQuestStatuses: IQuestStatus[]): IQuestStatus[] | undefined;
/**
* Does a provided quest have a level requirement equal to or below defined level
* @param quest Quest to check
* @param playerLevel level of player to test against quest
* @returns true if quest can be seen/accepted by player of defined level
*/
protected playerLevelFulfillsQuestRequirement(quest: IQuest, playerLevel: number): boolean;
}

View File

@ -39,7 +39,7 @@ export declare class TraderHelper {
* @param sessionID Players id
* @returns Trader base
*/
getTrader(traderID: string, sessionID: string): ITraderBase | undefined;
getTrader(traderID: string, sessionID: string): ITraderBase | any;
/**
* Get all assort data for a particular trader
* @param traderId Trader to get assorts for

View File

@ -3,12 +3,25 @@ import { IItem } from "@spt/models/eft/common/tables/IItem";
export interface IGlobals {
time: number;
config: IConfig;
LocationInfection: ILocationInfection;
bot_presets: IBotPreset[];
AudioSettings: IAudioSettings;
EnvironmentSettings: IEnvironmentSettings;
BotWeaponScatterings: IBotWeaponScattering[];
ItemPresets: Record<string, IPreset>;
}
export interface ILocationInfection {
Interchange: number;
Lighthouse: number;
RezervBase: number;
Sandbox: number;
Shoreline: number;
TarkovStreets: number;
Woods: number;
bigmap: number;
factory4: number;
laboratory: number;
}
export interface IArtilleryShelling {
ArtilleryMapsConfigs: Record<string, IArtilleryMapSettings>;
ProjectileExplosionParams: IProjectileExplosionParams;
@ -96,6 +109,7 @@ export interface IConfig {
MaxBotsAliveOnMapPvE: number;
SavagePlayCooldown: number;
SavagePlayCooldownNdaFree: number;
SeasonActivity: ISeasonActivity;
MarksmanAccuracy: number;
SavagePlayCooldownDevelop: number;
TODSkyDate: string;
@ -182,6 +196,14 @@ export interface IConfig {
Ballistic: IBallistic;
RepairSettings: IRepairSettings;
}
export interface ISeasonActivity {
InfectionHalloween: ISeasonActivityHalloween;
}
export interface ISeasonActivityHalloween {
DisplayUIEnabled: boolean;
Enabled: boolean;
ZombieBleedMul: number;
}
export interface IEnvironmentSetting2 {
EnvironmentUIData: IEnvironmentUIData;
}
@ -262,6 +284,7 @@ export interface ITransitSettings {
PercentageOfMissingEnergyRestore: number;
PercentageOfMissingHealthRestore: number;
PercentageOfMissingWaterRestore: number;
RestoreHealthOnDestroyedParts: boolean;
ScavPriceMod: number;
UsecPriceMod: number;
active: boolean;
@ -634,6 +657,12 @@ export interface IEffects {
HeavyBleeding: IHeavyBleeding;
LightBleeding: ILightBleeding;
BodyTemperature: IBodyTemperature;
ZombieInfection: IZombieInfection;
}
export interface IZombieInfection {
Dehydration: number;
HearingDebuffPercentage: number;
СumulativeTime: number;
}
export interface IExistence {
EnergyLoopTime: number;
@ -1203,6 +1232,7 @@ export interface IInsurance {
CoefOfSendingMessageTime: number;
CoefOfHavingMarkOfUnknown: number;
EditionSendingMessageTime: Record<string, IMessageSendTImeMultipler>;
OnlyInDeathCase: boolean;
}
export interface IMessageSendTImeMultipler {
multiplier: number;

View File

@ -77,6 +77,7 @@ export interface ILocationBase {
EscapeTimeLimit: number;
EscapeTimeLimitCoop: number;
EscapeTimeLimitPVE: number;
Events: ILocationEvents;
exit_access_time: number;
ForceOnlineRaidInPVE: boolean;
exit_count: number;
@ -99,6 +100,7 @@ export interface ILocationBase {
export interface ITransit {
activateAfterSec: string;
active: boolean;
name: string;
conditions: string;
description: string;
id: number;
@ -271,10 +273,36 @@ export interface IWave {
slots_min: number;
time_max: number;
time_min: number;
/** OPTIONAL - Needs to be unique - Used by custom wave service to ensure same wave isnt added multiple times */
sptId?: string;
ChanceGroup?: number;
/** 'pve' and/or 'regular' */
SpawnMode: string[];
}
export interface ILocationEvents {
Halloween2024: IHalloween2024;
}
export interface IHalloween2024 {
CrowdAttackBlockRadius: number;
CrowdAttackSpawnParams: CrowdAttackSpawnParam[];
CrowdCooldownPerPlayerSec: number;
CrowdsLimit: number;
InfectedLookCoeff: number;
MaxCrowdAttackSpawnLimit: number;
MinInfectionPercentage: number;
MinSpawnDistToPlayer: number;
TargetPointSearchRadiusLimit: number;
ZombieCallDeltaRadius: number;
ZombieCallPeriodSec: number;
ZombieCallRadiusLimit: number;
ZombieMultiplier: number;
InfectionPercentage: number;
}
export interface CrowdAttackSpawnParam {
Difficulty: string;
Role: string;
Weight: number;
}
export declare enum WildSpawnType {
ASSAULT = "assault",
MARKSMAN = "marksman",

View File

@ -93,6 +93,7 @@ export interface IBotInfoSettings {
Experience: number;
StandingForKill: number;
AggressorBonus: number;
UseSimpleAnimator: boolean;
}
export interface IBan {
banType: BanType;
@ -218,6 +219,7 @@ export interface IVictim {
Level: number;
Weapon: string;
Role: string;
Location: string;
}
export interface ISessionCounters {
Items: ICounterKeyValue[];

View File

@ -97,10 +97,14 @@ export interface IDifficultyCategories {
Shoot: Record<string, string | number | boolean>;
}
export interface IExperience {
aggressorBonus: number;
/** key = bot difficulty */
aggressorBonus: Record<string, number>;
level: MinMax;
reward: MinMax;
standingForKill: number;
/** key = bot difficulty */
reward: Record<string, MinMax>;
/** key = bot difficulty */
standingForKill: Record<string, number>;
useSimpleAnimator: boolean;
}
export interface IGeneration {
items: IGenerationWeightingItems;

View File

@ -42,12 +42,18 @@ export interface IUpd {
SideEffect?: IUpdSideEffect;
RepairKit?: IUpdRepairKit;
CultistAmulet?: IUpdCultistAmulet;
PinLockState?: PinLockState;
}
export declare enum PinLockState {
FREE = "Free",
LOCKED = "Locked",
PINNED = "Pinned"
}
export interface IUpdBuff {
rarity: string;
buffType: string;
value: number;
thresholdDurability?: number;
Rarity: string;
BuffType: string;
Value: number;
ThresholdDurability?: number;
}
export interface IUpdTogglable {
On: boolean;

View File

@ -88,18 +88,23 @@ export interface IBarterScheme {
}
export interface ISuit {
_id: string;
externalObtain: boolean;
internalObtain: boolean;
isHiddenInPVE: boolean;
tid: string;
suiteId: string;
isActive: boolean;
requirements: ISuitRequirements;
}
export interface ISuitRequirements {
achievementRequirements: string[];
loyaltyLevel: number;
profileLevel: number;
standing: number;
skillRequirements: string[];
questRequirements: string[];
itemRequirements: ItemRequirement[];
requiredTid: string;
}
export interface ItemRequirement {
count: number;

View File

@ -17,6 +17,7 @@ export interface IHideoutProduction {
continuous: boolean;
count: number;
productionLimitCount: number;
isCodeProduction: boolean;
}
export interface IRequirement extends IRequirementBase {
templateId?: string;

View File

@ -1,4 +1,3 @@
import { IPostRaidPmcData } from "@spt/models/eft/common/IPmcData";
export interface IScavSaveRequestData {
profile: IPostRaidPmcData;
export interface IScavSaveRequestData extends IPostRaidPmcData {
}

View File

@ -0,0 +1,8 @@
import { PinLockState } from "../common/tables/IItem";
export interface IPinOrLockItemRequest {
Action: "PinLock";
/** Id of item being pinned */
Item: string;
/** "Pinned"/"Locked"/"Free" */
State: PinLockState;
}

View File

@ -13,14 +13,15 @@ export interface IEndLocalRaidRequestData {
}
export interface IEndRaidResult {
profile: IPmcData;
/** "Survived/Transit etc" */
result: string;
ExitStatus: ExitStatus;
/** "Survived/Transit" etc */
result: ExitStatus;
killerId: string;
killerAid: string;
/** "Gate 3" etc */
exitName: string;
inSession: boolean;
favorite: boolean;
/** Seconds in raid */
playTime: number;
}
export interface ILocationTransit {
@ -33,6 +34,8 @@ export interface ILocationTransit {
raidMode: string;
side: string;
dayTime: string;
/** The location player last visited */
sptLastVisitedLocation: string;
}
export interface ITransitProfile {
_id: string;

View File

@ -1,7 +1,8 @@
export declare enum ExitStatus {
SURVIVED = 0,
KILLED = 1,
LEFT = 2,
RUNNER = 3,
MISSINGINACTION = 4
SURVIVED = "Survived",
KILLED = "Killed",
LEFT = "Left",
RUNNER = "Runner",
MISSINGINACTION = "MissingInAction",
TRANSIT = "Transit"
}

View File

@ -25,5 +25,6 @@ export declare enum ItemEventActions {
REMOVE_EQUIPMENT_BUILD = "RemoveEquipmentBuild",
REDEEM_PROFILE_REWARD = "RedeemProfileReward",
SET_FAVORITE_ITEMS = "SetFavoriteItems",
QUEST_FAIL = "QuestFail"
QUEST_FAIL = "QuestFail",
PIN_LOCK = "PinLock"
}

View File

@ -3,5 +3,7 @@ export declare enum Season {
AUTUMN = 1,
WINTER = 2,
SPRING = 3,
STORM = 4
AUTUMN_LATE = 4,
SPRING_EARLY = 5,
STORM = 6
}

View File

@ -4,5 +4,5 @@ export declare enum SeasonalEventType {
HALLOWEEN = "Halloween",
NEW_YEARS = "NewYears",
PROMO = "Promo",
SNOW = "Snow"
APRIL_FOOLS = "AprilFools"
}

View File

@ -54,5 +54,10 @@ export declare enum WildSpawnTypeNumber {
SKIER = 53,
SECTANTPREDVESTNIK = 57,
SECTANTPRIZRAK = 58,
SECTANTONI = 59
SECTANTONI = 59,
INFECTEDASSAULT = 60,
INFECTEDPMC = 61,
INFECTEDCIVIL = 62,
INFECTEDLABORANT = 63,
INFECTEDTAGILLA = 64
}

View File

@ -2,12 +2,13 @@ import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { ModSpawn } from "@spt/models/enums/ModSpawn";
import { IBotData, IWeaponStats } from "@spt/models/spt/bots/IGenerateWeaponRequest";
import { IEquipmentFilterDetails } from "@spt/models/spt/config/IBotConfig";
import { IEquipmentFilterDetails, IRandomisationDetails } from "@spt/models/spt/config/IBotConfig";
export interface IModToSpawnRequest {
/** Slot mod will fit into */
modSlot: string;
/** Will generate a randomised mod pool if true */
isRandomisableSlot: boolean;
randomisationSettings: IRandomisationDetails;
/** Parent slot the item will be a part of */
botWeaponSightWhitelist: Record<string, string[]>;
/** Blacklist to prevent mods from being picked */

View File

@ -160,6 +160,8 @@ export interface IRandomisationDetails {
/** Equipment mod chances */
equipmentMods?: Record<string, number>;
nighttimeChanges?: INighttimeChanges;
/** Key = weapon tpl, value = min size of magaizne allowed */
minimumMagazineSize?: Record<string, number>;
}
export interface INighttimeChanges {
/** Applies changes to values stored in equipmentMods */
@ -169,9 +171,11 @@ export interface IEquipmentFilterDetails {
/** Between what levels do these equipment filter setting apply to */
levelRange: MinMax;
/** Key: mod slot name e.g. mod_magazine, value: item tpls */
equipment: Record<string, string[]>;
equipment?: Record<string, string[]>;
/** Key: equipment slot name e.g. FirstPrimaryWeapon, value: item tpls */
gear?: Record<string, string[]>;
/** Key: cartridge type e.g. Caliber23x75, value: item tpls */
cartridge: Record<string, string[]>;
cartridge?: Record<string, string[]>;
}
export interface IWeightingAdjustmentDetails {
/** Between what levels do these weight settings apply to */

View File

@ -71,6 +71,7 @@ export interface IChatbotFeatures {
commandoEnabled: boolean;
commandoFeatures: ICommandoFeatures;
commandUseLimits: Record<string, number>;
ids: Record<string, string>;
}
export interface ICommandoFeatures {
giveCommandEnabled: boolean;

View File

@ -7,8 +7,10 @@ export interface IInsuranceConfig extends IBaseConfig {
blacklistedEquipment: string[];
/** Some slots should always be removed, e.g. 'cartridges' */
slotIdsToAlwaysRemove: string[];
/** Override to control how quickly insurance is processed/returned in second */
/** Override to control how quickly insurance is processed/returned in seconds */
returnTimeOverrideSeconds: number;
/** Override to control how long insurance returns stay in mail before expiring - in seconds */
storageTimeOverrideSeconds: number;
/** How often server should process insurance in seconds */
runIntervalSeconds: number;
minAttachmentRoublePriceToBeTaken: number;

View File

@ -9,5 +9,11 @@ export interface IItemConfig extends IBaseConfig {
rewardItemBlacklist: string[];
/** Items that can only be found on bosses */
bossItems: string[];
handbookPriceOverride: Record<string, number>;
handbookPriceOverride: Record<string, IHandbookPriceOverride>;
}
export interface IHandbookPriceOverride {
/** Price in roubles */
price: number;
/** NOT parentId from items.json, but handbook.json */
parentId: string;
}

View File

@ -3,8 +3,6 @@ import { IBossLocationSpawn, IWave } from "@spt/models/eft/common/ILocationBase"
import { IBaseConfig } from "@spt/models/spt/config/IBaseConfig";
export interface ILocationConfig extends IBaseConfig {
kind: "spt-location";
/** Waves with a min/max of the same value don't spawn any bots, bsg only spawn the difference between min and max */
fixEmptyBotWavesSettings: IFixEmptyBotWavesSettings;
/** Rogues are classified as bosses and spawn immediatly, this can result in no scavs spawning, delay rogues spawning to allow scavs to spawn first */
rogueLighthouseSpawnTimeSettings: IRogueLighthouseSpawnTimeSettings;
/** When a map has hit max alive bots, any wave that should spawn will be reduced to 1 bot in size and placed in a spawn queue, this splits waves into smaller sizes to reduce the impact of this behaviour */
@ -44,6 +42,14 @@ export interface ILocationConfig extends IBaseConfig {
scavRaidTimeSettings: IScavRaidTimeSettings;
/** Settings to adjust mods for lootable equipment in raid */
equipmentLootSettings: IEquipmentLootSettings;
/** min percentage to set raider spawns at, -1 makes no changes */
reserveRaiderSpawnChanceOverrides: IReserveRaiderSpawnChanceOverrides;
/** Map ids players cannot visit */
nonMaps: string[];
}
export interface IReserveRaiderSpawnChanceOverrides {
nonTriggered: number;
triggered: number;
}
export interface IEquipmentLootSettings {
modSpawnChancePercent: Record<string, number>;

View File

@ -15,7 +15,7 @@ export interface IQuestConfig extends IBaseConfig {
usecOnlyQuests: string[];
/** Quests that the keyed game version do not see/access */
profileBlacklist: Record<string, string[]>;
/** Quests that only the keyed game version can see/access */
/** key=questid, gameversions that can see/access quest */
profileWhitelist: Record<string, string[]>;
}
export interface IPlayerTypeQuestIds {

View File

@ -50,6 +50,8 @@ export interface IDynamic {
priceRanges: IPriceRanges;
/** Should default presets to listed only or should non-standard presets found in globals.json be listed too */
showDefaultPresetsOnly: boolean;
/** Tpls that should not use the variable price system when their quality is < 100% (lower dura/uses = lower price) */
ignoreQualityPriceVarianceBlacklist: string[];
endTimeSeconds: MinMax;
/** Settings to control the durability range of item items listed on flea */
condition: Condition;
@ -90,6 +92,8 @@ export interface IBarterDetails {
priceRangeVariancePercent: number;
/** Min rouble price for an offer to be considered for turning into a barter */
minRoubleCostToBecomeBarter: number;
/** Should barter offers only single stack */
makeSingleStackOnly: boolean;
/** Item Tpls to never be turned into a barter */
itemTypeBlacklist: string[];
}

View File

@ -1,4 +1,4 @@
import { IBossLocationSpawn } from "@spt/models/eft/common/ILocationBase";
import { IAdditionalHostilitySettings, IBossLocationSpawn, IWave } from "@spt/models/eft/common/ILocationBase";
import { SeasonalEventType } from "@spt/models/enums/SeasonalEventType";
import { IBaseConfig } from "@spt/models/spt/config/IBaseConfig";
export interface ISeasonalEventConfig extends IBaseConfig {
@ -9,15 +9,26 @@ export interface ISeasonalEventConfig extends IBaseConfig {
events: ISeasonalEvent[];
eventBotMapping: Record<string, string>;
eventBossSpawns: Record<string, Record<string, IBossLocationSpawn[]>>;
eventWaves: Record<string, Record<string, IWave[]>>;
gifterSettings: IGifterSetting[];
/** key = event, second key = map name */
hostilitySettingsForEvent: Record<string, Record<string, IAdditionalHostilitySettings[]>>;
}
export interface ISeasonalEvent {
enabled: boolean;
name: string;
type: SeasonalEventType;
startDay: number;
startMonth: number;
endDay: number;
endMonth: number;
settings?: Record<string, any>;
}
export interface IZombieSettings {
enabled: boolean;
mapInfectionAmount: Record<string, number>;
disableBosses: string[];
disableWaves: string[];
}
export interface IGifterSetting {
map: string;

View File

@ -47,6 +47,10 @@ export interface IFenceConfig {
blacklist: string[];
coopExtractGift: ICoopExtractReward;
btrDeliveryExpireHours: number;
/** Smallest value player rep with fence can fall to */
playerRepMin: number;
/** Highest value player rep with fence can climb to */
playerRepMax: number;
}
export interface IItemDurabilityCurrentMax {
current: MinMax;

View File

@ -8,6 +8,6 @@ export declare class ImageRouter {
protected httpFileUtil: HttpFileUtil;
constructor(vfs: VFS, imageRouteService: ImageRouteService, httpFileUtil: HttpFileUtil);
addRoute(key: string, valueToAdd: string): void;
sendImage(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void;
sendImage(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): Promise<void>;
getImage(): string;
}

View File

@ -8,6 +8,6 @@ export declare class BundleSerializer extends Serializer {
protected bundleLoader: BundleLoader;
protected httpFileUtil: HttpFileUtil;
constructor(logger: ILogger, bundleLoader: BundleLoader, httpFileUtil: HttpFileUtil);
serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void;
serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): Promise<void>;
canHandle(route: string): boolean;
}

View File

@ -4,6 +4,6 @@ import { ImageRouter } from "@spt/routers/ImageRouter";
export declare class ImageSerializer extends Serializer {
protected imageRouter: ImageRouter;
constructor(imageRouter: ImageRouter);
serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): void;
serialize(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: any): Promise<void>;
canHandle(route: string): boolean;
}

View File

@ -8,6 +8,6 @@ export declare class NotifySerializer extends Serializer {
protected jsonUtil: JsonUtil;
protected httpServerHelper: HttpServerHelper;
constructor(notifierController: NotifierController, jsonUtil: JsonUtil, httpServerHelper: HttpServerHelper);
serialize(_sessionID: string, req: IncomingMessage, resp: ServerResponse, _: any): void;
serialize(_sessionID: string, req: IncomingMessage, resp: ServerResponse, _: any): Promise<void>;
canHandle(route: string): boolean;
}

View File

@ -26,7 +26,7 @@ export declare class SptHttpListener implements IHttpListener {
* @param body Buffer
* @param output Server generated response data
*/
sendResponse(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: Buffer, output: string): void;
sendResponse(sessionID: string, req: IncomingMessage, resp: ServerResponse, body: Buffer, output: string): Promise<void>;
/**
* Is request flagged as debug enabled
* @param req Incoming request
@ -42,5 +42,5 @@ export declare class SptHttpListener implements IHttpListener {
getResponse(sessionID: string, req: IncomingMessage, body: Buffer): Promise<string>;
protected getBodyInfo(body: Buffer, requestUrl?: any): any;
sendJson(resp: ServerResponse, output: string, sessionID: string): void;
sendZlibJson(resp: ServerResponse, output: string, sessionID: string): void;
sendZlibJson(resp: ServerResponse, output: string, sessionID: string): Promise<void>;
}

View File

@ -70,6 +70,7 @@ export declare class InsuranceService {
* @returns void
*/
protected adoptOrphanedInsEquipment(sessionID: string): void;
protected getMaxInsuranceStorageTime(traderBase: ITraderBase): number;
/**
* Store lost gear post-raid inside profile, ready for later code to pick it up and mail it
* @param equipmentPkg Gear to store - generated by getGearLostInRaid()

View File

@ -5,6 +5,7 @@ import { PlayerScavGenerator } from "@spt/generators/PlayerScavGenerator";
import { HealthHelper } from "@spt/helpers/HealthHelper";
import { InRaidHelper } from "@spt/helpers/InRaidHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { QuestHelper } from "@spt/helpers/QuestHelper";
import { TraderHelper } from "@spt/helpers/TraderHelper";
import { ILocationBase } from "@spt/models/eft/common/ILocationBase";
import { IPmcData } from "@spt/models/eft/common/IPmcData";
@ -46,6 +47,7 @@ export declare class LocationLifecycleService {
protected databaseService: DatabaseService;
protected inRaidHelper: InRaidHelper;
protected healthHelper: HealthHelper;
protected questHelper: QuestHelper;
protected matchBotDetailsCacheService: MatchBotDetailsCacheService;
protected pmcChatResponseService: PmcChatResponseService;
protected playerScavGenerator: PlayerScavGenerator;
@ -68,7 +70,7 @@ export declare class LocationLifecycleService {
protected hideoutConfig: IHideoutConfig;
protected locationConfig: ILocationConfig;
protected pmcConfig: IPmcConfig;
constructor(logger: ILogger, hashUtil: HashUtil, saveServer: SaveServer, timeUtil: TimeUtil, randomUtil: RandomUtil, profileHelper: ProfileHelper, databaseService: DatabaseService, inRaidHelper: InRaidHelper, healthHelper: HealthHelper, matchBotDetailsCacheService: MatchBotDetailsCacheService, pmcChatResponseService: PmcChatResponseService, playerScavGenerator: PlayerScavGenerator, traderHelper: TraderHelper, localisationService: LocalisationService, insuranceService: InsuranceService, botLootCacheService: BotLootCacheService, configServer: ConfigServer, botGenerationCacheService: BotGenerationCacheService, mailSendService: MailSendService, raidTimeAdjustmentService: RaidTimeAdjustmentService, botNameService: BotNameService, lootGenerator: LootGenerator, applicationContext: ApplicationContext, locationLootGenerator: LocationLootGenerator, cloner: ICloner);
constructor(logger: ILogger, hashUtil: HashUtil, saveServer: SaveServer, timeUtil: TimeUtil, randomUtil: RandomUtil, profileHelper: ProfileHelper, databaseService: DatabaseService, inRaidHelper: InRaidHelper, healthHelper: HealthHelper, questHelper: QuestHelper, matchBotDetailsCacheService: MatchBotDetailsCacheService, pmcChatResponseService: PmcChatResponseService, playerScavGenerator: PlayerScavGenerator, traderHelper: TraderHelper, localisationService: LocalisationService, insuranceService: InsuranceService, botLootCacheService: BotLootCacheService, configServer: ConfigServer, botGenerationCacheService: BotGenerationCacheService, mailSendService: MailSendService, raidTimeAdjustmentService: RaidTimeAdjustmentService, botNameService: BotNameService, lootGenerator: LootGenerator, applicationContext: ApplicationContext, locationLootGenerator: LocationLootGenerator, cloner: ICloner);
/** Handle client/match/local/start */
startLocalRaid(sessionId: string, request: IStartLocalRaidRequestData): IStartLocalRaidResponseData;
/**
@ -139,10 +141,21 @@ export declare class LocationLifecycleService {
* @param locationName
*/
protected handlePostRaidPmc(sessionId: string, pmcProfile: IPmcData, scavProfile: IPmcData, isDead: boolean, isSurvived: boolean, isTransfer: boolean, request: IEndLocalRaidRequestData, locationName: string): void;
/**
* In 0.15 Lightkeeper quests do not give rewards in PvE, this issue also occurs in spt
* We check for newly completed Lk quests and run them through the servers `CompleteQuest` process
* This rewards players with items + craft unlocks + new trader assorts
* @param sessionId Session id
* @param postRaidQuests Quest statuses post-raid
* @param preRaidQuests Quest statuses pre-raid
* @param pmcProfile Players profile
*/
protected lightkeeperQuestWorkaround(sessionId: string, postRaidQuests: IQuestStatus[], preRaidQuests: IQuestStatus[], pmcProfile: IPmcData): void;
/**
* Convert post-raid quests into correct format
* Quest status comes back as a string version of the enum `Success`, not the expected value of 1
* @param questsToProcess
* @param questsToProcess quests data from client
* @param preRaidQuestStatuses quest data from before raid
* @returns IQuestStatus
*/
protected processPostRaidQuests(questsToProcess: IQuestStatus[]): IQuestStatus[];

View File

@ -60,8 +60,9 @@ export declare class PaymentService {
*/
addPaymentToOutput(pmcData: IPmcData, currencyTpl: string, amountToPay: number, sessionID: string, output: IItemEventRouterResponse): void;
/**
* TODO - ensure money in containers inside secure container are LAST
* Get all money stacks in inventory and prioritise items in stash
* @param pmcData
* @param pmcData Player profile
* @param currencyTpl
* @param playerStashId Players stash id
* @returns Sorting money items

View File

@ -8,6 +8,7 @@ import { IPmcChatResponse } from "@spt/models/spt/config/IPmChatResponse";
import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer";
import { GiftService } from "@spt/services/GiftService";
import { LocaleService } from "@spt/services/LocaleService";
import { LocalisationService } from "@spt/services/LocalisationService";
import { MatchBotDetailsCacheService } from "@spt/services/MatchBotDetailsCacheService";
import { HashUtil } from "@spt/utils/HashUtil";
@ -19,12 +20,13 @@ export declare class PmcChatResponseService {
protected notificationSendHelper: NotificationSendHelper;
protected matchBotDetailsCacheService: MatchBotDetailsCacheService;
protected localisationService: LocalisationService;
protected localeService: LocaleService;
protected giftService: GiftService;
protected weightedRandomHelper: WeightedRandomHelper;
protected configServer: ConfigServer;
protected pmcResponsesConfig: IPmcChatResponse;
protected giftConfig: IGiftsConfig;
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, notificationSendHelper: NotificationSendHelper, matchBotDetailsCacheService: MatchBotDetailsCacheService, localisationService: LocalisationService, giftService: GiftService, weightedRandomHelper: WeightedRandomHelper, configServer: ConfigServer);
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, notificationSendHelper: NotificationSendHelper, matchBotDetailsCacheService: MatchBotDetailsCacheService, localisationService: LocalisationService, localeService: LocaleService, giftService: GiftService, weightedRandomHelper: WeightedRandomHelper, configServer: ConfigServer);
/**
* For each PMC victim of the player, have a chance to send a message to the player, can be positive or negative
* @param sessionId Session id
@ -43,9 +45,17 @@ export declare class PmcChatResponseService {
* Choose a localised message to send the player (different if sender was killed or killed player)
* @param isVictim Is the message coming from a bot killed by the player
* @param pmcData Player profile
* @param victimData OPTIMAL - details of the pmc killed
* @returns Message from PMC to player
*/
protected chooseMessage(isVictim: boolean, pmcData: IPmcData): string | undefined;
protected chooseMessage(isVictim: boolean, pmcData: IPmcData, victimData?: IVictim): string | undefined;
/**
* use map key to get a localised location name
* e.g. factory4_day becomes "Factory"
* @param locationKey location key to localise
* @returns Localised location name
*/
protected getLocationName(locationKey: string): string;
/**
* Should capitalisation be stripped from the message response before sending
* @param isVictim Was responder a victim of player
@ -63,7 +73,7 @@ export declare class PmcChatResponseService {
* @param isVictim Was responder a victim of player
* @returns true = should be stripped
*/
appendSuffixToMessageEnd(isVictim: boolean): boolean;
protected appendSuffixToMessageEnd(isVictim: boolean): boolean;
/**
* Choose a type of response based on the weightings in pmc response config
* @param isVictim Was responder killed by player

View File

@ -0,0 +1,77 @@
import { IBotConfig } from "@spt/models/spt/config/IBotConfig";
import { ICoreConfig } from "@spt/models/spt/config/ICoreConfig";
import { IHideoutConfig } from "@spt/models/spt/config/IHideoutConfig";
import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig";
import { ILootConfig } from "@spt/models/spt/config/ILootConfig";
import { IPmcConfig } from "@spt/models/spt/config/IPmcConfig";
import { IRagfairConfig } from "@spt/models/spt/config/IRagfairConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer";
import { CustomLocationWaveService } from "@spt/services/CustomLocationWaveService";
import { DatabaseService } from "@spt/services/DatabaseService";
import { ItemBaseClassService } from "@spt/services/ItemBaseClassService";
import { LocalisationService } from "@spt/services/LocalisationService";
import { OpenZoneService } from "@spt/services/OpenZoneService";
import { SeasonalEventService } from "@spt/services/SeasonalEventService";
import { ICloner } from "@spt/utils/cloners/ICloner";
export declare class PostDbLoadService {
protected logger: ILogger;
protected databaseService: DatabaseService;
protected localisationService: LocalisationService;
protected customLocationWaveService: CustomLocationWaveService;
protected openZoneService: OpenZoneService;
protected seasonalEventService: SeasonalEventService;
protected itemBaseClassService: ItemBaseClassService;
protected configServer: ConfigServer;
protected cloner: ICloner;
protected coreConfig: ICoreConfig;
protected locationConfig: ILocationConfig;
protected ragfairConfig: IRagfairConfig;
protected hideoutConfig: IHideoutConfig;
protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig;
protected botConfig: IBotConfig;
constructor(logger: ILogger, databaseService: DatabaseService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, configServer: ConfigServer, cloner: ICloner);
performPostDbLoadActions(): void;
protected adjustMinReserveRaiderSpawnChance(): void;
protected addCustomLooseLootPositions(): void;
/**
* BSG have two values for shotgun dispersion, we make sure both have the same value
*/
protected fixShotgunDispersions(): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void;
protected adjustLooseLootSpawnProbabilities(): void;
/**
* Out of date/incorrectly made trader mods forget this data
*/
protected checkTraderRepairValuesExist(): void;
protected adjustLocationBotValues(): void;
/**
* Make Rogues spawn later to allow for scavs to spawn first instead of rogues filling up all spawn positions
*/
protected fixRoguesSpawningInstantlyOnLighthouse(): void;
/**
* Find and split waves with large numbers of bots into smaller waves - BSG appears to reduce the size of these
* waves to one bot when they're waiting to spawn for too long
*/
protected splitBotWavesIntoSingleWaves(): void;
/**
* Make non-trigger-spawned raiders spawn earlier + always
*/
protected adjustLabsRaiderSpawnRate(): void;
protected adjustHideoutCraftTimes(overrideSeconds: number): void;
/**
* Adjust all hideout craft times to be no higher than the override
*/
protected adjustHideoutBuildTimes(overrideSeconds: number): void;
/**
* Blank out the "test" mail message from prapor
*/
protected removePraporTestMessage(): void;
/**
* Check for any missing assorts inside each traders assort.json data, checking against traders questassort.json
*/
protected validateQuestAssortUnlocksExist(): void;
protected setAllDbItemsAsSellableOnFlea(): void;
}

View File

@ -1,12 +1,14 @@
import { BotHelper } from "@spt/helpers/BotHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { IConfig } from "@spt/models/eft/common/IGlobals";
import { IAdditionalHostilitySettings } from "@spt/models/eft/common/ILocationBase";
import { IInventory } from "@spt/models/eft/common/tables/IBotType";
import { Season } from "@spt/models/enums/Season";
import { SeasonalEventType } from "@spt/models/enums/SeasonalEventType";
import { IHttpConfig } from "@spt/models/spt/config/IHttpConfig";
import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig";
import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig";
import { ISeasonalEvent, ISeasonalEventConfig } from "@spt/models/spt/config/ISeasonalEventConfig";
import { ISeasonalEvent, ISeasonalEventConfig, IZombieSettings } from "@spt/models/spt/config/ISeasonalEventConfig";
import { IWeatherConfig } from "@spt/models/spt/config/IWeatherConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer";
@ -27,10 +29,11 @@ export declare class SeasonalEventService {
protected questConfig: IQuestConfig;
protected httpConfig: IHttpConfig;
protected weatherConfig: IWeatherConfig;
protected locationConfig: ILocationConfig;
protected halloweenEventActive?: boolean;
protected christmasEventActive?: boolean;
/** All events active at this point in time */
protected currentlyActiveEvents: SeasonalEventType[];
protected currentlyActiveEvents: ISeasonalEvent[];
constructor(logger: ILogger, databaseService: DatabaseService, databaseImporter: DatabaseImporter, giftService: GiftService, localisationService: LocalisationService, botHelper: BotHelper, profileHelper: ProfileHelper, configServer: ConfigServer);
protected get christmasEventItems(): string[];
protected get halloweenEventItems(): string[];
@ -98,11 +101,18 @@ export declare class SeasonalEventService {
*/
isQuestRelatedToEvent(questId: string, event: SeasonalEventType): boolean;
/**
* Handle seasonal events
* @param sessionId Players id
* Handle activating seasonal events
*/
enableSeasonalEvents(): void;
forceSeasonalEvent(eventType: SeasonalEventType): boolean;
/**
* Store active events inside class array property `currentlyActiveEvents` + set class properties: christmasEventActive/halloweenEventActive
*/
enableSeasonalEvents(sessionId: string): void;
protected cacheActiveEvents(): void;
/**
* Get the currently active weather season e.g. SUMMER/AUTUMN/WINTER
* @returns Season enum value
*/
getActiveWeatherSeason(): Season;
/**
* Iterate through bots inventory and loot to find and remove christmas items (as defined in SeasonalEventService)
@ -112,11 +122,13 @@ export declare class SeasonalEventService {
removeChristmasItemsFromBotInventory(botInventory: IInventory, botRole: string): void;
/**
* Make adjusted to server code based on the name of the event passed in
* @param sessionId Player id
* @param globalConfig globals.json
* @param eventName Name of the event to enable. e.g. Christmas
*/
protected updateGlobalEvents(sessionId: string, globalConfig: IConfig, eventType: SeasonalEventType): void;
protected updateGlobalEvents(globalConfig: IConfig, event: ISeasonalEvent): void;
protected replaceBotHostility(hostilitySettings: Record<string, IAdditionalHostilitySettings[]>): void;
protected removeEntryRequirement(locationIds: string[]): void;
givePlayerSeasonalGifts(sessionId: string): void;
/**
* Force zryachiy to always have a melee weapon
*/
@ -125,11 +137,14 @@ export declare class SeasonalEventService {
* Enable the halloween zryachiy summon event
*/
protected enableHalloweenSummonEvent(): void;
protected configureZombies(zombieSettings: IZombieSettings): void;
protected addEventWavesToMaps(eventType: string): void;
/**
* Add event bosses to maps
* @param eventType Seasonal event, e.g. HALLOWEEN/CHRISTMAS
* @param mapWhitelist OPTIONAL - Maps to add bosses to
*/
protected addEventBossesToMaps(eventType: SeasonalEventType): void;
protected addEventBossesToMaps(eventType: string, mapIdWhitelist?: string[]): void;
/**
* Change trader icons to be more event themed (Halloween only so far)
* @param eventType What event is active
@ -148,6 +163,7 @@ export declare class SeasonalEventService {
* Add pumpkin loot boxes to scavs
*/
protected addPumpkinsToScavBackpacks(): void;
protected renameBitcoin(): void;
/**
* Set Khorovod(dancing tree) chance to 100% on all maps that support it
*/
@ -156,6 +172,7 @@ export declare class SeasonalEventService {
* Add santa to maps
*/
protected addGifterBotToMaps(): void;
protected handleModEvent(event: ISeasonalEvent): void;
/**
* Send gift to player if they'e not already received it
* @param playerId Player to send gift to

View File

@ -0,0 +1,16 @@
import { OnLoad } from "@spt/di/OnLoad";
import { ILogger } from "@spt/models/spt/utils/ILogger";
import { DatabaseServer } from "@spt/servers/DatabaseServer";
export declare class ProductionQuestsGen {
protected databaseServer: DatabaseServer;
protected logger: ILogger;
protected onLoadComponents: OnLoad[];
private questProductionOutputList;
private questProductionMap;
private blacklistedProductions;
constructor(databaseServer: DatabaseServer, logger: ILogger, onLoadComponents: OnLoad[]);
run(): Promise<void>;
private updateProductionQuests;
private isValidQuestProduction;
private buildQuestProductionList;
}

View File

@ -0,0 +1,7 @@
import "reflect-metadata";
import "source-map-support/register";
export declare class ProductionQuestsGenProgram {
private errorHandler;
constructor();
start(): Promise<void>;
}

View File

@ -3,5 +3,5 @@ import { HttpServerHelper } from "@spt/helpers/HttpServerHelper";
export declare class HttpFileUtil {
protected httpServerHelper: HttpServerHelper;
constructor(httpServerHelper: HttpServerHelper);
sendFile(resp: ServerResponse, filePath: string): void;
sendFileAsync(resp: ServerResponse, filePath: string): Promise<void>;
}

View File

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

View File

@ -21,7 +21,7 @@ export declare class InraidCallbacks {
*/
registerPlayer(url: string, info: IRegisterPlayerRequestData, sessionID: string): INullResponseData;
/**
* Handle raid/profile/save
* Handle raid/profile/scavsave
* @param url
* @param info Save progress request
* @param sessionID Session id

View File

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

View File

@ -1,5 +1,6 @@
import { MatchController } from "@spt/controllers/MatchController";
import { IEmptyRequestData } from "@spt/models/eft/common/IEmptyRequestData";
import { IMetrics } from "@spt/models/eft/common/tables/IMatch";
import { IGetBodyResponseData } from "@spt/models/eft/httpResponse/IGetBodyResponseData";
import { INullResponseData } from "@spt/models/eft/httpResponse/INullResponseData";
import { IEndLocalRaidRequestData } from "@spt/models/eft/match/IEndLocalRaidRequestData";
@ -53,7 +54,7 @@ export declare class MatchCallbacks {
/** Handle match/group/start_game */
joinMatch(url: string, info: IMatchGroupStartGameRequest, sessionID: string): IGetBodyResponseData<IProfileStatusResponse>;
/** Handle client/getMetricsConfig */
getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData<string>;
getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData<IMetrics>;
/**
* Called periodically while in a group
* Handle client/match/group/status

View File

@ -3,7 +3,7 @@ export declare enum ContextVariableType {
SESSION_ID = 0,
/** Currently acive raid information */
RAID_CONFIGURATION = 1,
/** Timestamp when client first connected */
/** SessionID + Timestamp when client first connected, has _ between values */
CLIENT_START_TIMESTAMP = 2,
/** When player is loading into map and loot is requested */
REGISTER_PLAYER_REQUEST = 3,

View File

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

View File

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

View File

@ -28,13 +28,13 @@ export declare class InraidController {
*/
addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void;
/**
* Handle raid/profile/save
* Handle raid/profile/scavsave
* Save profile state to disk
* Handles pmc/pscav
* @param offraidData post-raid request data
* @param offraidProfileData Post-raid scav profile data
* @param sessionID Session id
*/
savePostRaidProfileForScav(offraidData: IScavSaveRequestData, sessionID: string): void;
savePostRaidProfileForScav(offraidProfileData: IScavSaveRequestData, sessionID: string): void;
/**
* Get the inraid config from configs/inraid.json
* @returns InRaid Config

View File

@ -176,6 +176,11 @@ export declare class InsuranceController {
* @returns void
*/
protected sendMail(sessionID: string, insurance: IInsurance): void;
protected IsMapLabsAndInsuranceDisabled(insurance: IInsurance, labsId?: string): boolean;
/**
* Update IInsurance object with new messageTemplateId and wipe out items array data
*/
protected handleLabsInsurance(traderDialogMessages: Record<string, string[]>, insurance: IInsurance): void;
/**
* Determines whether an insured item should be removed from the player's inventory based on a random roll and
* trader-specific return chance.

View File

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

View File

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

View File

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

View File

@ -139,6 +139,13 @@ export declare class BotEquipmentModGenerator {
* @returns itemHelper.getItem() result
*/
protected chooseModToPutIntoSlot(request: IModToSpawnRequest): [boolean, ITemplateItem] | undefined;
/**
* Given the passed in array of magaizne tpls, look up the min size set in config and return only those that have that size or larger
* @param modSpawnRequest Request data
* @param modPool Pool of magazine tpls to filter
* @returns Filtered pool of magazine tpls
*/
protected getFilterdMagazinePoolByCapacity(modSpawnRequest: IModToSpawnRequest, modPool: string[]): string[];
/**
* Choose a weapon mod tpl for a given slot from a pool of choices
* Checks chosen tpl is compatible with all existing weapon items

View File

@ -1,8 +1,10 @@
import { BotInventoryGenerator } from "@spt/generators/BotInventoryGenerator";
import { BotLevelGenerator } from "@spt/generators/BotLevelGenerator";
import { BotGeneratorHelper } from "@spt/helpers/BotGeneratorHelper";
import { BotHelper } from "@spt/helpers/BotHelper";
import { ProfileHelper } from "@spt/helpers/ProfileHelper";
import { WeightedRandomHelper } from "@spt/helpers/WeightedRandomHelper";
import { MinMax } from "@spt/models/common/MinMax";
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 { IBotGenerationDetails } from "@spt/models/spt/bots/BotGenerationDetails";
@ -31,6 +33,7 @@ export declare class BotGenerator {
protected botEquipmentFilterService: BotEquipmentFilterService;
protected weightedRandomHelper: WeightedRandomHelper;
protected botHelper: BotHelper;
protected botGeneratorHelper: BotGeneratorHelper;
protected seasonalEventService: SeasonalEventService;
protected itemFilterService: ItemFilterService;
protected botNameService: BotNameService;
@ -38,7 +41,7 @@ export declare class BotGenerator {
protected cloner: ICloner;
protected botConfig: IBotConfig;
protected pmcConfig: IPmcConfig;
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, profileHelper: ProfileHelper, databaseService: DatabaseService, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, seasonalEventService: SeasonalEventService, itemFilterService: ItemFilterService, botNameService: BotNameService, configServer: ConfigServer, cloner: ICloner);
constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, profileHelper: ProfileHelper, databaseService: DatabaseService, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botGeneratorHelper: BotGeneratorHelper, seasonalEventService: SeasonalEventService, itemFilterService: ItemFilterService, botNameService: BotNameService, configServer: ConfigServer, cloner: ICloner);
/**
* Generate a player scav bot object
* @param role e.g. assault / pmcbot
@ -48,7 +51,7 @@ export declare class BotGenerator {
*/
generatePlayerScav(sessionId: string, role: string, difficulty: string, botTemplate: IBotType): IBotBase;
/**
* Create 1 bots of the type/side/difficulty defined in botGenerationDetails
* Create 1 bot of the type/side/difficulty defined in botGenerationDetails
* @param sessionId Session id
* @param botGenerationDetails details on how to generate bots
* @returns constructed bot
@ -76,6 +79,36 @@ export declare class BotGenerator {
* @returns IBotBase object
*/
protected generateBot(sessionId: string, bot: IBotBase, botJsonTemplate: IBotType, botGenerationDetails: IBotGenerationDetails): IBotBase;
/**
* Get exp for kill by bot difficulty
* @param experience Dict of difficulties and experience
* @param botDifficulty the killed bots difficulty
* @param role Role of bot (optional, used for error logging)
* @returns Experience for kill
*/
protected getExperienceRewardForKillByDifficulty(experience: Record<string, MinMax>, botDifficulty: string, role: string): number;
/**
* Get the standing value change when player kills a bot
* @param standingForKill Dictionary of standing values keyed by bot difficulty
* @param botDifficulty Difficulty of bot to look up
* @param role Role of bot (optional, used for error logging)
* @returns Standing change value
*/
protected getStandingChangeForKillByDifficulty(standingForKill: Record<string, number>, botDifficulty: string, role: string): number;
/**
* Get the agressor bonus value when player kills a bot
* @param standingForKill Dictionary of standing values keyed by bot difficulty
* @param botDifficulty Difficulty of bot to look up
* @param role Role of bot (optional, used for error logging)
* @returns Standing change value
*/
protected getAgressorBonusByDifficulty(aggressorBonus: Record<string, number>, botDifficulty: string, role: string): number;
/**
* Set weighting of flagged equipment to 0
* @param botJsonTemplate Bot data to adjust
* @param botGenerationDetails Generation details of bot
*/
protected filterBlacklistedGear(botJsonTemplate: IBotType, botGenerationDetails: IBotGenerationDetails): void;
protected addAdditionalPocketLootWeightsForUnheardBot(botJsonTemplate: IBotType): void;
/**
* Remove items from item.json/lootableItemBlacklist from bots inventory

View File

@ -71,14 +71,6 @@ export declare class BotLootGenerator {
* @param botRole Role of bot (pmcBEAR/pmcUSEC)
*/
protected addForcedMedicalItemsToPmcSecure(botInventory: PmcInventory, botRole: string): void;
/**
* Get a biased random number
* @param min Smallest size
* @param max Biggest size
* @param nValue Value to bias choice
* @returns Chosen number
*/
protected getRandomisedCount(min: number, max: number, nValue: number): number;
/**
* Take random items from a pool and add to an inventory until totalItemCount or totalValueLimit or space limit is reached
* @param pool Pool of items to pick from with weight

View File

@ -3,7 +3,7 @@ import { ItemHelper } from "@spt/helpers/ItemHelper";
import { PresetHelper } from "@spt/helpers/PresetHelper";
import { IContainerMinMax, IStaticAmmoDetails, IStaticContainer, IStaticContainerData, IStaticForcedProps, IStaticLootDetails } from "@spt/models/eft/common/ILocation";
import { ILocationBase } from "@spt/models/eft/common/ILocationBase";
import { ILooseLoot, ISpawnpoint, ISpawnpointTemplate, ISpawnpointsForced } from "@spt/models/eft/common/ILooseLoot";
import { ILooseLoot, ISpawnpointTemplate, ISpawnpointsForced } from "@spt/models/eft/common/ILooseLoot";
import { IItem } from "@spt/models/eft/common/tables/IItem";
import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig";
import { ILogger } from "@spt/models/spt/utils/ILogger";
@ -124,7 +124,7 @@ export declare class LocationLootGenerator {
* @param forcedSpawnPoints forced Forced loot locations that must be added
* @param locationName Name of map currently having force loot created for
*/
protected addForcedLoot(lootLocationTemplates: ISpawnpointTemplate[], forcedSpawnPoints: ISpawnpointsForced[], locationName: string): void;
protected addForcedLoot(lootLocationTemplates: ISpawnpointTemplate[], forcedSpawnPoints: ISpawnpointsForced[], locationName: string, staticAmmoDist: Record<string, IStaticAmmoDetails[]>): void;
/**
* Create array of item (with child items) and return
* @param chosenComposedKey Key we want to look up items for
@ -132,7 +132,7 @@ export declare class LocationLootGenerator {
* @param staticAmmoDist ammo distributions
* @returns IContainerItem
*/
protected createDynamicLootItem(chosenComposedKey: string, spawnPoint: ISpawnpoint, staticAmmoDist: Record<string, IStaticAmmoDetails[]>): IContainerItem;
protected createDynamicLootItem(chosenComposedKey: string, items: IItem[], staticAmmoDist: Record<string, IStaticAmmoDetails[]>): IContainerItem;
/**
* Find an item in array by its _tpl, handle differently if chosenTpl is a weapon
* @param items Items array to search

View File

@ -149,12 +149,13 @@ export declare class RagfairOfferGenerator {
protected removeBannedPlatesFromPreset(presetWithChildren: IItem[], plateSettings: IArmorPlateBlacklistSettings): boolean;
/**
* Create one flea offer for a specific item
* @param sellerId Id of seller
* @param itemWithChildren Item to create offer for
* @param isPreset Is item a weapon preset
* @param itemDetails raw db item details
* @param itemToSellDetails Raw db item details
* @returns Item array
*/
protected createSingleOfferForItem(itemWithChildren: IItem[], isPreset: boolean, itemDetails: [boolean, ITemplateItem]): Promise<void>;
protected createSingleOfferForItem(sellerId: string, itemWithChildren: IItem[], isPreset: boolean, itemToSellDetails: ITemplateItem): Promise<void>;
/**
* Generate trader offers on flea using the traders assort data
* @param traderID Trader to generate offers for

View File

@ -66,5 +66,5 @@ export declare class WeatherGenerator {
protected getWeightedWindSpeed(): number;
protected getWeightedFog(): number;
protected getWeightedRain(): number;
protected getRandomFloat(node: string): number;
protected getRandomFloat(node: string, precision?: number): number;
}

View File

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

View File

@ -41,12 +41,16 @@ export declare class InRaidHelper {
*/
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
* Only removes property if item had FiR when entering raid
* @param postRaidProfile profile to update items for
* @returns Updated profile with SpawnedInSession removed
* Remove FiR status from items
* @param items Items to process
*/
removeSpawnedInSessionPropertyFromItems(postRaidProfile: IPmcData): IPmcData;
protected removeFiRStatusFromCertainItems(items: IItem[]): void;
/**
* Add items from one parameter into another
* @param itemsToAdd Items we want to add
* @param serverInventoryItems Location to add items to
*/
protected addItemsToInventory(itemsToAdd: IItem[], serverInventoryItems: IItem[]): void;
/**
* Clear PMC inventory of all items except those that are exempt
* Used post-raid to remove items after death

View File

@ -536,6 +536,11 @@ export declare class ItemHelper {
*/
getRandomisedAmmoStackSize(ammoItemTemplate: ITemplateItem, maxLimit?: number): number;
getItemBaseType(tpl: string, rootOnly?: boolean): string;
/**
* Remove FiR status from passed in items
* @param items Items to update FiR status of
*/
removeSpawnedInSessionPropertyFromItems(items: IItem[]): void;
}
declare namespace ItemHelper {
interface IItemSize {

View File

@ -12,6 +12,7 @@ import { IItem } from "@spt/models/eft/common/tables/IItem";
import { IQuest, IQuestCondition, IQuestReward } from "@spt/models/eft/common/tables/IQuest";
import { IItemEventRouterResponse } from "@spt/models/eft/itemEvent/IItemEventRouterResponse";
import { IAcceptQuestRequestData } from "@spt/models/eft/quests/IAcceptQuestRequestData";
import { ICompleteQuestRequestData } from "@spt/models/eft/quests/ICompleteQuestRequestData";
import { IFailQuestRequestData } from "@spt/models/eft/quests/IFailQuestRequestData";
import { QuestStatus } from "@spt/models/enums/QuestStatus";
import { IQuestConfig } from "@spt/models/spt/config/IQuestConfig";
@ -22,6 +23,7 @@ import { DatabaseService } from "@spt/services/DatabaseService";
import { LocaleService } from "@spt/services/LocaleService";
import { LocalisationService } from "@spt/services/LocalisationService";
import { MailSendService } from "@spt/services/MailSendService";
import { PlayerService } from "@spt/services/PlayerService";
import { SeasonalEventService } from "@spt/services/SeasonalEventService";
import { HashUtil } from "@spt/utils/HashUtil";
import { TimeUtil } from "@spt/utils/TimeUtil";
@ -44,10 +46,11 @@ export declare class QuestHelper {
protected traderHelper: TraderHelper;
protected presetHelper: PresetHelper;
protected mailSendService: MailSendService;
protected playerService: PlayerService;
protected configServer: ConfigServer;
protected cloner: ICloner;
protected questConfig: IQuestConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseService: DatabaseService, questConditionHelper: QuestConditionHelper, eventOutputHolder: EventOutputHolder, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, seasonalEventService: SeasonalEventService, traderHelper: TraderHelper, presetHelper: PresetHelper, mailSendService: MailSendService, configServer: ConfigServer, cloner: ICloner);
constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, databaseService: DatabaseService, questConditionHelper: QuestConditionHelper, eventOutputHolder: EventOutputHolder, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, seasonalEventService: SeasonalEventService, traderHelper: TraderHelper, presetHelper: PresetHelper, mailSendService: MailSendService, playerService: PlayerService, configServer: ConfigServer, cloner: ICloner);
/**
* Get status of a quest in player profile by its id
* @param pmcData Profile to search
@ -260,6 +263,13 @@ export declare class QuestHelper {
* @returns Array of reward objects
*/
applyQuestReward(profileData: IPmcData, questId: string, state: QuestStatus, sessionId: string, questResponse: IItemEventRouterResponse): IItem[];
/**
* Does the provided quest reward have a game version requirement to be given and does it match
* @param reward Reward to check
* @param gameVersion Version of game to check reward against
* @returns True if it has requirement, false if it doesnt pass check
*/
protected questRewardIsForGameEdition(reward: IQuestReward, gameVersion: string): boolean;
/**
* WIP - Find hideout craft id and add to unlockedProductionRecipe array in player profile
* also update client response recipeUnlocked array with craft id
@ -302,4 +312,63 @@ export declare class QuestHelper {
* @returns Hours item will be available for
*/
getMailItemRedeemTimeHoursForProfile(pmcData: IPmcData): number;
completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle client/quest/list
* Get all quests visible to player
* Exclude quests with incomplete preconditions (level/loyalty)
* @param sessionID session id
* @returns array of IQuest
*/
getClientQuests(sessionID: string): IQuest[];
/**
* Return a list of quests that would fail when supplied quest is completed
* @param completedQuestId quest completed id
* @returns array of IQuest objects
*/
protected getQuestsFromProfileFailedByCompletingQuest(completedQuestId: string, pmcProfile: IPmcData): IQuest[];
/**
* Fail the provided quests
* Update quest in profile, otherwise add fresh quest object with failed status
* @param sessionID session id
* @param pmcData player profile
* @param questsToFail quests to fail
* @param output Client output
*/
protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[], output: IItemEventRouterResponse): void;
/**
* Send a popup to player on successful completion of a quest
* @param sessionID session id
* @param pmcData Player profile
* @param completedQuestId Completed quest id
* @param questRewards Rewards given to player
*/
protected sendSuccessDialogMessageOnQuestComplete(sessionID: string, pmcData: IPmcData, completedQuestId: string, questRewards: IItem[]): void;
/**
* Look for newly available quests after completing a quest with a requirement to wait x minutes (time-locked) before being available and add data to profile
* @param pmcData Player profile to update
* @param quests Quests to look for wait conditions in
* @param completedQuestId Quest just completed
*/
protected addTimeLockedQuestsToProfile(pmcData: IPmcData, quests: IQuest[], completedQuestId: string): void;
/**
* Remove a quest entirely from a profile
* @param sessionId Player id
* @param questIdToRemove Qid of quest to remove
*/
protected removeQuestFromScavProfile(sessionId: string, questIdToRemove: string): void;
/**
* Return quests that have different statuses
* @param preQuestStatusus Quests before
* @param postQuestStatuses Quests after
* @returns QuestStatusChange array
*/
protected getQuestsWithDifferentStatuses(preQuestStatusus: IQuestStatus[], postQuestStatuses: IQuestStatus[]): IQuestStatus[] | undefined;
/**
* Does a provided quest have a level requirement equal to or below defined level
* @param quest Quest to check
* @param playerLevel level of player to test against quest
* @returns true if quest can be seen/accepted by player of defined level
*/
protected playerLevelFulfillsQuestRequirement(quest: IQuest, playerLevel: number): boolean;
}

View File

@ -39,7 +39,7 @@ export declare class TraderHelper {
* @param sessionID Players id
* @returns Trader base
*/
getTrader(traderID: string, sessionID: string): ITraderBase | undefined;
getTrader(traderID: string, sessionID: string): ITraderBase | any;
/**
* Get all assort data for a particular trader
* @param traderId Trader to get assorts for

View File

@ -3,12 +3,25 @@ import { IItem } from "@spt/models/eft/common/tables/IItem";
export interface IGlobals {
time: number;
config: IConfig;
LocationInfection: ILocationInfection;
bot_presets: IBotPreset[];
AudioSettings: IAudioSettings;
EnvironmentSettings: IEnvironmentSettings;
BotWeaponScatterings: IBotWeaponScattering[];
ItemPresets: Record<string, IPreset>;
}
export interface ILocationInfection {
Interchange: number;
Lighthouse: number;
RezervBase: number;
Sandbox: number;
Shoreline: number;
TarkovStreets: number;
Woods: number;
bigmap: number;
factory4: number;
laboratory: number;
}
export interface IArtilleryShelling {
ArtilleryMapsConfigs: Record<string, IArtilleryMapSettings>;
ProjectileExplosionParams: IProjectileExplosionParams;
@ -96,6 +109,7 @@ export interface IConfig {
MaxBotsAliveOnMapPvE: number;
SavagePlayCooldown: number;
SavagePlayCooldownNdaFree: number;
SeasonActivity: ISeasonActivity;
MarksmanAccuracy: number;
SavagePlayCooldownDevelop: number;
TODSkyDate: string;
@ -182,6 +196,14 @@ export interface IConfig {
Ballistic: IBallistic;
RepairSettings: IRepairSettings;
}
export interface ISeasonActivity {
InfectionHalloween: ISeasonActivityHalloween;
}
export interface ISeasonActivityHalloween {
DisplayUIEnabled: boolean;
Enabled: boolean;
ZombieBleedMul: number;
}
export interface IEnvironmentSetting2 {
EnvironmentUIData: IEnvironmentUIData;
}
@ -262,6 +284,7 @@ export interface ITransitSettings {
PercentageOfMissingEnergyRestore: number;
PercentageOfMissingHealthRestore: number;
PercentageOfMissingWaterRestore: number;
RestoreHealthOnDestroyedParts: boolean;
ScavPriceMod: number;
UsecPriceMod: number;
active: boolean;
@ -634,6 +657,12 @@ export interface IEffects {
HeavyBleeding: IHeavyBleeding;
LightBleeding: ILightBleeding;
BodyTemperature: IBodyTemperature;
ZombieInfection: IZombieInfection;
}
export interface IZombieInfection {
Dehydration: number;
HearingDebuffPercentage: number;
СumulativeTime: number;
}
export interface IExistence {
EnergyLoopTime: number;
@ -1203,6 +1232,7 @@ export interface IInsurance {
CoefOfSendingMessageTime: number;
CoefOfHavingMarkOfUnknown: number;
EditionSendingMessageTime: Record<string, IMessageSendTImeMultipler>;
OnlyInDeathCase: boolean;
}
export interface IMessageSendTImeMultipler {
multiplier: number;

View File

@ -77,6 +77,7 @@ export interface ILocationBase {
EscapeTimeLimit: number;
EscapeTimeLimitCoop: number;
EscapeTimeLimitPVE: number;
Events: ILocationEvents;
exit_access_time: number;
ForceOnlineRaidInPVE: boolean;
exit_count: number;
@ -99,6 +100,7 @@ export interface ILocationBase {
export interface ITransit {
activateAfterSec: string;
active: boolean;
name: string;
conditions: string;
description: string;
id: number;
@ -271,10 +273,36 @@ export interface IWave {
slots_min: number;
time_max: number;
time_min: number;
/** OPTIONAL - Needs to be unique - Used by custom wave service to ensure same wave isnt added multiple times */
sptId?: string;
ChanceGroup?: number;
/** 'pve' and/or 'regular' */
SpawnMode: string[];
}
export interface ILocationEvents {
Halloween2024: IHalloween2024;
}
export interface IHalloween2024 {
CrowdAttackBlockRadius: number;
CrowdAttackSpawnParams: CrowdAttackSpawnParam[];
CrowdCooldownPerPlayerSec: number;
CrowdsLimit: number;
InfectedLookCoeff: number;
MaxCrowdAttackSpawnLimit: number;
MinInfectionPercentage: number;
MinSpawnDistToPlayer: number;
TargetPointSearchRadiusLimit: number;
ZombieCallDeltaRadius: number;
ZombieCallPeriodSec: number;
ZombieCallRadiusLimit: number;
ZombieMultiplier: number;
InfectionPercentage: number;
}
export interface CrowdAttackSpawnParam {
Difficulty: string;
Role: string;
Weight: number;
}
export declare enum WildSpawnType {
ASSAULT = "assault",
MARKSMAN = "marksman",

View File

@ -93,6 +93,7 @@ export interface IBotInfoSettings {
Experience: number;
StandingForKill: number;
AggressorBonus: number;
UseSimpleAnimator: boolean;
}
export interface IBan {
banType: BanType;
@ -218,6 +219,7 @@ export interface IVictim {
Level: number;
Weapon: string;
Role: string;
Location: string;
}
export interface ISessionCounters {
Items: ICounterKeyValue[];

View File

@ -97,10 +97,14 @@ export interface IDifficultyCategories {
Shoot: Record<string, string | number | boolean>;
}
export interface IExperience {
aggressorBonus: number;
/** key = bot difficulty */
aggressorBonus: Record<string, number>;
level: MinMax;
reward: MinMax;
standingForKill: number;
/** key = bot difficulty */
reward: Record<string, MinMax>;
/** key = bot difficulty */
standingForKill: Record<string, number>;
useSimpleAnimator: boolean;
}
export interface IGeneration {
items: IGenerationWeightingItems;

View File

@ -42,12 +42,18 @@ export interface IUpd {
SideEffect?: IUpdSideEffect;
RepairKit?: IUpdRepairKit;
CultistAmulet?: IUpdCultistAmulet;
PinLockState?: PinLockState;
}
export declare enum PinLockState {
FREE = "Free",
LOCKED = "Locked",
PINNED = "Pinned"
}
export interface IUpdBuff {
rarity: string;
buffType: string;
value: number;
thresholdDurability?: number;
Rarity: string;
BuffType: string;
Value: number;
ThresholdDurability?: number;
}
export interface IUpdTogglable {
On: boolean;

View File

@ -88,18 +88,23 @@ export interface IBarterScheme {
}
export interface ISuit {
_id: string;
externalObtain: boolean;
internalObtain: boolean;
isHiddenInPVE: boolean;
tid: string;
suiteId: string;
isActive: boolean;
requirements: ISuitRequirements;
}
export interface ISuitRequirements {
achievementRequirements: string[];
loyaltyLevel: number;
profileLevel: number;
standing: number;
skillRequirements: string[];
questRequirements: string[];
itemRequirements: ItemRequirement[];
requiredTid: string;
}
export interface ItemRequirement {
count: number;

View File

@ -17,6 +17,7 @@ export interface IHideoutProduction {
continuous: boolean;
count: number;
productionLimitCount: number;
isCodeProduction: boolean;
}
export interface IRequirement extends IRequirementBase {
templateId?: string;

View File

@ -1,4 +1,3 @@
import { IPostRaidPmcData } from "@spt/models/eft/common/IPmcData";
export interface IScavSaveRequestData {
profile: IPostRaidPmcData;
export interface IScavSaveRequestData extends IPostRaidPmcData {
}

View File

@ -0,0 +1,8 @@
import { PinLockState } from "../common/tables/IItem";
export interface IPinOrLockItemRequest {
Action: "PinLock";
/** Id of item being pinned */
Item: string;
/** "Pinned"/"Locked"/"Free" */
State: PinLockState;
}

View File

@ -13,14 +13,15 @@ export interface IEndLocalRaidRequestData {
}
export interface IEndRaidResult {
profile: IPmcData;
/** "Survived/Transit etc" */
result: string;
ExitStatus: ExitStatus;
/** "Survived/Transit" etc */
result: ExitStatus;
killerId: string;
killerAid: string;
/** "Gate 3" etc */
exitName: string;
inSession: boolean;
favorite: boolean;
/** Seconds in raid */
playTime: number;
}
export interface ILocationTransit {
@ -33,6 +34,8 @@ export interface ILocationTransit {
raidMode: string;
side: string;
dayTime: string;
/** The location player last visited */
sptLastVisitedLocation: string;
}
export interface ITransitProfile {
_id: string;

View File

@ -1,7 +1,8 @@
export declare enum ExitStatus {
SURVIVED = 0,
KILLED = 1,
LEFT = 2,
RUNNER = 3,
MISSINGINACTION = 4
SURVIVED = "Survived",
KILLED = "Killed",
LEFT = "Left",
RUNNER = "Runner",
MISSINGINACTION = "MissingInAction",
TRANSIT = "Transit"
}

View File

@ -25,5 +25,6 @@ export declare enum ItemEventActions {
REMOVE_EQUIPMENT_BUILD = "RemoveEquipmentBuild",
REDEEM_PROFILE_REWARD = "RedeemProfileReward",
SET_FAVORITE_ITEMS = "SetFavoriteItems",
QUEST_FAIL = "QuestFail"
QUEST_FAIL = "QuestFail",
PIN_LOCK = "PinLock"
}

View File

@ -3,5 +3,7 @@ export declare enum Season {
AUTUMN = 1,
WINTER = 2,
SPRING = 3,
STORM = 4
AUTUMN_LATE = 4,
SPRING_EARLY = 5,
STORM = 6
}

View File

@ -4,5 +4,5 @@ export declare enum SeasonalEventType {
HALLOWEEN = "Halloween",
NEW_YEARS = "NewYears",
PROMO = "Promo",
SNOW = "Snow"
APRIL_FOOLS = "AprilFools"
}

View File

@ -54,5 +54,10 @@ export declare enum WildSpawnTypeNumber {
SKIER = 53,
SECTANTPREDVESTNIK = 57,
SECTANTPRIZRAK = 58,
SECTANTONI = 59
SECTANTONI = 59,
INFECTEDASSAULT = 60,
INFECTEDPMC = 61,
INFECTEDCIVIL = 62,
INFECTEDLABORANT = 63,
INFECTEDTAGILLA = 64
}

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