Move MaxResetCount check to CalcNextUtcActivationDate

This commit is contained in:
Crypto137 2025-05-25 21:36:24 +03:00
parent 83575991ee
commit c2a3dbdb12
4 changed files with 21 additions and 23 deletions

View file

@ -173,8 +173,8 @@ namespace MHServerEmu.Leaderboards
if (CanReset && newInstanceDb == null && Scheduler.IsEnabled)
{
DateTime nextActivationTime = Scheduler.CalcNextUtcActivationTime(instance.ActivationTime, updateTime);
if (nextActivationTime == instance.ActivationTime || Scheduler.CheckMaxResetCount(nextActivationTime) == false)
DateTime nextActivationTime = Scheduler.CalcNextUtcActivationDate(instance.ActivationTime, updateTime);
if (nextActivationTime == instance.ActivationTime)
continue;
newInstanceDb = new()

View file

@ -136,7 +136,7 @@ namespace MHServerEmu.Leaderboards
{
// IsEnabled: False -> True
// Add new instance
DateTime activationDate = scheduler.CalcNextUtcActivationTime();
DateTime activationDate = scheduler.CalcNextUtcActivationDate();
updatedInstances.Add(new DBLeaderboardInstance
{
@ -180,7 +180,7 @@ namespace MHServerEmu.Leaderboards
if (scheduler.StartTime != oldDbLeaderboard.GetStartDateTime())
{
// Find next activation time
DateTime nextEvent = scheduler.CalcNextUtcActivationTime();
DateTime nextEvent = scheduler.CalcNextUtcActivationDate();
activationDate = Clock.DateTimeToTimestamp(nextEvent);
}

View file

@ -49,7 +49,7 @@ namespace MHServerEmu.Leaderboards
if (dbInstance.ActivationDate == 0 && leaderboard.CanReset)
{
DateTime activationDate = _leaderboard.Scheduler.CalcNextUtcActivationTime();
DateTime activationDate = _leaderboard.Scheduler.CalcNextUtcActivationDate();
dbInstance.SetActivationDateTime(activationDate);
var dbManager = LeaderboardDatabase.Instance.DBManager;
dbManager.UpdateInstanceActivationDate(dbInstance);

View file

@ -110,7 +110,7 @@ namespace MHServerEmu.Leaderboards
}
}
public DateTime CalcNextUtcActivationTime(DateTime? referenceTimeArg = null, DateTime? currentTimeArg = null)
public DateTime CalcNextUtcActivationDate(DateTime? referenceTimeArg = null, DateTime? currentTimeArg = null)
{
// Fall back to StartTime if no referenceTime is provided
DateTime referenceTime = referenceTimeArg ?? StartTime;
@ -122,10 +122,23 @@ namespace MHServerEmu.Leaderboards
currentTime = new DateTime(currentTime.Year, currentTime.Month, currentTime.Day, currentTime.Hour, currentTime.Minute, 0, currentTime.Kind);
// Calculate the next reset time relative to the reference time
return CalcNextUtcActivationTimeHelper(referenceTime, currentTime);
DateTime activationTime = CalcNextUtcActivationDateHelper(referenceTime, currentTime);
// Check reset cap if needed
if (MaxResetCount > 0)
{
DateTime finalActivationTime = StartTime;
for (int i = 0; i < MaxResetCount; i++)
finalActivationTime = CalcResetTime(finalActivationTime);
if (activationTime > finalActivationTime)
return finalActivationTime;
}
return activationTime;
}
private DateTime CalcNextUtcActivationTimeHelper(DateTime activationTime, DateTime currentTime)
private DateTime CalcNextUtcActivationDateHelper(DateTime activationTime, DateTime currentTime)
{
DateTime expirationTime = currentTime;
if (activationTime == currentTime || activationTime == StartTime)
@ -141,21 +154,6 @@ namespace MHServerEmu.Leaderboards
return activationTime;
}
public bool CheckMaxResetCount(DateTime activationTime)
{
// TODO: Should probably be combined with CalcNextUtcActivationTime to apply in all cases
// <= 0 means that MaxResetCount is disabled
if (MaxResetCount <= 0)
return true;
DateTime finalActivationTime = StartTime;
for (int i = 0; i < MaxResetCount; i++)
finalActivationTime = CalcResetTime(finalActivationTime);
return activationTime <= finalActivationTime;
}
public DateTime CalcExpirationTime(DateTime activationTime)
{
return GetPrototype().Duration switch