private static bool TryWriteCooldown(ArcadeUser user, string name, string id, TimeSpan duration, out string row) { row = null; if (user.GetVar(id) > 0) { TimeSpan since = StatHelper.SinceLast(user, id); if (since < duration) { row = $"> • **{name}:** **{Format.Countdown(duration - since)}** until reset"; return(true); } } return(false); }
public static string TossSlot(ArcadeUser user, int index) { QuestData slot = GetSlot(user, index); if (slot == null) { return($"> {Icons.Warning} There isn't an assigned objective in this slot."); } if (user.GetVar(Stats.LastSkippedQuest) > 0) { if (StatHelper.SinceLast(user, Stats.LastSkippedQuest) >= SkipCooldown) { return($"> {Icons.Warning} You have skipped an objective too recently. Try again in {Format.Countdown(SkipCooldown - StatHelper.SinceLast(user, Stats.LastSkippedQuest))}."); } } Quest quest = GetQuest(slot.Id); if (quest == null) { throw new Exception("Expected to find a parent quest but returned null"); } user.Quests.RemoveAt(index); user.SetVar(Stats.LastSkippedQuest, DateTime.UtcNow.Ticks); TimeSpan since = StatHelper.SinceLast(user, Stats.LastAssignedQuest); bool canAssign = since >= AssignCooldown; if (!canAssign) { TimeSpan toSkip = (AssignCooldown - since) / 2; // skip 50% of the remaining time user.SetVar(Stats.LastAssignedQuest, new DateTime(user.GetVar(Stats.LastAssignedQuest)).Add(toSkip).Ticks); } return($"> 🗑️ You have declined the **{quest.Name}** objective."); }
public static bool CanAssign(ArcadeUser user) { TimeSpan since = StatHelper.SinceLast(user, Stats.LastAssignedQuest); return(since >= AssignCooldown && user.Quests.Count <= user.GetVar(Stats.QuestCapacity)); }