用于在线游戏的Java机器人

Geo*_*iou 6 java bots online-game awtrobot

我正在使用java在java中创建一个bot java.awt.Robot.机器人在浏览器上工作正常(我也使用Microsoft Word测试过它!)但是当我在游戏中运行它时,唯一有效的功能是mouseMove.我想构建一个只需按下键盘按钮的机器人.

我实例化了机器人类

Robot r = new Robot();
Run Code Online (Sandbox Code Playgroud)

然后我做一些简单的事情:按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);
Run Code Online (Sandbox Code Playgroud)

为什么会这样?如果它在后台运行,这个Robot类可以在游戏中执行这些操作吗?

谢谢

更新:例如,如果我在PES 2012上运行我的机器人,它运行正常,但如果我在像Cabal这样的在线游戏上运行它,它不起作用?游戏的保护系统没有检测到任何东西,所以情况并非如此.

bru*_*uno 5

首先,大多数游戏都有机器人保护,因此请确保为机器人添加延迟,也许还有“冷却时间”。在这r.delay(1000)句话之前,机器人做了两个即时动作。

我几乎可以肯定它不起作用,因为击键速度太快:它们按下并立即释放。尝试在实例化 Robot 类后立即添加bot.delay(500)(或更多,取决于游戏);在所有按键功能之前。这将在机器人执行的所有操作之间增加 500 毫秒的延迟。

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);
}
Run Code Online (Sandbox Code Playgroud)

我认为 Z 和 1 键不起作用的唯一原因是所有操作的速度太快。该游戏可能有一个反机器人系统。