30行Python代码刷王者荣耀金币

88

原理

王者荣耀的冒险模式里有个挑战模式,第一次过关可以获得比较多的金币,后面重新挑战还是会获得少量金币,这不算是bug,你不嫌烦手动蛮力也可以刷金币。

推荐关卡:陨落的废都 - 魔女回忆

此关卡使用纯输出英雄20秒左右可以打BOSS,50秒左右可以通关,每次重复通关可以获得奖励19金币。在开挂前建议你手动通关体验一下。此为游戏原理。

简单来说,需要执行以下步骤:

  1. 界面打开至挑战关卡:陨落的废都 - 魔女回忆 【点击下一步】
  2. 进入阵容调整界面,提前安排好阵容。【点击闯关】
  3. 进入挑战界面。【点击右上角-自动-等待挑战结束】
  4. 进入挑战完成界面。【点击屏幕继续】
  5. 进入关卡奖励界面。【点击再次挑战】
  6. 进入阵容调整界面,循环至步骤1或步骤2【貌似取决于游戏区和版本】

只要你能模拟屏幕点击就可以完成刷金币的脚本,在安卓模拟界面点击最简单的方式就是使用ADB发送命令,不需要root手机,不需要安装第三方软件,方便快捷。ADB命令点击屏幕坐标[x, y] 可以使用命令:

adb shell input tap x y

iOS用户请直接查阅 github项目地址,原理和微信跳一跳外挂相似。

准备

  • 本脚本适用于安卓游戏区,需要真实安卓手机。
  • 手机需开启USB调试模式,允许电脑调试。
  • 电脑需安装好安卓驱动,一般豌豆荚或者各种管家可以自动帮你装好。
  • 电脑需要有ADB工具集,很多方式可以获取。
  • ADB工具需要加入环境变量PATH中,方便随时调用。
  • 电脑上需要安装Python,因为这是我选择的脚本语言。

专业的开发测试人员,也可以参考我的另外两篇博客:

如果只是为了刷金币,只需要安装好驱动和ADB工具即可。

步骤

如果万事具备,那么步骤就非常简单。

环境检测

  1. 用USB连接手机,如果弹出警告,请允许电脑调试手机。
  2. 使用命令 adb devices 检验adb和手机状态已经就绪。
$ adb devices
List of devices attached
b******4        device

模拟点击屏幕,比如你可以打开画图软件,然后运行命令:

adb shell input tap 500 500

如果如果一切OK,那么你将看到画图软件在坐标(500,500)的位置有一个点。

代码实现

通关需要点击的屏幕位置是固定的,加上注释我们只需要不到30行代码就可以完成。

def tap_screen(x, y):
    os.system('adb shell input tap {} {}'.format(x, y))

def do_money_work():
    print('#0 start the game')
    tap_screen(1600, 970)
    sleep(3)

    print('#1 ready, go!!!')
    tap_screen(1450, 910)
    sleep(15)

    print('#2 auto power on!')
    tap_screen(1780, 40)

    for i in range(25):
        tap_screen(1000, 500)
        sleep(1)

    print('#3 do it again...\n')
    tap_screen(1430, 980)
    sleep(3)

然后我们写一个主函数来循环刷钱。

if __name__ == '__main__':
    for i in range(repeat_times):
        print('round #{}'.format(i + 1))
        do_money_work()

拿来主义

如果你喜欢拿来主义,请访问本文项目地址:

然后:

  1. 下载项目中的 kog.py 到本地,iOS则为 kog_iOS.py
  2. 将游戏打开,进入挑战模式,魔女回忆,阵容调整界面。
  3. 根据手机性能和分辨率,调整kog.py中的参数。(手机分辨率,刷金次数等等)
  4. 运行以下命令,手机上就可以查看实时运行效果。
python kog.py

注意:

  1. 每周金币上限4200,需要接近4个小时,不建议一次刷满,手机和你都要休息。
  2. 铭文,手机性能,英雄选择都会影响通关速度,自己微调等待时间。
  3. 如果你不想被USB数据线束缚,可以考虑使用无线连接Android真机

声明

本脚本纯属娱乐和探索的心得,如果你因为违反了游戏规则导致被封号,我概不负责。

