private TableContainer OpenTable(LobbyTable table, Settings settings, Iterator <Image> screen, LobbyTable lobby) { // count programs List <Point> taskBarBefore = TaskBarPrograms(lobbyLayout, screen.next()); // move mouse to row mouse.MoveAndLeftClick(table.AbsX, table.AbsY + 4, 10, 2); keyboard.pressEnter(); Thread.Sleep(450); // locate table Point tableOffset = Point.Empty; Image screenshot = screen.next(); int tries = 0; while (true) { // find tableOffset = PatternLocator.locateUnknownTable(screenshot, Offsets(knownTables), new TableLayout9()); if (tableOffset != Point.Empty) { // found table break; } else if (tries++ > 4) { // cannot locate break; } else { // next try Thread.Sleep(500); screenshot = screen.next(); } } // not found? if (tableOffset == Point.Empty) { // safe location mouse.Move(500, deviceControl.DisplayHeight - 300); // close if not found (but is actually there) List <Point> taskBarAfter = TaskBarPrograms(lobbyLayout, screen.next()); if (taskBarAfter.Count > taskBarBefore.Count) { // log Log.Info("table not found - validating known offsets"); // check known offsets ValidateKnownTables(); // error -> table not found ErrorHandler.ReportExceptionWithImage(new Exception("table not found"), "open table failed", screenshot); return(TABLE_NOT_FOUND); } else { // error -> table already joined ErrorHandler.ReportExceptionWithImage(new Exception("table already joined"), "open table failed", screenshot); return(TABLE_ALREADY_JOINED); } } // check for 'you have just left this table' if (YouHaveJustLeftThisTable(new TableLayout9(tableOffset), screenshot)) { Log.Info("'you have just left this table' is visible -> closing table"); keyboard.pressEnter(); Thread.Sleep(500); CloseLastTable(screen); return(TABLE_NOT_FOUND); } // find open seat Thread.Sleep(200); return(SeatPlayer(tableOffset, screen, lobby)); }
public TableContainer LocateNewTable(Settings settings) { Log.Info("## scanning for tables ##"); // find offset Iterator <Image> screen = new ScreenImageIterator(deviceControl); Image screenshot = screen.next(); Point foundOffset = PatternLocator.locateUnknownTable(screenshot, Offsets(knownTables), new TableLayout9()); if (foundOffset == Point.Empty) { Log.Error("No table found"); throw new ArgumentException("No table found"); } // check for new table and find seat Image cornerTopLeft = CropTableTopLeftCorner(screenshot, foundOffset); Image cornerBottomRight = CropTableBottomRightCorner(screenshot, foundOffset); if (!IsOffsetKnown(foundOffset)) { // corner Log.Info("unknown table found at x=" + foundOffset.X + " y=" + foundOffset.Y); TableLayout layout = new TableLayout9(foundOffset); // find seat string player = settings.Name; Log.Info("looking for '" + player + "' on table" + (knownTables.Count + 1)); int seat = -1; for (int tries = 0; tries < 3; tries++) { Table previousTable = tableIdentifier.identifyTableForLocation(CropTable(screen.next(), layout)); seat = BotAppLogic.IdentifySeat(previousTable, player); if (seat != -1) { break; } Thread.Sleep(500); } if (seat == -1) { Log.Error("Cannot find player position on table " + (knownTables.Count + 1)); throw new ArgumentException("Cannot find player position on table " + (knownTables.Count + 1)); } Log.Info("my seat on new table " + (knownTables.Count + 1) + " is " + (seat + 1)); // blinds Image tableImage = CropTable(screenshot, layout); Image blindsImage = tableImage.crop(layout.AutoBlindPattern.X, layout.AutoBlindPattern.X + layout.AutoBlindPattern.Width, layout.AutoBlindPattern.Y, layout.AutoBlindPattern.Y + layout.AutoBlindPattern.Height); bool isFast = !PatternLocator.locateAutoPostBlinds(blindsImage); // container TableContainer table = new TableContainer(knownTables.Count, cornerTopLeft, cornerBottomRight, layout, seat, isFast, LobbyTable.Empty); knownTables.Add(table); return(table); } else { throw new Exception("No unknown table found"); } }