CSGO:详解AHK压枪脚本的实现以及源码分享

您所在的位置:网站首页 xmouse绝地求生压枪代码 CSGO:详解AHK压枪脚本的实现以及源码分享

CSGO:详解AHK压枪脚本的实现以及源码分享

2024-01-03 08:37| 来源: 网络整理| 查看: 265

    

AHK

    写在前面:AutoHotKey,即AHK,类似于宏,属于硬件脚本,有些人也会称这类东西叫硬件作弊,但是它不会被VAC(当然,有可能被OW)。

    这实际上是我的第四篇专栏,在第三篇的脚本基础上进行了大量的修改。第三篇专栏发布后被锁定了,所以且行且珍惜。被锁定或者删除的专栏不会再以其他形式发布,除非我又对脚本进行了改进。

    这次的话不仅会说明脚本本身的功能,也会说一下这个接近12000行的代码是如何一步步写出来的。

    本次的脚本总共有以下功能:

    1、支持7把步枪:AK47、M4A4、M4A1、Galil、Famas、Aug、Sg553,7把冲锋枪:MP9、Mac10、Ump45、MP7、MP5SD、P90、Bizon,1把手枪:cz75,1把机枪:M249。上述枪械压枪均支持整个弹夹,并且支持最新版本(说的就是你,削成弟弟的553);

    2、在压枪的同时实现子弹落点的标注,使得扫射转移变得非常容易;

    3、所有操作均有语音提示与右上角文字提示;

    4、能够选择开启自动检测是否选用主武器的功能,在选用主武器时开启压枪,选用其他武器或道具时关闭压枪(仅支持1920*1080分辨率)。

    下面就这几个功能如何实现进行说明。

    首先是压枪数据的获得以及压枪的实现。

    压枪数据是一个很大的难题,因为网上基本没有直接可用的数据,即使是外网,除了已经被写在脚本里的、几把烂大街枪的数据,也只有扫射落点的动图。

    等等,你是不是说有动图?

这玩意是个宝贝

    很明显,这种动图是通过压枪数据制作的,而我们所需要做的就是利用图像处理将压枪数据反推出来。注意到那个中心就是子弹落点的浅灰色十字了吗?只需要在图片第一列与第一行读出浅灰色的坐标,就可以确定出子弹的落点。我的话是利用matlab进行实现的,将gif逐帧读进去后,对每帧所对应数组的第一列与第一行进行扫描,即可获得基于图片尺度的弹道相对坐标。

    压枪时鼠标移动的轨迹就是弹道的180度旋转,所以有了相对坐标后,只需要研究出实际尺度与所得数据尺度的比例关系,即可实现压枪。对于鼠标移动的实现方法,我采用的是国外visloom28vi的方法:

所有出现modifier的压枪脚本基本都源于他的代码

    这个代码是利用“mouse_event”这个dll实现的,总共需要填入3个参数,每个参数前需要说明参数的类型“UInt”,“UInt”其实就是Unsigned Int 的缩写。第一个参数说明的是实现的功能,比如这里的1(0x01是十六进制的1,没啥区别)代表鼠标仅移动,2代表鼠标移动并点击。后面两个参数很简单,一个是横坐标的偏移量,一个是纵坐标的偏移量。

    之所以在偏移量后面成一个modifier,实际上作者原本是用来适配不同游戏内鼠标灵敏度的,但在此基础上自然也可以乘上系数来适配压枪数据与屏幕的分辨率:

最后的1.9就是比例系数,/1080*height是用来适配分辨率

    至于比例系数如何确定,则需要实际进游戏中进行观察,如果偏上就调大,偏下就调小。

    除了压枪轨迹外,压枪还有一个重要的问题,就是每次压枪的时间间隔必须和扫射时子弹射出的间隔一致,因此,我们需要在上面的dllcall后加一个等待的时间:

