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.ItemEvent; using SPTarkov.Server.Core.Models.Eft.Ragfair; using SPTarkov.Server.Core.Models.Spt.Config; using SPTarkov.Server.Core.Servers; using SPTarkov.Server.Core.Services; using SPTarkov.Server.Core.Utils; namespace SPTarkov.Server.Core.Callbacks; [Injectable(TypePriority = OnLoadOrder.RagfairCallbacks)] public class RagfairCallbacks( HttpResponseUtil httpResponseUtil, RagfairServer ragfairServer, RagfairController ragfairController, RagfairTaxService ragfairTaxService, RagfairPriceService ragfairPriceService, ConfigServer configServer ) : IOnLoad, IOnUpdate { protected readonly RagfairConfig RagfairConfig = configServer.GetConfig(); public Task OnLoad() { ragfairPriceService.Load(); ragfairServer.Load(); return Task.CompletedTask; } public Task OnUpdate(long secondsSinceLastRun) { if (secondsSinceLastRun < RagfairConfig.RunIntervalSeconds) { // Not enough time has passed since last run, exit early return Task.FromResult(false); } // There is a flag inside this class that only makes it run once. ragfairServer.AddPlayerOffers(); // Check player offers and mail payment to player if sold ragfairController.Update(); // Process all offers / expire offers ragfairServer.Update(); return Task.FromResult(true); } /// /// Handle client/ragfair/search /// Handle client/ragfair/find /// /// /// /// Session/player id /// public ValueTask Search(string url, SearchRequestData info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(ragfairController.GetOffers(sessionID, info))); } /// /// Handle client/ragfair/itemMarketPrice /// /// /// /// Session/player id /// public ValueTask GetMarketPrice(string url, GetMarketPriceRequestData info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(ragfairController.GetItemMinAvgMaxFleaPriceValues(info))); } /// /// Handle RagFairAddOffer event /// /// Players PMC profile /// /// Session/player id /// public ItemEventRouterResponse AddOffer(PmcData pmcData, AddOfferRequestData info, MongoId sessionID) { return ragfairController.AddPlayerOffer(pmcData, info, sessionID); } /// /// Handle RagFairRemoveOffer event /// /// Players PMC profile /// /// Session/player id /// public ItemEventRouterResponse RemoveOffer(PmcData pmcData, RemoveOfferRequestData info, MongoId sessionID) { return ragfairController.FlagOfferForRemoval(info.OfferId, sessionID); } /// /// Handle RagFairRenewOffer event /// /// Players PMC profile /// /// Session/player id /// public ItemEventRouterResponse ExtendOffer(PmcData pmcData, ExtendOfferRequestData info, MongoId sessionID) { return ragfairController.ExtendOffer(info, sessionID); } /// /// Handle /client/items/prices /// Called when clicking an item to list on flea /// /// /// /// Session/player id /// public ValueTask GetFleaPrices(string url, EmptyRequestData _, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(ragfairController.GetAllFleaPrices())); } /// /// Handle client/reports/ragfair/send /// /// /// /// Session/player id /// public ValueTask SendReport(string url, SendRagfairReportRequestData info, MongoId sessionID) { return new ValueTask(httpResponseUtil.NullResponse()); } public ValueTask StorePlayerOfferTaxAmount(string url, StorePlayerOfferTaxAmountRequestData info, MongoId sessionID) { ragfairTaxService.StoreClientOfferTaxValue(sessionID, info); return new ValueTask(httpResponseUtil.NullResponse()); } /// /// Handle client/ragfair/offer/findbyid /// /// /// /// Session/player id /// public ValueTask GetFleaOfferById(string url, GetRagfairOfferByIdRequest info, MongoId sessionID) { return new ValueTask(httpResponseUtil.GetBody(ragfairController.GetOfferByInternalId(sessionID, info))); } }