Example #1
0
        public static IEnumerator ExecuteOnPassword(string password, string rawGuess, Action <bool> callback)
        {
            var guessArray = rawGuess.Split(';');
            var guess      = string.Concat(guessArray);

            TerminalUtil.BlockPlayerInput("[BLOCKED WHILE RUNNING CRACKER]");

            var percentage = GetEqualPercentage(password, guessArray);

            var msg = "Generating passowords based on given hints... This might take a few seconds.";

            msg = TextUtil.Warning(msg);

            TerminalUtil.ShowText(msg);

            float time = Mathf.Log10(guess.Length);

            time = Mathf.LerpUnclamped(0, 3, time);
            yield return(new WaitForSecondsRealtime(time));

            var random         = new System.Random(guess.Length / guessArray.Length);
            var minCount       = (guessArray.Length * guessArray.Length);
            var passwordsCount = random.Next(minCount, Mathf.CeilToInt((float)(minCount * Math.PI)));

            msg = string.Format("{0} passwords generated.", passwordsCount);

            TerminalUtil.ShowText(msg);

            msg = string.Format("Trying password {0}/{1}", 1, passwordsCount);
            TerminalUtil.ShowText(msg);

            for (int i = 1; i < passwordsCount; i++)
            {
                msg = string.Format("Trying password {0}/{1}", i + 1, passwordsCount);
                TerminalUtil.ChangeLastText(msg);
                yield return(new WaitForSecondsRealtime(.01f));
            }

            TerminalUtil.UnblockPlayerInput();
            yield return(null);

            var success = percentage >= PercentualThresholdToSuccess;

            callback(success);
        }