From 5cd5ed1f42013d560c6c962429376535aedb9540 Mon Sep 17 00:00:00 2001 From: Chomp Date: Wed, 6 Aug 2025 15:17:34 +0100 Subject: [PATCH] Refactored logic of `ragfairServer.update()` typo fixes --- .../Helpers/RepairHelper.cs | 10 ++-- .../Models/Spt/Config/RagfairConfig.cs | 2 +- .../Servers/RagfairServer.cs | 49 ++++++++++++------- 3 files changed, 36 insertions(+), 25 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Helpers/RepairHelper.cs b/Libraries/SPTarkov.Server.Core/Helpers/RepairHelper.cs index bd2811e3..e2ef70d4 100644 --- a/Libraries/SPTarkov.Server.Core/Helpers/RepairHelper.cs +++ b/Libraries/SPTarkov.Server.Core/Helpers/RepairHelper.cs @@ -60,7 +60,7 @@ public class RepairHelper( newCurrentMaxDurability = itemMaxDurability; } - // Ensure new current isnt above items max + // Ensure new current isn't above items max if (newCurrentDurability > itemMaxDurability) { newCurrentDurability = itemMaxDurability; @@ -69,7 +69,7 @@ public class RepairHelper( // Update Repairable properties with new values after repair itemToRepair.Upd.Repairable = new UpdRepairable { Durability = newCurrentDurability, MaxDurability = newCurrentMaxDurability }; - // when modders set the repair coefficient to 0 it means that they dont want to lose durability on items + // when modders set the repair coefficient to 0 it means that they don't want to lose durability on items // the code below generates a random degradation on the weapon durability if (applyMaxDurabilityDegradation) { @@ -141,13 +141,13 @@ public class RepairHelper( /// Weapon properties /// Was a repair kit used /// Max amount of durability item can have - /// Different traders produce different loss values + /// Different traders produce different loss values /// Amount to reduce max durability by protected double GetRandomisedWeaponRepairDegradationValue( Props itemProps, bool isRepairKit, double weaponMax, - double traderQualityMultipler + double traderQualityMultiplier ) { var minRepairDeg = isRepairKit ? itemProps.MinRepairKitDegradation : itemProps.MinRepairDegradation; @@ -160,7 +160,7 @@ public class RepairHelper( } var duraLossPercent = randomUtil.GetDouble((double)minRepairDeg, (double)maxRepairDeg); - var duraLossMultipliedByTraderMultiplier = duraLossPercent * weaponMax * traderQualityMultipler; + var duraLossMultipliedByTraderMultiplier = duraLossPercent * weaponMax * traderQualityMultiplier; return Math.Round(duraLossMultipliedByTraderMultiplier, 2); } diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/RagfairConfig.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/RagfairConfig.cs index 582fbdcd..d1d5858b 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Config/RagfairConfig.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Config/RagfairConfig.cs @@ -196,7 +196,7 @@ public record Dynamic public required ArmorSettings Armor { get; set; } /// - /// A multipler to apply to individual tpls price just prior to item quality adjustment + /// A multiplier to apply to individual tpls price just prior to item quality adjustment /// [JsonPropertyName("itemPriceMultiplier")] public Dictionary? ItemPriceMultiplier { get; set; } diff --git a/Libraries/SPTarkov.Server.Core/Servers/RagfairServer.cs b/Libraries/SPTarkov.Server.Core/Servers/RagfairServer.cs index 97cfd367..cc979ef1 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/RagfairServer.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/RagfairServer.cs @@ -36,41 +36,52 @@ public class RagfairServer( public void Update() { - // Generate/refresh trader offers - var traders = GetUpdateableTraders(); - foreach (var traderId in traders) - { - // Edge case - skip generating fence offers - if (traderId == Traders.FENCE) - { - continue; - } + RefreshTraderOffers(); + ProcessExpiredFleaOffers(); + // Update requirements now the offers have been expired/regenerated to ensure they're accurate + _ragfairRequiredItemsService.BuildRequiredItemTable(); + } + + protected void RefreshTraderOffers() + { + // Generate/refresh trader offers - skip fence as his offers are separately handled + var tradersToProcess = GetUpdateableTraders().Where(trader => trader != Traders.FENCE); + foreach (var traderId in tradersToProcess) + { + // Each trader has its own expiry time if (_ragfairOfferService.TraderOffersNeedRefreshing(traderId)) { - // Trader has passed its offer cycle time, update stock and set offer times + // Trader has passed its offer expiry time, update stock and reset offer times _ragfairOfferGenerator.GenerateFleaOffersForTrader(traderId); } } + } - // Regenerate expired offers when over threshold limit + private void ProcessExpiredFleaOffers() + { + // Regenerate expired offers when over timestamp threshold _ragfairOfferHolder.FlagExpiredOffersAfterDate(timeUtil.GetTimeStamp()); - if (_ragfairOfferService.EnoughExpiredOffersExistToProcess()) + if (!_ragfairOfferService.EnoughExpiredOffersExistToProcess()) { - // Must occur BEFORE "RemoveExpiredOffers" + clone items as they'll be purged by `RemoveExpiredOffers()` - var expiredOfferItemsClone = cloner.Clone(_ragfairOfferHolder.GetExpiredOfferItems()); + // Not enough expired offers to process, exit + return; + } - _ragfairOfferService.RemoveExpiredOffers(); + // Must occur BEFORE "RemoveExpiredOffers" + clone items as they'll be purged by `RemoveExpiredOffers()` + var expiredOfferItemsClone = cloner.Clone(_ragfairOfferHolder.GetExpiredOfferItems()); - // Force a cleanup+compact now all the expired offers are gone - GC.Collect(GC.MaxGeneration, GCCollectionMode.Optimized, true, true); + _ragfairOfferService.RemoveExpiredOffers(); + // Force a cleanup+compact now all the expired offers are gone + GC.Collect(GC.MaxGeneration, GCCollectionMode.Optimized, true, true); + + if (expiredOfferItemsClone is not null) + { // Replace the expired offers with new ones _ragfairOfferGenerator.GenerateDynamicOffers(expiredOfferItemsClone); } - - _ragfairRequiredItemsService.BuildRequiredItemTable(); } ///