不读写内存,百里守约实现自瞄,模拟玩家操作不封号

前言

文章来源
https://www.toutiao.com/i7041316375201137155/
此为转载

看视频时,看到百里守约这个英雄千里狙杀,我在想如果能够实现百里守约自瞄,指哪打哪那岂不是无敌了?能够在保证自身安全的前提下无限消耗英雄。

于是我便想到了开发一个自瞄软件,只需要点击对面英雄,百里守约就能够自动开二技能在0.2秒内自动准确命中点击位置。

有人会问,这不是外挂吗?哈哈,我告诉你这个永远都不会封号,因为传统的外挂是靠读取修改王者荣耀的数据实现自瞄的,而这个则是模拟人操作英雄百里的射击实现的,对王者荣耀的底层数据没有任何访问和修改,自然不存在修改王者荣耀数据被封号的情况。懂得都明白,不懂的瞎担心。重点就是模拟人的操作,而非读写王者荣耀数据,因此在后台看来你就是个人在操作,跟着看就明白了。
在这里插入图片描述
当然我已经实现了,乱杀,一起跟我看看实现原理吧。

原理比较硬核,不知道你能不能看得懂哈。

具体介绍

1.原理就是使用投屏软件,将手机上的王者荣耀投屏到电脑上,此时电脑是可以用鼠标和键盘操作投屏到电脑上的王者荣耀的。

没错,原理就是我们手机点击一个位置,然后将手机点击的位置xy传送给电脑,然后电脑得到手机的点击位置xy转化为电脑的点击位置x1,y1,然后保证电脑自动控制百里守约开二技能射击电脑上的坐标x1,y1即可,这里你听懂了吗?

当然,这只是一小部分功能,具体的是:

手机上先传送一个让电脑开二技能的指令,比如手机向电脑发送“k”字符,电脑收到“k”以后开启二技能,然后手机上开始点击敌方英雄,手机上检测到点击位置,然后发给电脑,电脑控制百里守约射击目标位置。

问题

1,可能有人问,为什么手机要向电脑先发送一个“k”让电脑开启百里守约的二技能呢?

我就问你玩过百里守约没有,百里不开二技能那么大的视野范围怎么获得,怎么看见敌方英雄,百里的强势不就是开启二技能获得大范围视野以及超远射击吗?当然要先开二技能获得敌方英雄位置,然后你再点击敌方英雄让他射击啊,
在这里插入图片描述
2,可能有人问,为什么手机上点击的坐标需要转化为电脑屏幕上的坐标呢?

先说一下,免得你放弃不好好看:

这里涉及了大量的数学变换,如果你得到了百里二技能最终拖动的坐标,你从青铜一路打上巅峰赛3000不是梦,你将成为神枪手,因为一个百发百中的百里守约克制峡谷一切生物。

有人说,哎呀,别人把百里禁了你不就凉凉了,我呵呵一笑,难道干将,钟馗,墨子的自瞄你也不喜欢吗?只要把这个百里的自瞄看懂了,他们的自瞄轻而易举。

好了,接下来说坐标转化的问题。

这样说吧,我的手机分辨率是2400x1080,电脑屏幕分辨率是1366x769,你说你在手机上点击的敌人英雄的位置,比如(300,600),就是电脑上(300,600)的坐标吗?

当然不是,那么该如何将手机上点击的敌方英雄坐标转化为电脑上的敌方英雄坐标呢?

接下来说硬核一点的坐标转换,公式就是y=kx+b,手机上点击的x和y坐标都需要进行转换才能映射为电脑的敌方英雄目标,解释一下,这里的k代表的是手机上分辨率和电脑上王者窗口分辨率之比,b代表王者荣耀窗口的偏移量,放个图你就明白了

如图,王者窗口是位于正中的,这和手机显示的肯定不一样,

经过y=kx+b的伸缩变换后,点击手机上的坐标就能转化为电脑上王者窗口的敌方英雄的坐标。
在这里插入图片描述
你以为这就结束了吗?SO YONG SO SIMPLE!

你以为你知道电脑上敌方英雄的坐标你就能打中吗?
在这里插入图片描述
你需要将电脑上敌方英雄的坐标转化为百里二技能拖动的坐标,玩过百里的都懂,

也就是说手机上点击的敌方英雄的坐标需要经过两次转换,第一次转化为电脑屏幕上敌方英雄的坐标,第二步转化为百里二技能的拖动的坐标。

如何转化呢?

你如果细心一点就会发现百里和敌方英雄之间的连线,和二技能技能中心到拖动到的目标位置的连线是平行线关系,

运用初中的知识知道,平行线的斜率是相同的,这意味着你需要知道百里的位置,敌人的位置得到一条y=kx+b的直线,以及二技能坐标中心的位置来得到最终二技能需要拖动到的目标坐标。仔细看,不然你是无法成为“神枪手”的。

你以为这就结束了吗?So Yang So Simple!!!

百里的射击范围实际上是一个椭圆,在平面上如果你把百里的射击范围标注出来,你会得到一个椭圆的射击范围,也就是说你需要得到的二技能的拖动目标,还需要拟合百里椭圆的射击范围,得到一个公式。
在这里插入图片描述
数学不够用了有没有,但是我告诉你,你只要得到了这个百里的二技能拖动坐标,那么你从青铜可以一路杀上巅峰赛3000分,因为没有谁能挡得住一个百发百中的百里。
在这里插入图片描述

