Пример #1
0
        public async Task PlayAsync(EmulatorOptions options, string saveFile)
        {
            logger.LogInformation("PlayAsync() started");

            await GameSettings();

            roundsCount     = 0;
            bananoCollected = 0;
            bananoMissed    = 0;

            while (true)
            {
                await GamePacket(options);

                File.WriteAllText(saveFile, BananoCollectedTotal.ToString());
                roundsCount++;
            }
        }
Пример #2
0
        public async Task RunAsync(EmulatorOptions options)
        {
            Directory.CreateDirectory("d:/Temp/banano/data");
            var saveFile = $"d:/Temp/banano/data/{options.Wallet}.json";

            if (File.Exists(saveFile))
            {
                var text = await File.ReadAllTextAsync(saveFile);

                BananoCollectedTotal = int.Parse(text);
                logger.LogInformation("Savefile loaded: TotalBananos = " + BananoCollectedTotal);
            }

            while (true)
            {
                try
                {
                    await PlayAsync(options, saveFile);

                    break;
                }
                catch (RestartNeededException ex)
                {
                    logger.LogWarning($"RestartNeededException: {ex.Message}");
                }
                catch (Exception ex) when(ex is HttpRequestException)
                {
                    exceptionsCount++;
                    if (exceptionsCount > 10)
                    {
                        throw;
                    }

                    var delay = exceptionsCount > 5 ? exceptionsCount * 5 : exceptionsCount;

                    logger.LogWarning($"Exception #{exceptionsCount}, delay {delay} sec: {ex.Message}");
                    await Task.Delay(TimeSpan.FromSeconds(delay));
                }
            }

            logger.LogInformation("Completed.");
        }
Пример #3
0
        public async Task GamePacket(EmulatorOptions options)
        {
            logger.LogDebug($"Sending /gamepacket (collected {bananoCollected}, missed {bananoMissed})...");

            var prms = new Dictionary <string, string>
            {
                ["wallet"]    = options.Wallet,
                ["version"]   = "4.2",
                ["collected"] = bananoCollected.ToString(),
                ["missed"]    = bananoMissed.ToString(),
                ["seed"]      = options.Seed,
                ["os"]        = options.OS,
            };

            var timeToWait = 0;

            using (var req = new HttpRequestMessage(HttpMethod.Post, "/gamepacket"))
            {
                req.Content = new FormUrlEncodedContent(prms);

                using (var resp = await httpClient.SendAsync(req))
                {
                    resp.EnsureSuccessStatusCode();
                    var respText = await resp.Content.ReadAsStringAsync();

                    logger.LogDebug(respText);

                    var respMsg = JsonConvert.DeserializeObject <ServerResponse>(respText);

                    if (respMsg.Code != 1)
                    {
                        logger.LogError("Response: " + respMsg.Message);
                        logger.LogError("If you need validate recaptcha, here is link:");
                        logger.LogError($"  http://bbdevelopment.website:27000/robochecker&wallet={options.Wallet}");
                        logger.LogError("Press ENTER to continue...");
                        Console.ReadLine();
                        logger.LogDebug("ENTER pressed");
                        throw new RestartNeededException("Recaptcha :(");
                    }

                    exceptionsCount       = 0;
                    BananoCollectedTotal += bananoCollected;

                    var data = respMsg.Block.Text.Split("|");
                    var arr  = data
                               .Take(respMsg.Block.Length)
                               .Select(x => x.Split(",").Select(y => int.Parse(y)).ToArray())
                               .ToList();
                    bananoCollected = ComputeBananoCollected(arr);
                    bananoMissed    = ComputeBananoMissed(arr);

                    var rndMiss = rand.Next(0, 100);
                    if (rndMiss < 15)
                    {
                        bananoCollected--;
                        bananoMissed++;

                        if (rndMiss < 5)
                        {
                            bananoCollected--;
                            bananoMissed++;
                        }
                    }

                    var rndFail = rand.Next(0, 100);
                    if (BananoCollectedTotal < 30 && rndFail < 75)
                    {
                        var delay = rand.Next(5, 10);
                        logger.LogWarning("Fail (newbie), delay " + delay);
                        await Task.Delay(delay * 1000);

                        throw new RestartNeededException("Fail (newbie)");
                    }
                    else if (BananoCollectedTotal < 100 && rndFail < 50)
                    {
                        var delay = rand.Next(5, 10);
                        logger.LogWarning("Fail (amateur), delay " + delay);
                        await Task.Delay(delay * 1000);

                        throw new RestartNeededException("Fail (amateur)");
                    }
                    else if (BananoCollectedTotal < 1000 && rndFail < 20)
                    {
                        var delay = rand.Next(5, 10);
                        logger.LogWarning("Fail (advanced), delay " + delay);
                        await Task.Delay(delay * 1000);

                        throw new RestartNeededException("Fail (advanced)");
                    }

                    timeToWait = respMsg.Block.Time + (roundsCount == 0 ? 0 : respMsg.Block.Delay - 1);

                    logger.LogInformation($"Total collected: {BananoCollectedTotal}. Next to collect: {bananoCollected}, to miss: {bananoMissed}");
                }
            }

            while (timeToWait > 0)
            {
                await Task.Delay(1000);

                timeToWait--;
                Console.Write($"Waiting for {timeToWait}...  ");
                Console.CursorLeft = 0;
            }

            Console.WriteLine("                              "); // Overwrite "Waiting for..."
            Console.CursorLeft = 0;
        }