为什么守望先锋只有usb辅助?硬件驱动稳枪原理

守望先锋辅助(非外挂)OW辅助官方商城中心

守望先锋usb辅助驱动准备

之前说了,为了手残可以愉快的玩(pao)游(mei)戏(zi)这个伟大目标,我决定开始写一个守望先锋的 AI。今天下午终于抽出了几个小时开始了第一步

其实作为一个 FPS 游戏,守望先锋的输入输出相当好定义,这样也就造成了我们可以很快的完成写一个 AI 的准备,首先需要做的事情就是能读到图像,其次要做的事情就是能控制鼠标和键盘上有限的几个键。

由于是没事搞着玩的东西,所以我就直接采用了 Python 来干这个事情。

首先是读入图像,其实这个事情蛮简单的,stackoverflow 上面一搜索就找到了使用 PIL 读入图像的方法,

from PIL import ImageGrab

import numpy as np

import cv2

img = ImageGrab.grab(bbox=(100,10,400,780)) #bbox specifies specific region (bbox= x,y,width,height *starts top-left)

img_np = np.array(img) #this is the array obtained from conversion

frame = cv2.cvtColor(img_np, cv2.COLOR_BGR2GRAY)

cv2.imshow("test", frame)

cv2.waitKey(0)

cv2.destroyAllWindows()

需要注意的是,由于兼容性的问题,你可能需要手动指定array 的 dtype=np.uint8,否则会报错(mac 下没有这个问题,windows会)

另一个我曾经以为很复杂的事情就是如何 fake 一个鼠标键盘,结果发现对于 Python 不要太容易,直接使用 win32api 做鼠标相对移动就行

win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_MOVE,int(movementx),int(movementy))

这里需要注意,WINAPI 调用鼠标有两种方式,相对移动和绝对移动,我测试中发现守望先锋这类游戏可以接纳的是相对移动(因为游戏的控制器逻辑会自动纠正到零点,所以估计是直接拿的驱动层的相对移动事件)

然后你就得到了所有的接口,剩下的就是算法了。

一个水笔的视觉辅助

万事开头难,一开始就做很复杂的控制算法和识别算法或者规划算法得不偿失,于是我就找一个最小系统搞一搞,什么是最简单的呢?我想了一下,做一个运动稳定吧。

所谓运动稳定,(在这里就是跟枪)其实就是希望我的枪头能指向目标物的方向


这个需求一提出来,立马就想到了无比简单已经经典的光流算法,其实就是不断地生成特征点,做匹配。

在我的算法中,我对300*300区域的特征点进行捕捉,每次进入自动稳枪逻辑后,初始化特征点,每帧不断匹配并和起始帧做对比,由于瞄准十字很容易被识别为特征点所以顺便把离得太近的点扔掉。

这时候就可以得到一个特征点的漂移量。

剩下的事情就很简单了。

(x,y) = calcuate_movement()

movementx = movementx * filter_gain + -k*x/dt * (1-filter_gain)

# movementy = movementy * filter_gain + -k*y/dt * (1-filter_gain)

if enable_auto:

win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_MOVE,int(movementx),int(movementy))

pass

cv2.waitKey(int(dt*1000))

一个简单的 P 控制器就可以得到不错的跟踪效果。特别注意的是,由于图像追踪的不稳定性,噪声相当大,所以可以用一个简单的一阶滤波器解决问题。

这个时候已经可以用76跑着风骚的步伐然后鼠标不动的突突训练机器人了(虽然实战还暂时没有用)

守望先锋人工智能

守望先锋人工智能—在线播放—优酷网,视频高清在线观看

视频

刚刚去打电脑对战打死两个23333

下一步计划:我打算中秋假期期间把守望先锋接到 ros 上面,先做了 VO 定位和基本的 SLAM,然后写一套瞄准姿态-速度-位置的基础控制器。

----------------------

有兴趣参加这个项目,以及写更多的基于视觉和机器人算法的游戏控制程序的可以知乎私信我,项目暂时不开源了我可不想被暴雪粑粑封号,用作大家娱乐用。参加项目的孩子只要满足一:有兴趣,二在项目中能贡献代码,三不想拿这玩意赚钱即可。我还想做自动空战坦克之类的(而且空战其实更好做毕竟我写飞控的哈哈哈哈)。其实我觉得搞着玩玩玩玩说不定有了不错的想法可以发paper 什么的。

----------------------

别讨论会不会封这种无聊的问题,我又不卖出去赚钱或者拿他正经打游戏。

----------

还有人私信我让我删帖说不要毁掉这个游戏,mdzz………

哦好几个人给知乎举报我在给暴雪的游戏写外挂,我觉得智力需要充值啊。

我是不是往网上发几篇枪械图纸,你要去公安局告我违法制造枪支弹药啊?

我是不是往网上发几篇哈马斯无制导火箭弹的制作原理,你要去告诉以色列就是这个人炸了你家啊?

我是不是往网上发一篇原子弹的原理以及筹备,你要去国际原子能机构告我私自拥有核武器啊?

可问题是你们找的是知乎举报,其实你还可以去给知乎举报解析 AlphaGo 的回答破坏了围棋游戏的规则。

我为了避嫌专门漏了几部分代码没有放出来就是嫌你们这种无聊的人太多了知道吗?