From 26ce1d9562a5cc937e825100958fdf25e2929a51 Mon Sep 17 00:00:00 2001 From: Chomp Date: Thu, 19 Jun 2025 14:31:58 +0100 Subject: [PATCH] Clone offer items prior to processing them as we delete them all in line below --- .../SPTarkov.Server.Core/Servers/RagfairServer.cs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Servers/RagfairServer.cs b/Libraries/SPTarkov.Server.Core/Servers/RagfairServer.cs index 95f4a694..951cf381 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/RagfairServer.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/RagfairServer.cs @@ -6,6 +6,7 @@ using SPTarkov.Server.Core.Models.Spt.Config; using SPTarkov.Server.Core.Models.Utils; using SPTarkov.Server.Core.Services; using SPTarkov.Server.Core.Utils; +using SPTarkov.Server.Core.Utils.Cloners; namespace SPTarkov.Server.Core.Servers; @@ -19,7 +20,8 @@ public class RagfairServer( LocalisationService _localisationService, RagfairOfferGenerator _ragfairOfferGenerator, RagfairOfferHolder _ragfairOfferHolder, - ConfigServer _configServer + ConfigServer _configServer, + ICloner cloner ) { protected readonly RagfairConfig _ragfairConfig = _configServer.GetConfig(); @@ -54,8 +56,8 @@ public class RagfairServer( _ragfairOfferHolder.FlagExpiredOffersAfterDate(timeUtil.GetTimeStamp()); if (_ragfairOfferService.EnoughExpiredOffersExistToProcess()) { - // Must occur BEFORE "RemoveExpiredOffers" - var expiredAssortsWithChildren = _ragfairOfferHolder.GetExpiredOfferItems(); + // Must occur BEFORE "RemoveExpiredOffers" + clone items as they'll be purged by `RemoveExpiredOffers()` + var expiredOfferItemsClone = cloner.Clone(_ragfairOfferHolder.GetExpiredOfferItems()); _ragfairOfferService.RemoveExpiredOffers(); @@ -63,7 +65,7 @@ public class RagfairServer( GC.Collect(GC.MaxGeneration, GCCollectionMode.Optimized, true, true); // Replace the expired offers with new ones - _ragfairOfferGenerator.GenerateDynamicOffers(expiredAssortsWithChildren); + _ragfairOfferGenerator.GenerateDynamicOffers(expiredOfferItemsClone); } _ragfairRequiredItemsService.BuildRequiredItemTable();