Задать вопрос
@fife

Может ли робот не успевать выполнить свои действия, и переходить к следующей задаче?

Привет, пишу бота для игры, для этого создаю три потока, один читает лог(туда приходят сообщения которые бот должен обрабатывать), второй обрабатывает сообщение(принимает решение что надо делать) и заносит в очередь, и третий берет из очереди обработанное сообщение, и начинает его выполнение, а попутно в очередь добавляются другие задачи.
В третьем потоке активно использую класс Robot для установления курсора на нужные координаты, и выполняя действия.
public static void dropToStashFromInventory(){
        try {
            closeAllWindows();//закрывает открытые окна в игре
            Robot robot = new Robot();

            robot.mouseMove(977, 486); //открывает сундук
            robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
            //x=1316, y=588 1 inventory slot
            for (int i = 0;i<12;i++){//тут бежит по всем слотам инвентаря 12х5
                robot.mouseMove(1316 + (50 *i), 578);
                for (int j = 0; j<5;j++){
                    robot.mouseMove(1316 + (50 * i), 578 + (50 * j));
                    robot.keyPress(KeyEvent.VK_CONTROL);//зажимая control и кликая на слот
                    robot.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
                    robot.keyRelease(KeyEvent.VK_CONTROL);
                }
            }
        } catch (AWTException e) {
            e.printStackTrace();
        }
    }


Дело в том, что иногда перед тем как перейти к следующей ячейки инвентаря, он не успевает отжать control, и получается что вместо быстрого скидывания в сундук(с control), он берет вещь под курсор, конечно же это ломает логику бота.

Как мне это исправить/какие альтернативы можно использовать?
  • Вопрос задан
  • 78 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@Cheypnow
Как вариант использовать метод waitForIdle() или поставить задержку на какое-то время чтобы дождаться пока нужная логика отработает.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы