From fec51f824c2e2ba97a9ece72510f9fd4ec4edbef Mon Sep 17 00:00:00 2001 From: Chomp Date: Mon, 23 Jun 2025 10:08:05 +0100 Subject: [PATCH] Fixed flea offers not filtering by currency --- .../Helpers/RagfairHelper.cs | 38 ++++++++++++++----- .../Helpers/RagfairOfferHelper.cs | 29 +++++++------- 2 files changed, 42 insertions(+), 25 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairHelper.cs index 07ceebea..0d286122 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairHelper.cs @@ -21,16 +21,16 @@ public class RagfairHelper( ICloner cloner ) { - protected RagfairConfig _ragfairConfig = configServer.GetConfig(); + protected readonly RagfairConfig _ragfairConfig = configServer.GetConfig(); - /** - * Gets currency TAG from TPL - * @param {string} currency - * @returns string - */ - public string GetCurrencyTag(string currency) + /// + /// Gets currency TAG from currency tpl value + /// + /// Currency tpl + /// Currency tag, e.g. RUB + public string GetCurrencyTag(string currencyTpl) { - switch (currency) + switch (currencyTpl) { case Money.EUROS: return "EUR"; @@ -45,6 +45,26 @@ public class RagfairHelper( } } + /// + /// Get a currency TAG by its search filter value (e.g. 0 = all, 1 = RUB) + /// + /// Search filter choice + /// Currency tag + public string GetCurrencyTag(int currencyFilter) + { + switch (currencyFilter) + { + case 3: + return "EUR"; + case 2: + return "USD"; + case 1: + return "RUB"; + default: + return "all"; + } + } + public List FilterCategories(string sessionId, SearchRequestData request) { var result = new List(); @@ -133,7 +153,7 @@ public class RagfairHelper( public List MergeStackable(List items) { var list = new List(); - Item rootItem = null; + Item? rootItem = null; foreach (var item in items) { diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs index a6192fcc..7de235df 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs @@ -1,4 +1,3 @@ -using System.Collections.Frozen; using SPTarkov.Common.Extensions; using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Models.Eft.Common; @@ -42,13 +41,11 @@ public class RagfairOfferHelper( ) { protected const string _goodSoldTemplate = "5bdabfb886f7743e152e867e 0"; // Your {soldItem} {itemCount} items were bought by {buyerNickname}. - - protected static readonly FrozenSet _currencies = ["all", "RUB", "USD", "EUR"]; - protected BotConfig _botConfig = _configServer.GetConfig(); - protected RagfairConfig _ragfairConfig = _configServer.GetConfig(); + protected readonly BotConfig _botConfig = _configServer.GetConfig(); + protected readonly RagfairConfig _ragfairConfig = _configServer.GetConfig(); /// - /// Passthrough to ragfairOfferService.getOffers(), get flea offers a player should see + /// Pass through to ragfairOfferService.getOffers(), get flea offers a player should see /// /// Data from client /// ragfairHelper.filterCategories() @@ -434,14 +431,14 @@ public class RagfairOfferHelper( // filter those out if (isTraderOffer) { - if (!traderAssorts.ContainsKey(offer.User.Id)) + if (!traderAssorts.TryGetValue(offer.User.Id, out var assort)) // trader not visible on flea market { return false; } if ( - !traderAssorts[offer.User.Id] + !assort .Items.Any(item => { return item.Id == offer.Root; @@ -852,7 +849,7 @@ public class RagfairOfferHelper( }; var storageTimeSeconds = _timeUtil.GetHoursAsSeconds( - (int)_questHelper.GetMailItemRedeemTimeHoursForProfile(sellerProfile) + (int) _questHelper.GetMailItemRedeemTimeHoursForProfile(sellerProfile) ); _mailSendService.SendDirectNpcMessageToPlayer( offerOwnerSessionId, @@ -935,9 +932,8 @@ public class RagfairOfferHelper( ) { var isDefaultUserOffer = offer.User.MemberType == MemberCategory.Default; - var offerRootItem = offer.Items[0]; - var offerMoneyTypeTpl = offer.Requirements[0].Template; - var isTraderOffer = OfferIsFromTrader(offer); + var offerRootItem = offer.Items.FirstOrDefault(); + var offerMoneyTypeTpl = offer.Requirements.FirstOrDefault().Template; if ( pmcData.Info.Level < _databaseService.GetGlobals().Configuration.RagFair.MinUserLevel @@ -948,6 +944,7 @@ public class RagfairOfferHelper( return false; } + var isTraderOffer = OfferIsFromTrader(offer); if (searchRequest.OfferOwnerType == OfferOwnerType.TRADEROWNERTYPE && !isTraderOffer) // don't include player offers { @@ -973,7 +970,7 @@ public class RagfairOfferHelper( searchRequest.QuantityFrom > 0 && offerRootItem.Upd.StackObjectsCount < searchRequest.QuantityFrom ) - // too little items to offer + // Too few items to offer { return false; } @@ -1028,10 +1025,10 @@ public class RagfairOfferHelper( if (searchRequest.Currency > 0 && _paymentHelper.IsMoneyTpl(offerMoneyTypeTpl)) { - // Use 'currencies' as mapping for the money choice dropdown, e.g. 0 = all, 2 = "USD; - if (!_currencies.Contains(_ragfairHelper.GetCurrencyTag(offerMoneyTypeTpl))) - // Don't include item paid in wrong currency + // Only want offers with specific currency + if (_ragfairHelper.GetCurrencyTag(offerMoneyTypeTpl) != _ragfairHelper.GetCurrencyTag(searchRequest.Currency.GetValueOrDefault(0))) { + // Offer is for different currency to what search params allow, skip return false; } }