Пример #1
0
        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));
        }
Пример #2
0
        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");
            }
        }