Java实现GTA5自动抽车,提高中奖概率
GTA5转盘抽奖,最近的奖品是暴君1,笔者很是心动,GTA5萌新的我很想要,所以就写了一个自动抽奖的工具,下载地址:https://github.com/Lmh-java/AutoGTA5Lottery
代码编写
思路
检测键盘输入,当按下enter时延迟6000ms(根据B站up主:江浙沪网戒中心给的数据来的:之后按下s开始旋转,有很大几率就会中奖了。
笔者开始写的时候,想到用python,但是64位的pyhook安装起来实在不友好,又想去用C#,但是C#也需要win API,想来想去还是选用了java。
开始编写
1.快速用myeclipse建立一个java SE项目
2.当我们运行游戏的时候,java程序就会失去焦点,所以键盘监听就会失效。得出的结论是不能用java自带的监听器进行监听。
在网上查询资料发现,需要用java和C联合开发,但是C笔者不是很擅长。但是笔者找到了第三方的java库,支持全局监听,叫做***jintellitype-1.3.9.jar ***
下载地址: download.csdn.net/download/Lmh_java/12135240
3.使用Robot类模拟键盘输入,具体如下
try {
robot = new Robot();//此句会抛出异常
robot.keyPress(KeyEvent.VK_S);//此句不需要try catch
robot.delay(20);//此句不需要try catch
robot.keyRelease(KeyEvent.VK_S);//此句不需要try catch
} catch (AWTException e) {
e.printStackTrace();
}
可以看到keyPress方法模拟键盘按下,keyRelease模拟键盘松手,一按一松就构成了一次点击键盘
热键接收代码:
//注册热键
JIntellitype.getInstance().registerHotKey(GLOBAL_HOT_KEY_1, 0, 13);
//用内部类来对监听器事件作出反应
JIntellitype.getInstance().addHotKeyListener(new HotkeyListener() {
public void onHotKey(int markCode) {
if (markCode == GLOBAL_HOT_KEY_1) {
//你要做的事情
System.out.println("开始计时");
}
}
});
但是我们经过测试会发现这样会导致程序可以接收到热键按下,然而gta5却不能再同时作出反应。可以理解为enter按下事件被java程序拦截了,所以我们还要再模拟一次点击enter。
4.总体代码
Main.java
import com.melloware.jintellitype.HotkeyListener;
import com.melloware.jintellitype.JIntellitype;
public class Main {
private static final int GLOBAL_HOT_KEY_1 = 1;
private static boolean isKeydown = false;
public static void main(String[] args) {
JIntellitype.getInstance().registerHotKey(GLOBAL_HOT_KEY_1, 0, 13);
JIntellitype.getInstance().addHotKeyListener(new HotkeyListener() {
public void onHotKey(int markCode) {
if (markCode == GLOBAL_HOT_KEY_1 && isKeydown == false) {
new KeyboardTask().start();
JIntellitype.getInstance().unregisterHotKey(GLOBAL_HOT_KEY_1);
isKeydown = true;
System.out.println("开始计时");
}
}
});
}
}
KeyboardTask.java
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import com.melloware.jintellitype.JIntellitype;
public class KeyboardTask extends Thread {
private Robot robot = null;
public void run() {
try {
robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
robot.delay(20);
robot.keyRelease(KeyEvent.VK_ENTER);
Thread.sleep(7600);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (AWTException e) {
e.printStackTrace();
}
System.out.println("计时结束");
robot.keyPress(KeyEvent.VK_S);
robot.delay(10);
robot.keyRelease(KeyEvent.VK_S);
JIntellitype.getInstance().cleanUp();
}
}
最后提醒大家一点,热键注册完之后一定要销毁,不然用几次就会报错。
两个dll文件一定要新建一个包单独存放,不然会报找不到dll的错误。包名一定要为com.melloware.jintellitype,程序只会在这里寻找dll库