예제 #1
0
 private IEnumerable <string> WaitUntilTimeContains(string number)
 {
     while (true)
     {
         if (BombInfo.GetFormattedTime().Contains(number))
         {
             if (solRequiresHold && ReleaseNumbers[solReleaseColor] == number)
             {
                 Log("Button held and released corectly! Module defused.");
                 HandlePass();
                 yield return(ResponseStrings.Solve);
             }
             else
             {
                 if (!solRequiresHold)
                 {
                     Log("Button held when supposed to be tapped! Strike!");
                 }
                 else
                 {
                     Log($"Button released at incorrect time ({BombInfo.GetFormattedTime()})! Strike!");
                 }
                 HandleStrike();
                 yield return(ResponseStrings.Strike);
             }
             solReleaseColor = -1;
             yield break;
         }
         else
         {
             yield return(null);
         }
     }
 }
예제 #2
0
        public override string ProcessDiscordMessage(string command, DiscordMessage msg)
        {
            string[] pieces = command.Trim().ToLowerInvariant().Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

            if (pieces.Length >= 1)
            {
                switch (pieces[0])
                {
                case "press":
                case "tap":
                    if (!solRequiresHold)
                    {
                        Log("Button tapped corectly! Module defused.");
                        HandlePass();
                        return(ResponseStrings.Solve);
                    }
                    else
                    {
                        Log("Button tapped incorectly! Strike!");
                        HandleStrike();
                        return(ResponseStrings.Strike);
                    }

                case "hold":
                    if (solReleaseColor == -1)
                    {
                        solReleaseColor = RandomUtil.Int(4);
                        Log($"Button is being held. LED strip is {ColorNames[solReleaseColor]}. Release with timer contains a '{ReleaseNumbers[solReleaseColor]}'.");
                        return(null);
                    }
                    else
                    {
                        Log("Error: attempted to hold alread-held button.");
                        return(ResponseStrings.UnsubmittablePenalty);
                    }

                case "release":
                    if (pieces.Length >= 2)
                    {
                        Log($"Waiting to release button until timer contains a '{pieces[1]}'...");
                        GameManager.AddDelayedAction(WaitUntilTimeContains(pieces[1]), msg, this);
                        return(ResponseStrings.Waiting);
                    }
                    else
                    {
                        if (solRequiresHold && BombInfo.GetFormattedTime().Contains(ReleaseNumbers[solReleaseColor]))
                        {
                            Log("Button held and released corectly! Module defused.");
                            HandlePass();
                            solReleaseColor = -1;
                            return(ResponseStrings.Solve);
                        }
                        else
                        {
                            if (!solRequiresHold)
                            {
                                Log("Button held when supposed to be tapped! Strike!");
                            }
                            else
                            {
                                Log($"Button released at incorrect time ({BombInfo.GetFormattedTime()})! Strike!");
                            }
                            HandleStrike();
                            solReleaseColor = -1;
                            return(ResponseStrings.Strike);
                        }
                    }
                }
            }
            return(ResponseStrings.InvalidCommand);
        }