FPS游戏自动枪械识别+压枪(以PUBG为例)

您所在的位置:网站首页 pubg罗技鼠标宏封号吗2022 FPS游戏自动枪械识别+压枪(以PUBG为例)

FPS游戏自动枪械识别+压枪(以PUBG为例)

2024-07-17 00:46| 来源: 网络整理| 查看: 265

FPS游戏自动枪械识别+压枪(以PUBG为例)

文章目录 FPS游戏自动枪械识别+压枪(以PUBG为例) 前言 一、明确压枪宏的功能需求 二、实现游戏内的鼠标指针下移 1.驱动安装和链接库的加载 2.通过罗技驱动控制键鼠 三、实现键盘、鼠标监听 1、引入库 2、键盘监听 3、鼠标监听 四、自动识别枪械配件及关键画面信息 1、背包信息的识别 2、开火状态识别 五、实现压枪函数 1、获取弹道表、配件的参数 2、编写压枪函数

前言

本篇分享PUBG自动识别+压枪宏实现的完整思路,同样的思路可套用在其他FPS游戏上,开发语言使用Python3.9。 项目完整代码见:https://github.com/Cjy-CN/PUBGRecognizeAndGunpress

一、明确压枪宏的功能需求

自动压枪简单的理解就是控制鼠标下移。但是,鼠标下移量的多少却是多方面因素的共同影响结果,以PUBG(绝地求生)为例,每一发子弹射出时的后座,除了每把枪的弹道表,还与枪械配件(倍镜、握把、枪托)、射击时的人物姿势(站、蹲、趴)、开火状态(全自动、连发、单发)相关联。因此,要实现压枪的需求,就必须解决背包中的配枪、配件识别,按下开火键时的人物姿势、开火模式识别,最后才是如何调用硬件驱动以实现游戏内鼠标指针下移操作。

二、实现游戏内的鼠标指针下移

由于绝地求生屏蔽了硬件驱动外的其他鼠标输入,因此我们无法直接通过py脚本来控制游戏内鼠标操作。为了实现游戏内的鼠标下移,我使用了罗技鼠标的驱动(ghub),而py通过调用ghub的链接库文件,将指令操作传递给ghub,最终实现使用硬件驱动的鼠标指令输入给游戏,从而绕过游戏的鼠标输入限制。值得一提的是,我们只是通过py代码调用链接库的接口将指令传递给罗技驱动的,跟实际使用的是何种鼠标没有关系,所以即便用户使用的是雷蛇、卓威、双飞燕等鼠标,对下面的代码并无任何影响。 【本章节代码对应项目中ghub.py模块】

1.驱动安装和链接库的加载

罗技驱动使用LGS_9.02.65_X64(请自行找资源安装,官网新版罗技驱动没找到对应的链接库文件),链接库文件在项目链接里面可以找到。下面是载入链接库的代码。

try: gm = CDLL(r'./ghub_device.dll') gmok = gm.device_open() == 1 if not gmok: print('未安装ghub或者lgs驱动!!!') else: print('初始化成功!') except FileNotFoundError: print('缺少文件') 2.通过罗技驱动控制键鼠

demo代码如下:

#按下鼠标按键 def press_mouse_button(button): if gmok: gm.mouse_down(button) #松开鼠标按键 def release_mouse_button(button): if gmok: gm.mouse_up(button) #点击鼠标 def click_mouse_button(button): press_mouse_button(button) release_mouse_button(button) #按下键盘按键 def press_key(code): if gmok: gm.key_down(code) #松开键盘按键 def release_key(code): if gmok: gm.key_up(code) #点击键盘按键 def click_key(code): press_key(code) release_key(code) # 鼠标移动 def mouse_xy(x, y, abs_move = False): if gmok: gm.moveR(int(x), int(y), abs_move)

鼠标移动的函数中,xy就是移动的横纵距离。 鼠标点击函数中,传入参数1,2,3分别代表鼠标左、中、右键 键盘按键函数中,传入的参数采用的是键盘按键对应的键码

三、实现键盘、鼠标监听

前面说到,要实现压枪就要对各种配件、状态做出识别。那么在写识别的函数之前,我们先要解决的是何时识别的问题。如果识别使用多线程\多进程的一直持续检测,无疑是一种巨大的开销,因此就需要对键盘、鼠标的状态进行监听。只有按下特定按键时,才触发特定相应的识别请求。 【本章节代码对应项目中monitor.py模块】

1、引入库

这里我使用的钩子是Pynput,其他可使用的库还有Pyhook3 由于我们只需要对绝地求生这个窗口进行监听,而不是想在任何界面都去让我们的鼠标在按下左键时自动下移,因此还引入win32gui进行当前窗口的判断。

from pynput import mouse,keyboard from win32gui import GetWindowText, GetForegroundWindow 2、键盘监听

在PUBG中,Tab键是打开背包,因此键盘对应检测Tab键。代码都很浅显。只有以下需要注意

Listener中绑定on_press和on_release的函数( on_key_press、on_key_release),它们返回False的时候是结束监听,下文鼠标监听的函数同理,所以不要随便返回False 键盘的特殊按键采用keyboard.Key.tab这种写法,普通按键用keyboard.KeyCode.from_char(‘c’)这种写法 def start_key_listen(dict): def on_key_press(key): nonlocal dict if '绝地求生' in


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3