using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Controllers; using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Eft.Common; using SPTarkov.Server.Core.Models.Eft.ItemEvent; using SPTarkov.Server.Core.Models.Eft.Quests; using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; [Injectable] public class QuestCallbacks( HttpResponseUtil httpResponseUtil, QuestController questController, RepeatableQuestController repeatableQuestController ) { /// /// Handle RepeatableQuestChange event /// /// Players PMC profile /// /// Session/player id /// public ItemEventRouterResponse ChangeRepeatableQuest( PmcData pmcData, RepeatableQuestChangeRequest info, MongoId sessionID ) { return repeatableQuestController.ChangeRepeatableQuest(pmcData, info, sessionID); } /// /// Handle QuestAccept event /// /// Players PMC profile /// /// Session/player id /// public ItemEventRouterResponse AcceptQuest( PmcData pmcData, AcceptQuestRequestData info, MongoId sessionID ) { if (info.Type == "repeatable") { return repeatableQuestController.AcceptRepeatableQuest(pmcData, info, sessionID); } return questController.AcceptQuest(pmcData, info, sessionID); } /// /// Handle QuestComplete event /// /// Players PMC profile /// /// Session/player id /// public ItemEventRouterResponse CompleteQuest( PmcData pmcData, CompleteQuestRequestData info, MongoId sessionID ) { return questController.CompleteQuest(pmcData, info, sessionID); } /// /// Handle QuestHandover event /// /// Players PMC profile /// /// Session/player id /// public ItemEventRouterResponse HandoverQuest( PmcData pmcData, HandoverQuestRequestData info, MongoId sessionID ) { return questController.HandoverQuest(pmcData, info, sessionID); } /// /// Handle client/quest/list /// /// /// /// Session/player id /// public ValueTask ListQuests(string url, ListQuestsRequestData info, MongoId sessionID) { return new ValueTask( httpResponseUtil.GetBody(questController.GetClientQuests(sessionID)) ); } /// /// Handle client/repeatalbeQuests/activityPeriods /// /// /// /// Session/player id /// public ValueTask ActivityPeriods(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask( httpResponseUtil.GetBody(repeatableQuestController.GetClientRepeatableQuests(sessionID)) ); } }