Example #1
0
    public string ManualFor(string module, string type = "html", bool useVanillaRuleModifier = false)
    {
        if (useVanillaRuleModifier && VanillaRuleModifier.GetRuleSeed() != 1)
        {
            return($"{Repository}manual/{Escape(module)}.html?VanillaRuleSeed={VanillaRuleModifier.GetRuleSeed()}");
        }

        return(string.Format(Repository + "{0}/{1}.{2}", type.ToUpper(), Escape(module), type));
    }
 public static string ManualFor(string module, string type = "html", bool useVanillaRuleModifier = false) => string.Format(TwitchPlaySettings.data.RepositoryUrl + "{0}/{1}.{2}{3}", type.ToUpper(), NameToUrl(module), type, (useVanillaRuleModifier && type.Equals("html")) ? $"#{VanillaRuleModifier.GetRuleSeed()}" : "");
    private IEnumerator ReleaseCoroutineModded(string second)
    {
        bool longwait = false;

        string[]   list        = second.Split(' ');
        List <int> sortedTimes = new List <int>();

        foreach (string value in list)
        {
            if (!int.TryParse(value, out int time))
            {
                int pos = value.LastIndexOf(':');
                if (pos == -1)
                {
                    continue;
                }
                int hour = 0;
                if (!int.TryParse(value.Substring(0, pos), out int min))
                {
                    int pos2 = value.IndexOf(":");
                    if ((pos2 == -1) || (pos == pos2))
                    {
                        continue;
                    }
                    if (!int.TryParse(value.Substring(0, pos2), out hour))
                    {
                        continue;
                    }
                    if (!int.TryParse(value.Substring(pos2 + 1, pos - pos2 - 1), out min))
                    {
                        continue;
                    }
                }
                if (!int.TryParse(value.Substring(pos + 1), out int sec))
                {
                    continue;
                }
                time = (hour * 3600) + (min * 60) + sec;
            }
            sortedTimes.Add(time);
        }
        sortedTimes.Sort();
        sortedTimes.Reverse();
        if (sortedTimes.Count == 0)
        {
            yield break;
        }

        yield return("release");

        TimerComponent timerComponent = BombCommander.Bomb.GetTimer();

        int timeTarget = sortedTimes[0];

        sortedTimes.RemoveAt(0);

        int waitTime = (int)(timerComponent.TimeRemaining + 0.25f);

        waitTime -= timeTarget;
        if (waitTime >= 30)
        {
            yield return("elevator music");

            if (waitTime >= 120)
            {
                yield return(string.Format("sendtochat !!!WARNING!!! - you might want to do a !cancel right about now, as you will be waiting for {0} minutes and {1} seconds for button release. Seed #{2} applies to this button.", waitTime / 60, waitTime % 60, VanillaRuleModifier.GetRuleSeed()));

                yield return(string.Format("sendtochat Click the button with !{0} tap. Click the button at time with !{0} tap 8:55 8:44 8:33. Hold the button with !{0} hold. Release the button with !{0} release 9:58 9:49 9:30.", Code));

                longwait = true;
            }
        }

        float timeRemaining = float.PositiveInfinity;

        while (timeRemaining > 0.0f)
        {
            if (Canceller.ShouldCancel)
            {
                Canceller.ResetCancel();
                if (timeTarget < 10)
                {
                    yield return(string.Format("sendtochat The button was not {0} due to a request to cancel. Remember that the rule set that applies is seed #{1}", _held ? "released" : "tapped", VanillaRuleModifier.GetRuleSeed()));
                }
                else
                {
                    yield return(string.Format("sendtochat The button was not {0} due to a request to cancel.", _held ? "released" : "tapped"));
                }
                yield break;
            }

            timeRemaining = (int)(timerComponent.TimeRemaining + 0.25f);

            if (timeRemaining < timeTarget)
            {
                if (sortedTimes.Count == 0)
                {
                    yield return(string.Format("sendtochaterror The button was not {0} because all of your specfied times are greater than the time remaining.", _held ? "released" : "tapped"));

                    yield break;
                }
                timeTarget = sortedTimes[0];
                sortedTimes.RemoveAt(0);

                waitTime  = (int)timeRemaining;
                waitTime -= timeTarget;
                if (waitTime >= 30)
                {
                    yield return("elevator music");

                    if (waitTime >= 120 && !longwait)
                    {
                        yield return(string.Format("sendtochat !!!WARNING!!! - you might want to do a !cancel right about now, as you will be waiting for {0} minutes and {1} seconds for button release. Seed #{2} applies to this button.", waitTime / 60, waitTime % 60, VanillaRuleModifier.GetRuleSeed()));

                        yield return(string.Format("sendtochat Click the button with !{0} tap. Click the button at time with !{0} tap 8:55 8:44 8:33. Hold the button with !{0} hold. Release the button with !{0} release 9:58 9:49 9:30.", Code));
                    }
                    longwait = true;
                }

                continue;
            }
            if (Math.Abs(timeRemaining - timeTarget) < 0.1f)
            {
                if (!_held)
                {
                    DoInteractionStart(_button);
                    yield return(new WaitForSeconds(0.1f));
                }
                DoInteractionEnd(_button);
                _held = false;
                yield break;
            }

            yield return(null);
        }
    }