Added implementation of RagfairServer
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
using Core.Annotations;
|
||||
using Core.Annotations;
|
||||
using Core.Controllers;
|
||||
using Core.DI;
|
||||
using Core.Models.Eft.Common;
|
||||
@@ -16,7 +16,7 @@ namespace Core.Callbacks;
|
||||
[Injectable(InjectableTypeOverride = typeof(RagfairCallbacks))]
|
||||
public class RagfairCallbacks(
|
||||
HttpResponseUtil _httpResponseUtil,
|
||||
// RagfairServer _ragfairServer
|
||||
RagfairServer _ragfairServer,
|
||||
RagfairController _ragfairController,
|
||||
RagfairTaxService _ragfairTaxService,
|
||||
ConfigServer _configServer
|
||||
@@ -27,7 +27,6 @@ public class RagfairCallbacks(
|
||||
public async Task OnLoad()
|
||||
{
|
||||
// await _ragfairServer.Load();
|
||||
// TODO: implement RagfairServer
|
||||
}
|
||||
|
||||
public string GetRoute()
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
using Core.Annotations;
|
||||
using Core.Generators;
|
||||
using Core.Models.Eft.Ragfair;
|
||||
using Core.Models.Enums;
|
||||
using Core.Models.Spt.Config;
|
||||
using Core.Models.Utils;
|
||||
using Core.Services;
|
||||
|
||||
namespace Core.Servers
|
||||
{
|
||||
[Injectable]
|
||||
public class RagfairServer
|
||||
{
|
||||
protected ISptLogger<RagfairServer> _logger;
|
||||
protected RagfairOfferService _ragfairOfferService;
|
||||
protected RagfairCategoriesService _ragfairCategoriesService;
|
||||
protected RagfairRequiredItemsService _ragfairRequiredItemsService;
|
||||
protected LocalisationService _localisationService;
|
||||
protected RagfairOfferGenerator _ragfairOfferGenerator;
|
||||
protected ConfigServer _configServer;
|
||||
protected RagfairConfig _ragfairConfig;
|
||||
|
||||
public RagfairServer(
|
||||
ISptLogger<RagfairServer> logger,
|
||||
RagfairOfferService ragfairOfferService,
|
||||
RagfairCategoriesService ragfairCategoriesService,
|
||||
RagfairRequiredItemsService ragfairRequiredItemsService,
|
||||
LocalisationService localisationService,
|
||||
RagfairOfferGenerator ragfairOfferGenerator,
|
||||
ConfigServer configServer)
|
||||
{
|
||||
_logger = logger;
|
||||
_ragfairOfferService = ragfairOfferService;
|
||||
_ragfairCategoriesService = ragfairCategoriesService;
|
||||
_ragfairRequiredItemsService = ragfairRequiredItemsService;
|
||||
_localisationService = localisationService;
|
||||
_ragfairOfferGenerator = ragfairOfferGenerator;
|
||||
_configServer = configServer;
|
||||
|
||||
_ragfairConfig = _configServer.GetConfig<RagfairConfig>();
|
||||
}
|
||||
|
||||
public async Task Load(){
|
||||
_logger.Info(_localisationService.GetText("ragfair-generating_offers"));
|
||||
await _ragfairOfferGenerator.GenerateDynamicOffers();
|
||||
await Update();
|
||||
}
|
||||
|
||||
private async Task Update()
|
||||
{
|
||||
_ragfairOfferService.ExpireStaleOffers();
|
||||
|
||||
// Generate trader offers
|
||||
var traders = GetUpdateableTraders();
|
||||
foreach (var traderId in traders) {
|
||||
// Edge case - skip generating fence offers
|
||||
if (traderId == Traders.FENCE)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (_ragfairOfferService.TraderOffersNeedRefreshing(traderId))
|
||||
{
|
||||
_ragfairOfferGenerator.GenerateFleaOffersForTrader(traderId);
|
||||
}
|
||||
}
|
||||
|
||||
// Regenerate expired offers when over threshold limit
|
||||
if (_ragfairOfferService.GetExpiredOfferCount() >= _ragfairConfig.Dynamic.ExpiredOfferThreshold)
|
||||
{
|
||||
var expiredAssortsWithChildren = _ragfairOfferService.GetExpiredOfferAssorts();
|
||||
await _ragfairOfferGenerator.GenerateDynamicOffers(expiredAssortsWithChildren);
|
||||
|
||||
// Clear out expired offers now we've generated them
|
||||
_ragfairOfferService.ResetExpiredOffers();
|
||||
}
|
||||
|
||||
_ragfairRequiredItemsService.BuildRequiredItemTable();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get traders who need to be periodically refreshed
|
||||
* @returns string array of traders
|
||||
*/
|
||||
public List<string> GetUpdateableTraders()
|
||||
{
|
||||
return _ragfairConfig.Traders.Keys.ToList();
|
||||
}
|
||||
|
||||
public Dictionary<string, int> GetAllActiveCategories(
|
||||
bool fleaUnlocked,
|
||||
SearchRequestData searchRequestData,
|
||||
List<RagfairOffer> offers){
|
||||
return _ragfairCategoriesService.GetCategoriesFromOffers(offers, searchRequestData, fleaUnlocked);
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable/Hide an offer from flea
|
||||
* @param offerId
|
||||
*/
|
||||
public void HideOffer(string offerId){
|
||||
var offers = _ragfairOfferService.GetOffers();
|
||||
var offer = offers.FirstOrDefault((x) => x.Id == offerId);
|
||||
|
||||
if (offer is null) {
|
||||
_logger.Error(_localisationService.GetText("ragfair-offer_not_found_unable_to_hide", offerId));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
offer.Locked = true;
|
||||
}
|
||||
|
||||
public RagfairOffer GetOffer(string offerId) {
|
||||
return _ragfairOfferService.GetOfferByOfferId(offerId);
|
||||
}
|
||||
|
||||
public List<RagfairOffer> GetOffers() {
|
||||
return _ragfairOfferService.GetOffers();
|
||||
}
|
||||
|
||||
public void RemoveOfferStack(string offerId, int amount) {
|
||||
_ragfairOfferService.RemoveOfferStack(offerId, amount);
|
||||
}
|
||||
|
||||
public bool DoesOfferExist(string offerId) {
|
||||
return _ragfairOfferService.DoesOfferExist(offerId);
|
||||
}
|
||||
|
||||
public void AddPlayerOffers() {
|
||||
_ragfairOfferService.AddPlayerOffers();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user