diff --git a/project/assets/configs/ragfair.json b/project/assets/configs/ragfair.json index 9e2e7e09..a9f263d9 100644 --- a/project/assets/configs/ragfair.json +++ b/project/assets/configs/ragfair.json @@ -130,9 +130,9 @@ }, "5d650c3e815116009f6201d2": { "_name": "FUEL", - "conditionChance": 0.06, - "min": 0.01, - "max": 0.15 + "conditionChance": 0.12, + "min": 0.7, + "max": 0.99 } }, "stackablePercent": { diff --git a/project/assets/configs/weather.json b/project/assets/configs/weather.json index a99159c0..e2988ee5 100644 --- a/project/assets/configs/weather.json +++ b/project/assets/configs/weather.json @@ -7,11 +7,11 @@ }, "windSpeed": { "values": [0, 1, 2, 3], - "weights": [20, 15, 10, 5] + "weights": [4, 3, 2, 1] }, "windDirection": { "values": [1, 2, 3, 4, 5, 6, 7, 8], - "weights": [10, 10, 10, 10, 10, 10, 10, 10] + "weights": [1, 1, 1, 1, 1, 1, 1, 1] }, "windGustiness": { "min": 0, @@ -19,15 +19,15 @@ }, "rain": { "values": [1, 2, 3], - "weights": [100, 10, 5] + "weights": [25, 1, 1] }, "rainIntensity": { "min": 0, "max": 1 }, "fog": { - "values": [0.002, 0.006, 0.008, 0.012, 0.087], - "weights": [100, 40, 25, 25, 5] + "values": [0.002, 0.004, 0.008, 0.012, 0.087], + "weights": [20, 8, 5, 5, 1] }, "temp": { "min": 0, diff --git a/project/src/callbacks/DialogueCallbacks.ts b/project/src/callbacks/DialogueCallbacks.ts index 23221dbe..804e7344 100644 --- a/project/src/callbacks/DialogueCallbacks.ts +++ b/project/src/callbacks/DialogueCallbacks.ts @@ -41,7 +41,8 @@ export class DialogueCallbacks implements OnUpdate @inject("HttpResponseUtil") protected httpResponse: HttpResponseUtil, @inject("DialogueController") protected dialogueController: DialogueController, ) - {} + { + } /** * Handle client/friend/list @@ -60,6 +61,7 @@ export class DialogueCallbacks implements OnUpdate * Handle client/chatServer/list * @returns IChatServer[] */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public getChatServerList( url: string, info: IGetChatServerListRequestData, @@ -72,7 +74,7 @@ export class DialogueCallbacks implements OnUpdate DateTime: this.timeUtil.getTimestamp(), IsDeveloper: true, Regions: ["EUR"], - VersionId: "bgkidft87ddd", // TODO: Is this... correct? + VersionId: "bgkidft87ddd", Ip: "", Port: 0, Chats: [{ _id: "0", Members: 0 }], @@ -159,6 +161,7 @@ export class DialogueCallbacks implements OnUpdate } /** Handle client/friend/request/list/outbox */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public listOutbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData { return this.httpResponse.getBody([]); @@ -167,6 +170,7 @@ export class DialogueCallbacks implements OnUpdate /** * Handle client/friend/request/list/inbox */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public listInbox(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData { return this.httpResponse.getBody([]); @@ -175,6 +179,7 @@ export class DialogueCallbacks implements OnUpdate /** * Handle client/friend/request/send */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public sendFriendRequest( url: string, request: IFriendRequestData, @@ -187,6 +192,7 @@ export class DialogueCallbacks implements OnUpdate /** * Handle client/friend/request/accept */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public acceptFriendRequest( url: string, request: IAcceptFriendRequestData, @@ -199,6 +205,7 @@ export class DialogueCallbacks implements OnUpdate /** * Handle client/friend/request/cancel */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public cancelFriendRequest( url: string, request: ICancelFriendRequestData, @@ -209,33 +216,39 @@ export class DialogueCallbacks implements OnUpdate } /** Handle client/friend/delete */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public deleteFriend(url: string, request: IDeleteFriendRequest, sessionID: string): INullResponseData { return this.httpResponse.nullResponse(); } /** Handle client/friend/ignore/set */ - public ignoreFriend(url: string, request: { uid: string; }, sessionID: string): any + // eslint-disable-next-line @typescript-eslint/no-unused-vars + public ignoreFriend(url: string, request: { uid: string; }, sessionID: string): INullResponseData { return this.httpResponse.nullResponse(); } /** Handle client/friend/ignore/remove */ - public unIgnoreFriend(url: string, request: { uid: string; }, sessionID: string): any + // eslint-disable-next-line @typescript-eslint/no-unused-vars + public unIgnoreFriend(url: string, request: { uid: string; }, sessionID: string): INullResponseData { return this.httpResponse.nullResponse(); } + // eslint-disable-next-line @typescript-eslint/no-unused-vars public clearMail(url: string, request: IClearMailMessageRequest, sessionID: string): IGetBodyResponseData { return this.httpResponse.emptyArrayResponse(); } + // eslint-disable-next-line @typescript-eslint/no-unused-vars public removeMail(url: string, request: IRemoveMailMessageRequest, sessionID: string): IGetBodyResponseData { return this.httpResponse.emptyArrayResponse(); } + // eslint-disable-next-line @typescript-eslint/no-unused-vars public async onUpdate(timeSinceLastRun: number): Promise { this.dialogueController.update(); diff --git a/project/src/callbacks/GameCallbacks.ts b/project/src/callbacks/GameCallbacks.ts index b8e351d6..fdf758b3 100644 --- a/project/src/callbacks/GameCallbacks.ts +++ b/project/src/callbacks/GameCallbacks.ts @@ -11,6 +11,7 @@ import { IGameKeepAliveResponse } from "@spt-aki/models/eft/game/IGameKeepAliveR import { IGameLogoutResponseData } from "@spt-aki/models/eft/game/IGameLogoutResponseData"; import { IGameStartResponse } from "@spt-aki/models/eft/game/IGameStartResponse"; import { IGetRaidTimeRequest } from "@spt-aki/models/eft/game/IGetRaidTimeRequest"; +import { IGetRaidTimeResponse } from "@spt-aki/models/eft/game/IGetRaidTimeResponse"; import { IReportNicknameRequestData } from "@spt-aki/models/eft/game/IReportNicknameRequestData"; import { IServerDetails } from "@spt-aki/models/eft/game/IServerDetails"; import { IVersionValidateRequestData } from "@spt-aki/models/eft/game/IVersionValidateRequestData"; @@ -154,7 +155,7 @@ export class GameCallbacks implements OnLoad * @returns string */ // eslint-disable-next-line @typescript-eslint/no-unused-vars - public getRaidTime(url: string, request: IGetRaidTimeRequest, sessionID: string): any + public getRaidTime(url: string, request: IGetRaidTimeRequest, sessionID: string): IGetRaidTimeResponse { return this.httpResponse.noBody(this.gameController.getRaidTime(sessionID, request)); } diff --git a/project/src/callbacks/MatchCallbacks.ts b/project/src/callbacks/MatchCallbacks.ts index 6ed551a9..70e6de33 100644 --- a/project/src/callbacks/MatchCallbacks.ts +++ b/project/src/callbacks/MatchCallbacks.ts @@ -11,6 +11,7 @@ import { ICancelGroupInviteRequest } from "@spt-aki/models/eft/match/ICancelGrou import { ICreateGroupRequestData } from "@spt-aki/models/eft/match/ICreateGroupRequestData"; import { IEndOfflineRaidRequestData } from "@spt-aki/models/eft/match/IEndOfflineRaidRequestData"; import { IGetGroupStatusRequestData } from "@spt-aki/models/eft/match/IGetGroupStatusRequestData"; +import { IGetGroupStatusResponse } from "@spt-aki/models/eft/match/IGetGroupStatusResponse"; import { IGetProfileRequestData } from "@spt-aki/models/eft/match/IGetProfileRequestData"; import { IGetRaidConfigurationRequestData } from "@spt-aki/models/eft/match/IGetRaidConfigurationRequestData"; import { IJoinMatchRequestData } from "@spt-aki/models/eft/match/IJoinMatchRequestData"; @@ -36,40 +37,47 @@ export class MatchCallbacks {} /** Handle client/match/updatePing */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public updatePing(url: string, info: IUpdatePingRequestData, sessionID: string): INullResponseData { return this.httpResponse.nullResponse(); } // Handle client/match/exit + // eslint-disable-next-line @typescript-eslint/no-unused-vars public exitMatch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData { return this.httpResponse.nullResponse(); } /** Handle client/match/group/exit_from_menu */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public exitToMenu(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData { return this.httpResponse.nullResponse(); } + // eslint-disable-next-line @typescript-eslint/no-unused-vars public startGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData { return this.httpResponse.nullResponse(); } + // eslint-disable-next-line @typescript-eslint/no-unused-vars public stopGroupSearch(url: string, info: IEmptyRequestData, sessionID: string): INullResponseData { return this.httpResponse.nullResponse(); } /** Handle client/match/group/invite/send */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public sendGroupInvite(url: string, info: ISendGroupInviteRequest, sessionID: string): IGetBodyResponseData { return this.httpResponse.getBody("2427943f23698ay9f2863735"); } /** Handle client/match/group/invite/accept */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public acceptGroupInvite( url: string, info: IAcceptGroupInviteRequest, @@ -83,6 +91,7 @@ export class MatchCallbacks } /** Handle client/match/group/invite/cancel */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public cancelGroupInvite( url: string, info: ICancelGroupInviteRequest, @@ -91,32 +100,36 @@ export class MatchCallbacks { return this.httpResponse.getBody(true); } - /** Handle client/match/group/transfer */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public transferGroup(url: string, info: ITransferGroupRequest, sessionID: string): IGetBodyResponseData { return this.httpResponse.getBody(true); } /** Handle client/match/group/invite/cancel-all */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public cancelAllGroupInvite(url: string, info: any, sessionID: string): INullResponseData { return this.httpResponse.nullResponse(); } /** @deprecated - not called on raid start/end or game start/exit */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public putMetrics(url: string, info: IPutMetricsRequestData, sessionID: string): INullResponseData { return this.httpResponse.nullResponse(); } /** Handle raid/profile/list */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public getProfile(url: string, info: IGetProfileRequestData, sessionID: string): IGetBodyResponseData { return this.httpResponse.getBody(this.matchController.getProfile(info)); } // Handle client/match/available + // eslint-disable-next-line @typescript-eslint/no-unused-vars public serverAvailable(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData { const output = this.matchController.getEnabled(); @@ -135,6 +148,7 @@ export class MatchCallbacks } /** Handle client/getMetricsConfig */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public getMetrics(url: string, info: any, sessionID: string): IGetBodyResponseData { return this.httpResponse.getBody(this.jsonUtil.serialize(this.databaseServer.getTables().match.metrics)); @@ -145,18 +159,21 @@ export class MatchCallbacks * Handle client/match/group/status * @returns */ - public getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData + // eslint-disable-next-line @typescript-eslint/no-unused-vars + public getGroupStatus(url: string, info: IGetGroupStatusRequestData, sessionID: string): IGetBodyResponseData { return this.httpResponse.getBody(this.matchController.getGroupStatus(info)); } /** Handle client/match/group/create */ + // TODO: may have been removed from client public createGroup(url: string, info: ICreateGroupRequestData, sessionID: string): IGetBodyResponseData { return this.httpResponse.getBody(this.matchController.createGroup(sessionID, info)); } /** Handle client/match/group/delete */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public deleteGroup(url: string, info: any, sessionID: string): INullResponseData { this.matchController.deleteGroup(info); @@ -164,12 +181,14 @@ export class MatchCallbacks } // Handle client/match/group/leave + // eslint-disable-next-line @typescript-eslint/no-unused-vars public leaveGroup(url: string, info: IEmptyRequestData, sessionID: string): IGetBodyResponseData { return this.httpResponse.getBody(true); } /** Handle client/match/group/player/remove */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public removePlayerFromGroup(url: string, info: IRemovePlayerFromGroupRequest, sessionID: string): INullResponseData { return this.httpResponse.nullResponse(); diff --git a/project/src/callbacks/NotifierCallbacks.ts b/project/src/callbacks/NotifierCallbacks.ts index b5509d2f..595cde68 100644 --- a/project/src/callbacks/NotifierCallbacks.ts +++ b/project/src/callbacks/NotifierCallbacks.ts @@ -27,6 +27,7 @@ export class NotifierCallbacks * until we actually have something to send because otherwise we'd spam the client * and the client would abort the connection due to spam. */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public sendNotification(sessionID: string, req: any, resp: any, data: any): void { const splittedUrl = req.url.split("/"); @@ -43,6 +44,8 @@ export class NotifierCallbacks /** Handle push/notifier/get */ /** Handle push/notifier/getwebsocket */ + // TODO: removed from client? + // eslint-disable-next-line @typescript-eslint/no-unused-vars public getNotifier(url: string, info: any, sessionID: string): IGetBodyResponseData { return this.httpResponse.emptyArrayResponse(); @@ -62,6 +65,7 @@ export class NotifierCallbacks * Handle client/game/profile/select * @returns ISelectProfileResponse */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public selectProfile( url: string, info: ISelectProfileRequestData, @@ -71,6 +75,7 @@ export class NotifierCallbacks return this.httpResponse.getBody({ status: "ok" }); } + // eslint-disable-next-line @typescript-eslint/no-unused-vars public notify(url: string, info: any, sessionID: string): string { return "NOTIFY"; diff --git a/project/src/callbacks/ProfileCallbacks.ts b/project/src/callbacks/ProfileCallbacks.ts index 55f89db2..f5ba838c 100644 --- a/project/src/callbacks/ProfileCallbacks.ts +++ b/project/src/callbacks/ProfileCallbacks.ts @@ -7,6 +7,7 @@ import { IGetBodyResponseData } from "@spt-aki/models/eft/httpResponse/IGetBodyR import { INullResponseData } from "@spt-aki/models/eft/httpResponse/INullResponseData"; import { IGetMiniProfileRequestData } from "@spt-aki/models/eft/launcher/IGetMiniProfileRequestData"; import { GetProfileStatusResponseData } from "@spt-aki/models/eft/profile/GetProfileStatusResponseData"; +import { ICreateProfileResponse } from "@spt-aki/models/eft/profile/ICreateProfileResponse"; import { IGetProfileSettingsRequest } from "@spt-aki/models/eft/profile/IGetProfileSettingsRequest"; import { IProfileChangeNicknameRequestData } from "@spt-aki/models/eft/profile/IProfileChangeNicknameRequestData"; import { IProfileChangeVoiceRequestData } from "@spt-aki/models/eft/profile/IProfileChangeVoiceRequestData"; @@ -31,10 +32,11 @@ export class ProfileCallbacks /** * Handle client/game/profile/create */ - public createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData + public createProfile(url: string, info: IProfileCreateRequestData, sessionID: string): IGetBodyResponseData { - this.profileController.createProfile(info, sessionID); - return this.httpResponse.getBody({ uid: `pmc${sessionID}` }); + const id = this.profileController.createProfile(info, sessionID); + + return this.httpResponse.getBody({ uid: id }); } /** diff --git a/project/src/callbacks/RagfairCallbacks.ts b/project/src/callbacks/RagfairCallbacks.ts index fbd276b1..9730e699 100644 --- a/project/src/callbacks/RagfairCallbacks.ts +++ b/project/src/callbacks/RagfairCallbacks.ts @@ -13,6 +13,8 @@ import { IExtendOfferRequestData } from "@spt-aki/models/eft/ragfair/IExtendOffe import { IGetItemPriceResult } from "@spt-aki/models/eft/ragfair/IGetItemPriceResult"; import { IGetMarketPriceRequestData } from "@spt-aki/models/eft/ragfair/IGetMarketPriceRequestData"; import { IGetOffersResult } from "@spt-aki/models/eft/ragfair/IGetOffersResult"; +import { IGetRagfairOfferByIdRequest } from "@spt-aki/models/eft/ragfair/IGetRagfairOfferByIdRequest"; +import { IRagfairOffer } from "@spt-aki/models/eft/ragfair/IRagfairOffer"; import { IRemoveOfferRequestData } from "@spt-aki/models/eft/ragfair/IRemoveOfferRequestData"; import { ISearchRequestData } from "@spt-aki/models/eft/ragfair/ISearchRequestData"; import { ISendRagfairReportRequestData } from "@spt-aki/models/eft/ragfair/ISendRagfairReportRequestData"; @@ -138,4 +140,10 @@ export class RagfairCallbacks implements OnLoad, OnUpdate this.ragfairTaxService.storeClientOfferTaxValue(sessionId, request); return this.httpResponse.nullResponse(); } + + /** Handle client/ragfair/offer/findbyid */ + public getFleaOfferById(url: string, request: IGetRagfairOfferByIdRequest, sessionID: string): IGetBodyResponseData + { + return this.httpResponse.getBody(this.ragfairController.getOfferById(sessionID, request)); + } } diff --git a/project/src/controllers/InventoryController.ts b/project/src/controllers/InventoryController.ts index f6291e4b..4894147e 100644 --- a/project/src/controllers/InventoryController.ts +++ b/project/src/controllers/InventoryController.ts @@ -96,7 +96,7 @@ export class InventoryController const ownerInventoryItems = this.inventoryHelper.getOwnerInventoryItems(moveRequest, sessionID); if (ownerInventoryItems.sameInventory) { - // Don't move items from trader to profile, this can happen when editing a traders preset weapons + // Dont move items from trader to profile, this can happen when editing a traders preset weapons if (moveRequest.fromOwner?.type === "Trader" && !ownerInventoryItems.isMail) { return this.getTraderExploitErrorResponse(output); @@ -185,7 +185,7 @@ export class InventoryController /** * Split Item - * splitting 1 stack into 2 + * spliting 1 stack into 2 * @param pmcData Player profile (unused, getOwnerInventoryItems() gets profile) * @param request Split request * @param sessionID Session/player id @@ -209,8 +209,7 @@ export class InventoryController request.container.location = matchingItems.length; // Wrong location for first cartridge } - // The item being merged has three possible sources: pmc, scav or mail, getOwnerInventoryItems() handles getting - // correct one. + // The item being merged has three possible sources: pmc, scav or mail, getOwnerInventoryItems() handles getting correct one const itemToSplit = inventoryItems.from.find((x) => x._id === request.splitItem); if (!itemToSplit) { @@ -284,7 +283,7 @@ export class InventoryController if (!(destinationItem.upd?.StackObjectsCount)) { - // No stack count on destination, add one + // No stackcount on destination, add one destinationItem.upd = { StackObjectsCount: 1 }; } @@ -294,11 +293,17 @@ export class InventoryController } else if (!sourceItem.upd.StackObjectsCount) { - // Items pulled out of raid can have no stack count if the stack should be 1 + // Items pulled out of raid can have no stackcount if the stack should be 1 sourceItem.upd.StackObjectsCount = 1; } - destinationItem.upd.StackObjectsCount += sourceItem.upd.StackObjectsCount; // Add source stack count to destination + // Remove FiR status from destination stack when source stack has no FiR but destination does + if (!sourceItem.upd.SpawnedInSession && destinationItem.upd.SpawnedInSession) + { + delete destinationItem.upd.SpawnedInSession; + } + + destinationItem.upd.StackObjectsCount += sourceItem.upd.StackObjectsCount; // Add source stackcount to destination output.profileChanges[sessionID].items.del.push({ _id: sourceItem._id }); // Inform client source item being deleted const indexOfItemToRemove = inventoryItems.from.findIndex((x) => x._id === sourceItem._id); @@ -315,8 +320,8 @@ export class InventoryController } /** - * // TODO: Adds no data to output to send to client, is this by design? - * // TODO: should make use of getOwnerInventoryItems(), stack being transferred may not always be on pmc + * TODO: Adds no data to output to send to client, is this by design? + * TODO: should make use of getOwnerInventoryItems(), stack being transferred may not always be on pmc * Transfer items from one stack into another while keeping original stack * Used to take items from scav inventory into stash or to insert ammo into mags (shotgun ones) and reloading weapon by clicking "Reload" * @param pmcData Player profile @@ -422,10 +427,10 @@ export class InventoryController this.logger.error(`Unable to find item: ${request.item2} to swap positions with: ${request.item}`); } - // to.id is the parentId + // to.id is the parentid itemOne.parentId = request.to.id; - // to.container is the slotId + // to.container is the slotid itemOne.slotId = request.to.container; // Request object has location data, add it in, otherwise remove existing location from object @@ -477,7 +482,7 @@ export class InventoryController } /** - * Toggles "toggleable" items like night vision goggles and face shields. + * Toggles "Toggleable" items like night vision goggles and face shields. * @param pmcData player profile * @param body Toggle request * @param sessionID Session id @@ -549,7 +554,7 @@ export class InventoryController * Bind an inventory item to the quick access menu at bottom of player screen * Handle bind event * @param pmcData Player profile - * @param bindRequest Request object + * @param bindRequest Reqeust object * @param sessionID Session id * @returns IItemEventRouterResponse */ @@ -680,9 +685,9 @@ export class InventoryController } /** - * Get the tplId of an item from the examine request object + * Get the tplid of an item from the examine request object * @param body response request - * @returns string + * @returns tplid */ protected getExaminedItemTpl(body: IInventoryExamineRequestData): string { @@ -692,41 +697,40 @@ export class InventoryController } else if (body.fromOwner.id === Traders.FENCE) { - // Get tpl from fence assorts + // get tpl from fence assorts return this.fenceService.getRawFenceAssorts().items.find((x) => x._id === body.item)._tpl; } else if (body.fromOwner.type === "Trader") { // not fence - // Not fence - // Get tpl from trader assort + // get tpl from trader assort return this.databaseServer.getTables().traders[body.fromOwner.id].assort.items.find((item) => item._id === body.item )._tpl; } else if (body.fromOwner.type === "RagFair") { - // try to get tplId from items.json first + // try to get tplid from items.json first const item = this.databaseServer.getTables().templates.items[body.item]; if (item) { return item._id; } - // Try alternate way of getting offer if first approach fails + // try alternate way of getting offer if first approach fails let offer = this.ragfairOfferService.getOfferByOfferId(body.item); if (!offer) { offer = this.ragfairOfferService.getOfferByOfferId(body.fromOwner.id); } - // Try find examine item inside offer items array + // try find examine item inside offer items array const matchingItem = offer.items.find((x) => x._id === body.item); if (matchingItem) { return matchingItem._tpl; } - // Unable to find item in database or ragfair + // unable to find item in database or ragfair throw new Error(this.localisationService.getText("inventory-unable_to_find_item", body.item)); } } @@ -741,6 +745,7 @@ export class InventoryController { pmcData.Encyclopedia[id] = true; } + return this.eventOutputHolder.getOutput(sessionID); } diff --git a/project/src/controllers/MatchController.ts b/project/src/controllers/MatchController.ts index 93394367..10f2d544 100644 --- a/project/src/controllers/MatchController.ts +++ b/project/src/controllers/MatchController.ts @@ -10,6 +10,7 @@ import { Item } from "@spt-aki/models/eft/common/tables/IItem"; import { ICreateGroupRequestData } from "@spt-aki/models/eft/match/ICreateGroupRequestData"; import { IEndOfflineRaidRequestData } from "@spt-aki/models/eft/match/IEndOfflineRaidRequestData"; import { IGetGroupStatusRequestData } from "@spt-aki/models/eft/match/IGetGroupStatusRequestData"; +import { IGetGroupStatusResponse } from "@spt-aki/models/eft/match/IGetGroupStatusResponse"; import { IGetProfileRequestData } from "@spt-aki/models/eft/match/IGetProfileRequestData"; import { IGetRaidConfigurationRequestData } from "@spt-aki/models/eft/match/IGetRaidConfigurationRequestData"; import { IJoinMatchRequestData } from "@spt-aki/models/eft/match/IJoinMatchRequestData"; @@ -99,6 +100,7 @@ export class MatchController } /** Handle match/group/start_game */ + // eslint-disable-next-line @typescript-eslint/no-unused-vars public joinMatch(info: IJoinMatchRequestData, sessionId: string): IJoinMatchResult { const output: IJoinMatchResult = { maxPveCountExceeded: false, profiles: [] }; @@ -116,6 +118,7 @@ export class MatchController raidMode: "Online", mode: "deathmatch", shortid: null, + // eslint-disable-next-line @typescript-eslint/naming-convention additional_info: null, }); @@ -123,7 +126,8 @@ export class MatchController } /** Handle client/match/group/status */ - public getGroupStatus(info: IGetGroupStatusRequestData): any + // eslint-disable-next-line @typescript-eslint/no-unused-vars + public getGroupStatus(info: IGetGroupStatusRequestData): IGetGroupStatusResponse { return { players: [], maxPveCountExceeded: false }; } @@ -140,7 +144,7 @@ export class MatchController // TODO: add code to strip PMC of equipment now they've started the raid - // Set PMCs to difficulty set in pre-raid screen if override in bot config isn't enabled + // Set pmcs to difficulty set in pre-raid screen if override in bot config isnt enabled if (!this.pmcConfig.useDifficultyOverride) { this.pmcConfig.difficulty = this.convertDifficultyDropdownIntoBotDifficulty( diff --git a/project/src/controllers/ProfileController.ts b/project/src/controllers/ProfileController.ts index cf25d50c..ca39a36e 100644 --- a/project/src/controllers/ProfileController.ts +++ b/project/src/controllers/ProfileController.ts @@ -118,8 +118,11 @@ export class ProfileController /** * Handle client/game/profile/create + * @param info Client reqeust object + * @param sessionID Player id + * @returns Profiles _id value */ - public createProfile(info: IProfileCreateRequestData, sessionID: string): void + public createProfile(info: IProfileCreateRequestData, sessionID: string): string { const account = this.saveServer.getProfile(sessionID).info; const profile: TemplateSide = @@ -213,6 +216,8 @@ export class ProfileController // Completed account creation this.saveServer.getProfile(sessionID).info.wipe = false; this.saveServer.saveProfile(sessionID); + + return pmcData._id; } /** diff --git a/project/src/controllers/RagfairController.ts b/project/src/controllers/RagfairController.ts index 2f43432d..880024ae 100644 --- a/project/src/controllers/RagfairController.ts +++ b/project/src/controllers/RagfairController.ts @@ -21,6 +21,7 @@ import { IExtendOfferRequestData } from "@spt-aki/models/eft/ragfair/IExtendOffe import { IGetItemPriceResult } from "@spt-aki/models/eft/ragfair/IGetItemPriceResult"; import { IGetMarketPriceRequestData } from "@spt-aki/models/eft/ragfair/IGetMarketPriceRequestData"; import { IGetOffersResult } from "@spt-aki/models/eft/ragfair/IGetOffersResult"; +import { IGetRagfairOfferByIdRequest } from "@spt-aki/models/eft/ragfair/IGetRagfairOfferByIdRequest"; import { IRagfairOffer } from "@spt-aki/models/eft/ragfair/IRagfairOffer"; import { ISearchRequestData } from "@spt-aki/models/eft/ragfair/ISearchRequestData"; import { IProcessBuyTradeRequestData } from "@spt-aki/models/eft/trade/IProcessBuyTradeRequestData"; @@ -147,6 +148,20 @@ export class RagfairController return result; } + /** + * Handle client/ragfair/offer/findbyid + * @param sessionId Player id + * @param request Request data + * @returns IRagfairOffer + */ + public getOfferById(sessionId: string, request: IGetRagfairOfferByIdRequest): IRagfairOffer + { + const offers = this.ragfairOfferService.getOffers(); + const offerToReturn = offers.find(x => x.intId === request.id); + + return offerToReturn; + } + /** * Get offers for the client based on type of search being performed * @param searchRequest Client search request data diff --git a/project/src/generators/RagfairOfferGenerator.ts b/project/src/generators/RagfairOfferGenerator.ts index c35ea205..4f8080b6 100644 --- a/project/src/generators/RagfairOfferGenerator.ts +++ b/project/src/generators/RagfairOfferGenerator.ts @@ -34,6 +34,9 @@ export class RagfairOfferGenerator protected ragfairConfig: IRagfairConfig; protected allowedFleaPriceItemsForBarter: { tpl: string; price: number; }[]; + /** Internal counter to ensure each offer created has a unique value for its intId property */ + protected offerCounter = 0; + constructor( @inject("WinstonLogger") protected logger: ILogger, @inject("JsonUtil") protected jsonUtil: JsonUtil, @@ -121,7 +124,7 @@ export class RagfairOfferGenerator const offer: IRagfairOffer = { _id: this.hashUtil.generate(), - intId: 0, + intId: this.offerCounter, user: { id: this.getTraderId(userID), memberType: (userID === "ragfair") @@ -149,6 +152,8 @@ export class RagfairOfferGenerator CurrentItemCount: itemCount, }; + this.offerCounter++; + return offer; } diff --git a/project/src/models/eft/game/ICurrentGroupResponse.ts b/project/src/models/eft/game/ICurrentGroupResponse.ts index 3b39739e..3100bb95 100644 --- a/project/src/models/eft/game/ICurrentGroupResponse.ts +++ b/project/src/models/eft/game/ICurrentGroupResponse.ts @@ -2,7 +2,7 @@ import { MemberCategory } from "@spt-aki/models/enums/MemberCategory"; export interface ICurrentGroupResponse { - squad: any[]; + squad: ICurrentGroupSquadMember[]; } export interface ICurrentGroupSquadMember diff --git a/project/src/models/eft/match/IGetGroupStatusResponse.ts b/project/src/models/eft/match/IGetGroupStatusResponse.ts new file mode 100644 index 00000000..bafb44f7 --- /dev/null +++ b/project/src/models/eft/match/IGetGroupStatusResponse.ts @@ -0,0 +1,25 @@ +import { MemberCategory } from "@spt-aki/models/enums/MemberCategory" + +export interface IGetGroupStatusResponse +{ + players: IPlayer[] + maxPveCountExceeded: boolean +} + +export interface IPlayer +{ + aid: string + _id: string + lookingGroup: boolean + IsLeader: boolean + IsReady: boolean + Info: ICurrentGroupMemberInfo +} + +export interface ICurrentGroupMemberInfo +{ + Nickname: string; + Side: string; + Level: string; + MemberCategory: MemberCategory; +} \ No newline at end of file diff --git a/project/src/models/eft/profile/ICreateProfileResponse.ts b/project/src/models/eft/profile/ICreateProfileResponse.ts new file mode 100644 index 00000000..c1fb76b9 --- /dev/null +++ b/project/src/models/eft/profile/ICreateProfileResponse.ts @@ -0,0 +1,4 @@ +export interface ICreateProfileResponse +{ + uid: string +} \ No newline at end of file diff --git a/project/src/models/eft/ragfair/IGetRagfairOfferByIdRequest.ts b/project/src/models/eft/ragfair/IGetRagfairOfferByIdRequest.ts new file mode 100644 index 00000000..e25d0d8a --- /dev/null +++ b/project/src/models/eft/ragfair/IGetRagfairOfferByIdRequest.ts @@ -0,0 +1,4 @@ +export interface IGetRagfairOfferByIdRequest +{ + id: number +} \ No newline at end of file diff --git a/project/src/routers/static/RagfairStaticRouter.ts b/project/src/routers/static/RagfairStaticRouter.ts index 376b8c6d..5a727270 100644 --- a/project/src/routers/static/RagfairStaticRouter.ts +++ b/project/src/routers/static/RagfairStaticRouter.ts @@ -11,17 +11,23 @@ export class RagfairStaticRouter extends StaticRouter super([ new RouteAction( "/client/ragfair/search", + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (url: string, info: any, sessionID: string, output: string): any => + { + return this.ragfairCallbacks.search(url, info, sessionID); + }, + ), + new RouteAction( + "/client/ragfair/find", + // eslint-disable-next-line @typescript-eslint/no-unused-vars (url: string, info: any, sessionID: string, output: string): any => { return this.ragfairCallbacks.search(url, info, sessionID); }, ), - new RouteAction("/client/ragfair/find", (url: string, info: any, sessionID: string, output: string): any => - { - return this.ragfairCallbacks.search(url, info, sessionID); - }), new RouteAction( "/client/ragfair/itemMarketPrice", + // eslint-disable-next-line @typescript-eslint/no-unused-vars (url: string, info: any, sessionID: string, output: string): any => { return this.ragfairCallbacks.getMarketPrice(url, info, sessionID); @@ -29,6 +35,7 @@ export class RagfairStaticRouter extends StaticRouter ), new RouteAction( "/client/ragfair/offerfees", + // eslint-disable-next-line @typescript-eslint/no-unused-vars (url: string, info: any, sessionID: string, output: string): any => { return this.ragfairCallbacks.storePlayerOfferTaxAmount(url, info, sessionID); @@ -36,15 +43,28 @@ export class RagfairStaticRouter extends StaticRouter ), new RouteAction( "/client/reports/ragfair/send", + // eslint-disable-next-line @typescript-eslint/no-unused-vars (url: string, info: any, sessionID: string, output: string): any => { return this.ragfairCallbacks.sendReport(url, info, sessionID); }, ), - new RouteAction("/client/items/prices", (url: string, info: any, sessionID: string, output: string): any => - { - return this.ragfairCallbacks.getFleaPrices(url, info, sessionID); - }), + new RouteAction( + "/client/items/prices", + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (url: string, info: any, sessionID: string, output: string): any => + { + return this.ragfairCallbacks.getFleaPrices(url, info, sessionID); + }, + ), + new RouteAction( + "/client/ragfair/offer/findbyid", + // eslint-disable-next-line @typescript-eslint/no-unused-vars + (url: string, info: any, sessionID: string, output: string): any => + { + return this.ragfairCallbacks.getFleaOfferById(url, info, sessionID); + }, + ), ]); } }