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