protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            var controller     = new SerialSwitchController();
            var serialPort     = new SerialPortService();
            var macro          = new MacroService();
            var cancelableTask = new CancelableTaskService();
            var clock          = new SwitchClock();
            var work           = new WorkSituation();
            var gameCapture    = new GameCapture();
            var macroPool      = new MacroPool(clock, controller, cancelableTask, gameCapture);

            controller.SerialPort = serialPort;
            macro.TaskService     = cancelableTask;
            macro.Work            = work;
            macro.MacroPool       = macroPool;
            clock.Controller      = controller;
            clock.Cancellation    = cancelableTask;

            containerRegistry.RegisterInstance <IGameCapture>(gameCapture);
            containerRegistry.RegisterInstance <ISwitchController>(controller);
            containerRegistry.RegisterInstance <ISerialPortService>(serialPort);
            containerRegistry.RegisterInstance <IMacroService>(macro);
            containerRegistry.RegisterInstance <IMacroPool>(macroPool);
            containerRegistry.RegisterInstance <ITaskService>(cancelableTask);
            containerRegistry.RegisterInstance <ICanceler>(cancelableTask);
            containerRegistry.RegisterInstance <ICancellationRequest>(cancelableTask);
            containerRegistry.RegisterInstance <ISwitchClock>(clock);
            containerRegistry.RegisterInstance <IWorkSituation>(work);
        }
Beispiel #2
0
        private static void TestBot()
        {
            IConfiguration config = new ConfigurationBuilder()
                                    .AddJsonFile("appsettings.json", true, true)
                                    .AddJsonFile("appsettings.development.json", true, true)
                                    .AddJsonFile("appsettings.production.json", true, true)
                                    .Build();

            var dataSender = new DataSender(new Uri(config["DataSender:HostName"]),
                                            config.GetSection("DataSender:ConnectionMessages").GetChildren().Select(i => i.Value),
                                            config["DataSender:MessagePrefix"],
                                            config["DataSender:DebugMessagePrefix"],
                                            true,
                                            config["DataSender:RawMessagePrefix"],
                                            config["DataSender:RedtextMessagePrefix"],
                                            config["DataSender:RivenImageMessagePrefix"]);

            var password = GetPassword(config["Credentials:Key"], config["Credentials:Salt"]);
            var gc       = new GameCapture();
            //var obs = new ObsSettings() { Url = "ws://*****:*****@"C:\Users\david\AppData\Local\Warframe\Downloaded\Public\Tools\Launcher.exe", new MouseHelper(),
                                       new ScreenStateHandler(),
                                       gc,
                                       null,
                                       password,
                                       new KeyboardHelper(),
                                       new ChatParser(),
                                       dataSender,
                                       new RivenCleaner(),
                                       new RivenParserFactory());

            bot.AsyncRun(new System.Threading.CancellationToken());
        }
Beispiel #3
0
        private void InternalExecute()
        {
            while (!CancellationRequest.IsCancellationRequested)
            {
                Controller.PressAndRelease(ButtonType.A, 50, 900);       // 巣穴を選択

                Clock.DaysCount = 3;
                while (Clock.DaysCount > 0)
                {
                    Controller.PressAndRelease(ButtonType.A, 50, 900);       // みんなで挑戦選択
                    Controller.PressAndRelease(ButtonType.A, 50, 2700);      // ボールがありません>はい選択(ボールがなければ)

                    Clock.IncreaseOneDayFromGameScreen();

                    Controller.PressAndRelease(ButtonType.B, 50, 900);   // やめる
                    Controller.PressAndRelease(ButtonType.A, 50, 4900);  // 募集をやめる>はい選択

                    CancellationRequest.ThrowIfCancellationRequested();

                    Controller.PressAndRelease(ButtonType.A, 50, 700);   // 巣穴を選択
                    Controller.PressAndRelease(ButtonType.A, 50, 700);   // エネルギーがあふれでてる
                    Controller.PressAndRelease(ButtonType.A, 50, 900);   // ワット手に入れた

                    CancellationRequest.ThrowIfCancellationRequested();
                }

                GameCapture.SaveFrame(null);
                bool stop = CheckFourthDayPokemon();
                if (stop)
                {
                    WaitGoNext();
                }
                CheckSearchTemplates();

                Controller.PressAndRelease(ButtonType.Home, 50, 600);
                Controller.PressAndRelease(ButtonType.X, 50, 250);
                Controller.PressAndRelease(ButtonType.A, 50, 3500);

                Controller.PressAndRelease(ButtonType.A, 50, 1250);
                Controller.PressAndRelease(ButtonType.A, 50, 19000);
                Controller.PressAndRelease(ButtonType.A, 50, 9000);
            }
        }
