Move MaxResetCount check to CalcNextUtcActivationDate
This commit is contained in:
parent
83575991ee
commit
c2a3dbdb12
4 changed files with 21 additions and 23 deletions
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue