using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Controllers; using SPTarkov.Server.Core.DI; using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Eft.Common; using SPTarkov.Server.Core.Models.Eft.Hideout; using SPTarkov.Server.Core.Models.Eft.ItemEvent; using SPTarkov.Server.Core.Models.Spt.Config; using SPTarkov.Server.Core.Servers; namespace SPTarkov.Server.Core.Callbacks; [Injectable(TypePriority = OnUpdateOrder.HideoutCallbacks)] public class HideoutCallbacks(HideoutController hideoutController, ConfigServer configServer) : IOnUpdate { private readonly HideoutConfig _hideoutConfig = configServer.GetConfig(); public Task OnUpdate(long secondsSinceLastRun) { if (secondsSinceLastRun < _hideoutConfig.RunIntervalSeconds) { // Not enough time has passed since last run, exit early return Task.FromResult(false); } hideoutController.Update(); return Task.FromResult(true); } /// /// Handle HideoutUpgrade event /// public ItemEventRouterResponse Upgrade( PmcData pmcData, HideoutUpgradeRequestData request, MongoId sessionID, ItemEventRouterResponse output ) { hideoutController.StartUpgrade(pmcData, request, sessionID, output); return output; } /// /// Handle HideoutUpgradeComplete event /// public ItemEventRouterResponse UpgradeComplete( PmcData pmcData, HideoutUpgradeCompleteRequestData request, MongoId sessionID, ItemEventRouterResponse output ) { hideoutController.UpgradeComplete(pmcData, request, sessionID, output); return output; } /// /// Handle HideoutPutItemsInAreaSlots /// public ItemEventRouterResponse PutItemsInAreaSlots(PmcData pmcData, HideoutPutItemInRequestData request, MongoId sessionID) { return hideoutController.PutItemsInAreaSlots(pmcData, request, sessionID); } /// /// Handle HideoutTakeItemsFromAreaSlots event /// public ItemEventRouterResponse TakeItemsFromAreaSlots(PmcData pmcData, HideoutTakeItemOutRequestData request, MongoId sessionID) { return hideoutController.TakeItemsFromAreaSlots(pmcData, request, sessionID); } /// /// Handle HideoutToggleArea event /// public ItemEventRouterResponse ToggleArea(PmcData pmcData, HideoutToggleAreaRequestData request, MongoId sessionID) { return hideoutController.ToggleArea(pmcData, request, sessionID); } /// /// Handle HideoutSingleProductionStart event /// public ItemEventRouterResponse SingleProductionStart( PmcData pmcData, HideoutSingleProductionStartRequestData request, MongoId sessionID ) { return hideoutController.SingleProductionStart(pmcData, request, sessionID); } /// /// Handle HideoutScavCaseProductionStart event /// public ItemEventRouterResponse ScavCaseProductionStart(PmcData pmcData, HideoutScavCaseStartRequestData request, MongoId sessionID) { return hideoutController.ScavCaseProductionStart(pmcData, request, sessionID); } /// /// Handle HideoutContinuousProductionStart /// public ItemEventRouterResponse ContinuousProductionStart( PmcData pmcData, HideoutContinuousProductionStartRequestData request, MongoId sessionID ) { return hideoutController.ContinuousProductionStart(pmcData, request, sessionID); } /// /// Handle HideoutTakeProduction event /// public ItemEventRouterResponse TakeProduction(PmcData pmcData, HideoutTakeProductionRequestData request, MongoId sessionID) { return hideoutController.TakeProduction(pmcData, request, sessionID); } /// /// Handle HideoutQuickTimeEvent /// public ItemEventRouterResponse HandleQTEEvent( PmcData pmcData, HandleQTEEventRequestData request, MongoId sessionID, ItemEventRouterResponse output ) { hideoutController.HandleQTEEventOutcome(sessionID, pmcData, request, output); return output; } /// /// Handle client/game/profile/items/moving - RecordShootingRangePoints /// public ItemEventRouterResponse RecordShootingRangePoints( PmcData pmcData, RecordShootingRangePoints request, MongoId sessionID, ItemEventRouterResponse output ) { hideoutController.RecordShootingRangePoints(sessionID, pmcData, request); return output; } /// /// Handle client/game/profile/items/moving - RecordShootingRangePoints /// public ItemEventRouterResponse ImproveArea(PmcData pmcData, HideoutImproveAreaRequestData request, MongoId sessionID) { return hideoutController.ImproveArea(sessionID, pmcData, request); } /// /// Handle client/game/profile/items/moving - HideoutCancelProductionCommand /// public ItemEventRouterResponse CancelProduction(PmcData pmcData, HideoutCancelProductionRequestData request, MongoId sessionID) { return hideoutController.CancelProduction(sessionID, pmcData, request); } /// /// Handle client/game/profile/items/moving - HideoutCircleOfCultistProductionStart /// public ItemEventRouterResponse CicleOfCultistProductionStart( PmcData pmcData, HideoutCircleOfCultistProductionStartRequestData request, MongoId sessionID ) { return hideoutController.CircleOfCultistProductionStart(sessionID, pmcData, request); } /// /// Handle client/game/profile/items/moving - HideoutDeleteProductionCommand /// public ItemEventRouterResponse HideoutDeleteProductionCommand( PmcData pmcData, HideoutDeleteProductionRequestData request, MongoId sessionID ) { return hideoutController.HideoutDeleteProductionCommand(sessionID, pmcData, request); } /// /// Handle client/game/profile/items/moving - HideoutCustomizationApply /// public ItemEventRouterResponse HideoutCustomizationApplyCommand( PmcData pmcData, HideoutCustomizationApplyRequestData request, MongoId sessionID ) { return hideoutController.HideoutCustomizationApply(sessionID, pmcData, request); } /// /// Handle client/game/profile/items/moving - hideoutCustomizationSetMannequinPose /// /// public ItemEventRouterResponse HideoutCustomizationSetMannequinPose( PmcData pmcData, HideoutCustomizationSetMannequinPoseRequest request, MongoId sessionId ) { return hideoutController.HideoutCustomizationSetMannequinPose(sessionId, pmcData, request); } }