From 5b9347099b415665b92ae235980bf6124753f993 Mon Sep 17 00:00:00 2001 From: Chomp Date: Tue, 18 Nov 2025 17:09:54 +0000 Subject: [PATCH] Fixed preset builder showing items from locked traders --- .../Extensions/ProfileExtensions.cs | 12 ++++++++++++ .../Helpers/RagfairOfferHelper.cs | 7 +++++++ 2 files changed, 19 insertions(+) diff --git a/Libraries/SPTarkov.Server.Core/Extensions/ProfileExtensions.cs b/Libraries/SPTarkov.Server.Core/Extensions/ProfileExtensions.cs index 46b265e2..021094c5 100644 --- a/Libraries/SPTarkov.Server.Core/Extensions/ProfileExtensions.cs +++ b/Libraries/SPTarkov.Server.Core/Extensions/ProfileExtensions.cs @@ -324,4 +324,16 @@ public static class ProfileExtensions // No trader data on player profile, fail check return false; } + + /// + /// Get Ids of traders with an unlocked status of "false" + /// + /// Player profile + /// Hashset of Trader ids + public static HashSet GetLockedTraderIds(this PmcData pmcData) + { + return pmcData.TradersInfo? + .Where(trader => trader.Value.Unlocked == false) + .Select(t => t.Key).ToHashSet() ?? []; + } } diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs index 25104012..8e9afc30 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RagfairOfferHelper.cs @@ -237,6 +237,7 @@ public class RagfairOfferHelper( ? cloner.Clone(searchRequest.BuildItems.Keys.ToDictionary(key => key, ragfairOfferService.GetOffersOfType)) : searchRequest.BuildItems.Keys.ToDictionary(key => key, ragfairOfferService.GetOffersOfType); + var lockedTraders = pmcData.GetLockedTraderIds(); foreach (var (desiredItemTpl, matchingOffers) in buildItems) { if (matchingOffers is null) @@ -266,6 +267,12 @@ public class RagfairOfferHelper( if (offer.IsTraderOffer()) { + // Player hasn't unlocked trader selling this offer, skip + if (lockedTraders.Contains(offer.User.Id)) + { + continue; + } + if (TraderBuyRestrictionReached(offer)) { continue;