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.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 { private readonly RagfairConfig _ragfairConfig = _configServer.GetConfig(); public Task OnLoad() { _ragfairServer.Load(); _ragfairPriceService.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, string sessionID) { return new ValueTask( _httpResponseUtil.GetBody(_ragfairController.GetOffers(sessionID, info)) ); } /// /// Handle client/ragfair/itemMarketPrice /// /// /// /// Session/player id /// public ValueTask GetMarketPrice( string url, GetMarketPriceRequestData info, string 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, string sessionID ) { return _ragfairController.AddPlayerOffer(pmcData, info, sessionID); } /// /// Handle RagFairRemoveOffer event /// /// Players PMC profile /// /// Session/player id /// public ItemEventRouterResponse RemoveOffer( PmcData pmcData, RemoveOfferRequestData info, string sessionID ) { return _ragfairController.FlagOfferForRemoval(info.OfferId, sessionID); } /// /// Handle RagFairRenewOffer event /// /// Players PMC profile /// /// Session/player id /// public ItemEventRouterResponse ExtendOffer( PmcData pmcData, ExtendOfferRequestData info, string 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 _, string sessionID) { return new ValueTask( _httpResponseUtil.GetBody(_ragfairController.GetAllFleaPrices()) ); } /// /// Handle client/reports/ragfair/send /// /// /// /// Session/player id /// public ValueTask SendReport( string url, SendRagfairReportRequestData info, string sessionID ) { return new ValueTask(_httpResponseUtil.NullResponse()); } public ValueTask StorePlayerOfferTaxAmount( string url, StorePlayerOfferTaxAmountRequestData info, string 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, string sessionID ) { return new ValueTask( _httpResponseUtil.GetBody(_ragfairController.GetOfferByInternalId(sessionID, info)) ); } }