Beispiel #1
0
        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);
        }
Beispiel #2
0
        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.");
        }
Beispiel #3
0
        public static bool CanAssign(ArcadeUser user)
        {
            TimeSpan since = StatHelper.SinceLast(user, Stats.LastAssignedQuest);

            return(since >= AssignCooldown && user.Quests.Count <= user.GetVar(Stats.QuestCapacity));
        }