Ява бот для онлайн игры

Я создаю бота на java, используя java.awt.Robot. Бот отлично работает в браузере (я также протестировал его с помощью Microsoft Word!) но когда я запускаю его в игре, единственная функция, которая работает mouseMove. Я хочу создать бота, который просто нажимает кнопки клавиатуры для меня.

Я создаю экземпляр класса роботов

Robot r = new Robot();

затем я делаю некоторые простые вещи: нажмите z, нажмите 1, переместите мышь и щелкните правой кнопкой мыши.

r.keyPress(KeyEvent.VK_Z);
r.keyRelease(KeyEvent.VK_Z);

r.keyPress(KeyEvent.VK_1);
System.out.println("Press 1 button");
r.keyRelease(KeyEvent.VK_1);
System.out.println("Release 1 button");
r.delay(1000);

System.out.println("Move mouse");
r.mouseMove(110, 690);

System.out.println("Press");
r.mousePress(InputEvent.BUTTON3_MASK);
System.out.println("Release");
r.mouseRelease(InputEvent.BUTTON3_MASK);

Почему это происходит? Может это Класс робота выполнять такие действия в игре, если он работает в фоновом режиме?

спасибо

обновление: если я запускаю своего бота на PES 2012, например, он работает нормально, но если я запускаю его в онлайн-игре, как Cabal, он не работает? система защиты игры ничего не обнаруживает, так что это не так.

2 ответов


прежде всего, большинство игр имеют защиту ботов, поэтому обязательно добавьте задержку в бота и, возможно, "перезарядку". До этого r.delay(1000) заявление, бот сделал два мгновенных действий.

я почти уверен, что это не работает, потому что клавиш слишком быстро: они нажимают и сразу же. Попробуйте добавить bot.delay(500) (или больше, зависит от игры) сразу после создания экземпляра класса робота; перед всеми функциями нажатия клавиш. Это добавило бы задержку 500ms между всеми действиями, сделанными робот.

public static void doStuff() {

    Robot r = new Robot();

        r.delay(500); //Or more - depends on the game

        r.keyPress(KeyEvent.VK_Z);
        r.keyRelease(KeyEvent.VK_Z);

        r.keyPress(KeyEvent.VK_1);
        System.out.println("Press 1 button");
        r.keyRelease(KeyEvent.VK_1);
        System.out.println("Release 1 button");
        r.delay(1000);

        System.out.println("Move mouse");
        r.mouseMove(110, 690);

        System.out.println("Press");
        r.mousePress(InputEvent.BUTTON3_MASK);
        System.out.println("Release");
        r.mouseRelease(InputEvent.BUTTON3_MASK);
}

Я думаю, что единственная причина, по которой клавиши Z и 1 не работали, была скорость, с которой все было сделано. В игре, вероятно, есть анти-бот-система.


Это сильно зависит от того, какую игру он ведет. Если код просто эмулирует системный ввод, как действия клавиатуры. Он должен выглядеть как обычный человек.

однако из того, как это выглядит. Из вашего примера. Его работает с молниеносной скоростью, поэтому его проблема не обнаруживает вход вообще, и / или анти-бот меры на так называемой игре вы пытаетесь бот. Блокирует вход. Добавьте задержки. Посмотрим, поможет ли это. Я вернусь за помощью. Я не профессионал на этом. Но это мое лучшее предположение.

EDIT:

когда я имею в виду задержку, поставьте задержку перед ключевыми событиями, чтобы стрелять.. Таким образом, у него есть время, чтобы обработать ключи.