Beispiel #4
0
        private static void RunBot()
        {
            var rivenParser = new RivenParser();

            _disposables.Add(rivenParser);
            //var c = new ChatImageCleaner(JsonConvert.DeserializeObject<CharInfo[]>("chars.json"));
            Console.WriteLine("Starting up image parser");
            var c = new ChatParser();

            //var t = new ImageParser();

            Console.WriteLine("Loading config for data sender");
            IConfiguration config = new ConfigurationBuilder()
                                    .AddJsonFile("appsettings.json", true, true)
                                    .AddJsonFile("appsettings.development.json", true, true)
                                    .AddJsonFile("appsettings.production.json", true, true)
                                    .Build();


            Console.WriteLine("Data sender connecting");
            var dataSender = new DataSender(new Uri(config["DataSender:HostName"]),
                                            config.GetSection("DataSender:ConnectionMessages").GetChildren().Select(i => i.Value),
                                            config["DataSender:MessagePrefix"],
                                            config["DataSender:DebugMessagePrefix"],
                                            true,
                                            config["DataSender:RawMessagePrefix"],
                                            config["DataSender:RedtextMessagePrefix"],
                                            config["DataSender:RivenImageMessagePrefix"],
                                            config["DataSender:LogMessagePrefix"],
                                            config["DataSender:LogLineMessagePrefix"]);

            dataSender.RequestToKill += (s, e) =>
            {
                Console_CancelKeyPress(null, null);
            };
            dataSender.RequestSaveAll += (s, e) =>
            {
                try
                {
                    for (int i = 6; i >= 0; i--)
                    {
                        var dir = Path.Combine(config["DEBUG:ImageDirectory"], "Saves");
                        if (e.Name != null && e.Name.Length > 0)
                        {
                            dir = Path.Combine(config["DEBUG:ImageDirectory"], "Saves", e.Name);
                        }
                        if (!Directory.Exists(dir))
                        {
                            Directory.CreateDirectory(dir);
                        }

                        var curFile  = Path.Combine(config["DEBUG:ImageDirectory"], "capture_" + i + ".png");
                        var copyFile = Path.Combine(dir, "capture_" + i + ".png");
                        if (File.Exists(curFile))
                        {
                            File.Copy(curFile, copyFile, true);
                        }
                    }
                }
                catch { }
            };

            var password = GetPassword(config["Credentials:Key"], config["Credentials:Salt"]);

            var gc         = new GameCapture();
            var obs        = GetObsSettings(config["Credentials:Key"], config["Credentials:Salt"]);
            var logParser  = new WarframeLogParser();
            var textParser = new AllTextParser(dataSender, logParser);
            var bot        = new ChatRivenBot(config["LauncherPath"], new MouseHelper(),
                                              new ScreenStateHandler(),
                                              gc,
                                              obs,
                                              password,
                                              new KeyboardHelper(),
                                              new ChatParser(),
                                              dataSender,
                                              new RivenCleaner(),
                                              new RivenParserFactory(),
                                              new Application.LogParser.RedTextParser(logParser));

            Task t = Task.Run(() => bot.AsyncRun(_cancellationSource.Token));

            while (!t.IsCompleted && !t.IsCompleted && !t.IsFaulted)
            {
                //var debug = progress.GetAwaiter().IsCompleted;
                System.Threading.Thread.Sleep(1000);
            }

            if (t.IsFaulted || t.Exception != null)
            {
                Console.WriteLine("\n" + t.Exception);
                try
                {
                    dataSender.AsyncSendDebugMessage(t.Exception.ToString()).Wait();
                    System.Threading.Thread.Sleep(2000);
                }
                catch
                {
                }
            }

            Dispose();
        }
Beispiel #5
0
        private static void TestRivenStuff()
        {
            var c  = new GameCapture();
            var rp = new RivenParser();
            var ss = new ScreenStateHandler();

            var image = "test.png";
            var b     = c.GetFullImage();

            b.Save("test.png");
            b.Dispose();

            var p       = new ChatParser();
            var results = p.ParseChatImage(new Bitmap(image), true, true, 27).Where(r => r is ChatMessageLineResult).Cast <ChatMessageLineResult>();

            var clean  = new ImageCleaner();
            var coords = new CoordinateList();

            results.SelectMany(r => r.ClickPoints).ToList().ForEach(i => coords.Add(i.X, i.Y));
            clean.SaveClickMarkers("test.png", "test_marked.png", coords);

            var mouse = new MouseHelper();

            var index = 0;
            var sw    = new Stopwatch();

            foreach (var clr in results.Where(r => r is ChatMessageLineResult).Cast <ChatMessageLineResult>())
            {
                foreach (var click in clr.ClickPoints)
                {
                    b = c.GetFullImage();
                    if (ss.IsChatOpen(b))
                    {
                        //Hover over riven
                        System.Threading.Thread.Sleep(17);
                        mouse.MoveTo(click.X, click.Y);

                        //Click riven
                        System.Threading.Thread.Sleep(17);
                        mouse.Click(click.X, click.Y);
                        System.Threading.Thread.Sleep(17);
                    }

                    //Move mouse out of the way
                    mouse.MoveTo(0, 0);
                    sw.Restart();
                    var tries = 0;
                    while (true)
                    {
                        try
                        {
                            var bitmap2 = c.GetFullImage();
                            if (ss.GetScreenState(bitmap2) == ScreenState.RivenWindow)
                            {
                                var crop = rp.CropToRiven(bitmap2);
                                crop.Save(index.ToString() + ".png");
                                crop.Dispose();
                                bitmap2.Dispose();
                                break;
                            }
                            bitmap2.Dispose();
                        }
                        catch { }
                        tries++;
                        if (tries > 15)
                        {
                            Console.WriteLine("Riven not detected! Abort!");
                            break;
                        }
                    }
                    Console.WriteLine("Got \"riven\" in " + sw.Elapsed.TotalSeconds + " seconds");

                    //Hover over exit
                    System.Threading.Thread.Sleep(33);
                    mouse.MoveTo(3816, 2013);

                    //Click exit
                    var bitmap = c.GetFullImage();
                    if (ss.GetScreenState(bitmap) == ScreenState.RivenWindow)
                    {
                        System.Threading.Thread.Sleep(17);
                        mouse.Click(3816, 2013);
                        System.Threading.Thread.Sleep(17);
                    }
                    bitmap.Dispose();

                    //Move mouse out of the way
                    System.Threading.Thread.Sleep(17);
                    mouse.MoveTo(0, 0);

                    System.Threading.Thread.Sleep(17);
                    index++;
                }
            }
            //c.Dispose();
        }
