mirror of
https://github.com/JogmansonReal/Radicade.git
synced 2026-10-25 23:18:56 -07:00
68 lines
2.1 KiB
C#
68 lines
2.1 KiB
C#
using System.Globalization;
|
|
using RadicadeServer.RecNet.Enums.Store;
|
|
|
|
namespace RadicadeServer.Utils
|
|
{
|
|
public sealed class RewardDayLedger
|
|
{
|
|
public string Day { get; set; } = string.Empty;
|
|
|
|
public bool FirstActivityPaid { get; set; }
|
|
|
|
public bool DailyChallengePaid { get; set; }
|
|
|
|
public int ActivityBoxes { get; set; }
|
|
}
|
|
|
|
public static class RewardDay
|
|
{
|
|
public const int ActivityBoxesPerDay = 12;
|
|
|
|
public const int BoxesPerDay = 1 + 1 + ActivityBoxesPerDay;
|
|
|
|
public static string DayKey(DateTime nowUtc) =>
|
|
nowUtc.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);
|
|
|
|
public static RewardDayLedger For(RecNet.Progression.ProgressionJson json, DateTime nowUtc)
|
|
{
|
|
var day = DayKey(nowUtc);
|
|
var ledger = json.RewardDay;
|
|
if (ledger == null || !string.Equals(ledger.Day, day, StringComparison.Ordinal))
|
|
{
|
|
ledger = new RewardDayLedger { Day = day };
|
|
json.RewardDay = ledger;
|
|
}
|
|
return ledger;
|
|
}
|
|
|
|
public static RewardType CompletionType(RewardDayLedger ledger, RewardType claimed)
|
|
{
|
|
if (claimed == RewardType.PostQuestActivity) return RewardType.PostQuestActivity;
|
|
return ledger.FirstActivityPaid ? RewardType.PostGameActivity : RewardType.FirstActivityOfDay;
|
|
}
|
|
|
|
public static bool TryTakeFirstActivity(RewardDayLedger ledger)
|
|
{
|
|
if (ledger.FirstActivityPaid) return false;
|
|
ledger.FirstActivityPaid = true;
|
|
return true;
|
|
}
|
|
|
|
public static bool TryTakeActivityBox(RewardDayLedger ledger)
|
|
{
|
|
if (ledger.ActivityBoxes >= ActivityBoxesPerDay) return false;
|
|
ledger.ActivityBoxes++;
|
|
return true;
|
|
}
|
|
|
|
public static bool TryTakeDailyChallengeBox(RewardDayLedger ledger)
|
|
{
|
|
if (ledger.DailyChallengePaid) return false;
|
|
ledger.DailyChallengePaid = true;
|
|
return true;
|
|
}
|
|
|
|
public static RewardDayLedger NewDay(DateTime nowUtc) => new() { Day = DayKey(nowUtc) };
|
|
}
|
|
}
|