Update types to match server

This commit is contained in:
Dev 2023-07-30 17:43:30 +01:00
parent 30186be2d2
commit edfffaa320
2201 changed files with 30281 additions and 12842 deletions

View File

@ -10,6 +10,7 @@ export declare class BotCallbacks {
constructor(botController: BotController, httpResponse: HttpResponseUtil);
/**
* Handle singleplayer/settings/bot/limit
* Is called by client to define each bot roles wave limit
* @returns string
*/
getBotLimit(url: string, info: IEmptyRequestData, sessionID: string): string;

View File

@ -13,6 +13,9 @@ export declare class BundleCallbacks {
protected httpConfig: IHttpConfig;
constructor(logger: ILogger, httpResponse: HttpResponseUtil, httpFileUtil: HttpFileUtil, bundleLoader: BundleLoader, configServer: ConfigServer);
sendBundle(sessionID: string, req: any, resp: any, body: any): any;
/**
* Handle singleplayer/bundles
*/
getBundles(url: string, info: any, sessionID: string): string;
getBundle(url: string, info: any, sessionID: string): string;
}

View File

@ -15,15 +15,21 @@ export declare class CustomizationCallbacks {
protected httpResponse: HttpResponseUtil;
constructor(customizationController: CustomizationController, saveServer: SaveServer, httpResponse: HttpResponseUtil);
/**
* Handles client/trading/customization/storage
* @returns
* Handle client/trading/customization/storage
* @returns IGetSuitsResponse
*/
getSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetSuitsResponse>;
/**
* Handles client/trading/customization
* Handle client/trading/customization
* @returns ISuit[]
*/
getTraderSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ISuit[]>;
/**
* Handle CustomizationWear event
*/
wearClothing(pmcData: IPmcData, body: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle CustomizationBuy event
*/
buyClothing(pmcData: IPmcData, body: IBuyClothingRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -4,7 +4,6 @@ import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IGlobals } from "../models/eft/common/IGlobals";
import { ICustomizationItem } from "../models/eft/common/tables/ICustomizationItem";
import { IHandbookBase } from "../models/eft/common/tables/IHandbookBase";
import { IQuest } from "../models/eft/common/tables/IQuest";
import { IGetItemPricesResponse } from "../models/eft/game/IGetItemPricesResponse";
import { IHideoutArea } from "../models/eft/hideout/IHideoutArea";
import { IHideoutProduction } from "../models/eft/hideout/IHideoutProduction";
@ -24,42 +23,54 @@ export declare class DataCallbacks {
protected hideoutController: HideoutController;
constructor(httpResponse: HttpResponseUtil, databaseServer: DatabaseServer, ragfairController: RagfairController, hideoutController: HideoutController);
/**
* Handles client/settings
* Handle client/settings
* @returns ISettingsBase
*/
getSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ISettingsBase>;
/**
* Handles client/globals
* Handle client/globals
* @returns IGlobals
*/
getGlobals(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGlobals>;
/**
* Handles client/items
* Handle client/items
* @returns string
*/
getTemplateItems(url: string, info: IEmptyRequestData, sessionID: string): string;
/**
* Handles client/handbook/templates
* Handle client/handbook/templates
* @returns IHandbookBase
*/
getTemplateHandbook(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHandbookBase>;
/**
* Handles client/customization
* Handle client/customization
* @returns Record<string, ICustomizationItem
*/
getTemplateSuits(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<Record<string, ICustomizationItem>>;
/**
* Handles client/account/customization
* Handle client/account/customization
* @returns string[]
*/
getTemplateCharacter(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<string[]>;
getTemplateQuests(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IQuest[]>;
/**
* Handle client/hideout/settings
* @returns IHideoutSettingsBase
*/
getHideoutSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutSettingsBase>;
getHideoutAreas(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutArea[]>;
gethideoutProduction(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutProduction[]>;
getHideoutScavcase(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IHideoutScavCase[]>;
/**
* Handle client/languages
*/
getLocalesLanguages(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<Record<string, string>>;
/**
* Handle client/menu/locale
*/
getLocalesMenu(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<string>;
/**
* Handle client/locale
*/
getLocalesGlobal(url: string, info: IEmptyRequestData, sessionID: string): string;
/**
* Handle client/hideout/qte/list

View File

@ -1,7 +1,7 @@
import { DialogueController } from "../controllers/DialogueController";
import { OnUpdate } from "../di/OnUpdate";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { IAcceptFriendRequestData } from "../models/eft/dialog/IAcceptFriendRequestData";
import { IAcceptFriendRequestData, ICancelFriendRequestData } from "../models/eft/dialog/IAcceptFriendRequestData";
import { IChatServer } from "../models/eft/dialog/IChatServer";
import { IClearMailMessageRequest } from "../models/eft/dialog/IClearMailMessageRequest";
import { IDeleteFriendRequest } from "../models/eft/dialog/IDeleteFriendRequest";
@ -33,13 +33,13 @@ export declare class DialogueCallbacks implements OnUpdate {
protected dialogueController: DialogueController;
constructor(hashUtil: HashUtil, timeUtil: TimeUtil, httpResponse: HttpResponseUtil, dialogueController: DialogueController);
/**
* Handles client/friend/list
* Handle client/friend/list
* @returns IGetFriendListDataResponse
*/
getFriendList(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IGetFriendListDataResponse>;
/**
* Handles client/chatServer/list
* @returns
* Handle client/chatServer/list
* @returns IChatServer[]
*/
getChatServerList(url: string, info: IGetChatServerListRequestData, sessionID: string): IGetBodyResponseData<IChatServer[]>;
/** Handle client/mail/dialog/list */
@ -50,21 +50,47 @@ export declare class DialogueCallbacks implements OnUpdate {
getMailDialogInfo(url: string, info: IGetMailDialogInfoRequestData, sessionID: string): IGetBodyResponseData<DialogueInfo>;
/** Handle client/mail/dialog/remove */
removeDialog(url: string, info: IRemoveDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
/** Handle client/mail/dialog/pin */
pinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
/** Handle client/mail/dialog/unpin */
unpinDialog(url: string, info: IPinDialogRequestData, sessionID: string): IGetBodyResponseData<any[]>;
/** Handle client/mail/dialog/read */
setRead(url: string, info: ISetDialogReadRequestData, sessionID: string): IGetBodyResponseData<any[]>;
/**
* Handles client/mail/dialog/getAllAttachments
* Handle client/mail/dialog/getAllAttachments
* @returns IGetAllAttachmentsResponse
*/
getAllAttachments(url: string, info: IGetAllAttachmentsRequestData, sessionID: string): IGetBodyResponseData<IGetAllAttachmentsResponse>;
/** Handle client/mail/msg/send */
sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<string>;
/** Handle client/friend/request/list/outbox */
listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
/**
* Handle client/friend/request/list/inbox
*/
listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<any[]>;
/**
* Handle client/friend/request/send
*/
sendFriendRequest(url: string, request: IFriendRequestData, sessionID: string): IGetBodyResponseData<IFriendRequestSendResponse>;
/**
* Handle client/friend/request/accept
*/
acceptFriendRequest(url: string, request: IAcceptFriendRequestData, sessionID: string): IGetBodyResponseData<boolean>;
/**
* Handle client/friend/request/cancel
*/
cancelFriendRequest(url: string, request: ICancelFriendRequestData, sessionID: string): IGetBodyResponseData<boolean>;
/** Handle client/friend/delete */
deleteFriend(url: string, request: IDeleteFriendRequest, sessionID: string): INullResponseData;
sendMessage(url: string, request: ISendMessageRequest, sessionID: string): IGetBodyResponseData<number>;
/** Handle client/friend/ignore/set */
ignoreFriend(url: string, request: {
uid: string;
}, sessionID: string): any;
/** Handle client/friend/ignore/remove */
unIgnoreFriend(url: string, request: {
uid: string;
}, sessionID: string): any;
clearMail(url: string, request: IClearMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>;
removeMail(url: string, request: IRemoveMailMessageRequest, sessionID: string): IGetBodyResponseData<any[]>;
onUpdate(timeSinceLastRun: number): Promise<boolean>;

View File

@ -1,6 +1,7 @@
import { GameController } from "../controllers/GameController";
import { IEmptyRequestData } from "../models/eft/common/IEmptyRequestData";
import { ICheckVersionResponse } from "../models/eft/game/ICheckVersionResponse";
import { ICurrentGroupResponse } from "../models/eft/game/ICurrentGroupResponse";
import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
import { IGameEmptyCrcRequestData } from "../models/eft/game/IGameEmptyCrcRequestData";
import { IGameKeepAliveResponse } from "../models/eft/game/IGameKeepAliveResponse";
@ -41,8 +42,17 @@ declare class GameCallbacks {
* @returns IGameConfigResponse
*/
getGameConfig(url: string, info: IGameEmptyCrcRequestData, sessionID: string): IGetBodyResponseData<IGameConfigResponse>;
/**
* Handle client/server/list
*/
getServer(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IServerDetails[]>;
getCurrentGroup(url: string, info: IEmptyRequestData, sessionID: string): any;
/**
* Handle client/match/group/current
*/
getCurrentGroup(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ICurrentGroupResponse>;
/**
* Handle client/checkVersion
*/
validateGameVersion(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ICheckVersionResponse>;
/**
* Handle client/game/keepalive

View File

@ -23,11 +23,11 @@ export declare class HideoutCallbacks implements OnUpdate {
constructor(hideoutController: HideoutController, // TODO: delay needed
configServer: ConfigServer);
/**
* Handle HideoutUpgrade
* Handle HideoutUpgrade event
*/
upgrade(pmcData: IPmcData, body: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutUpgradeComplete
* Handle HideoutUpgradeComplete event
*/
upgradeComplete(pmcData: IPmcData, body: IHideoutUpgradeCompleteRequestData, sessionID: string): IItemEventRouterResponse;
/**
@ -35,19 +35,19 @@ export declare class HideoutCallbacks implements OnUpdate {
*/
putItemsInAreaSlots(pmcData: IPmcData, body: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutTakeItemsFromAreaSlots
* Handle HideoutTakeItemsFromAreaSlots event
*/
takeItemsFromAreaSlots(pmcData: IPmcData, body: IHideoutTakeItemOutRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutToggleArea
* Handle HideoutToggleArea event
*/
toggleArea(pmcData: IPmcData, body: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutSingleProductionStart
* Handle HideoutSingleProductionStart event
*/
singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutScavCaseProductionStart
* Handle HideoutScavCaseProductionStart event
*/
scavCaseProductionStart(pmcData: IPmcData, body: IHideoutScavCaseStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
@ -55,7 +55,7 @@ export declare class HideoutCallbacks implements OnUpdate {
*/
continuousProductionStart(pmcData: IPmcData, body: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutTakeProduction
* Handle HideoutTakeProduction event
*/
takeProduction(pmcData: IPmcData, body: IHideoutTakeProductionRequestData, sessionID: string): IItemEventRouterResponse;
/**

View File

@ -12,6 +12,7 @@ export declare class InraidCallbacks {
constructor(inraidController: InraidController, httpResponse: HttpResponseUtil);
/**
* Handle client/location/getLocalloot
* Store active map in profile + applicationContext
* @param url
* @param info register player request
* @param sessionID Session id

View File

@ -23,7 +23,7 @@ export declare class InsuranceCallbacks implements OnUpdate {
*/
getInsuranceCost(url: string, info: IGetInsuranceCostRequestData, sessionID: string): IGetBodyResponseData<IGetInsuranceCostResponseData>;
/**
* Handle Insure
* Handle Insure event
* @returns IItemEventRouterResponse
*/
insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse;

View File

@ -26,16 +26,20 @@ export declare class InventoryCallbacks {
splitItem(pmcData: IPmcData, body: IInventorySplitRequestData, sessionID: string): IItemEventRouterResponse;
mergeItem(pmcData: IPmcData, body: IInventoryMergeRequestData, sessionID: string): IItemEventRouterResponse;
transferItem(pmcData: IPmcData, body: IInventoryTransferRequestData, sessionID: string): IItemEventRouterResponse;
/** Handle Swap */
swapItem(pmcData: IPmcData, body: IInventorySwapRequestData, sessionID: string): IItemEventRouterResponse;
foldItem(pmcData: IPmcData, body: IInventoryFoldRequestData, sessionID: string): IItemEventRouterResponse;
toggleItem(pmcData: IPmcData, body: IInventoryToggleRequestData, sessionID: string): IItemEventRouterResponse;
tagItem(pmcData: IPmcData, body: IInventoryTagRequestData, sessionID: string): IItemEventRouterResponse;
bindItem(pmcData: IPmcData, body: IInventoryBindRequestData, sessionID: string): IItemEventRouterResponse;
examineItem(pmcData: IPmcData, body: IInventoryExamineRequestData, sessionID: string): IItemEventRouterResponse;
/** Handle ReadEncyclopedia */
readEncyclopedia(pmcData: IPmcData, body: IInventoryReadEncyclopediaRequestData, sessionID: string): IItemEventRouterResponse;
/** Handle ApplyInventoryChanges */
sortInventory(pmcData: IPmcData, body: IInventorySortRequestData, sessionID: string): IItemEventRouterResponse;
createMapMarker(pmcData: IPmcData, body: IInventoryCreateMarkerRequestData, sessionID: string): IItemEventRouterResponse;
deleteMapMarker(pmcData: IPmcData, body: IInventoryDeleteMarkerRequestData, sessionID: string): IItemEventRouterResponse;
editMapMarker(pmcData: IPmcData, body: IInventoryEditMarkerRequestData, sessionID: string): IItemEventRouterResponse;
/** Handle OpenRandomLootContainer */
openRandomLootContainer(pmcData: IPmcData, body: IOpenRandomLootContainerRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -9,7 +9,10 @@ export declare class LocationCallbacks {
protected httpResponse: HttpResponseUtil;
protected locationController: LocationController;
constructor(httpResponse: HttpResponseUtil, locationController: LocationController);
/** Handle client/locations */
getLocationData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ILocationsGenerateAllResponse>;
/** Handle client/location/getLocalloot */
getLocation(url: string, info: IGetLocationRequestData, sessionID: string): IGetBodyResponseData<ILocationBase>;
/** Handle client/location/getAirdropLoot */
getAirdropLoot(url: string, info: IEmptyRequestData, sessionID: string): string;
}

View File

@ -27,11 +27,14 @@ export declare class MatchCallbacks {
protected matchController: MatchController;
protected databaseServer: DatabaseServer;
constructor(httpResponse: HttpResponseUtil, jsonUtil: JsonUtil, matchController: MatchController, databaseServer: DatabaseServer);
/** Handle client/match/updatePing */
updatePing(url: string, info: IUpdatePingRequestData, sessionID: string): INullResponseData;
exitMatch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
/** Handle client/match/group/exit_from_menu */
exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData;
/** Handle client/match/group/invite/send */
sendGroupInvite(url: string, info: ISendGroupInviteRequest, sessionID: string): IGetBodyResponseData<string>;
/** Handle client/match/group/invite/accept */
acceptGroupInvite(url: string, info: IAcceptGroupInviteRequest, sessionID: string): IGetBodyResponseData<IAcceptGroupInviteResponse[]>;
@ -39,21 +42,32 @@ export declare class MatchCallbacks {
cancelGroupInvite(url: string, info: ICancelGroupInviteRequest, sessionID: string): IGetBodyResponseData<boolean>;
/** Handle client/match/group/transfer */
transferGroup(url: string, info: ITransferGroupRequest, sessionID: string): IGetBodyResponseData<boolean>;
/** Handle client/match/group/invite/cancel-all */
cancelAllGroupInvite(url: string, info: any, sessionID: string): INullResponseData;
/** @deprecated - not called on raid start/end or game start/exit */
putMetrics(url: string, info: IPutMetricsRequestData, sessionID: string): INullResponseData;
/** Handle raid/profile/list */
getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>;
serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<boolean>;
/** Handle match/group/start_game */
joinMatch(url: string, info: IJoinMatchRequestData, sessionID: string): IGetBodyResponseData<IJoinMatchResult>;
/** Handle client/getMetricsConfig */
getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData<string>;
/**
* @deprecated - not called on raid start/end or game start/exit
* Handle client/match/group/status
* @returns
*/
getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData<any>;
/** Handle client/match/group/create */
createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData<any>;
/** Handle client/match/group/delete */
deleteGroup(url: string, info: any, sessionID: string): INullResponseData;
leaveGroup(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<boolean>;
/** Handle client/match/group/player/remove */
removePlayerFromGroup(url: string, info: IRemovePlayerFromGroupRequest, sessionID: string): INullResponseData;
/** Handle client/match/offline/end */
endOfflineRaid(url: string, info: IEndOfflineRaidRequestData, sessionID: string): INullResponseData;
/** Handle client/raid/configuration */
getRaidConfiguration(url: string, info: IGetRaidConfigurationRequestData, sessionID: string): INullResponseData;
}

View File

@ -5,7 +5,10 @@ import { INoteActionData } from "../models/eft/notes/INoteActionData";
export declare class NoteCallbacks {
protected noteController: NoteController;
constructor(noteController: NoteController);
/** Handle AddNote event */
addNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
/** Handle EditNote event */
editNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
/** Handle DeleteNote event */
deleteNote(pmcData: IPmcData, body: INoteActionData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -18,7 +18,10 @@ export declare class NotifierCallbacks {
* and the client would abort the connection due to spam.
*/
sendNotification(sessionID: string, req: any, resp: any, data: any): void;
/** Handle push/notifier/get */
/** Handle push/notifier/getwebsocket */
getNotifier(url: string, info: any, sessionID: string): IGetBodyResponseData<any[]>;
/** Handle client/notifier/channel/create */
createNotifierChannel(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<INotifierChannel>;
/**
* Handle client/game/profile/select

View File

@ -10,7 +10,10 @@ export declare class PresetBuildCallbacks {
protected httpResponse: HttpResponseUtil;
protected presetBuildController: PresetBuildController;
constructor(httpResponse: HttpResponseUtil, presetBuildController: PresetBuildController);
/** Handle client/handbook/builds/my/list */
getHandbookUserlist(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<WeaponBuild[]>;
/** Handle SaveBuild event */
saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;
/** Handle RemoveBuild event*/
removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -20,16 +20,17 @@ export declare class ProfileCallbacks {
protected timeUtil: TimeUtil;
protected profileController: ProfileController;
constructor(httpResponse: HttpResponseUtil, timeUtil: TimeUtil, profileController: ProfileController);
/**
* Handle client/game/profile/create
*/
createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData<any>;
/**
* Handle client/game/profile/list
* Get the complete player profile (scav + pmc character)
* @param url
* @param info Empty
* @param sessionID Session id
* @returns Profile object
*/
getProfileData(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>;
/**
* Handle client/game/profile/savage/regenerate
* Handle the creation of a scav profile for player
* Occurs post-raid and when profile first created immediately after character details are confirmed by player
* @param url
@ -40,33 +41,40 @@ export declare class ProfileCallbacks {
regenerateScav(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IPmcData[]>;
/**
* Handle client/game/profile/voice/change event
* @param url
* @param info Change voice request object
* @param sessionID Session id
* @returns Client response
*/
changeVoice(url: string, info: IProfileChangeVoiceRequestData, sessionID: string): INullResponseData;
/**
* Handle client/game/profile/nickname/change event
* Client allows player to adjust their profile name
* @param url
* @param info Change nickname request object
* @param sessionID Session id
* @returns client response
*/
changeNickname(url: string, info: IProfileChangeNicknameRequestData, sessionID: string): IGetBodyResponseData<any>;
/**
* Handle client/game/profile/nickname/validate
*/
validateNickname(url: string, info: IValidateNicknameRequestData, sessionID: string): IGetBodyResponseData<any>;
/**
* Handle client/game/profile/nickname/reserved
*/
getReservedNickname(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<string>;
/**
* Handle client/profile/status
* Called when creating a character when choosing a character face/voice
* @param url
* @param info response (empty)
* @param sessionID
* @returns
*/
getProfileStatus(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<GetProfileStatusResponseData>;
/**
* Handle client/profile/settings
*/
getProfileSettings(url: string, info: IGetProfileSettingsRequest, sessionId: string): IGetBodyResponseData<string>;
/**
* Handle client/game/profile/search
*/
searchFriend(url: string, info: ISearchFriendRequestData, sessionID: string): IGetBodyResponseData<ISearchFriendResponse[]>;
/**
* Handle launcher/profile/info
*/
getMiniProfile(url: string, info: IGetMiniProfileRequestData, sessionID: string): string;
getAllMiniProfiles(url: string, info: any, sessionID: string): string;
/**
* Handle /launcher/profiles
*/
getAllMiniProfiles(url: string, info: IEmptyRequestData, sessionID: string): string;
}

View File

@ -17,17 +17,28 @@ export declare class QuestCallbacks {
protected questController: QuestController;
protected repeatableQuestController: RepeatableQuestController;
constructor(httpResponse: HttpResponseUtil, questController: QuestController, repeatableQuestController: RepeatableQuestController);
/**
* Handle RepeatableQuestChange event
*/
changeRepeatableQuest(pmcData: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse;
/**
* Handle QuestAccept event
*/
acceptQuest(pmcData: IPmcData, body: IAcceptQuestRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle QuestComplete event
*/
completeQuest(pmcData: IPmcData, body: ICompleteQuestRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle QuestHandover event
*/
handoverQuest(pmcData: IPmcData, body: IHandoverQuestRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle client/quest/list
* @param url
* @param info
* @param sessionID
* @returns
*/
listQuests(url: string, info: IListQuestsRequestData, sessionID: string): IGetBodyResponseData<IQuest[]>;
/**
* Handle client/repeatalbeQuests/activityPeriods
*/
activityPeriods(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<IPmcDataRepeatableQuest[]>;
}

View File

@ -32,16 +32,25 @@ export declare class RagfairCallbacks implements OnLoad, OnUpdate {
constructor(httpResponse: HttpResponseUtil, jsonUtil: JsonUtil, ragfairServer: RagfairServer, ragfairController: RagfairController, configServer: ConfigServer);
onLoad(): Promise<void>;
getRoute(): string;
onUpdate(timeSinceLastRun: number): Promise<boolean>;
/**
* Handle client/ragfair/search
* Handle client/ragfair/find
*/
search(url: string, info: ISearchRequestData, sessionID: string): IGetBodyResponseData<IGetOffersResult>;
/** Handle client/ragfair/itemMarketPrice */
getMarketPrice(url: string, info: IGetMarketPriceRequestData, sessionID: string): IGetBodyResponseData<IGetItemPriceResult>;
/** Handle RagFairAddOffer event */
addOffer(pmcData: IPmcData, info: IAddOfferRequestData, sessionID: string): IItemEventRouterResponse;
/** \Handle RagFairRemoveOffer event */
removeOffer(pmcData: IPmcData, info: IRemoveOfferRequestData, sessionID: string): IItemEventRouterResponse;
/** Handle RagFairRenewOffer event */
extendOffer(pmcData: IPmcData, info: IExtendOfferRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle /client/items/prices
* Called when clicking an item to list on flea
*/
getFleaPrices(url: string, request: IEmptyRequestData, sessionID: string): IGetBodyResponseData<Record<string, number>>;
onUpdate(timeSinceLastRun: number): Promise<boolean>;
/** Handle client/reports/ragfair/send */
sendReport(url: string, info: ISendRagfairReportRequestData, sessionID: string): INullResponseData;
}

View File

@ -7,19 +7,21 @@ export declare class RepairCallbacks {
protected repairController: RepairController;
constructor(repairController: RepairController);
/**
* Handle TraderRepair event
* use trader to repair item
* @param pmcData
* @param body
* @param sessionID
* @returns
* @param pmcData Player profile
* @param traderRepairRequest Request object
* @param sessionID Session id
* @returns IItemEventRouterResponse
*/
traderRepair(pmcData: IPmcData, body: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
traderRepair(pmcData: IPmcData, traderRepairRequest: ITraderRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
/**
* Handle Repair event
* Use repair kit to repair item
* @param pmcData
* @param body
* @param sessionID
* @returns
* @param pmcData Player profile
* @param repairRequest Request object
* @param sessionID Session id
* @returns IItemEventRouterResponse
*/
repair(pmcData: IPmcData, body: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
repair(pmcData: IPmcData, repairRequest: IRepairActionDataRequest, sessionID: string): IItemEventRouterResponse;
}

View File

@ -7,8 +7,9 @@ export declare class TradeCallbacks {
protected tradeController: TradeController;
constructor(tradeController: TradeController);
/**
* Handle client/game/profile/items/moving TradingConfirm
* Handle client/game/profile/items/moving TradingConfirm event
*/
processTrade(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse;
/** Handle RagFairBuyOffer event */
processRagfairTrade(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -12,7 +12,10 @@ export declare class TraderCallbacks implements OnLoad, OnUpdate {
onLoad(): Promise<void>;
onUpdate(): Promise<boolean>;
getRoute(): string;
/** Handle client/trading/api/traderSettings */
getTraderSettings(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderBase[]>;
/** Handle client/trading/api/getTrader */
getTrader(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderBase>;
/** Handle client/trading/api/getTraderAssort */
getAssort(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData<ITraderAssort>;
}

View File

@ -5,6 +5,8 @@ import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData"
export declare class WishlistCallbacks {
protected wishlistController: WishlistController;
constructor(wishlistController: WishlistController);
/** Handle AddToWishList event */
addToWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
/** Handle RemoveFromWishList event */
removeFromWishlist(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -38,6 +38,7 @@ export declare class BotController {
*/
getBotPresetGenerationLimit(type: string): number;
/**
* Handle singleplayer/settings/bot/difficulty
* Get the core.json difficulty settings from database\bots
* @returns IBotCore
*/

View File

@ -28,9 +28,13 @@ export declare class CustomizationController {
* @returns ISuit array
*/
getTraderSuits(traderID: string, sessionID: string): ISuit[];
/** Equip one to many clothing items to player */
/**
* Handle CustomizationWear event
* Equip one to many clothing items to player
*/
wearClothing(pmcData: IPmcData, wearClothingRequest: IWearClothingRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle CustomizationBuy event
* Purchase/unlock a clothing item from a trader
* @param pmcData Player profile
* @param buyClothingRequest Request object
@ -42,8 +46,8 @@ export declare class CustomizationController {
/**
* Has an outfit been purchased by a player
* @param suitId clothing id
* @param sessionID Session id
* @returns true if purchased already
* @param sessionID Session id of profile to check for clothing in
* @returns true if already purchased
*/
protected outfitAlreadyPurchased(suitId: string, sessionID: string): boolean;
/**
@ -60,7 +64,6 @@ export declare class CustomizationController {
* @param pmcData Player profile
* @param clothingItem Clothing item purchased
* @param output Client response
* @returns
*/
protected payForClothingItem(sessionId: string, pmcData: IPmcData, clothingItem: ClothingItem, output: IItemEventRouterResponse): void;
protected getAllTraderSuits(sessionID: string): ISuit[];

View File

@ -1,18 +1,39 @@
import { DialogueHelper } from "../helpers/DialogueHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { IGetAllAttachmentsResponse } from "../models/eft/dialog/IGetAllAttachmentsResponse";
import { IGetFriendListDataResponse } from "../models/eft/dialog/IGetFriendListDataResponse";
import { IGetMailDialogViewRequestData } from "../models/eft/dialog/IGetMailDialogViewRequestData";
import { IGetMailDialogViewResponseData } from "../models/eft/dialog/IGetMailDialogViewResponseData";
import { DialogueInfo, IAkiProfile, IUserDialogInfo, Message } from "../models/eft/profile/IAkiProfile";
import { ISendMessageRequest } from "../models/eft/dialog/ISendMessageRequest";
import { Dialogue, DialogueInfo, IAkiProfile, IUserDialogInfo, Message } from "../models/eft/profile/IAkiProfile";
import { MessageType } from "../models/enums/MessageType";
import { ILogger } from "../models/spt/utils/ILogger";
import { SaveServer } from "../servers/SaveServer";
import { GiftService } from "../services/GiftService";
import { MailSendService } from "../services/MailSendService";
import { HashUtil } from "../utils/HashUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class DialogueController {
protected logger: ILogger;
protected saveServer: SaveServer;
protected timeUtil: TimeUtil;
protected dialogueHelper: DialogueHelper;
constructor(saveServer: SaveServer, timeUtil: TimeUtil, dialogueHelper: DialogueHelper);
protected profileHelper: ProfileHelper;
protected randomUtil: RandomUtil;
protected mailSendService: MailSendService;
protected giftService: GiftService;
protected hashUtil: HashUtil;
constructor(logger: ILogger, saveServer: SaveServer, timeUtil: TimeUtil, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, randomUtil: RandomUtil, mailSendService: MailSendService, giftService: GiftService, hashUtil: HashUtil);
/** Handle onUpdate spt event */
update(): void;
/**
* Handle client/friend/list
* @returns IGetFriendListDataResponse
*/
getFriendList(sessionID: string): IGetFriendListDataResponse;
/**
* Handle client/mail/dialog/list
* Create array holding trader dialogs and mail interactions with player
* Set the content of the dialogue on the list tab.
* @param sessionID Session Id
@ -27,15 +48,37 @@ export declare class DialogueController {
*/
getDialogueInfo(dialogueID: string, sessionID: string): DialogueInfo;
/**
* Get the users involved in a dialog (player + other party)
* @param dialog The dialog to check for users
* @param messageType What type of message is being sent
* @param sessionID Player id
* @returns IUserDialogInfo array
*/
getDialogueUsers(dialog: Dialogue, messageType: MessageType, sessionID: string): IUserDialogInfo[];
/**
* Handle client/mail/dialog/view
* Handle player clicking 'messenger' and seeing all the messages they've recieved
* Set the content of the dialogue on the details panel, showing all the messages
* for the specified dialogue.
* @param dialogueID Dialog id
* @param sessionID Session id
* @param request Get dialog request
* @param sessionId Session id
* @returns IGetMailDialogViewResponseData object
*/
generateDialogueView(dialogueID: string, sessionID: string): IGetMailDialogViewResponseData;
protected getProfilesForMail(pmcProfile: IAkiProfile, dialogUsers: IUserDialogInfo[]): IUserDialogInfo[];
generateDialogueView(request: IGetMailDialogViewRequestData, sessionId: string): IGetMailDialogViewResponseData;
/**
* Get dialog from player profile, create if doesn't exist
* @param profile Player profile
* @param request get dialog request (params used when dialog doesnt exist in profile)
* @returns Dialogue
*/
protected getDialogByIdFromProfile(profile: IAkiProfile, request: IGetMailDialogViewRequestData): Dialogue;
/**
* Get the users involved in a mail between two entities
* @param fullProfile Player profile
* @param dialogUsers The participants of the mail
* @returns IUserDialogInfo array
*/
protected getProfilesForMail(fullProfile: IAkiProfile, dialogUsers: IUserDialogInfo[]): IUserDialogInfo[];
/**
* Get a count of messages with attachments from a particular dialog
* @param sessionID Session id
@ -49,16 +92,39 @@ export declare class DialogueController {
* @returns true if uncollected rewards found
*/
protected messagesHaveUncollectedRewards(messages: Message[]): boolean;
removeDialogue(dialogueID: string, sessionID: string): void;
setDialoguePin(dialogueID: string, shouldPin: boolean, sessionID: string): void;
setRead(dialogueIDs: string[], sessionID: string): void;
/**
* Handle client/mail/dialog/remove
* Remove an entire dialog with an entity (trader/user)
* @param dialogueId id of the dialog to remove
* @param sessionId Player id
*/
removeDialogue(dialogueId: string, sessionId: string): void;
/** Handle client/mail/dialog/pin && Handle client/mail/dialog/unpin */
setDialoguePin(dialogueId: string, shouldPin: boolean, sessionId: string): void;
/**
* Handle client/mail/dialog/read
* Set a dialog to be read (no number alert/attachment alert)
* @param dialogueIds Dialog ids to set as read
* @param sessionId Player profile id
*/
setRead(dialogueIds: string[], sessionId: string): void;
/**
* Handle client/mail/dialog/getAllAttachments
* Get all uncollected items attached to mail in a particular dialog
* @param dialogueID Dialog to get mail attachments from
* @param sessionID Session id
* @param dialogueId Dialog to get mail attachments from
* @param sessionId Session id
* @returns
*/
getAllAttachments(dialogueID: string, sessionID: string): IGetAllAttachmentsResponse;
getAllAttachments(dialogueId: string, sessionId: string): IGetAllAttachmentsResponse;
/** client/mail/msg/send */
sendMessage(sessionId: string, request: ISendMessageRequest): string;
/**
* Send responses back to player when they communicate with SPT friend on friends list
* @param sessionId Session Id
* @param request send message request
*/
protected handleChatWithSPTFriend(sessionId: string, request: ISendMessageRequest): void;
protected getSptFriendData(friendId?: string): IUserDialogInfo;
/**
* Get messages from a specific dialog that have items not expired
* @param sessionId Session id

View File

@ -8,6 +8,7 @@ import { IPmcData } from "../models/eft/common/IPmcData";
import { ICheckVersionResponse } from "../models/eft/game/ICheckVersionResponse";
import { ICurrentGroupResponse } from "../models/eft/game/ICurrentGroupResponse";
import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
import { IGameKeepAliveResponse } from "../models/eft/game/IGameKeepAliveResponse";
import { IServerDetails } from "../models/eft/game/IServerDetails";
import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig";
@ -17,6 +18,7 @@ import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { CustomLocationWaveService } from "../services/CustomLocationWaveService";
import { GiftService } from "../services/GiftService";
import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService";
@ -39,14 +41,40 @@ export declare class GameController {
protected customLocationWaveService: CustomLocationWaveService;
protected openZoneService: OpenZoneService;
protected seasonalEventService: SeasonalEventService;
protected giftService: GiftService;
protected applicationContext: ApplicationContext;
protected configServer: ConfigServer;
protected os: any;
protected httpConfig: IHttpConfig;
protected coreConfig: ICoreConfig;
protected locationConfig: ILocationConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, applicationContext: ApplicationContext, configServer: ConfigServer);
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
/**
* Handle client/game/start
*/
gameStart(_url: string, _info: IEmptyRequestData, sessionID: string, startTimeStampMS: number): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void;
/**
* Handle client/game/config
*/
getGameConfig(sessionID: string): IGameConfigResponse;
/**
* Handle client/server/list
*/
getServer(sessionId: string): IServerDetails[];
/**
* Handle client/match/group/current
*/
getCurrentGroup(sessionId: string): ICurrentGroupResponse;
/**
* Handle client/checkVersion
*/
getValidGameVersion(sessionId: string): ICheckVersionResponse;
/**
* Handle client/game/keepalive
*/
getKeepAlive(sessionId: string): IGameKeepAliveResponse;
/**
* BSG have two values for shotgun dispersion, we make sure both have the same value
*/
@ -70,6 +98,11 @@ export declare class GameController {
* Make Rogues spawn later to allow for scavs to spawn first instead of rogues filling up all spawn positions
*/
protected fixRoguesSpawningInstantlyOnLighthouse(): void;
/**
* 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
*/
@ -79,6 +112,10 @@ export declare class GameController {
* @param fullProfile Profile to add mod details to
*/
protected saveActiveModsToProfile(fullProfile: IAkiProfile): void;
/**
* Check for any missing assorts inside each traders assort.json data, checking against traders qeustassort.json
*/
protected validateQuestAssortUnlocksExist(): void;
/**
* Add the logged in players name to PMC name pool
* @param pmcProfile
@ -93,8 +130,4 @@ export declare class GameController {
*/
protected adjustLabsRaiderSpawnRate(): void;
protected logProfileDetails(fullProfile: IAkiProfile): void;
getGameConfig(sessionID: string): IGameConfigResponse;
getServer(): IServerDetails[];
getCurrentGroup(sessionId: string): ICurrentGroupResponse;
getValidGameVersion(): ICheckVersionResponse;
}

View File

@ -12,6 +12,7 @@ import { ILogger } from "../models/spt/utils/ILogger";
import { EventOutputHolder } from "../routers/EventOutputHolder";
import { LocalisationService } from "../services/LocalisationService";
import { PaymentService } from "../services/PaymentService";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { JsonUtil } from "../utils/JsonUtil";
export declare class HealthController {
protected logger: ILogger;
@ -21,8 +22,9 @@ export declare class HealthController {
protected paymentService: PaymentService;
protected inventoryHelper: InventoryHelper;
protected localisationService: LocalisationService;
protected httpResponse: HttpResponseUtil;
protected healthHelper: HealthHelper;
constructor(logger: ILogger, jsonUtil: JsonUtil, eventOutputHolder: EventOutputHolder, itemHelper: ItemHelper, paymentService: PaymentService, inventoryHelper: InventoryHelper, localisationService: LocalisationService, healthHelper: HealthHelper);
constructor(logger: ILogger, jsonUtil: JsonUtil, eventOutputHolder: EventOutputHolder, itemHelper: ItemHelper, paymentService: PaymentService, inventoryHelper: InventoryHelper, localisationService: LocalisationService, httpResponse: HttpResponseUtil, healthHelper: HealthHelper);
/**
* stores in-raid player health
* @param pmcData Player profile
@ -40,6 +42,7 @@ export declare class HealthController {
*/
offraidHeal(pmcData: IPmcData, body: IOffraidHealRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle Eat event
* Consume food/water outside of a raid
* @param pmcData Player profile
* @param body request Object
@ -48,6 +51,7 @@ export declare class HealthController {
*/
offraidEat(pmcData: IPmcData, body: IOffraidEatRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle RestoreHealth event
* Occurs on post-raid healing page
* @param pmcData player profile
* @param healthTreatmentRequest Request data from client

View File

@ -59,6 +59,7 @@ export declare class HideoutController {
protected hideoutConfig: IHideoutConfig;
constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, randomUtil: RandomUtil, inventoryHelper: InventoryHelper, saveServer: SaveServer, playerService: PlayerService, presetHelper: PresetHelper, paymentHelper: PaymentHelper, eventOutputHolder: EventOutputHolder, httpResponse: HttpResponseUtil, profileHelper: ProfileHelper, hideoutHelper: HideoutHelper, scavCaseRewardGenerator: ScavCaseRewardGenerator, localisationService: LocalisationService, configServer: ConfigServer, jsonUtil: JsonUtil, fenceService: FenceService);
/**
* Handle HideoutUpgrade event
* Start a hideout area upgrade
* @param pmcData Player profile
* @param request upgrade start request
@ -67,6 +68,7 @@ export declare class HideoutController {
*/
startUpgrade(pmcData: IPmcData, request: IHideoutUpgradeRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutUpgradeComplete event
* Complete a hideout area upgrade
* @param pmcData Player profile
* @param request Completed upgrade request
@ -84,6 +86,7 @@ export declare class HideoutController {
*/
putItemsInAreaSlots(pmcData: IPmcData, addItemToHideoutRequest: IHideoutPutItemInRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutTakeItemsFromAreaSlots event
* Remove item from hideout area and place into player inventory
* @param pmcData Player profile
* @param request Take item out of area request
@ -102,6 +105,7 @@ export declare class HideoutController {
*/
protected removeResourceFromArea(sessionID: string, pmcData: IPmcData, removeResourceRequest: IHideoutTakeItemOutRequestData, output: IItemEventRouterResponse, hideoutArea: HideoutArea): IItemEventRouterResponse;
/**
* Handle HideoutToggleArea event
* Toggle area on/off
* @param pmcData Player profile
* @param request Toggle area request
@ -110,6 +114,7 @@ export declare class HideoutController {
*/
toggleArea(pmcData: IPmcData, request: IHideoutToggleAreaRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutSingleProductionStart event
* Start production for an item from hideout area
* @param pmcData Player profile
* @param body Start prodution of single item request
@ -118,6 +123,7 @@ export declare class HideoutController {
*/
singleProductionStart(pmcData: IPmcData, body: IHideoutSingleProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutScavCaseProductionStart event
* Handles event after clicking 'start' on the scav case hideout page
* @param pmcData player profile
* @param body client request object
@ -149,6 +155,7 @@ export declare class HideoutController {
*/
continuousProductionStart(pmcData: IPmcData, request: IHideoutContinuousProductionStartRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle HideoutTakeProduction event
* Take completed item out of hideout area and place into player inventory
* @param pmcData Player profile
* @param request Remove production from area request

View File

@ -10,6 +10,7 @@ import { IPmcData } from "../models/eft/common/IPmcData";
import { Item } from "../models/eft/common/tables/IItem";
import { IRegisterPlayerRequestData } from "../models/eft/inRaid/IRegisterPlayerRequestData";
import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData";
import { PlayerRaidEndState } from "../models/enums/PlayerRaidEndState";
import { IAirdropConfig } from "../models/spt/config/IAirdropConfig";
import { IInRaidConfig } from "../models/spt/config/IInRaidConfig";
import { ILogger } from "../models/spt/utils/ILogger";
@ -52,6 +53,7 @@ export declare class InraidController {
*/
addPlayer(sessionID: string, info: IRegisterPlayerRequestData): void;
/**
* Handle raid/profile/save
* Save profile state to disk
* Handles pmc/pscav
* @param offraidData post-raid request data
@ -98,7 +100,7 @@ export declare class InraidController {
* @param statusOnExit exit value from offraidData object
* @returns true if dead
*/
protected isPlayerDead(statusOnExit: string): boolean;
protected isPlayerDead(statusOnExit: PlayerRaidEndState): boolean;
/**
* Mark inventory items as FiR if player survived raid, otherwise remove FiR from them
* @param offraidData Save Progress Request

View File

@ -45,6 +45,7 @@ export declare class InsuranceController {
*/
protected itemShouldBeLost(insuredItem: Item, traderId: string, itemsBeingDeleted: string[]): boolean;
/**
* Handle Insure event
* Add insurance to an item
* @param pmcData Player profile
* @param body Insurance request
@ -53,6 +54,7 @@ export declare class InsuranceController {
*/
insure(pmcData: IPmcData, body: IInsureRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Handle client/insurance/items/list/cost
* Calculate insurance cost
* @param info request object
* @param sessionID session id

View File

@ -4,8 +4,8 @@ import { ItemHelper } from "../helpers/ItemHelper";
import { PaymentHelper } from "../helpers/PaymentHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestHelper } from "../helpers/QuestHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { IAddItemRequestData } from "../models/eft/inventory/IAddItemRequestData";
import { IInventoryBindRequestData } from "../models/eft/inventory/IInventoryBindRequestData";
import { IInventoryCreateMarkerRequestData } from "../models/eft/inventory/IInventoryCreateMarkerRequestData";
import { IInventoryDeleteMarkerRequestData } from "../models/eft/inventory/IInventoryDeleteMarkerRequestData";
@ -44,6 +44,7 @@ export declare class InventoryController {
protected fenceService: FenceService;
protected presetHelper: PresetHelper;
protected inventoryHelper: InventoryHelper;
protected questHelper: QuestHelper;
protected ragfairOfferService: RagfairOfferService;
protected profileHelper: ProfileHelper;
protected paymentHelper: PaymentHelper;
@ -51,7 +52,7 @@ export declare class InventoryController {
protected lootGenerator: LootGenerator;
protected eventOutputHolder: EventOutputHolder;
protected httpResponseUtil: HttpResponseUtil;
constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, itemHelper: ItemHelper, randomUtil: RandomUtil, databaseServer: DatabaseServer, fenceService: FenceService, presetHelper: PresetHelper, inventoryHelper: InventoryHelper, ragfairOfferService: RagfairOfferService, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, lootGenerator: LootGenerator, eventOutputHolder: EventOutputHolder, httpResponseUtil: HttpResponseUtil);
constructor(logger: ILogger, hashUtil: HashUtil, jsonUtil: JsonUtil, itemHelper: ItemHelper, randomUtil: RandomUtil, databaseServer: DatabaseServer, fenceService: FenceService, presetHelper: PresetHelper, inventoryHelper: InventoryHelper, questHelper: QuestHelper, ragfairOfferService: RagfairOfferService, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, lootGenerator: LootGenerator, eventOutputHolder: EventOutputHolder, httpResponseUtil: HttpResponseUtil);
/**
* Move Item
* change location of item with parentId and slotId
@ -63,6 +64,12 @@ export declare class InventoryController {
* @returns IItemEventRouterResponse
*/
moveItem(pmcData: IPmcData, moveRequest: IInventoryMoveRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Get a event router response with inventory trader message
* @param output Item event router response
* @returns Item event router response
*/
protected getTraderExploitErrorResponse(output: IItemEventRouterResponse): IItemEventRouterResponse;
/**
* Remove Item from Profile
* Deep tree item deletion, also removes items from insurance list
@ -93,11 +100,6 @@ export declare class InventoryController {
* its used for "reload" if you have weapon in hands and magazine is somewhere else in rig or backpack in equipment
*/
swapItem(pmcData: IPmcData, body: IInventorySwapRequestData, sessionID: string): IItemEventRouterResponse;
/**
* Give Item
* its used for "add" item like gifts etc.
*/
addItem(pmcData: IPmcData, body: IAddItemRequestData, output: IItemEventRouterResponse, sessionID: string, callback: any, foundInRaid?: boolean, addUpd?: any): IItemEventRouterResponse;
/**
* Handles folding of Weapons
*/
@ -181,6 +183,7 @@ export declare class InventoryController {
*/
protected sanitiseMapMarkerText(mapNoteText: string): string;
/**
* Handle OpenRandomLootContainer event
* Handle event fired when a container is unpacked (currently only the halloween pumpkin)
* @param pmcData Profile data
* @param body open loot container request data

View File

@ -3,9 +3,9 @@ import { LootGenerator } from "../generators/LootGenerator";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { ILocationBase } from "../models/eft/common/ILocationBase";
import { ILocationsGenerateAllResponse } from "../models/eft/common/ILocationsSourceDestinationBase";
import { IAirdropLootResult } from "../models/eft/location/IAirdropLootResult";
import { AirdropTypeEnum } from "../models/enums/AirdropType";
import { IAirdropConfig } from "../models/spt/config/IAirdropConfig";
import { LootItem } from "../models/spt/services/LootItem";
import { LootRequest } from "../models/spt/services/LootRequest";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
@ -27,19 +27,33 @@ export declare class LocationController {
protected configServer: ConfigServer;
protected airdropConfig: IAirdropConfig;
constructor(jsonUtil: JsonUtil, hashUtil: HashUtil, weightedRandomHelper: WeightedRandomHelper, logger: ILogger, locationGenerator: LocationGenerator, localisationService: LocalisationService, lootGenerator: LootGenerator, databaseServer: DatabaseServer, timeUtil: TimeUtil, configServer: ConfigServer);
get(location: string): ILocationBase;
generate(name: string): ILocationBase;
/**
* Handle client/location/getLocalloot
* Get a location (map) with generated loot data
* @param location Map to generate loot for
* @returns ILocationBase
*/
get(location: string): ILocationBase;
/**
* Generate a maps base location without loot
* @param name Map name
* @returns ILocationBase
*/
protected generate(name: string): ILocationBase;
/**
* Handle client/locations
* Get all maps base location properties without loot data
* @param sessionId Players Id
* @returns ILocationsGenerateAllResponse
*/
generateAll(): ILocationsGenerateAllResponse;
generateAll(sessionId: string): ILocationsGenerateAllResponse;
/**
* Handle client/location/getAirdropLoot
* Get loot for an airdop container
* Generates it randomly based on config/airdrop.json values
* @returns Array of LootItem objects
*/
getAirdropLoot(): LootItem[];
getAirdropLoot(): IAirdropLootResult;
/**
* Randomly pick a type of airdrop loot using weighted values from config
* @returns airdrop type value

View File

@ -35,15 +35,20 @@ export declare class MatchController {
protected botConfig: IBotConfig;
constructor(logger: ILogger, saveServer: SaveServer, profileHelper: ProfileHelper, matchLocationService: MatchLocationService, traderHelper: TraderHelper, botLootCacheService: BotLootCacheService, configServer: ConfigServer, profileSnapshotService: ProfileSnapshotService, botGenerationCacheService: BotGenerationCacheService, applicationContext: ApplicationContext);
getEnabled(): boolean;
/** Handle raid/profile/list */
getProfile(info: IGetProfileRequestData): IPmcData[];
/** Handle client/match/group/create */
createGroup(sessionID: string, info: ICreateGroupRequestData): any;
/** Handle client/match/group/delete */
deleteGroup(info: any): void;
/** Handle match/group/start_game */
joinMatch(info: IJoinMatchRequestData, sessionId: string): IJoinMatchResult;
/** Handle client/match/group/status */
getGroupStatus(info: IGetGroupStatusRequestData): any;
/**
* Handle /client/raid/configuration
* @param request
* @param sessionID
* @param request Raid config request
* @param sessionID Session id
*/
startOfflineRaid(request: IGetRaidConfigurationRequestData, sessionID: string): void;
/**
@ -52,9 +57,10 @@ export declare class MatchController {
* @returns bot difficulty
*/
protected convertDifficultyDropdownIntoBotDifficulty(botDifficulty: string): string;
/** Handle client/match/offline/end */
endOfflineRaid(info: IEndOfflineRaidRequestData, sessionId: string): void;
/**
* Is extract by car
* Was extract by car
* @param extractName name of extract
* @returns true if car extract
*/

View File

@ -18,5 +18,6 @@ export declare class NotifierController {
*/
notifyAsync(sessionID: string): Promise<unknown>;
getServer(sessionID: string): string;
/** Handle client/notifier/channel/create */
getChannel(sessionID: string): INotifierChannel;
}

View File

@ -12,7 +12,10 @@ export declare class PresetBuildController {
protected itemHelper: ItemHelper;
protected saveServer: SaveServer;
constructor(hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, itemHelper: ItemHelper, saveServer: SaveServer);
/** Handle client/handbook/builds/my/list */
getUserBuilds(sessionID: string): WeaponBuild[];
/** Handle SaveBuild event */
saveBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;
/** Handle RemoveBuild event*/
removeBuild(pmcData: IPmcData, body: IPresetBuildActionRequestData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -14,40 +14,88 @@ import { IProfileCreateRequestData } from "../models/eft/profile/IProfileCreateR
import { ISearchFriendRequestData } from "../models/eft/profile/ISearchFriendRequestData";
import { ISearchFriendResponse } from "../models/eft/profile/ISearchFriendResponse";
import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData";
import { ILogger } from "../models/spt/utils/ILogger";
import { EventOutputHolder } from "../routers/EventOutputHolder";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { LocalisationService } from "../services/LocalisationService";
import { MailSendService } from "../services/MailSendService";
import { ProfileFixerService } from "../services/ProfileFixerService";
import { HashUtil } from "../utils/HashUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class ProfileController {
protected logger: ILogger;
protected hashUtil: HashUtil;
protected timeUtil: TimeUtil;
protected saveServer: SaveServer;
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected profileFixerService: ProfileFixerService;
protected localisationService: LocalisationService;
protected mailSendService: MailSendService;
protected playerScavGenerator: PlayerScavGenerator;
protected eventOutputHolder: EventOutputHolder;
protected traderHelper: TraderHelper;
protected dialogueHelper: DialogueHelper;
protected questHelper: QuestHelper;
protected profileHelper: ProfileHelper;
constructor(hashUtil: HashUtil, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileFixerService: ProfileFixerService, playerScavGenerator: PlayerScavGenerator, eventOutputHolder: EventOutputHolder, traderHelper: TraderHelper, dialogueHelper: DialogueHelper, questHelper: QuestHelper, profileHelper: ProfileHelper);
constructor(logger: ILogger, hashUtil: HashUtil, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, itemHelper: ItemHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, mailSendService: MailSendService, playerScavGenerator: PlayerScavGenerator, eventOutputHolder: EventOutputHolder, traderHelper: TraderHelper, dialogueHelper: DialogueHelper, questHelper: QuestHelper, profileHelper: ProfileHelper);
/**
* Handle /launcher/profiles
*/
getMiniProfiles(): IMiniProfile[];
/**
* Handle launcher/profile/info
*/
getMiniProfile(sessionID: string): any;
/**
* Handle client/game/profile/list
*/
getCompleteProfile(sessionID: string): IPmcData[];
/**
* Handle client/game/profile/create
*/
createProfile(info: IProfileCreateRequestData, sessionID: string): void;
/**
* Delete a profile
* @param sessionID Id of profile to delete
*/
protected deleteProfileBySessionId(sessionID: string): void;
/**
* Iterate over all quests in player profile, inspect rewards for the quests current state (accepted/completed)
* and send rewards to them in mail
* @param profileDetails Player profile
* @param sessionID Session id
* @param response Event router response
*/
protected givePlayerStartingQuestRewards(profileDetails: IAkiProfile, sessionID: string, response: IItemEventRouterResponse): void;
/**
* For each trader reset their state to what a level 1 player would see
* @param sessionID Session id of profile to reset
*/
protected resetAllTradersInProfile(sessionID: string): void;
/**
* Generate a player scav object
* pmc profile MUST exist first before pscav can be generated
* PMC profile MUST exist first before pscav can be generated
* @param sessionID
* @returns IPmcData object
*/
generatePlayerScav(sessionID: string): IPmcData;
/**
* Handle client/game/profile/nickname/validate
*/
validateNickname(info: IValidateNicknameRequestData, sessionID: string): string;
/**
* Handle client/game/profile/nickname/change event
* Client allows player to adjust their profile name
*/
changeNickname(info: IProfileChangeNicknameRequestData, sessionID: string): string;
/**
* Handle client/game/profile/voice/change event
*/
changeVoice(info: IProfileChangeVoiceRequestData, sessionID: string): void;
/**
* Handle client/game/profile/search
*/
getFriends(info: ISearchFriendRequestData, sessionID: string): ISearchFriendResponse[];
}

View File

@ -3,6 +3,7 @@ import { ItemHelper } from "../helpers/ItemHelper";
import { ProfileHelper } from "../helpers/ProfileHelper";
import { QuestConditionHelper } from "../helpers/QuestConditionHelper";
import { QuestHelper } from "../helpers/QuestHelper";
import { TraderHelper } from "../helpers/TraderHelper";
import { IPmcData } from "../models/eft/common/IPmcData";
import { Item } from "../models/eft/common/tables/IItem";
import { AvailableForConditions, IQuest, Reward } from "../models/eft/common/tables/IQuest";
@ -18,7 +19,9 @@ import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { LocaleService } from "../services/LocaleService";
import { LocalisationService } from "../services/LocalisationService";
import { MailSendService } from "../services/MailSendService";
import { PlayerService } from "../services/PlayerService";
import { SeasonalEventService } from "../services/SeasonalEventService";
import { HttpResponseUtil } from "../utils/HttpResponseUtil";
import { TimeUtil } from "../utils/TimeUtil";
export declare class QuestController {
@ -29,22 +32,39 @@ export declare class QuestController {
protected databaseServer: DatabaseServer;
protected itemHelper: ItemHelper;
protected dialogueHelper: DialogueHelper;
protected mailSendService: MailSendService;
protected profileHelper: ProfileHelper;
protected traderHelper: TraderHelper;
protected questHelper: QuestHelper;
protected questConditionHelper: QuestConditionHelper;
protected playerService: PlayerService;
protected localeService: LocaleService;
protected seasonalEventService: SeasonalEventService;
protected localisationService: LocalisationService;
protected configServer: ConfigServer;
protected questConfig: IQuestConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, httpResponseUtil: HttpResponseUtil, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, itemHelper: ItemHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, questHelper: QuestHelper, questConditionHelper: QuestConditionHelper, playerService: PlayerService, localeService: LocaleService, localisationService: LocalisationService, configServer: ConfigServer);
constructor(logger: ILogger, timeUtil: TimeUtil, httpResponseUtil: HttpResponseUtil, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, itemHelper: ItemHelper, dialogueHelper: DialogueHelper, mailSendService: MailSendService, profileHelper: ProfileHelper, traderHelper: TraderHelper, questHelper: QuestHelper, questConditionHelper: QuestConditionHelper, playerService: PlayerService, localeService: LocaleService, seasonalEventService: SeasonalEventService, localisationService: LocalisationService, configServer: ConfigServer);
/**
* 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[];
/**
* 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 playerLevelFulfillsQuestRequrement(quest: IQuest, playerLevel: number): boolean;
/**
* Should a quest be shown to the player in trader quest screen
* @param questId Quest to check
* @returns true = show to player
*/
protected showEventQuestToPlayer(questId: string): boolean;
/**
* Is the quest for the opposite side the player is on
* @param playerSide Player side (usec/bear)
@ -52,6 +72,7 @@ export declare class QuestController {
*/
protected questIsForOtherSide(playerSide: string, questId: string): boolean;
/**
* Handle QuestAccept event
* Handle the client accepting a quest and starting it
* Send starting rewards if any to player and
* Send start notification if any to player
@ -79,9 +100,10 @@ export declare class QuestController {
*/
protected getRepeatableQuestFromProfile(pmcData: IPmcData, acceptedQuest: IAcceptQuestRequestData): IRepeatableQuest;
/**
* Handle QuestComplete event
* Update completed quest in profile
* Add newly unlocked quests to profile
* Also recalculate thier level due to exp rewards
* Also recalculate their level due to exp rewards
* @param pmcData Player profile
* @param body Completed quest request
* @param sessionID Session id
@ -110,7 +132,7 @@ export declare class QuestController {
*/
protected getQuestsFailedByCompletingQuest(completedQuestId: string): IQuest[];
/**
* Fail the quests provided
* Fail the provided quests
* Update quest in profile, otherwise add fresh quest object with failed status
* @param sessionID session id
* @param pmcData player profile
@ -118,7 +140,7 @@ export declare class QuestController {
*/
protected failQuests(sessionID: string, pmcData: IPmcData, questsToFail: IQuest[]): void;
/**
*
* Handle QuestHandover event
* @param pmcData Player profile
* @param handoverQuestRequest handover item request
* @param sessionID Session id

View File

@ -120,7 +120,7 @@ export declare class RagfairController {
/**
* List item(s) on flea for sale
* @param pmcData Player profile
* @param offerRequest Flea list creatio offer
* @param offerRequest Flea list creation offer
* @param sessionID Session id
* @returns IItemEventRouterResponse
*/

View File

@ -23,6 +23,7 @@ export declare class RepairController {
protected repairConfig: IRepairConfig;
constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, questHelper: QuestHelper, traderHelper: TraderHelper, paymentService: PaymentService, repairHelper: RepairHelper, repairService: RepairService);
/**
* Handle TraderRepair event
* Repair with trader
* @param sessionID session id
* @param body endpoint request data
@ -31,6 +32,7 @@ export declare class RepairController {
*/
traderRepair(sessionID: string, body: ITraderRepairActionDataRequest, pmcData: IPmcData): IItemEventRouterResponse;
/**
* Handle Repair event
* Repair with repair kit
* @param sessionID session id
* @param body endpoint request data

View File

@ -77,7 +77,7 @@ export declare class RepeatableQuestController {
protected questConfig: IQuestConfig;
constructor(timeUtil: TimeUtil, logger: ILogger, randomUtil: RandomUtil, httpResponse: HttpResponseUtil, mathUtil: MathUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, itemHelper: ItemHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, handbookHelper: HandbookHelper, ragfairServerHelper: RagfairServerHelper, eventOutputHolder: EventOutputHolder, localisationService: LocalisationService, paymentService: PaymentService, objectId: ObjectId, itemFilterService: ItemFilterService, configServer: ConfigServer);
/**
* This is the method reached by the /client/repeatalbeQuests/activityPeriods endpoint
* Handle client/repeatalbeQuests/activityPeriods
* Returns an array of objects in the format of repeatable quests to the client.
* repeatableQuestObject = {
* id: Unique Id,
@ -113,7 +113,7 @@ export declare class RepeatableQuestController {
* This method is called by GetClientRepeatableQuests and creates one element of quest type format (see assets/database/templates/repeatableQuests.json).
* It randomly draws a quest type (currently Elimination, Completion or Exploration) as well as a trader who is providing the quest
*/
generateRepeatableQuest(pmcLevel: number, pmcTraderInfo: Record<string, TraderInfo>, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IRepeatableQuest;
protected generateRepeatableQuest(pmcLevel: number, pmcTraderInfo: Record<string, TraderInfo>, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IRepeatableQuest;
/**
* Just for debug reasons. Draws dailies a random assort of dailies extracted from dumps
*/
@ -128,7 +128,7 @@ export declare class RepeatableQuestController {
* @returns {object} a object which contains the base elements for repeatable quests of the requests type
* (needs to be filled with reward and conditions by called to make a valid quest)
*/
generateRepeatableTemplate(type: string, traderId: string, side: string): IRepeatableQuest;
protected generateRepeatableTemplate(type: string, traderId: string, side: string): IRepeatableQuest;
/**
* Generates a valid Exploration quest
*
@ -138,7 +138,7 @@ export declare class RepeatableQuestController {
* @param {object} repeatableConfig The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requestd quest
* @returns {object} object of quest type format for "Exploration" (see assets/database/templates/repeatableQuests.json)
*/
generateExplorationQuest(pmcLevel: number, traderId: string, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IExploration;
protected generateExplorationQuest(pmcLevel: number, traderId: string, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IExploration;
/**
* Generates a valid Completion quest
*
@ -147,7 +147,7 @@ export declare class RepeatableQuestController {
* @param {object} repeatableConfig The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requestd quest
* @returns {object} object of quest type format for "Completion" (see assets/database/templates/repeatableQuests.json)
*/
generateCompletionQuest(pmcLevel: number, traderId: string, repeatableConfig: IRepeatableQuestConfig): ICompletion;
protected generateCompletionQuest(pmcLevel: number, traderId: string, repeatableConfig: IRepeatableQuestConfig): ICompletion;
/**
* Generates a valid Elimination quest
*
@ -157,7 +157,7 @@ export declare class RepeatableQuestController {
* @param {object} repeatableConfig The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requestd quest
* @returns {object} object of quest type format for "Elimination" (see assets/database/templates/repeatableQuests.json)
*/
generateEliminationQuest(pmcLevel: number, traderId: string, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IElimination;
protected generateEliminationQuest(pmcLevel: number, traderId: string, questTypePool: IQuestTypePool, repeatableConfig: IRepeatableQuestConfig): IElimination;
/**
* Get the relevant elimination config based on the current players PMC level
* @param pmcLevel Level of PMC character
@ -178,7 +178,7 @@ export declare class RepeatableQuestController {
* @param {string} exit The exit name to generate the condition for
* @returns {object} Exit condition
*/
generateExplorationExitCondition(exit: Exit): IExplorationCondition;
protected generateExplorationExitCondition(exit: Exit): IExplorationCondition;
/**
* A repeatable quest, besides some more or less static components, exists of reward and condition (see assets/database/templates/repeatableQuests.json)
* This is a helper method for GenerateCompletionQuest to create a completion condition (of which a completion quest theoretically can have many)
@ -187,7 +187,7 @@ export declare class RepeatableQuestController {
* @param {integer} value amount of items of this specific type to request
* @returns {object} object of "Completion"-condition
*/
generateCompletionAvailableForFinish(targetItemId: string, value: number): ICompletionAvailableFor;
protected generateCompletionAvailableForFinish(targetItemId: string, value: number): ICompletionAvailableFor;
/**
* A repeatable quest, besides some more or less static components, exists of reward and condition (see assets/database/templates/repeatableQuests.json)
* This is a helper method for GenerateEliminationQuest to create a location condition.
@ -195,7 +195,7 @@ export declare class RepeatableQuestController {
* @param {string} location the location on which to fulfill the elimination quest
* @returns {object} object of "Elimination"-location-subcondition
*/
generateEliminationLocation(location: string[]): IEliminationCondition;
protected generateEliminationLocation(location: string[]): IEliminationCondition;
/**
* A repeatable quest, besides some more or less static components, exists of reward and condition (see assets/database/templates/repeatableQuests.json)
* This is a helper method for GenerateEliminationQuest to create a kill condition.
@ -205,7 +205,7 @@ export declare class RepeatableQuestController {
* @param {number} distance distance from which to kill (currently only >= supported)
* @returns {object} object of "Elimination"-kill-subcondition
*/
generateEliminationCondition(target: string, bodyPart: string[], distance: number): IEliminationCondition;
protected generateEliminationCondition(target: string, bodyPart: string[], distance: number): IEliminationCondition;
/**
* Used to create a quest pool during each cycle of repeatable quest generation. The pool will be subsequently
* narrowed down during quest generation to avoid duplicate quests. Like duplicate extractions or elimination quests
@ -214,7 +214,7 @@ export declare class RepeatableQuestController {
* @param pmcLevel level of pmc generating quest pool
* @returns IQuestTypePool
*/
generateQuestPool(repeatableConfig: IRepeatableQuestConfig, pmcLevel: number): IQuestTypePool;
protected generateQuestPool(repeatableConfig: IRepeatableQuestConfig, pmcLevel: number): IQuestTypePool;
/**
* Generate the reward for a mission. A reward can consist of
* - Experience
@ -235,7 +235,7 @@ export declare class RepeatableQuestController {
* @param {object} repeatableConfig The configuration for the repeatably kind (daily, weekly) as configured in QuestConfig for the requestd quest
* @returns {object} object of "Reward"-type that can be given for a repeatable mission
*/
generateReward(pmcLevel: number, difficulty: number, traderId: string, repeatableConfig: IRepeatableQuestConfig): IRewards;
protected generateReward(pmcLevel: number, difficulty: number, traderId: string, repeatableConfig: IRepeatableQuestConfig): IRewards;
/**
* Helper to create a reward item structured as required by the client
*
@ -244,9 +244,12 @@ export declare class RepeatableQuestController {
* @param {integer} index all rewards will be appended to a list, for unkown reasons the client wants the index
* @returns {object} object of "Reward"-item-type
*/
generateRewardItem(tpl: string, value: number, index: number, preset?: any): IReward;
protected generateRewardItem(tpl: string, value: number, index: number, preset?: any): IReward;
debugLogRepeatableQuestIds(pmcData: IPmcData): void;
probabilityObjectArray<K, V>(configArrayInput: ProbabilityObject<K, V>[]): ProbabilityObjectArray<K, V>;
protected probabilityObjectArray<K, V>(configArrayInput: ProbabilityObject<K, V>[]): ProbabilityObjectArray<K, V>;
/**
* Handle RepeatableQuestChange event
*/
changeRepeatableQuest(pmcData: IPmcData, body: IRepeatableQuestChangeRequest, sessionID: string): IItemEventRouterResponse;
/**
* Picks rewardable items from items.json. This means they need to fit into the inventory and they shouldn't be keys (debatable)
@ -260,5 +263,5 @@ export declare class RepeatableQuestController {
* @param {string} tpl template id of item to check
* @returns boolean: true if item is valid reward
*/
isValidRewardItem(tpl: string, repeatableQuestConfig: IRepeatableQuestConfig): boolean;
protected isValidRewardItem(tpl: string, repeatableQuestConfig: IRepeatableQuestConfig): boolean;
}

View File

@ -27,7 +27,9 @@ declare class TradeController {
protected ragfairConfig: IRagfairConfig;
protected traderConfig: ITraderConfig;
constructor(logger: ILogger, eventOutputHolder: EventOutputHolder, tradeHelper: TradeHelper, itemHelper: ItemHelper, profileHelper: ProfileHelper, ragfairServer: RagfairServer, httpResponse: HttpResponseUtil, localisationService: LocalisationService, configServer: ConfigServer);
/** Handle TradingConfirm event */
confirmTrading(pmcData: IPmcData, request: IProcessBaseTradeRequestData, sessionID: string): IItemEventRouterResponse;
/** Handle RagFairBuyOffer event */
confirmRagfairTrading(pmcData: IPmcData, body: IProcessRagfairTradeRequestData, sessionID: string): IItemEventRouterResponse;
protected confirmTradingInternal(pmcData: IPmcData, body: IProcessBaseTradeRequestData, sessionID: string, foundInRaid?: boolean, upd?: Upd): IItemEventRouterResponse;
}

View File

@ -35,6 +35,7 @@ export declare class TraderController {
*/
update(): boolean;
/**
* Handle client/trading/api/traderSettings
* Return an array of all traders
* @param sessionID Session id
* @returns array if ITraderBase objects
@ -47,6 +48,8 @@ export declare class TraderController {
* @returns 1,-1 or 0
*/
protected sortByTraderId(traderA: ITraderBase, traderB: ITraderBase): number;
/** Handle client/trading/api/getTrader */
getTrader(sessionID: string, traderID: string): ITraderBase;
/** Handle client/trading/api/getTraderAssort */
getAssort(sessionId: string, traderId: string): ITraderAssort;
}

View File

@ -9,6 +9,7 @@ export declare class WeatherController {
protected configServer: ConfigServer;
protected weatherConfig: IWeatherConfig;
constructor(weatherGenerator: WeatherGenerator, logger: ILogger, configServer: ConfigServer);
/** Handle client/weather */
generate(): IWeatherData;
/**
* Get the current in-raid time (MUST HAVE PLAYER LOGGED INTO CLIENT TO WORK)

View File

@ -5,6 +5,8 @@ import { IWishlistActionData } from "../models/eft/wishlist/IWishlistActionData"
export declare class WishlistController {
protected eventOutputHolder: EventOutputHolder;
constructor(eventOutputHolder: EventOutputHolder);
/** Handle AddToWishList */
addToWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
/** Handle RemoveFromWishList event */
removeFromWishList(pmcData: IPmcData, body: IWishlistActionData, sessionID: string): IItemEventRouterResponse;
}

View File

@ -2,10 +2,10 @@ import { IPmcData } from "../models/eft/common/IPmcData";
import { IItemEventRouterResponse } from "../models/eft/itemEvent/IItemEventRouterResponse";
import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
export declare class Router {
private handledRoutes;
protected handledRoutes: HandledRoute[];
getTopLevelRoute(): string;
protected getHandledRoutes(): HandledRoute[];
private getInternalHandledRoutes;
protected getInternalHandledRoutes(): HandledRoute[];
canHandle(url: string, partialMatch?: boolean): boolean;
}
export declare class StaticRouter extends Router {

View File

@ -1,6 +1,6 @@
import { MinMax } from "../models/common/MinMax";
import { IRandomisedBotLevelResult } from "../models/eft/bot/IRandomisedBotLevelResult";
import { ExpTable } from "../models/eft/common/IGlobals";
import { IExpTable } from "../models/eft/common/IGlobals";
import { IBotBase } from "../models/eft/common/tables/IBotBase";
import { BotGenerationDetails } from "../models/spt/bots/BotGenerationDetails";
import { ILogger } from "../models/spt/utils/ILogger";
@ -25,5 +25,5 @@ export declare class BotLevelGenerator {
* @param relativeDeltaMax max delta above player level to go
* @returns highest level possible for bot
*/
protected getHighestRelativeBotLevel(playerLevel: number, relativeDeltaMax: number, levelDetails: MinMax, expTable: ExpTable[]): number;
protected getHighestRelativeBotLevel(playerLevel: number, relativeDeltaMax: number, levelDetails: MinMax, expTable: IExpTable[]): number;
}

View File

@ -40,6 +40,12 @@ export declare class BotLootGenerator {
* @param botLevel Level of bot
*/
generateLoot(sessionId: string, botJsonTemplate: IBotType, isPmc: boolean, botRole: string, botInventory: PmcInventory, botLevel: number): void;
/**
* Force healing items onto bot to ensure they can heal in-raid
* @param botInventory Inventory to add items to
* @param botRole Role of bot (sptBear/sptUsec)
*/
protected addForcedMedicalItemsToPmcSecure(botInventory: PmcInventory, botRole: string): void;
protected getRandomisedCount(min: number, max: number, nValue: number): number;
/**
* Take random items from a pool and add to an inventory until totalItemCount or totalValueLimit is reached
@ -64,6 +70,7 @@ export declare class BotLootGenerator {
*/
protected addLooseWeaponsToInventorySlot(sessionId: string, botInventory: PmcInventory, equipmentSlot: string, templateInventory: Inventory, modChances: ModsChances, botRole: string, isPmc: boolean, botLevel: number): void;
/**
* @deprecated replaced by getRandomItemFromPoolByRole()
* Get a random item from the pool parameter using the biasedRandomNumber system
* @param pool pool of items to pick an item from
* @param isPmc is the bot being created a pmc
@ -71,11 +78,25 @@ export declare class BotLootGenerator {
*/
protected getRandomItemFromPool(pool: ITemplateItem[], isPmc: boolean): ITemplateItem;
/**
* Get a random item from the pool parameter using the biasedRandomNumber system
* @param pool pool of items to pick an item from
* @param isPmc is the bot being created a pmc
* @returns ITemplateItem object
*/
protected getRandomItemFromPoolByRole(pool: ITemplateItem[], botRole: string): ITemplateItem;
/**
* @deprecated Replaced by getBotLootNValueByRole()
* Get the loot nvalue from botconfig
* @param isPmc if true the pmc nvalue is returned
* @returns nvalue as number
*/
protected getBotLootNValue(isPmc: boolean): number;
/**
* Get the loot nvalue from botconfig
* @param botRole role of bot e.g. assault/sptBear
* @returns nvalue as number
*/
protected getBotLootNValueByRole(botRole: string): number;
/**
* Update item limit array to contain items that have a limit
* All values are set to 0

View File

@ -67,6 +67,13 @@ export declare class BotWeaponGenerator {
* @returns GenerateWeaponResult object
*/
generateWeaponByTpl(sessionId: string, weaponTpl: string, equipmentSlot: string, botTemplateInventory: Inventory, weaponParentId: string, modChances: ModsChances, botRole: string, isPmc: boolean, botLevel: number): GenerateWeaponResult;
/**
* Insert a cartridge into a weapon
* @param weaponWithModsArray Weapon and mods
* @param ammoTpl Cartridge to add to weapon
* @param desiredSlotId name of slot, e.g. patron_in_weapon
*/
protected addCartridgeToChamber(weaponWithModsArray: Item[], ammoTpl: string, desiredSlotId: string): void;
/**
* Create array with weapon base as only element and
* add additional properties based on weapon type

View File

@ -6,15 +6,17 @@ import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { ItemFilterService } from "../services/ItemFilterService";
import { SeasonalEventService } from "../services/SeasonalEventService";
export declare class FenceBaseAssortGenerator {
protected logger: ILogger;
protected databaseServer: DatabaseServer;
protected handbookHelper: HandbookHelper;
protected itemHelper: ItemHelper;
protected itemFilterService: ItemFilterService;
protected seasonalEventService: SeasonalEventService;
protected configServer: ConfigServer;
protected traderConfig: ITraderConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, itemFilterService: ItemFilterService, configServer: ConfigServer);
constructor(logger: ILogger, databaseServer: DatabaseServer, handbookHelper: HandbookHelper, itemHelper: ItemHelper, itemFilterService: ItemFilterService, seasonalEventService: SeasonalEventService, configServer: ConfigServer);
/**
* Create base fence assorts dynamically and store in db
*/

View File

@ -2,7 +2,7 @@ import { ContainerHelper } from "../helpers/ContainerHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { RagfairServerHelper } from "../helpers/RagfairServerHelper";
import { ILooseLoot, Spawnpoint, SpawnpointsForced, SpawnpointTemplate } from "../models/eft/common/ILooseLoot";
import { ILooseLoot, Spawnpoint, SpawnpointTemplate, SpawnpointsForced } from "../models/eft/common/ILooseLoot";
import { Item } from "../models/eft/common/tables/IItem";
import { IStaticAmmoDetails, IStaticContainerProps, IStaticForcedProps, IStaticLootDetails } from "../models/eft/common/tables/ILootBase";
import { ILocationConfig } from "../models/spt/config/ILocationConfig";
@ -13,7 +13,7 @@ import { SeasonalEventService } from "../services/SeasonalEventService";
import { JsonUtil } from "../utils/JsonUtil";
import { MathUtil } from "../utils/MathUtil";
import { ObjectId } from "../utils/ObjectId";
import { RandomUtil } from "../utils/RandomUtil";
import { ProbabilityObjectArray, RandomUtil } from "../utils/RandomUtil";
export interface IContainerItem {
items: Item[];
width: number;
@ -35,15 +35,38 @@ export declare class LocationGenerator {
protected locationConfig: ILocationConfig;
constructor(logger: ILogger, jsonUtil: JsonUtil, objectId: ObjectId, randomUtil: RandomUtil, ragfairServerHelper: RagfairServerHelper, itemHelper: ItemHelper, mathUtil: MathUtil, seasonalEventService: SeasonalEventService, containerHelper: ContainerHelper, presetHelper: PresetHelper, localisationService: LocalisationService, configServer: ConfigServer);
/**
* Choose loot to put into a static container
* @param containerIn
* @param staticForced
* @param staticLootDist
* @param staticAmmoDist
* Choose loot to put into a static container based on weighting
* Handle forced items + seasonal item removal when not in season
* @param staticContainer The container itself we will add loot to
* @param staticForced Loot we need to force into the container
* @param staticLootDist staticLoot.json
* @param staticAmmoDist staticAmmo.json
* @param locationName Name of the map to generate static loot for
* @returns IStaticContainerProps
*/
generateContainerLoot(containerIn: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record<string, IStaticLootDetails>, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, locationName: string): IStaticContainerProps;
generateContainerLoot(staticContainer: IStaticContainerProps, staticForced: IStaticForcedProps[], staticLootDist: Record<string, IStaticLootDetails>, staticAmmoDist: Record<string, IStaticAmmoDetails[]>, locationName: string): IStaticContainerProps;
/**
* Get a 2d grid of a containers item slots
* @param containerTpl Tpl id of the container
* @returns number[][]
*/
protected getContainerMapping(containerTpl: string): number[][];
/**
* Look up a containers itemcountDistribution data and choose an item count based on the found weights
* @param containerTypeId Container to get item count for
* @param staticLootDist staticLoot.json
* @param locationName Map name (to get per-map multiplier for from config)
* @returns item count
*/
protected getWeightedCountOfContainerItems(containerTypeId: string, staticLootDist: Record<string, IStaticLootDetails>, locationName: string): number;
/**
* Get all possible loot items that can be placed into a container
* Do not add seasonal items if found + current date is inside seasonal event
* @param containerTypeId Contianer to get possible loot for
* @param staticLootDist staticLoot.json
* @returns ProbabilityObjectArray of item tpls + probabilty
*/
protected getPossibleLootItemsForContainer(containerTypeId: string, staticLootDist: Record<string, IStaticLootDetails>): ProbabilityObjectArray<string, number>;
protected getLooseLootMultiplerForLocation(location: string): number;
protected getStaticLootMultiplerForLocation(location: string): number;
/**

View File

@ -2,7 +2,7 @@ import { InventoryHelper } from "../helpers/InventoryHelper";
import { ItemHelper } from "../helpers/ItemHelper";
import { PresetHelper } from "../helpers/PresetHelper";
import { WeightedRandomHelper } from "../helpers/WeightedRandomHelper";
import { Preset } from "../models/eft/common/IGlobals";
import { IPreset } from "../models/eft/common/IGlobals";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { AddItem } from "../models/eft/inventory/IAddItemRequestData";
import { ISealedAirdropContainerSettings, RewardDetails } from "../models/spt/config/IInventoryConfig";
@ -71,7 +71,7 @@ export declare class LootGenerator {
* @param result array to add found preset to
* @returns true if preset was valid and added to pool
*/
protected findAndAddRandomPresetToLoot(globalDefaultPresets: [string, Preset][], itemTypeCounts: Record<string, {
protected findAndAddRandomPresetToLoot(globalDefaultPresets: [string, IPreset][], itemTypeCounts: Record<string, {
current: number;
max: number;
}>, itemBlacklist: string[], result: LootItem[]): boolean;
@ -95,7 +95,7 @@ export declare class LootGenerator {
* @param chosenWeaponPreset The weapon preset given to player as reward
* @returns AddItem array
*/
protected getSealedContainerWeaponModRewards(containerSettings: ISealedAirdropContainerSettings, linkedItemsToWeapon: ITemplateItem[], chosenWeaponPreset: Preset): AddItem[];
protected getSealedContainerWeaponModRewards(containerSettings: ISealedAirdropContainerSettings, linkedItemsToWeapon: ITemplateItem[], chosenWeaponPreset: IPreset): AddItem[];
/**
* Handle event-related loot containers - currently just the halloween jack-o-lanterns that give food rewards
* @param rewardContainerDetails

View File

@ -1,5 +1,5 @@
import { ItemHelper } from "../helpers/ItemHelper";
import { Preset } from "../models/eft/common/IGlobals";
import { IPreset } from "../models/eft/common/IGlobals";
import { Item } from "../models/eft/common/tables/IItem";
import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ConfigServer } from "../servers/ConfigServer";
@ -36,12 +36,12 @@ export declare class RagfairAssortGenerator {
* Get presets from globals.json
* @returns Preset object array
*/
protected getPresets(): Preset[];
protected getPresets(): IPreset[];
/**
* Get default presets from globals.json
* @returns Preset object array
*/
protected getDefaultPresets(): Preset[];
protected getDefaultPresets(): IPreset[];
/**
* Create a base assort item and return it with populated values + 999999 stack count + unlimited count = true
* @param tplId tplid to add to item

View File

@ -48,7 +48,30 @@ export declare class RagfairOfferGenerator {
price: number;
}[];
constructor(logger: ILogger, jsonUtil: JsonUtil, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, databaseServer: DatabaseServer, ragfairServerHelper: RagfairServerHelper, handbookHelper: HandbookHelper, saveServer: SaveServer, presetHelper: PresetHelper, ragfairAssortGenerator: RagfairAssortGenerator, ragfairOfferService: RagfairOfferService, ragfairPriceService: RagfairPriceService, localisationService: LocalisationService, paymentHelper: PaymentHelper, ragfairCategoriesService: RagfairCategoriesService, fenceService: FenceService, itemHelper: ItemHelper, configServer: ConfigServer);
createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer;
/**
* Create a flea offer and store it in the Ragfair server offers array
* @param userID Owner of the offer
* @param time Time offer is listed at
* @param items Items in the offer
* @param barterScheme Cost of item (currency or barter)
* @param loyalLevel Loyalty level needed to buy item
* @param price Price of offer
* @param sellInOnePiece Set StackObjectsCount to 1
* @returns IRagfairOffer
*/
createFleaOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer;
/**
* Create an offer object ready to send to ragfairOfferService.addOffer()
* @param userID Owner of the offer
* @param time Time offer is listed at
* @param items Items in the offer
* @param barterScheme Cost of item (currency or barter)
* @param loyalLevel Loyalty level needed to buy item
* @param price Price of offer
* @param sellInOnePiece Set StackObjectsCount to 1
* @returns IRagfairOffer
*/
protected createOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer;
/**
* Calculate the offer price that's listed on the flea listing
* @param offerRequirements barter requirements for offer
@ -69,8 +92,18 @@ export declare class RagfairOfferGenerator {
* @returns count of roubles
*/
protected calculateRoublePrice(currencyCount: number, currencyType: string): number;
protected getTraderId(userID: string): string;
protected getRating(userID: string): number;
/**
* Check userId, if its a player, return their pmc _id, otherwise return userId parameter
* @param userId Users Id to check
* @returns Users Id
*/
protected getTraderId(userId: string): string;
/**
* Get a flea trading rating for the passed in user
* @param userId User to get flea rating of
* @returns Flea rating value
*/
protected getRating(userId: string): number;
/**
* Is the offers user rating growing
* @param userID user to check rating of
@ -89,13 +122,20 @@ export declare class RagfairOfferGenerator {
* @param expiredOffers optional, expired offers to regenerate
*/
generateDynamicOffers(expiredOffers?: Item[]): Promise<void>;
/**
*
* @param assortItemIndex Index of assort item
* @param assortItemsToProcess Item array containing index
* @param expiredOffers Currently expired offers on flea
* @param config Ragfair dynamic config
*/
protected createOffersForItems(assortItemIndex: string, assortItemsToProcess: Item[], expiredOffers: Item[], config: Dynamic): Promise<void>;
/**
* Create one flea offer for a specific item
* @param items Item to create offer for
* @param isPreset Is item a weapon preset
* @param itemDetails raw db item details
* @returns
* @returns Item array
*/
protected createSingleOfferForItem(items: Item[], isPreset: boolean, itemDetails: [boolean, ITemplateItem]): Promise<Item[]>;
/**
@ -142,7 +182,7 @@ export declare class RagfairOfferGenerator {
/**
* Create a barter-based barter scheme, if not possible, fall back to making barter scheme currency based
* @param offerItems Items for sale in offer
* @returns barter scheme
* @returns Barter scheme
*/
protected createBarterRequirement(offerItems: Item[]): IBarterScheme[];
/**
@ -159,16 +199,4 @@ export declare class RagfairOfferGenerator {
* @returns Barter scheme for offer
*/
protected createCurrencyRequirement(offerItems: Item[]): IBarterScheme[];
/**
* Create a flea offer and store it in the Ragfair server offers array
* @param userID owner of the offer
* @param time time offer is put up
* @param items items in the offer
* @param barterScheme cost of item (currency or barter)
* @param loyalLevel Loyalty level needed to buy item
* @param price price of offer
* @param sellInOnePiece
* @returns Ragfair offer
*/
createFleaOffer(userID: string, time: number, items: Item[], barterScheme: IBarterScheme[], loyalLevel: number, price: number, sellInOnePiece?: boolean): IRagfairOffer;
}

View File

@ -1,5 +1,6 @@
import { ItemHelper } from "../helpers/ItemHelper";
import { Product } from "../models/eft/common/tables/IBotBase";
import { Upd } from "../models/eft/common/tables/IItem";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { IHideoutScavCase } from "../models/eft/hideout/IHideoutScavCase";
import { IScavCaseConfig } from "../models/spt/config/IScavCaseConfig";
@ -78,7 +79,7 @@ export declare class ScavCaseRewardGenerator {
protected addStackCountToAmmoAndMoney(item: ITemplateItem, resultItem: {
_id: string;
_tpl: string;
upd: any;
upd: Upd;
}, rarity: string): void;
/**
*

View File

@ -16,6 +16,11 @@ export declare class WeatherGenerator {
protected configServer: ConfigServer;
protected weatherConfig: IWeatherConfig;
constructor(weightedRandomHelper: WeightedRandomHelper, logger: ILogger, randomUtil: RandomUtil, timeUtil: TimeUtil, applicationContext: ApplicationContext, configServer: ConfigServer);
/**
* Get current + raid datetime and format into correct BSG format and return
* @param data Weather data
* @returns IWeatherData
*/
calculateGameTime(data: IWeatherData): IWeatherData;
/**
* Get server uptime seconds multiplied by a multiplier and add to current time as seconds
@ -33,7 +38,7 @@ export declare class WeatherGenerator {
/**
* Get current time formatted to fit BSGs requirement
* @param date date to format into bsg style
* @returns
* @returns Time formatted in BSG format
*/
protected getBSGFormattedTime(date: Date): string;
/**

View File

@ -14,12 +14,12 @@ export declare class AssortHelper {
protected questHelper: QuestHelper;
constructor(logger: ILogger, itemHelper: ItemHelper, databaseServer: DatabaseServer, localisationService: LocalisationService, questHelper: QuestHelper);
/**
* Remove assorts from a trader that have not been unlocked yet
* @param pmcProfile player profile
* @param traderId traders id the assort belongs to
* Remove assorts from a trader that have not been unlocked yet (via player completing corrisponding quest)
* @param pmcProfile Player profile
* @param traderId Traders id the assort belongs to
* @param traderAssorts All assort items from same trader
* @param mergedQuestAssorts Dict of quest assort to quest id unlocks for all traders
* @returns assort items minus locked quest assorts
* @param mergedQuestAssorts Dict of quest assort to quest id unlocks for all traders (key = started/failed/complete)
* @returns Assort items minus locked quest assorts
*/
stripLockedQuestAssort(pmcProfile: IPmcData, traderId: string, traderAssorts: ITraderAssort, mergedQuestAssorts: Record<string, Record<string, string>>, flea?: boolean): ITraderAssort;
/**

View File

@ -3,6 +3,7 @@ import { Inventory } from "../models/eft/common/tables/IBotBase";
import { Item } from "../models/eft/common/tables/IItem";
import { Grid, ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { EquipmentSlots } from "../models/enums/EquipmentSlots";
import { ItemAddedResult } from "../models/enums/ItemAddedResult";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
import { LocalisationService } from "../services/LocalisationService";
@ -72,7 +73,7 @@ export declare class BotWeaponGeneratorHelper {
* @param inventory Inventory to add item+children into
* @returns a `boolean` indicating item was added
*/
addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: Inventory): boolean;
addItemWithChildrenToEquipmentSlot(equipmentSlots: string[], parentId: string, parentTpl: string, itemWithChildren: Item[], inventory: Inventory): ItemAddedResult;
/**
* is the provided item allowed inside a container
* @param slot location item wants to be placed in

View File

@ -6,7 +6,35 @@ export declare class FindSlotResult {
constructor(success?: boolean, x?: any, y?: any, rotation?: boolean);
}
export declare class ContainerHelper {
protected locateSlot(container2D: number[][], containerX: number, containerY: number, x: number, y: number, itemW: number, itemH: number): boolean;
/**
* Finds a slot for an item in a given 2D container map
* @param container2D Array of container with slots filled/free
* @param itemWidth Width of item
* @param itemHeight Height of item
* @returns Location to place item in container
*/
findSlotForItem(container2D: number[][], itemWidth: number, itemHeight: number): FindSlotResult;
fillContainerMapWithItem(container2D: number[][], x: number, y: number, itemW: number, itemH: number, rotate: boolean): any;
/**
* Find a slot inside a container an item can be placed in
* @param container2D Container to find space in
* @param containerX Container x size
* @param containerY Container y size
* @param x ???
* @param y ???
* @param itemW Items width
* @param itemH Items height
* @returns True - slot found
*/
protected locateSlot(container2D: number[][], containerX: number, containerY: number, x: number, y: number, itemW: number, itemH: number): boolean;
/**
* Find a free slot for an item to be placed at
* @param container2D Container to palce item in
* @param x Container x size
* @param y Container y size
* @param itemW Items width
* @param itemH Items height
* @param rotate is item rotated
* @returns Location to place item
*/
fillContainerMapWithItem(container2D: number[][], x: number, y: number, itemW: number, itemH: number, rotate: boolean): number[][];
}

View File

@ -20,21 +20,13 @@ export declare class DialogueHelper {
protected itemHelper: ItemHelper;
constructor(logger: ILogger, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, notifierHelper: NotifierHelper, notificationSendHelper: NotificationSendHelper, localisationService: LocalisationService, itemHelper: ItemHelper);
/**
* Create basic message context template
* @param templateId
* @param messageType
* @param maxStoreTime
* @returns
* @deprecated Use MailSendService.sendMessage() or helpers
*/
createMessageContext(templateId: string, messageType: MessageType, maxStoreTime: number): MessageContent;
createMessageContext(templateId: string, messageType: MessageType, maxStoreTime?: any): MessageContent;
/**
* Add a templated message to the dialogue.
* @param dialogueID
* @param messageContent
* @param sessionID
* @param rewards
* @deprecated Use MailSendService.sendMessage() or helpers
*/
addDialogueMessage(dialogueID: string, messageContent: MessageContent, sessionID: string, rewards?: Item[]): void;
addDialogueMessage(dialogueID: string, messageContent: MessageContent, sessionID: string, rewards?: Item[], messageType?: MessageType): void;
/**
* Get the preview contents of the last message in a dialogue.
* @param dialogue

View File

@ -9,9 +9,35 @@ export declare class DurabilityLimitsHelper {
protected configServer: ConfigServer;
protected botConfig: IBotConfig;
constructor(randomUtil: RandomUtil, botHelper: BotHelper, configServer: ConfigServer);
/**
* Get max durability for a weapon based on bot role
* @param itemTemplate UNUSED - Item to get durability for
* @param botRole Role of bot to get max durability for
* @returns Max durability of weapon
*/
getRandomizedMaxWeaponDurability(itemTemplate: ITemplateItem, botRole: string): number;
/**
* Get max durability value for armor based on bot role
* @param itemTemplate Item to get max durability for
* @param botRole Role of bot to get max durability for
* @returns max durability
*/
getRandomizedMaxArmorDurability(itemTemplate: ITemplateItem, botRole: string): number;
/**
* Get randomised current weapon durability by bot role
* @param itemTemplate Unused - Item to get current durability of
* @param botRole Role of bot to get current durability for
* @param maxDurability Max durability of weapon
* @returns Current weapon durability
*/
getRandomizedWeaponDurability(itemTemplate: ITemplateItem, botRole: string, maxDurability: number): number;
/**
* Get randomised current armor durability by bot role
* @param itemTemplate Unused - Item to get current durability of
* @param botRole Role of bot to get current durability for
* @param maxDurability Max durability of armor
* @returns Current armor durability
*/
getRandomizedArmorDurability(itemTemplate: ITemplateItem, botRole: string, maxDurability: number): number;
protected generateMaxWeaponDurability(botRole: string): number;
protected generateMaxPmcArmorDurability(itemMaxDurability: number): number;

View File

@ -14,6 +14,9 @@ export declare class HandbookHelper {
protected lookupCacheGenerated: boolean;
protected handbookPriceCache: LookupCollection;
constructor(databaseServer: DatabaseServer);
/**
* Create an in-memory cache of all items with associated handbook price in handbookPriceCache class
*/
hydrateLookup(): void;
/**
* Get price from internal cache, if cache empty look up price directly in handbook (expensive)
@ -23,18 +26,23 @@ export declare class HandbookHelper {
*/
getTemplatePrice(tpl: string): number;
/**
* all items in template with the given parent category
* @param x
* Get all items in template with the given parent category
* @param parentId
* @returns string array
*/
templatesWithParent(x: string): string[];
templatesWithParent(parentId: string): string[];
/**
* Does category exist in handbook cache
* @param category
* @returns true if exists in cache
*/
isCategory(category: string): boolean;
childrenCategories(x: string): string[];
/**
* Get all items associated with a categories parent
* @param categoryParent
* @returns string array
*/
childrenCategories(categoryParent: string): string[];
/**
* Convert non-roubles into roubles
* @param nonRoubleCurrencyCount Currency count to convert

View File

@ -53,5 +53,7 @@ export declare class HealthHelper {
* @param duration How long the effect has left in seconds (-1 by default, no duration).
*/
protected addEffect(pmcData: IPmcData, effectBodyPart: string, effectType: string, duration?: number): void;
protected isEmpty(map: any): boolean;
protected isEmpty(map: Record<string, {
Time: number;
}>): boolean;
}

View File

@ -52,6 +52,11 @@ export declare class HideoutHelper {
* with all the constants.
*/
initProduction(recipeId: string, productionTime: number): Production;
/**
* Is the provided object a Production type
* @param productive
* @returns
*/
isProductionType(productive: Productive): productive is Production;
applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
/**
@ -189,16 +194,16 @@ export declare class HideoutHelper {
* @returns coin slot count
*/
protected getBTCSlots(pmcData: IPmcData): number;
/**
* Get a count of bitcoins player miner can hold
*/
protected getManagementSkillsSlots(): number;
/**
* Does profile have elite hideout management skill
* @param pmcData Profile to look at
* @returns True if profile has skill
*/
protected hasEliteHideoutManagementSkill(pmcData: IPmcData): boolean;
/**
* Get a count of bitcoins player miner can hold
*/
protected getBitcoinMinerContainerSlotSize(): number;
/**
* Get the hideout management skill from player profile
* @param pmcData Profile to look at
@ -206,12 +211,6 @@ export declare class HideoutHelper {
*/
protected getHideoutManagementSkill(pmcData: IPmcData): Common;
protected getHideoutManagementConsumptionBonus(pmcData: IPmcData): number;
/**
* Get the crafting skill details from player profile
* @param pmcData Player profile
* @returns crafting skill, null if not found
*/
protected getCraftingSkill(pmcData: IPmcData): Common;
/**
* Adjust craft time based on crafting skill level found in player profile
* @param pmcData Player profile

View File

@ -16,8 +16,17 @@ export declare class HttpServerHelper {
};
constructor(configServer: ConfigServer);
getMimeText(key: string): string;
/**
* Combine ip and port into url
* @returns url
*/
buildUrl(): string;
/**
* Prepend http to the url:port
* @returns URI
*/
getBackendUrl(): string;
/** Get websocket url + port */
getWebsocketUrl(): string;
sendTextJson(resp: any, output: any): void;
}

View File

@ -1,5 +1,5 @@
import { IPmcData } from "../models/eft/common/IPmcData";
import { Victim } from "../models/eft/common/tables/IBotBase";
import { Quest, TraderInfo, Victim } from "../models/eft/common/tables/IBotBase";
import { Item } from "../models/eft/common/tables/IItem";
import { ISaveProgressRequestData } from "../models/eft/inRaid/ISaveProgressRequestData";
import { ILostOnDeathConfig } from "../models/spt/config/ILostOnDeathConfig";
@ -13,6 +13,7 @@ import { JsonUtil } from "../utils/JsonUtil";
import { InventoryHelper } from "./InventoryHelper";
import { ItemHelper } from "./ItemHelper";
import { PaymentHelper } from "./PaymentHelper";
import { QuestHelper } from "./QuestHelper";
export declare class InRaidHelper {
protected logger: ILogger;
protected saveServer: SaveServer;
@ -20,14 +21,15 @@ export declare class InRaidHelper {
protected itemHelper: ItemHelper;
protected databaseServer: DatabaseServer;
protected inventoryHelper: InventoryHelper;
protected questHelper: QuestHelper;
protected paymentHelper: PaymentHelper;
protected localisationService: LocalisationService;
protected profileFixerService: ProfileFixerService;
protected configServer: ConfigServer;
protected lostOnDeathConfig: ILostOnDeathConfig;
constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, profileFixerService: ProfileFixerService, configServer: ConfigServer);
constructor(logger: ILogger, saveServer: SaveServer, jsonUtil: JsonUtil, itemHelper: ItemHelper, databaseServer: DatabaseServer, inventoryHelper: InventoryHelper, questHelper: QuestHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, profileFixerService: ProfileFixerService, configServer: ConfigServer);
/**
* Should quest items be removed from player inventory on death
* Lookup quest item loss from lostOnDeath config
* @returns True if items should be removed from inventory
*/
removeQuestItemsOnDeath(): boolean;
@ -61,12 +63,22 @@ export declare class InRaidHelper {
* @returns Reset profile object
*/
updateProfileBaseStats(profileData: IPmcData, saveProgressRequest: ISaveProgressRequestData, sessionID: string): IPmcData;
/**
* Look for quests not are now status = fail that were not failed pre-raid and run the failQuest() function
* @param sessionId Player id
* @param pmcData Player profile
* @param preRaidQuests Quests prior to starting raid
* @param postRaidQuests Quest after raid
*/
protected processFailedQuests(sessionId: string, pmcData: IPmcData, preRaidQuests: Quest[], postRaidQuests: Quest[]): void;
protected resetSkillPointsEarnedDuringRaid(profile: IPmcData): void;
/**
* Take body part effects from client profile and apply to server profile
* @param saveProgressRequest post-raid request
* @param profileData player profile on server
*/
protected transferPostRaidLimbEffectsToProfile(saveProgressRequest: ISaveProgressRequestData, profileData: IPmcData): void;
protected applyTraderStandingAdjustments(preRaid: Record<string, TraderInfo>, postRaid: Record<string, TraderInfo>): void;
/**
* Some maps have one-time-use keys (e.g. Labs
* Remove the relevant key from an inventory based on the post-raid request data passed in

View File

@ -53,11 +53,12 @@ export declare class InventoryHelper {
* @param callback Code to execute later (function)
* @param foundInRaid Will results added to inventory be set as found in raid
* @param addUpd Additional upd properties for items being added to inventory
* @param useSortingTable Allow items to go into sorting table when stash has no space
* @returns IItemEventRouterResponse
*/
addItem(pmcData: IPmcData, request: IAddItemRequestData, output: IItemEventRouterResponse, sessionID: string, callback: {
(): void;
}, foundInRaid?: boolean, addUpd?: any): IItemEventRouterResponse;
}, foundInRaid?: boolean, addUpd?: any, useSortingTable?: boolean): IItemEventRouterResponse;
/**
* Add ammo to ammo boxes
* @param itemToAdd Item to check is ammo box
@ -75,7 +76,7 @@ export declare class InventoryHelper {
*/
protected splitStackIntoSmallerStacks(assortItems: Item[], requestItem: AddItem, result: IAddItemTempObject[]): void;
/**
* Remove item from player inventory
* Remove item from player inventory + insured items array
* @param pmcData Profile to remove item from
* @param itemId Items id to remove
* @param sessionID Session id
@ -99,8 +100,9 @@ export declare class InventoryHelper {
* @returns Array
*/
protected getStashSlotMap(pmcData: IPmcData, sessionID: string): number[][];
protected getStashType(sessionID: string): string;
protected getSortingTableSlotMap(pmcData: IPmcData): number[][];
protected getPlayerStashSize(sessionID: string): Record<number, number>;
protected getStashType(sessionID: string): string;
/**
* Internal helper function to transfer an item from one profile to another.
* fromProfileData: Profile of the source.

View File

@ -51,11 +51,22 @@ declare class ItemHelper {
/**
* Returns the item price based on the handbook or as a fallback from the prices.json if the item is not
* found in the handbook. If the price can't be found at all return 0
*
* @param {string} tpl the item template to check
* @returns {integer} The price of the item or 0 if not found
* @param tpl Item to look price up of
* @returns Price in roubles
*/
getItemPrice(tpl: string): number;
/**
* Get the static (handbook) price in roubles for an item by tpl
* @param tpl Items tpl id to look up price
* @returns Price in roubles (0 if not found)
*/
getStaticItemPrice(tpl: string): number;
/**
* Get the dynamic (flea) price in roubles for an item by tpl
* @param tpl Items tpl id to look up price
* @returns Price in roubles (undefined if not found)
*/
getDynamicItemPrice(tpl: string): number;
fixItemStackCount(item: Item): Item;
/**
* AmmoBoxes contain StackSlots which need to be filled for the AmmoBox to have content.
@ -186,14 +197,14 @@ declare class ItemHelper {
*/
findBarterItems(by: "tpl" | "id", pmcData: IPmcData, barterItemId: string): Item[];
/**
*
* @param pmcData
* @param items
* Regenerate all guids with new ids, exceptions are for items that cannot be altered (e.g. stash/sorting table)
* @param pmcData Player profile
* @param items Items to adjust ID values of
* @param insuredItems insured items to not replace ids for
* @param fastPanel
* @returns
* @returns Item[]
*/
replaceIDs(pmcData: IPmcData, items: Item[], insuredItems?: InsuredItem[], fastPanel?: any): any[];
replaceIDs(pmcData: IPmcData, items: Item[], insuredItems?: InsuredItem[], fastPanel?: any): Item[];
/**
* WARNING, SLOW. Recursively loop down through an items hierarchy to see if any of the ids match the supplied list, return true if any do
* @param {string} tpl Items tpl to check parents of

View File

@ -9,9 +9,18 @@ export declare class NotifierHelper {
protected defaultNotification: INotification;
constructor(httpServerHelper: HttpServerHelper);
getDefaultNotification(): INotification;
/** Creates a new notification that displays the "Your offer was sold!" prompt and removes sold offer from "My Offers" on clientside */
/**
* Create a new notification that displays the "Your offer was sold!" prompt and removes sold offer from "My Offers" on clientside
* @param dialogueMessage Message from dialog that was sent
* @param ragfairData Ragfair data to attach to notification
* @returns
*/
createRagfairOfferSoldNotification(dialogueMessage: Message, ragfairData: MessageContentRagfair): INotification;
/** Creates a new notification with the specified dialogueMessage object. */
/**
* Create a new notification with the specified dialogueMessage object
* @param dialogueMessage
* @returns
*/
createNewMessageNotification(dialogueMessage: Message): INotification;
getWebSocketServer(sessionID: string): string;
}

View File

@ -1,18 +1,18 @@
import { Preset } from "../models/eft/common/IGlobals";
import { IPreset } from "../models/eft/common/IGlobals";
import { DatabaseServer } from "../servers/DatabaseServer";
import { JsonUtil } from "../utils/JsonUtil";
export declare class PresetHelper {
protected jsonUtil: JsonUtil;
protected databaseServer: DatabaseServer;
protected lookup: Record<string, string[]>;
protected defaultPresets: Record<string, Preset>;
protected defaultPresets: Record<string, IPreset>;
constructor(jsonUtil: JsonUtil, databaseServer: DatabaseServer);
hydratePresetStore(input: Record<string, string[]>): void;
getDefaultPresets(): Record<string, Preset>;
getDefaultPresets(): Record<string, IPreset>;
isPreset(id: string): boolean;
hasPreset(templateId: string): boolean;
getPreset(id: string): Preset;
getPresets(templateId: string): Preset[];
getDefaultPreset(templateId: string): Preset;
getPreset(id: string): IPreset;
getPresets(templateId: string): IPreset[];
getDefaultPreset(templateId: string): IPreset;
getBaseItemTpl(presetId: string): string;
}

View File

@ -1,5 +1,5 @@
import { IPmcData } from "../models/eft/common/IPmcData";
import { Stats } from "../models/eft/common/tables/IBotBase";
import { CounterKeyValue, Stats } from "../models/eft/common/tables/IBotBase";
import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
import { IValidateNicknameRequestData } from "../models/eft/profile/IValidateNicknameRequestData";
import { ILogger } from "../models/spt/utils/ILogger";
@ -68,6 +68,10 @@ export declare class ProfileHelper {
getFullProfile(sessionID: string): IAkiProfile;
getPmcProfile(sessionID: string): IPmcData;
getScavProfile(sessionID: string): IPmcData;
/**
* Get baseline counter values for a fresh profile
* @returns Stats
*/
getDefaultCounters(): Stats;
protected isWiped(sessionID: string): boolean;
protected getServerVersion(): string;
@ -77,4 +81,24 @@ export declare class ProfileHelper {
* @returns profile without secure container
*/
removeSecureContainer(profile: IPmcData): IPmcData;
/**
* Flag a profile as having received a gift
* Store giftid in profile aki object
* @param playerId Player to add gift flag to
* @param giftId Gift player received
*/
addGiftReceivedFlagToProfile(playerId: string, giftId: string): void;
/**
* Check if profile has recieved a gift by id
* @param playerId Player profile to check for gift
* @param giftId Gift to check for
* @returns True if player has recieved gift previously
*/
playerHasRecievedGift(playerId: string, giftId: string): boolean;
/**
* Find Stat in profile counters and increment by one
* @param counters Counters to search for key
* @param keyToIncrement Key
*/
incrementStatCounter(counters: CounterKeyValue[], keyToIncrement: string): void;
}

View File

@ -13,6 +13,7 @@ import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { LocaleService } from "../services/LocaleService";
import { LocalisationService } from "../services/LocalisationService";
import { MailSendService } from "../services/MailSendService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil";
@ -37,9 +38,10 @@ export declare class QuestHelper {
protected paymentHelper: PaymentHelper;
protected localisationService: LocalisationService;
protected traderHelper: TraderHelper;
protected mailSendService: MailSendService;
protected configServer: ConfigServer;
protected questConfig: IQuestConfig;
constructor(logger: ILogger, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, traderHelper: TraderHelper, configServer: ConfigServer);
constructor(logger: ILogger, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, itemHelper: ItemHelper, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, localeService: LocaleService, ragfairServerHelper: RagfairServerHelper, dialogueHelper: DialogueHelper, profileHelper: ProfileHelper, paymentHelper: PaymentHelper, localisationService: LocalisationService, traderHelper: TraderHelper, mailSendService: MailSendService, configServer: ConfigServer);
/**
* Get status of a quest in player profile by its id
* @param pmcData Profile to search
@ -63,6 +65,7 @@ export declare class QuestHelper {
getDeltaQuests(before: IQuest[], after: IQuest[]): IQuest[];
/**
* Increase skill points of a skill on player profile
* Dupe of PlayerService.incrementSkillLevel()
* @param sessionID Session id
* @param pmcData Player profile
* @param skillName Name of skill to increase skill points of
@ -113,7 +116,7 @@ export declare class QuestHelper {
* Get quests that can be shown to player after failing a quest
* @param failedQuestId Id of the quest failed by player
* @param sessionId Session id
* @returns
* @returns IQuest array
*/
failedUnlocked(failedQuestId: string, sessionId: string): IQuest[];
/**

View File

@ -12,6 +12,7 @@ import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { LocaleService } from "../services/LocaleService";
import { LocalisationService } from "../services/LocalisationService";
import { RagfairOfferService } from "../services/RagfairOfferService";
import { HashUtil } from "../utils/HashUtil";
import { TimeUtil } from "../utils/TimeUtil";
@ -42,11 +43,12 @@ export declare class RagfairOfferHelper {
protected ragfairHelper: RagfairHelper;
protected ragfairOfferService: RagfairOfferService;
protected localeService: LocaleService;
protected localisationService: LocalisationService;
protected configServer: ConfigServer;
protected static goodSoldTemplate: string;
protected ragfairConfig: IRagfairConfig;
protected questConfig: IQuestConfig;
constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, traderHelper: TraderHelper, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, configServer: ConfigServer);
constructor(logger: ILogger, timeUtil: TimeUtil, hashUtil: HashUtil, eventOutputHolder: EventOutputHolder, databaseServer: DatabaseServer, traderHelper: TraderHelper, saveServer: SaveServer, dialogueHelper: DialogueHelper, itemHelper: ItemHelper, paymentHelper: PaymentHelper, presetHelper: PresetHelper, profileHelper: ProfileHelper, ragfairServerHelper: RagfairServerHelper, ragfairSortHelper: RagfairSortHelper, ragfairHelper: RagfairHelper, ragfairOfferService: RagfairOfferService, localeService: LocaleService, localisationService: LocalisationService, configServer: ConfigServer);
/**
* Passthrough to ragfairOfferService.getOffers(), get flea offers a player should see
* @param searchRequest

View File

@ -8,41 +8,67 @@ import { DatabaseServer } from "../servers/DatabaseServer";
import { SaveServer } from "../servers/SaveServer";
import { ItemFilterService } from "../services/ItemFilterService";
import { LocaleService } from "../services/LocaleService";
import { MailSendService } from "../services/MailSendService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil";
import { DialogueHelper } from "./DialogueHelper";
import { ItemHelper } from "./ItemHelper";
import { ProfileHelper } from "./ProfileHelper";
import { TraderHelper } from "./TraderHelper";
/**
* Helper class for common ragfair server actions
*/
export declare class RagfairServerHelper {
protected randomUtil: RandomUtil;
protected hashUtil: HashUtil;
protected timeUtil: TimeUtil;
protected saveServer: SaveServer;
protected databaseServer: DatabaseServer;
protected profileHelper: ProfileHelper;
protected itemHelper: ItemHelper;
protected localeService: LocaleService;
protected dialogueHelper: DialogueHelper;
protected traderHelper: TraderHelper;
protected jsonUtil: JsonUtil;
protected mailSendService: MailSendService;
protected itemFilterService: ItemFilterService;
protected configServer: ConfigServer;
protected ragfairConfig: IRagfairConfig;
protected questConfig: IQuestConfig;
protected static goodsReturnedTemplate: string;
constructor(randomUtil: RandomUtil, hashUtil: HashUtil, saveServer: SaveServer, databaseServer: DatabaseServer, profileHelper: ProfileHelper, itemHelper: ItemHelper, localeService: LocaleService, dialogueHelper: DialogueHelper, jsonUtil: JsonUtil, itemFilterService: ItemFilterService, configServer: ConfigServer);
constructor(randomUtil: RandomUtil, hashUtil: HashUtil, timeUtil: TimeUtil, saveServer: SaveServer, databaseServer: DatabaseServer, profileHelper: ProfileHelper, itemHelper: ItemHelper, localeService: LocaleService, dialogueHelper: DialogueHelper, traderHelper: TraderHelper, jsonUtil: JsonUtil, mailSendService: MailSendService, itemFilterService: ItemFilterService, configServer: ConfigServer);
/**
* Is item valid / on blacklist / quest item
* @param itemDetails
* @returns boolean
*/
isItemValidRagfairItem(itemDetails: [boolean, ITemplateItem]): boolean;
protected isItemBlacklisted(itemTemplateId: string): boolean;
isTrader(userID: string): boolean;
isPlayer(userID: string): boolean;
returnItems(sessionID: string, items: Item[]): void;
/**
* Is supplied item tpl on the ragfair custom blacklist from configs/ragfair.json/dynamic
* @param itemTemplateId Item tpl to check is blacklisted
* @returns True if its blacklsited
*/
protected isItemOnCustomFleaBlacklist(itemTemplateId: string): boolean;
/**
* is supplied id a trader
* @param traderId
* @returns True if id was a trader
*/
isTrader(traderId: string): boolean;
/**
* Is this user id the logged in player
* @param userId Id to test
* @returns True is the current player
*/
isPlayer(userId: string): boolean;
/**
* Send items back to player
* @param sessionID Player to send items to
* @param returnedItems Items to send to player
*/
returnItems(sessionID: string, returnedItems: Item[]): void;
calculateDynamicStackCount(tplId: string, isWeaponPreset: boolean): number;
/**
* Choose a currency at random with bias

View File

@ -1,10 +1,10 @@
import { IPmcData } from "../models/eft/common/IPmcData";
import { Item } from "../models/eft/common/tables/IItem";
import { ITemplateItem } from "../models/eft/common/tables/ITemplateItem";
import { ILogger } from "../models/spt/utils/ILogger";
import { DatabaseServer } from "../servers/DatabaseServer";
import { RagfairPriceService } from "../services/RagfairPriceService";
import { ItemHelper } from "./ItemHelper";
import { ILogger } from "../models/spt/utils/ILogger";
export declare class RagfairTaxHelper {
protected logger: ILogger;
protected databaseServer: DatabaseServer;

View File

@ -1,5 +1,6 @@
import { IPmcData } from "../models/eft/common/IPmcData";
import { ITraderAssort, ITraderBase, LoyaltyLevel } from "../models/eft/common/tables/ITrader";
import { Traders } from "../models/enums/Traders";
import { ITraderConfig } from "../models/spt/config/ITraderConfig";
import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer";
@ -106,4 +107,10 @@ export declare class TraderHelper {
* @returns Rouble price
*/
getHighestSellToTraderPrice(tpl: string): number;
/**
* Get a trader enum key by its value
* @param traderId Traders id
* @returns Traders key
*/
getTraderById(traderId: string): Traders;
}

View File

@ -15,6 +15,9 @@ export declare class BundleLoader {
protected jsonUtil: JsonUtil;
protected bundles: Record<string, BundleInfo>;
constructor(httpServerHelper: HttpServerHelper, vfs: VFS, jsonUtil: JsonUtil);
/**
* Handle singleplayer/bundles
*/
getBundles(local: boolean): BundleInfo[];
getBundle(key: string, local: boolean): BundleInfo;
addBundles(modpath: string): void;

View File

@ -36,8 +36,8 @@ export declare class PreAkiModLoader implements IModLoader {
getModPath(mod: string): string;
protected importMods(): Promise<void>;
/**
* Check for duplciate mods loaded, show error if duplicate mod found
* @param modPackageData dictionary of mod package.json data
* Check for duplicate mods loaded, show error if any
* @param modPackageData Dictionary of mod package.json data
*/
protected checkForDuplicateMods(modPackageData: Record<string, IPackageJsonData>): void;
/**

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,5 @@
import { MinMax } from "../../../models/common/MinMax";
import { Ixyz } from "./Ixyz";
export interface ILocationBase {
AccessKeys: string[];
AirdropParameters: AirdropParameter[];
@ -35,6 +37,7 @@ export interface ILocationBase {
IsSecret: boolean;
Locked: boolean;
Loot: any[];
MatchMakerMinPlayersByWaitTime: MinPlayerWaitTime[];
MaxBotPerZone: number;
MaxDistToFreePoint: number;
MaxPlayers: number;
@ -49,6 +52,7 @@ export interface ILocationBase {
OldSpawn: boolean;
OpenZones: string;
Preview: Preview;
PlayersRequestCount: number;
RequiredPlayerLevel?: number;
RequiredPlayerLevelMin?: number;
RequiredPlayerLevelMax?: number;
@ -81,9 +85,7 @@ export interface ILocationBase {
users_summon_seconds: number;
waves: Wave[];
}
export interface ILimit {
min: number;
max: number;
export interface ILimit extends MinMax {
items: any[];
}
export interface AirdropParameter {
@ -140,10 +142,12 @@ export interface BotLocationModifier {
Scattering: number;
VisibleDistance: number;
}
export interface MinMaxBot {
WildSpawnType: WildSpawnType;
max: number;
min: number;
export interface MinMaxBot extends MinMax {
WildSpawnType: WildSpawnType | string;
}
export interface MinPlayerWaitTime {
minPlayers: number;
time: number;
}
export interface Preview {
path: string;
@ -160,7 +164,7 @@ export interface SpawnPointParam {
DelayToCanSpawnSec: number;
Id: string;
Infiltration: string;
Position: xyz;
Position: Ixyz;
Rotation: number;
Sides: string[];
}
@ -169,14 +173,9 @@ export interface ColliderParams {
_props: Props;
}
export interface Props {
Center: xyz;
Center: Ixyz;
Radius: number;
}
export interface xyz {
x: number;
y: number;
z: number;
}
export interface Exit {
Chance: number;
Count: number;
@ -211,5 +210,6 @@ export interface Wave {
}
export declare enum WildSpawnType {
ASSAULT = "assault",
MARKSMAN = "marksman"
MARKSMAN = "marksman",
PMCBOT = "pmcbot"
}

View File

@ -1,3 +1,4 @@
import { Ixyz } from "./Ixyz";
import { Item } from "./tables/IItem";
export interface ILooseLoot {
spawnpointCount: SpawnpointCount;
@ -18,11 +19,11 @@ export interface SpawnpointTemplate {
IsStatic: boolean;
useGravity: boolean;
randomRotation: boolean;
Position: Xyz;
Rotation: Xyz;
Position: Ixyz;
Rotation: Ixyz;
IsGroupPosition: boolean;
GroupPositions: any[];
Root: any;
Root: string;
Items: Item[];
}
export interface Spawnpoint {
@ -31,11 +32,6 @@ export interface Spawnpoint {
template: SpawnpointTemplate;
itemDistribution: ItemDistribution[];
}
export interface Xyz {
x: number;
y: number;
z: number;
}
export interface ItemDistribution {
composedKey: ComposedKey;
relativeProbability: number;

View File

@ -0,0 +1,5 @@
export interface Ixyz {
x: number;
y: number;
z: number;
}

View File

@ -40,6 +40,7 @@ export interface Info {
Nickname: string;
LowerNickname: string;
Side: string;
SquadInviteRestriction: boolean;
Voice: string;
Level: number;
Experience: number;

View File

@ -1,3 +1,4 @@
import { Ixyz } from "../Ixyz";
export interface ICustomizationItem {
_id: string;
_name: string;
@ -19,15 +20,10 @@ export interface Props {
Prefab: Prefab;
WatchPrefab: Prefab;
IntegratedArmorVest: boolean;
WatchPosition: Xyz;
WatchRotation: Xyz;
WatchPosition: Ixyz;
WatchRotation: Ixyz;
}
export interface Prefab {
path: string;
rcid: string;
}
export interface Xyz {
x: number;
y: number;
z: number;
}

View File

@ -1,3 +1,4 @@
import { Ixyz } from "../Ixyz";
import { Item } from "./IItem";
export interface ILootBase {
staticAmmo: Record<string, IStaticAmmoDetails[]>;
@ -18,8 +19,8 @@ export interface IStaticWeaponProps {
IsStatic: boolean;
useGravity: boolean;
randomRotation: boolean;
Position: Xyz;
Rotation: Xyz;
Position: Ixyz;
Rotation: Ixyz;
IsGroupPosition: boolean;
GroupPositions: any[];
Root: string;
@ -30,20 +31,15 @@ export interface IStaticContainerProps {
IsStatic: boolean;
useGravity: boolean;
randomRotation: boolean;
Position: Xyz;
Rotation: Xyz;
Position: Ixyz;
Rotation: Ixyz;
IsGroupPosition: boolean;
GroupPositions: any[];
Root: any;
Root: string;
Items: StaticItem[];
}
export interface Xyz {
x: number;
y: number;
z: number;
}
export interface StaticItem {
_id: any;
_id: string;
_tpl: string;
}
export interface IStaticForcedProps {

View File

@ -1,7 +1,9 @@
import { QuestRewardType } from "../../../enums/QuestRewardType";
import { QuestStatus } from "../../../enums/QuestStatus";
import { QuestTypeEnum } from "../../../enums/QuestTypeEnum";
import { Item } from "./IItem";
export interface IQuest {
/** SPT addition - human readable quest name */
QuestName?: string;
_id: string;
canShowNotificationsInGame: boolean;
@ -13,9 +15,10 @@ export interface IQuest {
traderId: string;
location: string;
image: string;
type: string;
type: QuestTypeEnum;
isKey: boolean;
questStatus: any;
/** @deprecated - Likely not used, use 'status' instead */
questStatus: QuestStatus;
restartable: boolean;
instantComplete: boolean;
secretQuest: boolean;
@ -23,9 +26,11 @@ export interface IQuest {
successMessageText: string;
templateId: string;
rewards: Rewards;
/** Becomes 'AppearStatus' inside client */
status: string | number;
KeyQuest: boolean;
changeQuestMessageText: string;
/** "Pmc" or "Scav" */
side: string;
}
export interface Conditions {
@ -64,6 +69,7 @@ export interface AvailableForProps {
zoneId?: string;
type?: boolean;
countInRaid?: boolean;
globalQuestCounterId?: any;
}
export interface AvailableForCounter {
id: string;

View File

@ -1,3 +1,4 @@
import { Ixyz } from "../Ixyz";
export interface ITemplateItem {
_id: string;
_name: string;
@ -36,6 +37,7 @@ export interface Props {
IsUnremovable?: boolean;
IsLockedafterEquip?: boolean;
IsSpecialSlotOnly?: boolean;
IsStationaryWeapon?: boolean;
QuestItem?: boolean;
QuestStashMaxCount?: number;
LootExperience?: number;
@ -200,11 +202,11 @@ export interface Props {
CameraSnap?: number;
ReloadMode?: string;
AimPlane?: number;
TacticalReloadStiffnes?: Xyz;
TacticalReloadStiffnes?: Ixyz;
TacticalReloadFixation?: number;
RecoilCenter?: Xyz;
RotationCenter?: Xyz;
RotationCenterNoStock?: Xyz;
RecoilCenter?: Ixyz;
RotationCenter?: Ixyz;
RotationCenterNoStock?: Ixyz;
FoldedSlot?: string;
CompactHandling?: boolean;
MinRepairDegradation?: number;
@ -246,7 +248,7 @@ export interface Props {
FaceShieldComponent?: boolean;
FaceShieldMask?: string;
MaterialType?: string;
RicochetParams?: Xyz;
RicochetParams?: Ixyz;
DeafStrength?: string;
BlindnessProtection?: number;
Distortion?: number;
@ -257,6 +259,7 @@ export interface Props {
CutoffFreq?: number;
Resonance?: number;
RolloffMultiplier?: number;
ReverbVolume: number;
CompressorVolume?: number;
AmbientVolume?: number;
DryVolume?: number;
@ -281,12 +284,12 @@ export interface Props {
PrimaryConsumption?: number;
SecondryConsumption?: number;
DeflectionConsumption?: number;
AppliedTrunkRotation?: Xyz;
AppliedHeadRotation?: Xyz;
AppliedTrunkRotation?: Ixyz;
AppliedHeadRotation?: Ixyz;
DisplayOnModel?: boolean;
AdditionalAnimationLayer?: number;
StaminaBurnRate?: number;
ColliderScaleMultiplier?: Xyz;
ColliderScaleMultiplier?: Ixyz;
ConfigPathStr?: string;
MaxMarkersCount?: number;
scaleMin?: number;
@ -351,9 +354,9 @@ export interface Props {
ShowHitEffectOnExplode?: boolean;
ExplosionType?: string;
AmmoLifeTimeSec?: number;
Contusion?: Xyz;
ArmorDistanceDistanceDamage?: Xyz;
Blindness?: Xyz;
Contusion?: Ixyz;
ArmorDistanceDistanceDamage?: Ixyz;
Blindness?: Ixyz;
IsLightAndSoundShot?: boolean;
LightAndSoundShotAngle?: number;
LightAndSoundShotSelfContusionTime?: number;
@ -425,11 +428,6 @@ export interface SlotFilter {
Filter: string[];
AnimationIndex?: number;
}
export interface Xyz {
x: number;
y: number;
z: number;
}
export interface StackSlot {
_name?: string;
_id: string;

View File

@ -1,3 +1,7 @@
export interface IAcceptFriendRequestData {
export interface IAcceptFriendRequestData extends IBaseFriendRequest {
}
export interface ICancelFriendRequestData extends IBaseFriendRequest {
}
export interface IBaseFriendRequest {
request_id: string;
}

View File

@ -1,16 +1,6 @@
import { MemberCategory } from "../../enums/MemberCategory";
import { IUserDialogInfo } from "../profile/IAkiProfile";
export interface IGetFriendListDataResponse {
Friends: Friend[];
Friends: IUserDialogInfo[];
Ignore: string[];
InIgnoreList: string[];
}
export interface Friend {
_id: string;
Info: Info;
}
export interface Info {
Nickname: string;
Side: string;
Level: number;
MemberCategory: MemberCategory;
}

View File

@ -1,6 +1,6 @@
import { Message } from "../profile/IAkiProfile";
import { IUserDialogInfo, Message } from "../profile/IAkiProfile";
export interface IGetMailDialogViewResponseData {
messages: Message[];
profiles: any[];
profiles: IUserDialogInfo[];
hasMessagesWithRewards: boolean;
}

View File

@ -1,7 +1,8 @@
import { PlayerRaidEndState } from "../../../models/enums/PlayerRaidEndState";
import { IPmcData } from "../common/IPmcData";
import { ISyncHealthRequestData } from "../health/ISyncHealthRequestData";
export interface ISaveProgressRequestData {
exit: string;
exit: PlayerRaidEndState;
profile: IPmcData;
isPlayerScav: boolean;
health: ISyncHealthRequestData;

View File

@ -1,4 +1,5 @@
export interface IAddItemRequestData {
/** Trader id */
tid: string;
items: AddItem[];
}

View File

@ -4,4 +4,5 @@ export interface IAddItemTempObject {
count: number;
isPreset: boolean;
location?: Location;
containerId?: string;
}

View File

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

View File

@ -7,8 +7,13 @@ export interface INotifierChannel {
ws: string;
}
export interface INotification {
type: "RagfairOfferSold" | "new_message" | "ping";
type: NotificationType;
eventId: string;
dialogId?: string;
message?: Message;
}
export declare enum NotificationType {
RAGFAIR_OFFER_SOLD = "RagfairOfferSold",
NEW_MESSAGE = "new_message",
PING = "ping"
}

View File

@ -5,6 +5,7 @@ import { Item } from "../common/tables/IItem";
export interface IAkiProfile {
info: Info;
characters: Characters;
/** Clothing purchases */
suits: string[];
weaponbuilds: WeaponBuild[];
dialogues: Record<string, Dialogue>;
@ -61,7 +62,7 @@ export interface DialogueInfo {
_id: string;
type: MessageType;
pinned: boolean;
Users?: any[];
Users?: IUserDialogInfo[];
message: MessagePreview;
}
export interface Message {
@ -75,7 +76,7 @@ export interface Message {
text?: string;
hasRewards: boolean;
rewardCollected: boolean;
items: MessageItems;
items?: MessageItems;
maxStorageTime?: number;
systemData?: ISystemData;
profileChangeEvents?: any[];
@ -115,6 +116,7 @@ export interface DateTime {
export interface Aki {
version: string;
mods?: ModDetails[];
receivedGifts: ReceivedGift[];
}
export interface ModDetails {
name: string;
@ -122,6 +124,10 @@ export interface ModDetails {
author: string;
dateAdded: number;
}
export interface ReceivedGift {
giftId: string;
timestampAccepted: number;
}
export interface Vitality {
health: Health;
effects: Effects;

View File

@ -1,5 +1,4 @@
export interface IGetItemPriceResult {
import { MinMax } from "../../../models/common/MinMax";
export interface IGetItemPriceResult extends MinMax {
avg: number;
min: number;
max: number;
}

View File

@ -34,6 +34,7 @@ export declare enum BaseClasses {
MAP = "567849dd4bdc2d150f8b456e",
MONEY = "543be5dd4bdc2deb348b4569",
NIGHTVISION = "5a2c3a9486f774688b05e574",
THERMAL_VISION = "5d21f59b6dbe99052b54ef83",
KEY = "543be5e94bdc2df1348b4568",
KEY_MECHANICAL = "5c99f98d86f7745c314214b3",
KEYCARD = "5c164d2286f774194c5e69fa",
@ -91,5 +92,10 @@ export declare enum BaseClasses {
SILENCER = "550aa4cd4bdc2dd8348b456c",
PORTABLE_RANGE_FINDER = "61605ddea09d851a0a0c1bbc",
ITEM = "54009119af1c881c07000029",
CYLINDER_MAGAZINE = "610720f290b75a49ff2e5e25"
CYLINDER_MAGAZINE = "610720f290b75a49ff2e5e25",
AUXILARY_MOD = "5a74651486f7744e73386dd1",
BIPOD = "55818afb4bdc2dde698b456d",
HEADPHONES = "5645bcb74bdc2ded0b8b4578",
RANDOM_LOOT_CONTAINER = "62f109593b54472778797866",
STACKABLE_ITEM = "5661632d4bdc2d903d8b456b"
}

View File

@ -21,5 +21,6 @@ export declare enum ConfigTypes {
TRADER = "aki-trader",
WEATHER = "aki-weather",
SEASONAL_EVENT = "aki-seasonalevents",
LOST_ON_DEATH = "aki-lostondeath"
LOST_ON_DEATH = "aki-lostondeath",
GIFTS = "aki-gifts"
}

View File

@ -0,0 +1,5 @@
export declare enum GiftSenderType {
SYSTEM = "System",
TRADER = "Trader",
USER = "User"
}

View File

@ -0,0 +1,6 @@
export declare enum GiftSentResult {
FAILED_UNKNOWN = 1,
FAILED_GIFT_ALREADY_RECEIVED = 2,
FAILED_GIFT_DOESNT_EXIST = 3,
SUCCESS = 4
}

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