Beispiel #6
0
        private static void TestScreenHandler()
        {
            var c  = new GameCapture();
            var ss = new ScreenStateHandler();

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\loading.png"))
            {
                var isLoading = ss.GetScreenState(b) == ScreenState.LoadingScreen;
                Console.WriteLine("Is loading: " + isLoading + " should be true");
            }

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\loading_nobar.png"))
            {
                var isLoading = ss.GetScreenState(b) == ScreenState.LoadingScreen;
                Console.WriteLine("Is loading: " + isLoading + " should be true");
            }

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\login.png"))
            {
                var isLogin = ss.GetScreenState(b) == ScreenState.LoginScreen;
                Console.WriteLine("Is login: "******" should be true");
            }

            Console.WriteLine("MISSING TEST DATA FOR NORMAL CLAIM REWARDS SCREEN");

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\plat_claim.png"))
            {
                var isPlat = ss.GetScreenState(b) == ScreenState.DailyRewardScreenPlat;
                Console.WriteLine("Is plat: " + isPlat + " should be true");
            }

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\warframe_pilot1.png"))
            {
                var isPiloting = ss.GetScreenState(b) == ScreenState.ControllingWarframe;
                Console.WriteLine("Is piloting warframe1: " + isPiloting + " should be true");
            }

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\warframe_pilot2.png"))
            {
                var isPiloting = ss.GetScreenState(b) == ScreenState.ControllingWarframe;
                Console.WriteLine("Is piloting warframe2: " + isPiloting + " should be true");
            }

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\warframe_pilot3.png"))
            {
                var isPiloting = ss.GetScreenState(b) == ScreenState.ControllingWarframe;
                Console.WriteLine("Is piloting warframe3: " + isPiloting + " should be true");
            }

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\main_menu.png"))
            {
                var isMainMenu = ss.GetScreenState(b) == ScreenState.MainMenu;
                Console.WriteLine("Is main menu: " + isMainMenu + " should be true");
            }

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\main_menu2.png"))
            {
                var isMainMenu = ss.GetScreenState(b) == ScreenState.MainMenu;
                Console.WriteLine("Is main menu2: " + isMainMenu + " should be true");
            }

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\profile_menu.png"))
            {
                var isProfileMenu = ss.GetScreenState(b) == ScreenState.ProfileMenu;
                Console.WriteLine("Is isProfileMenu: " + isProfileMenu + " should be true");
            }

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\glyph_window.png"))
            {
                var isGlyphWindow = ss.GetScreenState(b) == ScreenState.GlyphWindow;
                Console.WriteLine("Is glyph window: " + isGlyphWindow + " should be true");
            }

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\glyph_without_filters.png"))
            {
                var isNoFilters = !ss.GlyphFiltersPresent(b);
                Console.WriteLine("Is glyph filters empty: " + isNoFilters + " should be true");
            }

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\glyph_with_filters.png"))
            {
                var isFilters = ss.GlyphFiltersPresent(b);
                Console.WriteLine("Is glyph filters: " + isFilters + " should be true");
            }

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\chat_collapsed.png"))
            {
                var isChatCollapsed = ss.IsChatCollapsed(b);
                Console.WriteLine("Is chat closed: " + isChatCollapsed + " should be true");
            }

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Notice Me Senpai\Screen States\chat_collapsed2.png"))
            {
                var isChatCollapsed = ss.IsChatCollapsed(b);
                Console.WriteLine("Is chat closed2: " + isChatCollapsed + " should be true");
            }

            using (Bitmap b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Test Runs\Inputs\chat.png"))
            {
                var isChat = ss.IsChatOpen(b);
                Console.WriteLine("Is chat open: " + isChat + " should be true");
            }

            using (var b = new Bitmap(@"C:\Users\david\OneDrive\Documents\WFChatParser\Test Runs\Inputs\riven.png"))
            {
                var isRiven = ss.GetScreenState(b) == ScreenState.RivenWindow;
                Console.WriteLine("Is riven: " + isRiven + " should be true");
            }
        }