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;