关于作者:Python技术爱好者,目前从事测试开发相关工作,转载请注明原文出处。欢迎关注我的博客 https://betacat.online,你可以到我的公众号中去当吃瓜群众。

Betacat.online

你可能感兴趣的

32 条评论
慕辰先生 · 2017年12月21日

荣耀可以在模拟器登录玩的,不过不好操作,毕竟触屏游戏。而你用python写安卓脚本,这最多算是假脚本,真脚本你应该写个app,用安卓和java开发语言获取root权限,然后悬浮窗模式启动,在荣耀游戏里通过悬浮窗开启模拟点击。或者你学蜂窝游戏助手,搞个电脑模拟器全自动的。这样就不用为了玩个荣耀还得配台电脑,再来个usb线连接,然后打开usb调试。还得装adb工具包,配环境,再装python,敲代码。不服来辩?

+18 回复

2

@此用户无昵称 那如果我只懂python呢

jqlts1 · 2017年12月22日
5

本文旨在提供一种思路,这里的核心不在Python,用Shell或者批处理也可以实现。如果硬是写成app之类的外挂估计很容易就被ban了,而且必须要root手机。我尝试过appium的方案,游戏运行一会就会闪退,最简单粗暴的方式最有效。另外电脑安卓模拟器的学习成本其实更高,除非你用农药官方或者第三方的集成方案,但那肯定不提供外部接口。还有微信其实是不允许登录到模拟器的,不信可以去搜一搜,所以一般的模拟器是不能登录农药的,如果你成功了请发文分享,很多人都需要。最后我来勉强来辩你一下,如果你要刷金币,那么你肯定是玩农药的,那么你一定是有手机的(IOS不在本文讨论范围),你有手机那么数据线也是有的,ADB工具集只是一个2M不到的zip包,官方出品无毒无害,刷金过程很费电而且你也干不了啥,实在不想连着线我有提到无线方案。啥?你没电脑还玩农药,那你逛啥码农社区。。。

betacat 作者 · 2017年12月22日
0

@betacat 呵呵哈哈哈66666

周梦康 · 2017年12月22日
昌维 · 2017年12月21日

干脆直接用模拟器,然后按键精灵也是可以的。

+13 回复

10

@昌维 朋友你想的太简单了,腾讯不允许模拟器登录微信更别说农药了。

betacat 作者 · 2017年12月21日
1

是否能刷到金币不重要,关键是这样的操作方式很有意思。

Alex77lee · 2017年12月22日
逍遥子 · 2017年12月22日

666

+10 回复

风云信步 · 2017年12月22日

推荐英雄组合 蔡文姬程咬金和露娜 保证通关

+6 回复

昌维 · 2017年12月21日

这么厉害。。。

+4 回复

长寿之都扬州小严 · 2017年12月22日

大家好。
我参照原作者的思路,
写了一个 批处理文件(.bat) 版本的自动刷金币的王者荣耀脚本。
在Windows电脑上,直接双击就可打开。
不再需要安装 Python 环境了。也很感谢原作者的思路和劳动!

以下是我的博客:《 王者荣耀——bat批处理文件,自动刷金币版(脱胎于30行Python代码刷金币版),Windows双击即可运行!》
http://blog.csdn.net/hanshou1...

+3 回复

5

哈哈哈哈,你们都会玩。。。

周梦康 · 2017年12月22日
xingqiwu · 2017年12月23日

哈哈哈哈哈

+3 回复

Songlairui · 2017年12月22日

我也写了个自动打游戏的工具。使用nodejs写的,另一个简单的游戏 极速变色龙。(只能android用)
不过用了很多行。
https://youtu.be/7YSpqiYZJ0w

+2 回复

0

屏幕输出与点击事件的触发用的别人写的C扩展,不需要root。但是手机需要设置允许被控制。

Songlairui · 2017年12月22日
1

使用adb控制手机延迟很高的,不知道你说的这个扩展效果怎么样。

betacat 作者 · 2017年12月22日
1

执行一下adb shell sendevent,是有一个adb过程,然后执行手机里sendevent,会有延迟。input会更慢。 https://github.com/openstf/mi... 这一个repo 编译出来,手机会开启一个socket监听,按照格式输入,就能发送点击事件。没有建立adb和调用android内建事件方法的消耗,控制过程几乎没延迟。我做的自动点变色龙的过程,两次点击(可以有多点触摸)最小间隔2ms。当然精度到不了这么大。20ms还是可以区分出来的。