等待99ms

    这个等待时间的话基本上是在武器射速反推的基础上,根据游戏内表现进行一定的调整,因为代码的运行也需要时间。这里分享一个可以看武器伤害、射速、射击不确定度等数据的网址(需要翻墙):https://docs.google.com/spreadsheets/u/0/d/11tDzUNBq9zIX6_9Rel__fdAUezAQzSnh5AVYzCP060c/htmlview#

    值得一提的是,部分枪械的射速并不恒定,有的部分会突然变慢或变快,需要精调。

    接下来说明一下子弹标注的实现。其实原理上很简单,就是利用AHK的Gui功能,根据弹道数据在对应点处显示一个色块即可,如果已经有压枪数据的话,可以很简单的实现:

单个子弹标注的代码

    其中,x、y用于记录累计的弹道偏移,而x1、y1则为标注点的横纵坐标。因为无论什么时候准信总是在屏幕的正中央,所以屏幕正中的坐标加上弹道的偏移便是理论子弹落点的位置。

    语音提示和文字右上角显示也很简单,AHK播放语音就一行代码的事:

播放根目录下名为welcome的mp3

    文字提示也是利用Gui功能:

右上角显示off

    第一行是销毁之前的文字,第二行是创建一个没有按钮、没有标题、永远在顶层显示的Gui,第三行到第五行是将该Gui的背景置为透明,第六行为设置文本字体(s是大小,c是RGB颜色,w是粗细),第七行是加入文字“off”,第八行是在对应位置显示一个不可交互的Gui。

    最后,是自动检测功能。自动检测功能说简单很简单,但是实际写的时候才发现着实有点坑。

    自动检测的原理是:检测右下角主武器图标处是否呈选中状态(图标变成白色,即0xffffff),如果是则开启压枪,否则关闭压枪。

    是不是很简单?但是,游戏中各个武器的图标长得并不相同,如何选取检测点是第一个问题;其次,在拿道具、钳子和C4的时候主武器的位置会发生改变,并且改变量并不相同,这就需要对多个点进行检测。于是,实际代码变成了这个样子:

检测总共五个点,以确定武器图标的位置

    这里检测的点是主武器图标右侧“1”的最上端,以此来判断主武器图标的位置。5个点是因为5种情况,分别是有道具、有C4、有钳子、有C4和道具、有钳子和道具,最后剩下的就是没有道具、钳子与C4。

    确定完主武器图标位置后,判断是否为纯白色即可:

ak47的自动检测代码

    至于PixelGetColor的位置,我选取的是每个武器图标的中心,这个取点比较随意,只要在图标范围内皆可。

    至此,脚本的功能实现就基本讲完了。其实你会发现,虽然脚本这么长,但是其中有很多部分都是一样的,只需要修改部分数据。实际上,我在写这个脚本的时候很多代码都是利用Excel表里的数据和Matlab生成的,这比手动复制粘贴再修改快了不少。

    介绍完了功能的实现,接下来说一下脚本的使用。

    首先,不了解AHK使用的请阅读第一篇专栏。强烈建议AHK安装在C盘。

    键位绑定脚本内有说明,在此不再赘述:

键位绑定说明

    因为枪械数量实在太多,所以分成了三类,一类是步枪,一类是冲锋枪,剩余的为一类。选择枪械时,需要先切换到对应的列表(步枪/冲锋枪),然后再按下单独枪械对应的按键。cz75与m249不在两个列表内,可以直接选择。

    选择完枪械后,按下压枪功能开关键手动开启或者关闭压枪功能。

    如果打开了自动检测模式,仍然需要手动选择对应的枪械,但是不需要手动按下压枪功能键进行压枪的开关。此时如果按下压枪功能开关键,会自动回到手动模式。

    弹道标注功能与压枪功能同时开启与关闭。

    最后的最后,便是白嫖党最喜欢的源码分享链接。

    学校网盘(可以直链下载,但是不定时抽风):

https://pan.seu.edu.cn:443/#/link/4804921DF8D922D0DE23E329082CEA50

    百度网盘:

链接:https://pan.baidu.com/s/1beVSarI68Qbxmb3Fp2Q0_A提取码:y592

这个压缩包压缩包内容物

     未来的话估计一段时间内不会再发新专栏,因为保研的相关事宜有些烦人,而且目前没有什么想实现的功能。如果有问题欢迎私信,一般一天会看一次。

    祝各位游戏愉快。



【本文地址】


今日新闻


推荐新闻


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