From 82b8c7d2da96cfcd318f7c6cb844803ea115715d Mon Sep 17 00:00:00 2001 From: Chomp Date: Thu, 5 Jun 2025 13:41:40 +0100 Subject: [PATCH] Fixed ragfair offers not being processed Fixes #358 --- .../Callbacks/RagfairCallbacks.cs | 30 ++++++++++++------- .../SPTarkov.Server.Core/DI/IOnUpdate.cs | 2 +- Libraries/SPTarkov.Server.Core/Utils/App.cs | 6 +--- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/RagfairCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/RagfairCallbacks.cs index 5c9511f2..a00a6a8a 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/RagfairCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/RagfairCallbacks.cs @@ -18,10 +18,12 @@ public class RagfairCallbacks( RagfairController _ragfairController, RagfairTaxService _ragfairTaxService, RagfairPriceService _ragfairPriceService, - ConfigServer _configServer + ConfigServer _configServer, + TimeUtil _timeUtil ) : IOnLoad, IOnUpdate { private readonly RagfairConfig _ragfairConfig = _configServer.GetConfig(); + private long _lastRunOnUpdateTimestamp = long.MaxValue; public Task OnLoad() { @@ -30,20 +32,26 @@ public class RagfairCallbacks( return Task.CompletedTask; } - public Task OnUpdate(long timeSinceLastRun) + public Task OnUpdate(long secondsSinceLastRun) { - if (timeSinceLastRun > _ragfairConfig.RunIntervalSeconds) + if (_timeUtil.GetTimeStamp() <= _lastRunOnUpdateTimestamp + _ragfairConfig.RunIntervalSeconds) { - // There is a flag inside this class that only makes it run once. - _ragfairServer.AddPlayerOffers(); - - // Check player offers and mail payment to player if sold - _ragfairController.Update(); - - // Process all offers / expire offers - _ragfairServer.Update(); + // Not enough time has passed since last run, exit early + return Task.CompletedTask; } + // There is a flag inside this class that only makes it run once. + _ragfairServer.AddPlayerOffers(); + + // Check player offers and mail payment to player if sold + _ragfairController.Update(); + + // Process all offers / expire offers + _ragfairServer.Update(); + + // Store last completion time for later use + _lastRunOnUpdateTimestamp = _timeUtil.GetTimeStamp(); + return Task.CompletedTask; } diff --git a/Libraries/SPTarkov.Server.Core/DI/IOnUpdate.cs b/Libraries/SPTarkov.Server.Core/DI/IOnUpdate.cs index e6377db5..a0daa856 100644 --- a/Libraries/SPTarkov.Server.Core/DI/IOnUpdate.cs +++ b/Libraries/SPTarkov.Server.Core/DI/IOnUpdate.cs @@ -2,5 +2,5 @@ namespace SPTarkov.Server.Core.DI; public interface IOnUpdate { - Task OnUpdate(long timeSinceLastRun); + Task OnUpdate(long secondsSinceLastRun); } diff --git a/Libraries/SPTarkov.Server.Core/Utils/App.cs b/Libraries/SPTarkov.Server.Core/Utils/App.cs index 0f0da353..669a0947 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/App.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/App.cs @@ -118,11 +118,7 @@ public class App( updateableName = $"{updateable.GetType().Namespace}.{updateable.GetType().Name}"; } - if (!_onUpdateLastRun.TryGetValue(updateableName, out var lastRunTimeTimestamp)) - { - lastRunTimeTimestamp = 0; - } - + var lastRunTimeTimestamp = _onUpdateLastRun.GetValueOrDefault(updateableName, 0); var secondsSinceLastRun = _timeUtil.GetTimeStamp() - lastRunTimeTimestamp; try