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); } } }
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); }