Songlairui · 2017年12月22日
周梦康 · 2017年12月22日

这是我见过交流最多的一篇帖子,大家能聪明的玩游戏,真是厉害了。佩服,而且还有人衍生出新版本代码,6得飞起。

+2 回复

孙泽洋 · 2017年12月22日

用Tasker写规则也可以这样。手机软件

+1 回复

舞林 · 2017年12月22日

6哇,同理还可以抢红包了

+1 回复

1

这个原理抢红包你得连上电脑,老铁。抢红包目前知道的是用accessibilityService,不过adb命令内像获取手机界面元素的一些原理最终也是回归到了这个类里。

jackbai233 · 2017年12月22日
慕辰先生 · 2017年12月22日

哈哈,没想到大家对这个帖子还有点关注,那大家就继续辩吧。王者荣耀还有一种登录方式叫输入账号和密码,不需要登录微信吧,用账号就行了。我舅舅一直用的模拟器玩的荣耀,而我一两个月前还用QQ账号在模拟器登录玩过,难道腾讯更新和谐得这么快吗?原谅我已经卸了荣耀,打上钻石之后就上不去了,一直上不去下不来。
如果只会python的话,这种方法写脚本是可行的,我说这是假脚本是因为这根本不是从控件层进行点击操作的,一旦网络不好,或者手机卡顿了会,脚本很容易出错。而从控件上模拟点击的话,你可以增加一些断言,再点击,使得你确实点击到了控件,再执行下一步断言,再点击。
而的确java脚本在手机上模拟点击要root才行。但是模拟器不需要,模拟器是有root权限的,而蜂窝助手谁用过谁知道。PS:我不是给它做广告。
从技术上来说,python不适合做安卓的开发,因为交叉编译这一步就比较难,很多第三方库移植的难度很大。但是python用来作为中间件,调用外部工具,如appium之类还是很方便的。

+1 回复

2

的确,为了稳定程序是需要断言的,不过回到主题,这是一个不算外挂的外挂,模拟的是真实用户的正常行为,我有断言版本的半成品,不过代码就远远不止30行,需要opencv等等依赖,你知道有多少坑。

除了农药官网的PC模拟器,第三方模拟器都是有利益目的的,你说的蜂窝助手在google结果显示是高危网站。开发或者测试用的正规模拟器在这都不适用,反正我尝试了多种方法没成功。

说到编程语言你说的没错,Python不适合安卓开发,不过用于快速完成简单任务,无出其二。PS,这是Python专栏,没毛病。

betacat 作者 · 2017年12月22日
0

其实简单的断言不一定非要到对控件的操控才能达到,我之前也做过这种类似的假脚本。模拟点击之前做一下界面的判断,也就是假断言。就是dump一下界面的xml布局文件,然后解析一下,找到关键的控件文本信息,然后做一下假断言,一样可以轻便地实现等同于断言的功能。

慕辰先生 · 2017年12月22日
艾尼菲楠 · 2017年12月22日

你成功骗我进来,然后

+1 回复

风云信步 · 2017年12月22日

早就用这个办法了,我没写博客就是怕写出来会被封,被你写出来了。。。

+1 回复

kumfo · 2017年12月22日

卧槽,我回去搞一个

+1 回复

Abyss · 2017年12月22日

666啊 大兄弟。

回复

周梦康 · 2017年12月22日

666 我前来膜拜,会不会被封号呢?

回复

liut · 2017年12月27日

阴阳师肝魂十同理,不过最好加个随机的延时,不然很有可能封号!
不过最好的方式还是 原生app+模拟器(推荐网易mumu模拟器)+root权限,可无人值守刷金币(御魂),而且操作简单,最重要的是释放了手机,可以用做其它事情。

回复

审问明辨笃行 · 2017年12月28日

注意MIUI要在开发者选项里打开“USB调试(安全设置)允许通过USB调试修改权限或模拟点击”,否则会被killed~

回复

娶白骨精的唐僧 · 2018年01月16日

感谢大神分享,学习了!

回复

载入中...