而且重点是,他不读取王者荣耀的底层数据,就是模拟人在玩王者荣耀,没有任何透视等等,但是实现了自瞄的效果,哈哈哈哈

电脑上敌方坐标有了,怎么控制电脑自动开二技能射击目标位置?

我是用python实现的,使用的是pyautogui这个可以控制电脑鼠标键盘的包

至于如何接收开启二技能的命令“k”字符,以及如何收到敌方英雄坐标,我使用的TCP的客户端/服务器模式,

接下来就比较硬核了

当手机软件客户端和电脑的python服务器通信时,python服务器等待手机客户端发送“k”,其他命令不触发。
在这里插入图片描述
python服务器收到“k”后,立刻启动pyautogui的拖动函数,将百里的二技能开始向后拖动,拖动到一个指定的坐标,此时百里的二技能启动,开始获得超大范围视野,玩过百里的都懂,然后等待手机向python服务器发送敌方英雄坐标位置。

我修改了pyautogui的源码,在他的拖动函数里加入了一个TCP的接收命令,此时收到类似(100,200)指定格式的字符串就会触发坐标转换函数,其他的命令比如“k”就过滤掉了,接下来就是转换手机发送来的敌方英雄坐标为百里二技能的拖动坐标,然后电脑控制百里守约的二技能向指定的坐标拖动,完成对敌方英雄的射击。

安卓端如何开发

需要设置两个按钮悬浮在桌面上,这样打开王者荣耀你也能随时点击这个按钮,一个按钮发送射击命令,另一个发送坐标,然后点击按钮时弹出来一个弹出窗口,我设置的为popwindow,透明度设置的为10%,

不会有人怀疑为什么要透明吧?全遮住王者荣耀窗口你怎么看敌方英雄然后点击啊

有人可能会疑惑,百里开启二技能后,再点击其他位置,难道,不会提前触发让百里射击吗?

呵呵,那我设置popwindow干嘛,当popwindow弹起的时候自动屏蔽了王者荣耀窗口的焦点,此时你点击王者荣耀窗口他是不会触发的。

点击射击指令按钮后,会发送一个“k”字符到python服务器,此时能够看到百里二技能开启,并自动拖动到指定坐标

然后点击坐标发送的按钮,弹出半透明的popwindow,点击对方的英雄,完成对方英雄的坐标发送,popwindow点击后消失,以免遮住王者窗口让电脑不能完成射击。

此时就完成了。

后续

百里的指哪打哪你都会了,竟然你说不会干将,钟馗,墨子自瞄,把百里二技能蓄势的函数删了,直接指哪打哪不香吗?

升级

哈哈哈哈,你以为这就结束了吗?

我知道如何利用图像识别识别对方英雄,这意味着我不需要安卓端点击来确定敌方位置,我写了一个图像识别函数,当敌方英雄出现的时候他会自动标注敌方英雄得到敌方英雄坐标,也就是我只需要将安卓手机投屏到电脑上,然后图像识别模块识别对面英雄位置,百里守约就能够自己开二技能然后自己获得敌方英雄坐标自己射击了
在这里插入图片描述
这是指哪打哪吗?

这是自动追击导弹

  • 13
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
在Linux中实现读写HID模拟鼠标可以通过以下步骤来完成: 1. 首先,需要使用hidraw设备来读写HID设备。HID设备在Linux中通常以hidraw设备的形式出现。可以通过以下命令查看系统中的hidraw设备: ```shell ls /dev/hidraw* ``` 2. 打开hidraw设备以进行读写操作。可以使用C语言编写一个程序来打开hidraw设备,并使用read和write函数来读写数据。以下是一个简单的示例程序: ```c #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> #include <linux/hidraw.h> int main() { int fd; char buf[8]; fd = open("/dev/hidraw0", O_RDWR); if (fd < 0) { perror("Unable to open hidraw device"); exit(1); } // 读取数据 if (read(fd, buf, sizeof(buf)) < 0) { perror("Unable to read from hidraw device"); exit(1); } // 写入数据 if (write(fd, buf, sizeof(buf)) < 0) { perror("Unable to write to hidraw device"); exit(1); } close(fd); return 0; } ``` 3. 解析HID报文。HID报文通常是由一系列的字节组成的。根据HID规范,可以解析报文中的每个字节来获取鼠标的相关信息,例如鼠标的坐标、按键状态等。 4. 模拟鼠标操作。根据解析得到的鼠标信息,可以使用X11或者uinput来模拟鼠标操作。X11是Linux下的图形系统,可以使用XTest库来模拟鼠标操作。uinput是Linux内核提供的一个虚拟输入设备接口,可以使用uinput库来模拟鼠标操作。 以下是一个使用XTest库来模拟鼠标操作的示例程序: ```c #include <stdio.h> #include <X11/Xlib.h> #include <X11/extensions/XTest.h> int main() { Display *display; Window root; XEvent event; display = XOpenDisplay(NULL); if (display == NULL) { fprintf(stderr, "Unable to open display\n"); return 1; } root = DefaultRootWindow(display); // 模拟鼠标移动 XTestFakeMotionEvent(display, -1, 100, 100, CurrentTime); // 模拟鼠标点击 XTestFakeButtonEvent(display, 1, True, CurrentTime); XTestFakeButtonEvent(display, 1, False, CurrentTime); XFlush(display); XCloseDisplay(display); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值