From 57a56440f76d88f438d417ce86cc3319ad037816 Mon Sep 17 00:00:00 2001 From: Chomp Date: Tue, 7 Jan 2025 11:19:19 +0000 Subject: [PATCH] Implemented `hideoutCustomizationSetMannequinPose` endpoint --- project/src/callbacks/HideoutCallbacks.ts | 12 +++++++++++ project/src/controllers/HideoutController.ts | 20 +++++++++++++++++++ .../src/models/eft/common/tables/IBotBase.ts | 2 +- ...outCustomizationSetMannequinPoseRequest.ts | 5 +++++ .../src/models/enums/HideoutEventActions.ts | 1 + .../item_events/HideoutItemEventRouter.ts | 3 +++ 6 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 project/src/models/eft/hideout/IHideoutCustomizationSetMannequinPoseRequest.ts diff --git a/project/src/callbacks/HideoutCallbacks.ts b/project/src/callbacks/HideoutCallbacks.ts index 1f0ab5c6..61b0170b 100644 --- a/project/src/callbacks/HideoutCallbacks.ts +++ b/project/src/callbacks/HideoutCallbacks.ts @@ -6,6 +6,7 @@ import type { IHideoutCancelProductionRequestData } from "@spt/models/eft/hideou import type { IHideoutCircleOfCultistProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutCircleOfCultistProductionStartRequestData"; import type { IHideoutContinuousProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutContinuousProductionStartRequestData"; import type { IHideoutCustomizationApplyRequestData } from "@spt/models/eft/hideout/IHideoutCustomizationApplyRequestData"; +import { IHideoutCustomizationSetMannequinPoseRequest } from "@spt/models/eft/hideout/IHideoutCustomizationSetMannequinPoseRequest"; import type { IHideoutDeleteProductionRequestData } from "@spt/models/eft/hideout/IHideoutDeleteProductionRequestData"; import type { IHideoutImproveAreaRequestData } from "@spt/models/eft/hideout/IHideoutImproveAreaRequestData"; import type { IHideoutPutItemInRequestData } from "@spt/models/eft/hideout/IHideoutPutItemInRequestData"; @@ -222,6 +223,17 @@ export class HideoutCallbacks implements OnUpdate { return this.hideoutController.hideoutCustomizationApply(sessionId, pmcData, request); } + /** + * Handle client/game/profile/items/moving - hideoutCustomizationSetMannequinPose + */ + public hideoutCustomizationSetMannequinPose( + pmcData: IPmcData, + request: IHideoutCustomizationSetMannequinPoseRequest, + sessionId: string, + ): IItemEventRouterResponse { + return this.hideoutController.hideoutCustomizationSetMannequinPose(sessionId, pmcData, request); + } + public async onUpdate(timeSinceLastRun: number): Promise { if (timeSinceLastRun > this.hideoutConfig.runIntervalSeconds) { this.hideoutController.update(); diff --git a/project/src/controllers/HideoutController.ts b/project/src/controllers/HideoutController.ts index 40947d4e..63ea65da 100644 --- a/project/src/controllers/HideoutController.ts +++ b/project/src/controllers/HideoutController.ts @@ -19,6 +19,7 @@ import type { IHideoutCancelProductionRequestData } from "@spt/models/eft/hideou import type { IHideoutCircleOfCultistProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutCircleOfCultistProductionStartRequestData"; import type { IHideoutContinuousProductionStartRequestData } from "@spt/models/eft/hideout/IHideoutContinuousProductionStartRequestData"; import type { IHideoutCustomizationApplyRequestData } from "@spt/models/eft/hideout/IHideoutCustomizationApplyRequestData"; +import { IHideoutCustomizationSetMannequinPoseRequest } from "@spt/models/eft/hideout/IHideoutCustomizationSetMannequinPoseRequest"; import type { IHideoutDeleteProductionRequestData } from "@spt/models/eft/hideout/IHideoutDeleteProductionRequestData"; import type { IHideoutImproveAreaRequestData } from "@spt/models/eft/hideout/IHideoutImproveAreaRequestData"; import type { IHideoutProduction } from "@spt/models/eft/hideout/IHideoutProduction"; @@ -1425,6 +1426,25 @@ export class HideoutController { return output; } + /** + * Handle HideoutCustomizationSetMannequinPose event + * @param sessionId Session id + * @param pmcData Player profile + * @param request Client request data + * @returns Client response + */ + public hideoutCustomizationSetMannequinPose( + sessionId: string, + pmcData: IPmcData, + request: IHideoutCustomizationSetMannequinPoseRequest, + ): IItemEventRouterResponse { + for (const [key, value] of Object.entries(request.poses)) { + pmcData.Hideout.MannequinPoses[key] = value; + } + + return this.eventOutputHolder.getOutput(sessionId); + } + protected getHideoutCustomisationType(type: string): string { switch (type) { case "wall": diff --git a/project/src/models/eft/common/tables/IBotBase.ts b/project/src/models/eft/common/tables/IBotBase.ts index 5749752f..8f7c690c 100644 --- a/project/src/models/eft/common/tables/IBotBase.ts +++ b/project/src/models/eft/common/tables/IBotBase.ts @@ -351,7 +351,7 @@ export interface IHideout { HideoutCounters: IHideoutCounters; Seed: number; Customization: Record; - MannequinPoses: string[]; + MannequinPoses: Record; sptUpdateLastRunTimestamp: number; } diff --git a/project/src/models/eft/hideout/IHideoutCustomizationSetMannequinPoseRequest.ts b/project/src/models/eft/hideout/IHideoutCustomizationSetMannequinPoseRequest.ts new file mode 100644 index 00000000..f63239e6 --- /dev/null +++ b/project/src/models/eft/hideout/IHideoutCustomizationSetMannequinPoseRequest.ts @@ -0,0 +1,5 @@ +export interface IHideoutCustomizationSetMannequinPoseRequest { + Action: "HideoutCustomizationSetMannequinPose"; + poses: Record; + timestamp: number; +} diff --git a/project/src/models/enums/HideoutEventActions.ts b/project/src/models/enums/HideoutEventActions.ts index b3c28864..93964dec 100644 --- a/project/src/models/enums/HideoutEventActions.ts +++ b/project/src/models/enums/HideoutEventActions.ts @@ -14,4 +14,5 @@ export enum HideoutEventActions { HIDEOUT_CIRCLE_OF_CULTIST_PRODUCTION_START = "HideoutCircleOfCultistProductionStart", HIDEOUT_DELETE_PRODUCTION_COMMAND = "HideoutDeleteProductionCommand", HIDEOUT_CUSTOMIZATION_APPLY_COMMAND = "HideoutCustomizationApply", + HIDEOUT_CUSTOMIZATION_SET_MANNEQUIN_POSE = "HideoutCustomizationSetMannequinPose", } diff --git a/project/src/routers/item_events/HideoutItemEventRouter.ts b/project/src/routers/item_events/HideoutItemEventRouter.ts index 998def85..fbc4de49 100644 --- a/project/src/routers/item_events/HideoutItemEventRouter.ts +++ b/project/src/routers/item_events/HideoutItemEventRouter.ts @@ -28,6 +28,7 @@ export class HideoutItemEventRouter extends ItemEventRouterDefinition { new HandledRoute(HideoutEventActions.HIDEOUT_CIRCLE_OF_CULTIST_PRODUCTION_START, false), new HandledRoute(HideoutEventActions.HIDEOUT_DELETE_PRODUCTION_COMMAND, false), new HandledRoute(HideoutEventActions.HIDEOUT_CUSTOMIZATION_APPLY_COMMAND, false), + new HandledRoute(HideoutEventActions.HIDEOUT_CUSTOMIZATION_SET_MANNEQUIN_POSE, false), ]; } @@ -69,6 +70,8 @@ export class HideoutItemEventRouter extends ItemEventRouterDefinition { return this.hideoutCallbacks.hideoutDeleteProductionCommand(pmcData, body, sessionID); case HideoutEventActions.HIDEOUT_CUSTOMIZATION_APPLY_COMMAND: return this.hideoutCallbacks.hideoutCustomizationApplyCommand(pmcData, body, sessionID); + case HideoutEventActions.HIDEOUT_CUSTOMIZATION_SET_MANNEQUIN_POSE: + return this.hideoutCallbacks.hideoutCustomizationSetMannequinPose(pmcData, body, sessionID); default: throw new Error(`Unhandled event ${url} request: ${JSON.stringify(body)}`); }