6

を使用して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などのオンラインゲームで実行すると動作しませんか?ゲームの保護システムは何も検出しないため、そうではありません。

4

3 に答える 3

4

まず第一に、ほとんどのゲームにはボット保護があります。そのため、ボットに遅延を追加し、場合によっては「クールダウン」を追加してください。そのステートメントの前r.delay(1000)に、ボットは2つのインスタントアクションを実行しました。

キーストロークが速すぎるため、機能していないとほぼ確信しています。キーストロークはすぐに押して放します。bot.delay(500)Robotクラスをインスタンス化した直後に、追加してみてください(または、ゲームによって異なります)。すべてのキーを押す機能の前に。これにより、ロボットによって実行されるすべてのアクションの間に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);
}

Zキーと1キーが機能しなかった唯一の理由は、すべてが実行された速度だったと思います。ゲームにはおそらくアンチボットシステムがあります。

于 2012-12-22T03:38:24.823 に答える
1

それはそれがどんなタイプのゲームであるかに大きく依存します。コードが単にキーボードアクションのようなシステム入力をエミュレートしている場合。普通の人のように見えるはずです。

しかし、それがどのように見えるかから。あなたの例から。電光石火の速度で実行されているため、入力がまったく検出されない可能性があります。また、ボットしようとしているいわゆるゲームのアンチボット対策もあります。入力をブロックしています。ミックスに遅延を入れます。それが役立つかどうかを確認してください。さらに助けを求めて戻ってきます。私はこれについて専門家ではありません。しかし、それは私の最善の推測です。

編集:

私が遅延を意味するときは、キーアップイベントが発生する前に遅延を置きます。そうすれば、キーを処理する時間があります。

于 2012-09-06T19:46:32.897 に答える
0

コードがキーを押したり離したりするのがゲームに対して速すぎる可能性があります。多くの場合、少なくとも40ミリ秒から80ミリ秒の遅延でキーを押して放す必要があるゲームがあります。これを試してみると役立つはずです-

public static void doSomething() throws Exception{
    Robot rbt = new Robot();
    int typingTimes = 20;
    while(timer-- > 0){
        rbt.keyPress(KeyEvent.VK_1);
        //You can use Thread.sleep() after each keyPress to increase the delay
        Thread.sleep(500);
        rbt.keyRelease(KeyEvent.VK_1);
        
        rbt.keyPress(KeyEvent.VK_Z);
        //You can use Robot's delay() method after each keyPress too
        rbt.delay(500);
        rbt.keyRelease(KeyEvent.VK_Z);
    }
}

お役に立てれば!

于 2020-06-23T18:51:02.297 に答える