using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Controllers; using SPTarkov.Server.Core.DI; 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, string sessionID, ItemEventRouterResponse output ) { _hideoutController.StartUpgrade(pmcData, request, sessionID, output); return output; } /// /// Handle HideoutUpgradeComplete event /// public ItemEventRouterResponse UpgradeComplete( PmcData pmcData, HideoutUpgradeCompleteRequestData request, string sessionID, ItemEventRouterResponse output ) { _hideoutController.UpgradeComplete(pmcData, request, sessionID, output); return output; } /// /// Handle HideoutPutItemsInAreaSlots /// public ItemEventRouterResponse PutItemsInAreaSlots( PmcData pmcData, HideoutPutItemInRequestData request, string sessionID ) { return _hideoutController.PutItemsInAreaSlots(pmcData, request, sessionID); } /// /// Handle HideoutTakeItemsFromAreaSlots event /// public ItemEventRouterResponse TakeItemsFromAreaSlots( PmcData pmcData, HideoutTakeItemOutRequestData request, string sessionID ) { return _hideoutController.TakeItemsFromAreaSlots(pmcData, request, sessionID); } /// /// Handle HideoutToggleArea event /// public ItemEventRouterResponse ToggleArea( PmcData pmcData, HideoutToggleAreaRequestData request, string sessionID ) { return _hideoutController.ToggleArea(pmcData, request, sessionID); } /// /// Handle HideoutSingleProductionStart event /// public ItemEventRouterResponse SingleProductionStart( PmcData pmcData, HideoutSingleProductionStartRequestData request, string sessionID ) { return _hideoutController.SingleProductionStart(pmcData, request, sessionID); } /// /// Handle HideoutScavCaseProductionStart event /// public ItemEventRouterResponse ScavCaseProductionStart( PmcData pmcData, HideoutScavCaseStartRequestData request, string sessionID ) { return _hideoutController.ScavCaseProductionStart(pmcData, request, sessionID); } /// /// Handle HideoutContinuousProductionStart /// public ItemEventRouterResponse ContinuousProductionStart( PmcData pmcData, HideoutContinuousProductionStartRequestData request, string sessionID ) { return _hideoutController.ContinuousProductionStart(pmcData, request, sessionID); } /// /// Handle HideoutTakeProduction event /// public ItemEventRouterResponse TakeProduction( PmcData pmcData, HideoutTakeProductionRequestData request, string sessionID ) { return _hideoutController.TakeProduction(pmcData, request, sessionID); } /// /// Handle HideoutQuickTimeEvent /// public ItemEventRouterResponse HandleQTEEvent( PmcData pmcData, HandleQTEEventRequestData request, string 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, string sessionID, ItemEventRouterResponse output ) { _hideoutController.RecordShootingRangePoints(sessionID, pmcData, request); return output; } /// /// Handle client/game/profile/items/moving - RecordShootingRangePoints /// public ItemEventRouterResponse ImproveArea( PmcData pmcData, HideoutImproveAreaRequestData request, string sessionID ) { return _hideoutController.ImproveArea(sessionID, pmcData, request); } /// /// Handle client/game/profile/items/moving - HideoutCancelProductionCommand /// public ItemEventRouterResponse CancelProduction( PmcData pmcData, HideoutCancelProductionRequestData request, string sessionID ) { return _hideoutController.CancelProduction(sessionID, pmcData, request); } /// /// Handle client/game/profile/items/moving - HideoutCircleOfCultistProductionStart /// public ItemEventRouterResponse CicleOfCultistProductionStart( PmcData pmcData, HideoutCircleOfCultistProductionStartRequestData request, string sessionID ) { return _hideoutController.CicleOfCultistProductionStart(sessionID, pmcData, request); } /// /// Handle client/game/profile/items/moving - HideoutDeleteProductionCommand /// public ItemEventRouterResponse HideoutDeleteProductionCommand( PmcData pmcData, HideoutDeleteProductionRequestData request, string sessionID ) { return _hideoutController.HideoutDeleteProductionCommand(sessionID, pmcData, request); } /// /// Handle client/game/profile/items/moving - HideoutCustomizationApply /// public ItemEventRouterResponse HideoutCustomizationApplyCommand( PmcData pmcData, HideoutCustomizationApplyRequestData request, string sessionID ) { return _hideoutController.HideoutCustomizationApply(sessionID, pmcData, request); } /// /// Handle client/game/profile/items/moving - hideoutCustomizationSetMannequinPose /// /// public ItemEventRouterResponse HideoutCustomizationSetMannequinPose( PmcData pmcData, HideoutCustomizationSetMannequinPoseRequest request, string sessionId ) { return _hideoutController.HideoutCustomizationSetMannequinPose(sessionId, pmcData, request); } }