├── .gitignore ├── 中路位置.png ├── 中路线路.png ├── 人机.png ├── 健康系统.png ├── 关闭广告.png ├── 分路重复.png ├── 刘禅.png ├── 取消按钮.png ├── 夏侯惇.png ├── 对战.png ├── 对战中.png ├── 开始练习.png ├── 快速模式.png ├── 星耀难度.png ├── 更新公告.png ├── 更新完成.png ├── 确定1.png ├── 确定2.png ├── 确定3.png ├── 确定6.png ├── 确认5.png ├── 米莱狄.png ├── 继续.png ├── 软件更新.png ├── 辅助线路.png ├── 返回.png ├── 返回大厅.png ├── 邀请成功.png ├── 邀请按钮.png ├── 静音按钮.png ├── 项羽.png ├── 倔强青铜难度.png ├── 健康系统1.png ├── 关闭更新公告.png ├── 实战模拟邀请.png ├── 对抗路位置.png ├── 对抗路线路.png ├── 对方组队中.png ├── 开始匹配按钮.png ├── 开始游戏按钮.png ├── 微信邀请按钮.png ├── 显示全部英雄.png ├── 更新完成确认.png ├── 点击屏幕继续.png ├── 选英雄页面.png ├── 5v5王者峡谷.png ├── 主英雄切换线路按钮.png ├── 分路重复取消按钮.png ├── 实战模拟邀请确认.png ├── 已被健康系统禁止.png ├── 是否在微信邀请.png ├── 邀请组队中的队友.png ├── 组队中的队友邀请按钮.png ├── 辅助英雄切换线路按钮.png ├── docs ├── image-20230419162834907.png ├── image-20230419163040547.png ├── image-20230419165327595.png └── README.md ├── __pycache__ └── wzry_tools.cpython-311.pyc ├── LICENSE └── 王者荣耀熟练度.py /.gitignore: -------------------------------------------------------------------------------- 1 | *_副本* -------------------------------------------------------------------------------- /中路位置.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/中路位置.png -------------------------------------------------------------------------------- /中路线路.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/中路线路.png -------------------------------------------------------------------------------- /人机.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/人机.png -------------------------------------------------------------------------------- /健康系统.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/健康系统.png -------------------------------------------------------------------------------- /关闭广告.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/关闭广告.png -------------------------------------------------------------------------------- /分路重复.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/分路重复.png -------------------------------------------------------------------------------- /刘禅.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/刘禅.png -------------------------------------------------------------------------------- /取消按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/取消按钮.png -------------------------------------------------------------------------------- /夏侯惇.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/夏侯惇.png -------------------------------------------------------------------------------- /对战.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/对战.png -------------------------------------------------------------------------------- /对战中.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/对战中.png -------------------------------------------------------------------------------- /开始练习.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/开始练习.png -------------------------------------------------------------------------------- /快速模式.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/快速模式.png -------------------------------------------------------------------------------- /星耀难度.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/星耀难度.png -------------------------------------------------------------------------------- /更新公告.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/更新公告.png -------------------------------------------------------------------------------- /更新完成.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/更新完成.png -------------------------------------------------------------------------------- /确定1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/确定1.png -------------------------------------------------------------------------------- /确定2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/确定2.png -------------------------------------------------------------------------------- /确定3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/确定3.png -------------------------------------------------------------------------------- /确定6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/确定6.png -------------------------------------------------------------------------------- /确认5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/确认5.png -------------------------------------------------------------------------------- /米莱狄.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/米莱狄.png -------------------------------------------------------------------------------- /继续.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/继续.png -------------------------------------------------------------------------------- /软件更新.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/软件更新.png -------------------------------------------------------------------------------- /辅助线路.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/辅助线路.png -------------------------------------------------------------------------------- /返回.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/返回.png -------------------------------------------------------------------------------- /返回大厅.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/返回大厅.png -------------------------------------------------------------------------------- /邀请成功.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/邀请成功.png -------------------------------------------------------------------------------- /邀请按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/邀请按钮.png -------------------------------------------------------------------------------- /静音按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/静音按钮.png -------------------------------------------------------------------------------- /项羽.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/项羽.png -------------------------------------------------------------------------------- /倔强青铜难度.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/倔强青铜难度.png -------------------------------------------------------------------------------- /健康系统1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/健康系统1.png -------------------------------------------------------------------------------- /关闭更新公告.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/关闭更新公告.png -------------------------------------------------------------------------------- /实战模拟邀请.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/实战模拟邀请.png -------------------------------------------------------------------------------- /对抗路位置.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/对抗路位置.png -------------------------------------------------------------------------------- /对抗路线路.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/对抗路线路.png -------------------------------------------------------------------------------- /对方组队中.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/对方组队中.png -------------------------------------------------------------------------------- /开始匹配按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/开始匹配按钮.png -------------------------------------------------------------------------------- /开始游戏按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/开始游戏按钮.png -------------------------------------------------------------------------------- /微信邀请按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/微信邀请按钮.png -------------------------------------------------------------------------------- /显示全部英雄.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/显示全部英雄.png -------------------------------------------------------------------------------- /更新完成确认.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/更新完成确认.png -------------------------------------------------------------------------------- /点击屏幕继续.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/点击屏幕继续.png -------------------------------------------------------------------------------- /选英雄页面.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/选英雄页面.png -------------------------------------------------------------------------------- /5v5王者峡谷.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/5v5王者峡谷.png -------------------------------------------------------------------------------- /主英雄切换线路按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/主英雄切换线路按钮.png -------------------------------------------------------------------------------- /分路重复取消按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/分路重复取消按钮.png -------------------------------------------------------------------------------- /实战模拟邀请确认.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/实战模拟邀请确认.png -------------------------------------------------------------------------------- /已被健康系统禁止.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/已被健康系统禁止.png -------------------------------------------------------------------------------- /是否在微信邀请.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/是否在微信邀请.png -------------------------------------------------------------------------------- /邀请组队中的队友.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/邀请组队中的队友.png -------------------------------------------------------------------------------- /组队中的队友邀请按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/组队中的队友邀请按钮.png -------------------------------------------------------------------------------- /辅助英雄切换线路按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/辅助英雄切换线路按钮.png -------------------------------------------------------------------------------- /docs/image-20230419162834907.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/docs/image-20230419162834907.png -------------------------------------------------------------------------------- /docs/image-20230419163040547.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/docs/image-20230419163040547.png -------------------------------------------------------------------------------- /docs/image-20230419165327595.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/docs/image-20230419165327595.png -------------------------------------------------------------------------------- /__pycache__/wzry_tools.cpython-311.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XRSec/WZRY_AirtestIDE/HEAD/__pycache__/wzry_tools.cpython-311.pyc -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # 王者熟练度工具使用方法 2 | 3 | ## 安装初始化 4 | 5 | 1. 打开网页 https://airtest.netease.com/ 下载安装 6 | 2. 打开软件 软件最上面有一个 Options 点击 出现 `Language` 选择 `简体中文` 7 | 3. 打开软件 软件最上面有一个 `文件` 点击 `打开脚本` 8 | 9 | ## 连接手机 10 | 11 | 请使用 哔哩哔哩 搜索你的手机型号开启ADB 12 | 13 | 例如: vivo 开启 ADB 14 | 15 | 打开 `手机设置` -> `WiFi` -> 查看 WiFi IP地址信息,记住IP 16 | 17 | 这里输入你的IP和端口号,点击连接 18 | 19 | ![image-20230419162834907](image-20230419162834907.png) 20 | 21 | 这是连接成功的图片 22 | 23 | ![image-20230419163040547](image-20230419163040547.png) 24 | 25 | 打开王者,进入 `对战` -> `5v5 王者峡谷` -> `人机` -> `开始练习` 组队页面可以修改 想玩的线路 26 | 27 | ## 修改 28 | 29 | 英雄: 夏侯惇 30 | 31 | 线路: 对抗路 32 | 33 | 首先打开软件 找到 自定义信息 34 | 35 | 找到 参战英雄线路位置 36 | 37 | 换行输入:`想玩参战英雄线路 = ` 然后按一下 `touch` 再鼠标按住 选中 对抗路 38 | 39 | 接着把 `touch(` 删除 还有后面那个 `)` 也删除 40 | 41 | 其他的同理 42 | 43 | ![image-20230419165327595](image-20230419165327595.png) 44 | 45 | ## TIPS 46 | 47 | 同时启动 主账号和辅助账号 命令行启动 48 | 49 | ```bash 50 | python3 王者荣耀熟练度.py 51 | ``` 52 | 53 | 只有 `王者荣耀熟练度.py` 能在 `AirtestIDE` 中运行,其他文件会提示找不到库 54 | 55 | 王者荣耀 `动图` 太多,还需要多调试才能更完美 56 | 57 | iOS-Tagent 安装很简单,最关键的就是 [参考文案](https://www.cnblogs.com/kaibindirver/p/16600353.html) -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 星冉 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /王者荣耀熟练度.py: -------------------------------------------------------------------------------- 1 | # -*- encoding=utf8 -*- 2 | __author__ = "xr" 3 | 4 | import logging 5 | import signal 6 | import sys 7 | import traceback 8 | from multiprocessing import Process 9 | from airtest.core.api import * 10 | from airtest.core.settings import Settings as ST 11 | import atexit 12 | 13 | ST.OPDELAY = 1 14 | auto_setup(__file__) 15 | logger = logging.getLogger("airtest") 16 | logger.setLevel(logging.WARNING) 17 | global 辅助 18 | # 版本检测 信号处理 19 | if sys.version < '3': 20 | print("请使用 Python3 运行此脚本") 21 | 22 | try: 23 | import airtest.core.api # XXX 要验证是否安装的库名 24 | except ImportError: 25 | print("模块不存在, 尝试安装") 26 | import pip 27 | 28 | try: 29 | pip.main(['install', 'airtest', '-i', 'https://pypi.tuna.tsinghua.edu.cn/simple']) 30 | except: 31 | print("安装失败") 32 | exit(1) 33 | ''' 34 | 小技巧: 35 | 在人机试炼选英雄界面,显示全部英雄,选择你想用的英雄线路页面,别点击英雄, 截图, 王者放后台,打开相册 36 | ''' 37 | # --------------------- 自定义信息 ---------------------> 38 | 设备类型 = "iOS" # 设备类型?(Android/Windows/iOS) 39 | 设备IP地址 = "192.168.2.22" # 设备IP地址:端口号 默认: (IOS: IP地址:8100 Android: IP地址:5555) 40 | 次数 = 20 # 对战次数设置 一次大概27点经验 41 | 42 | 想玩位置 = Template(r"对抗路位置.png", record_pos=(-0.288, -0.053), resolution=(2266, 1488)) # `对战` -> `5v5 王者峡谷` -> `人机` -> `开始练习` 组队页面修改想玩的位置 43 | 参战英雄 = Template(r"项羽.png", record_pos=(0.108, -0.244), resolution=(2266, 1488)) # `对战` -> `5v5 王者峡谷` -> `人机` -> `开始练习` -> `开始匹配` -> `英雄页面选择你想用的英雄` 44 | # 参战英雄 = Template(r"夏侯惇.png", record_pos=(-0.265, -0.134), resolution=(2266, 1488)) # `对战` -> `5v5 王者峡谷` -> `人机` -> `开始练习` -> `开始匹配` -> `英雄页面选择你想用的英雄` 45 | 46 | 47 | 参战英雄线路 = Template(r"对抗路线路.png", record_pos=(-0.315, -0.306), resolution=(2266, 1488)) # `对战` -> `5v5 王者峡谷` -> `人机` -> `开始练习` -> `开始匹配` -> `英雄页面选择你想用的英雄的线路` 48 | 备战英雄 = Template(r"米莱狄.png", record_pos=(-0.452, -0.133), resolution=(2266, 1488)) # `对战` -> `5v5 王者峡谷` -> `人机` -> `开始练习` -> `开始匹配` -> `英雄页面选择你想用的备选英雄` 49 | 备战英雄线路 = Template(r"中路线路.png", record_pos=(-0.07, -0.305), resolution=(2266, 1488)) # `对战` -> `5v5 王者峡谷` -> `人机` -> `开始练习` -> `开始匹配` -> `英雄页面选择你想用的备选英雄的线路` 50 | 51 | # <--------------------- 辅助 ---------------------> 52 | 辅助 = False 53 | 54 | 辅助设备类型 = "Android" # 设备类型?(Android/Windows/iOS) 55 | 辅助设备IP地址 = "127.0.0.1" # 设备IP地址:端口号 默认: (IOS: IP地址:8100 Android: IP地址:5555) 56 | 辅助次数 = 20 # 对战次数设置 一次大概27点经验 57 | 58 | 辅助想玩位置 = Template(r"中路位置.png", record_pos=(-0.429, -0.009), resolution=(2266, 1488)) # `对战` -> `5v5 王者峡谷` -> `人机` -> `开始练习` 组队页面修改想玩的位置 59 | 辅助参战英雄 = Template(r"米莱狄.png", record_pos=(-0.452, -0.133), resolution=(2266, 1488)) # `对战` -> `5v5 王者峡谷` -> `人机` -> `开始练习` -> `开始匹配` -> `英雄页面选择你想用的英雄` 60 | 辅助参战英雄线路 = Template(r"中路线路.png", record_pos=(-0.07, -0.305), resolution=(2266, 1488)) # `对战` -> `5v5 王者峡谷` -> `人机` -> `开始练习` -> `开始匹配` -> `英雄页面选择你想用的英雄的线路` 61 | 辅助备战英雄 = Template(r"刘禅.png", record_pos=(-0.454, -0.126), resolution=(2266, 1488)) # `对战` -> `5v5 王者峡谷` -> `人机` -> `开始练习` -> `开始匹配` -> `英雄页面选择你想用的备选英雄` 62 | 辅助备战英雄线路 = Template(r"辅助线路.png", record_pos=(0.177, -0.306), resolution=(2266, 1488)) # `对战` -> `5v5 王者峡谷` -> `人机` -> `开始练习` -> `开始匹配` -> `英雄页面选择你想用的备选英雄的线路` 63 | 64 | 65 | # <--------------------- 自定义信息 --------------------- 66 | 67 | 68 | def 异常处理(): 69 | logger.warning("进入异常处理") 70 | 71 | if 大厅中(): 72 | return 73 | if 对战中(): 74 | 游戏结束() 75 | # 健康系统 76 | 健康系统() 77 | # 广告直播 78 | for i in range(5): 79 | if exists(Template(r"关闭广告.png", record_pos=(0.429, -0.205), resolution=(2266, 1488))): 80 | logger.warning("第 {} 次关闭广告".format(i + 1)) 81 | touch(Template(r"关闭广告.png", record_pos=(0.431, -0.203), resolution=(2266, 1488))) 82 | else: 83 | break 84 | # 点击屏幕继续 85 | if exists(Template(r"点击屏幕继续.png", record_pos=(0.002, 0.287), resolution=(2266, 1488))): 86 | logger.warning("点击屏幕继续") 87 | touch(Template(r"点击屏幕继续.png", record_pos=(0.002, 0.287), resolution=(2266, 1488))) 88 | 89 | 90 | def 邀请辅助(): 91 | if 辅助: 92 | for i in range(10): 93 | logger.warning("第 %s 次 等待邀请通过" % (i + 1)) 94 | 95 | if exists(Template(r"邀请成功.png", record_pos=(-0.245, -0.072), resolution=(2266, 1488))): 96 | logger.warning("邀请成功") 97 | sleep(5) 98 | return 99 | if exists(Template(r"邀请按钮.png", threshold=0.9, record_pos=(0.463, -0.195), resolution=(2266, 1488))): 100 | logger.warning("邀请米莱狄") 101 | touch(Template(r"邀请按钮.png", record_pos=(0.463, -0.195), resolution=(2266, 1488))) 102 | continue 103 | 104 | if exists(Template(r"微信邀请按钮.png", threshold=0.9, record_pos=(0.462, -0.195), resolution=(2266, 1488))): 105 | logger.warning("对方未上线") 106 | 107 | if exists(Template(r"对方组队中.png", record_pos=(0.462, -0.195), resolution=(2266, 1488))): 108 | touch(Template(r"对方组队中.png", record_pos=(0.462, -0.195), resolution=(2266, 1488))) 109 | if wait(Template(r"邀请组队中的队友.png", record_pos=(0.348, -0.206), resolution=(2266, 1488))): 110 | logger.warning("邀请组队中的队友") 111 | touch(Template(r"组队中的队友邀请按钮.png", record_pos=(0.364, -0.221), resolution=(2266, 1488))) 112 | sleep(5) 113 | continue 114 | 115 | if exists(Template(r"已被健康系统禁止.png", record_pos=(-0.014, -0.025), resolution=(2266, 1488))): 116 | logger.warning("对方已禁赛") 117 | touch(Template(r"确定3.png", record_pos=(0.097, 0.117), resolution=(2266, 1488))) 118 | return 119 | if exists(Template(r"是否在微信邀请.png", record_pos=(-0.077, -0.015), resolution=(2266, 1488))): 120 | logger.warning("对方未上线") 121 | # touch(Template(r"取消按钮.png", record_pos=(-0.098, 0.117), resolution=(2266, 1488))) 122 | sleep(5) 123 | 124 | 125 | def 启动游戏(): 126 | # 开始人机对局 127 | if 英雄属性["type"]: 128 | btn_pos = wait(Template(r"对战.png", record_pos=(-0.1, 0.188), resolution=(2266, 1488)), intervalfunc=异常处理) 129 | try: 130 | if btn_pos: 131 | touch(btn_pos) 132 | logger.warning("选择对战") 133 | except: 134 | logger.error("选择对战失败") 135 | 136 | # 5v5 137 | btn_pos = wait(Template(r"5v5王者峡谷.png", record_pos=(-0.397, 0.1), resolution=(2266, 1488)), intervalfunc=异常处理) 138 | try: 139 | if btn_pos: 140 | touch(btn_pos) 141 | logger.warning("选择 5v5王者峡谷") 142 | except: 143 | logger.error("选择 5v5王者峡谷 失败") 144 | 145 | # 人机 146 | btn_pos = wait(Template(r"人机.png", record_pos=(0.067, 0.096), resolution=(2266, 1488)), intervalfunc=异常处理) 147 | try: 148 | if btn_pos: 149 | touch(btn_pos) 150 | logger.warning("选择 人机") 151 | except: 152 | logger.error("选择 人机 失败") 153 | 154 | # 快速模式 155 | btn_pos = wait(Template(r"快速模式.png", record_pos=(-0.353, -0.026), resolution=(2266, 1488)), intervalfunc=异常处理) 156 | try: 157 | if btn_pos: 158 | touch(btn_pos) 159 | logger.warning("选择 快速模式") 160 | except: 161 | logger.error("选择 快速模式 失败") 162 | 163 | # 选择难度 164 | if exists(Template(r"星耀难度.png", record_pos=(-0.024, 0.116), resolution=(2266, 1488))): 165 | logger.warning("选择 星耀难度") 166 | touch(Template(r"星耀难度.png", record_pos=(-0.024, 0.116), resolution=(2266, 1488))) 167 | 168 | # 开始练习 169 | btn_pos = Template(r"开始练习.png", threshold=0.95, record_pos=(0.324, 0.163), resolution=(2266, 1488)) 170 | if exists(btn_pos): 171 | logger.warning("开始练习") 172 | touch(btn_pos) 173 | sleep(2) 174 | if exists(btn_pos): 175 | logger.warning("次数用完") 176 | os.kill(os.getpid(), signal.SIGINT) # 退出程序 177 | if exists(Template(r"倔强青铜难度.png", record_pos=(-0.03, -0.149), resolution=(2266, 1488))): 178 | logger.warning("选择 青铜难度") 179 | touch(Template(r"倔强青铜难度.png", record_pos=(-0.03, -0.149), resolution=(2266, 1488))) 180 | touch(btn_pos) 181 | 182 | # 选择路线 183 | btn_pos = wait(Template(r"主英雄切换线路按钮.png", record_pos=(-0.392, -0.09), resolution=(2266, 1488)), intervalfunc=异常处理) 184 | try: 185 | if btn_pos: 186 | touch(Template(r"主英雄切换线路按钮.png", record_pos=(-0.392, -0.09), resolution=(2266, 1488))) 187 | if exists(英雄属性["想玩位置"]): 188 | logger.warning("选择 想玩的位置") 189 | touch(英雄属性["想玩位置"]) 190 | except: 191 | logger.error("选择 想玩的位置 失败") 192 | 193 | 邀请辅助() 194 | # 开始匹配 195 | while True: 196 | if exists(Template(r"开始匹配按钮.png", record_pos=(0.096, 0.281), resolution=(2266, 1488))): 197 | logger.warning("开始匹配") 198 | touch(Template(r"开始匹配按钮.png", record_pos=(0.096, 0.281), resolution=(2266, 1488))) 199 | if exists(Template(r"确认5.png", record_pos=(-0.004, 0.148), resolution=(2266, 1488))): 200 | break 201 | while True: 202 | # 确认匹配 203 | if exists(Template(r"确认5.png", record_pos=(-0.004, 0.148), resolution=(2266, 1488))): 204 | logger.warning("确认匹配") 205 | touch(Template(r"确认5.png", record_pos=(-0.004, 0.148), resolution=(2266, 1488))) 206 | break 207 | 208 | while True: 209 | if exists(Template(r"选英雄页面.png", record_pos=(-0.41, -0.305), resolution=(2266, 1488))): 210 | logger.warning("已确认匹配") 211 | break 212 | 213 | # 显示所有英雄 214 | if exists(Template(r"显示全部英雄.png", record_pos=(-0.291, -0.021), resolution=(2266, 1488))): 215 | logger.warning("选择 显示所有英雄") 216 | touch(Template(r"显示全部英雄.png", record_pos=(-0.291, -0.021), resolution=(2266, 1488))) 217 | else: 218 | logger.error("未找到 显示所有英雄") 219 | 220 | # 选择分路 221 | if exists(英雄属性["参战英雄线路"]): 222 | logger.warning("选择 英雄线路 {}".format(英雄属性["参战英雄线路"].filename.split(".")[0])) 223 | touch(英雄属性["参战英雄线路"]) 224 | else: 225 | logger.error("未找到 英雄线路") 226 | 227 | # 选择英雄 228 | if exists(英雄属性["参战英雄"]): 229 | logger.warning("选择 英雄 {}".format(英雄属性["参战英雄"].filename.split(".")[0])) 230 | touch(英雄属性["参战英雄"]) 231 | if exists(Template(r"分路重复.png", record_pos=(-0.001, -0.157), resolution=(2266, 1488))): 232 | logger.warning("分路冲突,切换英雄") 233 | touch(Template(r"分路重复取消按钮.png", record_pos=(-0.095, 0.19), resolution=(2266, 1488))) 234 | if exists(Template(r"显示全部英雄.png", record_pos=(-0.291, -0.021), resolution=(2266, 1488))): 235 | logger.warning("选择 英雄类型") 236 | touch(Template(r"显示全部英雄.png", record_pos=(-0.291, -0.021), resolution=(2266, 1488))) 237 | if exists(英雄属性["备战英雄线路"]): 238 | logger.warning("选择 备战英雄线路 {}".format(英雄属性["备战英雄线路"].filename.split(".")[0])) 239 | touch(英雄属性["备战英雄线路"]) 240 | 241 | if exists(英雄属性["备战英雄"]): 242 | logger.warning("选择 备战英雄 {}".format(英雄属性["备战英雄"].filename.split(".")[0])) 243 | touch(英雄属性["备战英雄"]) 244 | else: 245 | logger.error("未找到 英雄") 246 | 247 | sleep(15) 248 | 游戏结束() 249 | else: 250 | # 等待邀请 251 | 异常处理() 252 | logger.warning("等待邀请") 253 | global nums 254 | nums = 0 255 | 256 | while True: 257 | nums += 1 258 | logger.warning("第 %s 次 等待邀请" % nums) 259 | if exists(Template(r"实战模拟邀请.png", record_pos=(-0.083, 0.018), resolution=(2266, 1488))): 260 | logger.warning("接受邀请") 261 | touch(Template(r"实战模拟邀请确认.png", record_pos=(0.158, 0.09), resolution=(2266, 1488))) 262 | break 263 | 健康系统() 264 | if nums > 100: 265 | logger.warning("没人邀请, 退出") 266 | stop_app(设备信息["王者应用ID"]) 267 | process_list[1].terminate() 268 | 269 | # 选择路线 270 | if exists(Template(r"辅助英雄切换线路按钮.png", record_pos=(-0.255, -0.092), resolution=(2266, 1488))): 271 | touch(Template(r"辅助英雄切换线路按钮.png", record_pos=(-0.255, -0.092), resolution=(2266, 1488))) 272 | if exists(英雄属性["想玩位置"]): 273 | logger.warning("选择 想玩的位置") 274 | touch(英雄属性["想玩位置"]) 275 | 276 | while True: 277 | # 确认匹配 278 | if exists(Template(r"确认5.png", record_pos=(-0.004, 0.148), resolution=(2266, 1488))): 279 | logger.warning("确认匹配") 280 | touch(Template(r"确认5.png", record_pos=(-0.004, 0.148), resolution=(2266, 1488))) 281 | break 282 | 283 | while True: 284 | if exists(Template(r"选英雄页面.png", record_pos=(-0.41, -0.305), resolution=(2266, 1488))): 285 | logger.warning("已确认匹配") 286 | break 287 | 288 | # 显示所有英雄 289 | if exists(Template(r"显示全部英雄.png", record_pos=(-0.291, -0.021), resolution=(2266, 1488))): 290 | logger.warning("选择 显示所有英雄") 291 | touch(Template(r"显示全部英雄.png", record_pos=(-0.291, -0.021), resolution=(2266, 1488))) 292 | else: 293 | logger.error("未找到 显示所有英雄") 294 | 295 | # 选择英雄线路 296 | if exists(英雄属性["参战英雄线路"]): 297 | logger.warning("选择 英雄线路 {}".format(英雄属性["参战英雄线路"].filename.split(".")[0])) 298 | touch(英雄属性["参战英雄线路"]) 299 | else: 300 | logger.error("未找到 英雄线路") 301 | 302 | # 选择英雄 303 | if exists(英雄属性["参战英雄"]): 304 | logger.warning("选择 英雄 {}".format(英雄属性["参战英雄"].filename.split(".")[0])) 305 | touch(英雄属性["参战英雄"]) 306 | if exists(Template(r"分路重复.png", record_pos=(-0.001, -0.157), resolution=(2266, 1488))): 307 | logger.warning("分路冲突,切换英雄") 308 | touch(Template(r"分路重复取消按钮.png", record_pos=(-0.095, 0.19), resolution=(2266, 1488))) 309 | if exists(Template(r"显示全部英雄.png", record_pos=(-0.291, -0.021), resolution=(2266, 1488))): 310 | logger.warning("选择 英雄类型") 311 | touch(Template(r"显示全部英雄.png", record_pos=(-0.291, -0.021), resolution=(2266, 1488))) 312 | if exists(英雄属性["备战英雄线路"]): 313 | logger.warning("选择 备战英雄线路 {}".format(英雄属性["备战英雄线路"].filename.split(".")[0])) 314 | touch(英雄属性["备战英雄线路"]) 315 | 316 | if exists(英雄属性["备战英雄"]): 317 | logger.warning("选择 备战英雄 {}".format(英雄属性["备战英雄"].filename.split(".")[0])) 318 | touch(英雄属性["备战英雄"]) 319 | else: 320 | logger.error("未找到 英雄") 321 | 322 | sleep(15) 323 | 游戏结束() 324 | 325 | 326 | def 启动王者荣耀(): 327 | logger.warning("连接设备") 328 | if device: 329 | logger.warning("设备连接成功") 330 | else: 331 | logger.warning("设备连接失败") 332 | return 333 | logger.warning("启动 王者荣耀") 334 | 异常处理() 335 | if 大厅中() or 对战中(): 336 | return 337 | for i in range(10): 338 | if exists(Template(r"返回.png", record_pos=(-0.444, -0.299), resolution=(2266, 1488))): 339 | logger.warning("返回") 340 | touch(Template(r"返回.png", record_pos=(-0.444, -0.299), resolution=(2266, 1488))) 341 | else: 342 | break 343 | start_app(设备信息["王者应用ID"]) 344 | if exists(Template(r"软件更新.png", threshold=0.8, record_pos=(-0.365, 0.293), resolution=(2266, 1488))): 345 | logger.warning("软件更新") 346 | sleep(600) 347 | if exists(Template(r"更新完成.png", record_pos=(-0.162, -0.017), resolution=(2266, 1488))): 348 | touch(Template(r"更新完成确认.png", record_pos=(-0.003, 0.115), resolution=(2266, 1488))) 349 | start_app(设备信息["王者应用ID"]) 350 | 351 | if exists(Template(r"更新公告.png", record_pos=(0.087, -0.202), resolution=(2266, 1488))): 352 | logger.warning("关闭更新公告") 353 | touch(Template(r"关闭更新公告.png", record_pos=(0.353, -0.205), resolution=(2266, 1488))) 354 | 355 | sleep(20) 356 | 357 | btn_pos = wait(Template(r"静音按钮.png", record_pos=(0.456, -0.101), resolution=(2266, 1488)), intervalfunc=异常处理) 358 | try: 359 | if btn_pos: 360 | touch(btn_pos) 361 | logger.warning("静音") 362 | except: 363 | logger.warning("静音失败") 364 | btn_pos = wait(Template(r"开始游戏按钮.png", threshold=0.9, record_pos=(-0.003, 0.16), resolution=(2266, 1488)), interval=4, intervalfunc=异常处理) 365 | try: 366 | if btn_pos: 367 | touch(btn_pos, times=2) 368 | logger.warning("登录") 369 | except: 370 | logger.warning("登录失败") 371 | 372 | 373 | def 大厅中(): 374 | if exists(Template(r"对战.png", threshold=0.9, record_pos=(-0.1, 0.188), resolution=(2266, 1488))): 375 | logger.warning("正在大厅中") 376 | return True 377 | 378 | 379 | def 对战中(): 380 | if exists(Template(r"对战中.png", record_pos=(0.422, 0.245), resolution=(2266, 1488))): 381 | logger.warning("正在对战中") 382 | return True 383 | 384 | 385 | def 健康系统(): 386 | if exists(Template(r"健康系统.png", record_pos=(0.119, -0.099), resolution=(2266, 1488))): 387 | logger.warning("您已禁赛") 388 | touch(Template(r"确定1.png", record_pos=(0.201, 0.079), resolution=(2266, 1488))) 389 | stop_app(设备信息["王者应用ID"]) 390 | # start_app(设备信息["王者应用ID"]) 391 | sleep(900) 392 | 启动王者荣耀() 393 | raise Exception("您已禁赛") 394 | 395 | if exists(Template(r"健康系统1.png", record_pos=(-0.158, -0.028), resolution=(2266, 1488))): 396 | touch(Template(r"确定2.png", record_pos=(0.098, 0.119), resolution=(2266, 1488))) 397 | stop_app(设备信息["王者应用ID"]) 398 | # start_app(设备信息["王者应用ID"]) 399 | sleep(900) 400 | 启动王者荣耀() 401 | raise Exception("您已禁赛") 402 | 403 | 404 | def 游戏结束(): 405 | while True: 406 | # 继续 407 | logger.warning("等待对战结束") 408 | if exists(Template(r"确定6.png", record_pos=(0.102, 0.117), resolution=(2266, 1488))): 409 | logger.warning("确定") 410 | touch(Template(r"确定6.png", record_pos=(0.102, 0.117), resolution=(2266, 1488))) 411 | for _ in range(5): 412 | if exists(Template(r"继续.png", record_pos=(0.0, 0.229), resolution=(2266, 1488))): 413 | logger.warning("继续") 414 | touch(Template(r"继续.png", record_pos=(0.0, 0.229), resolution=(2266, 1488))) 415 | sleep(2) 416 | else: 417 | break 418 | 419 | # 返回大厅 420 | if exists(Template(r"返回大厅.png", record_pos=(-0.083, 0.274), resolution=(2266, 1488))): 421 | logger.warning("返回大厅") 422 | touch(Template(r"返回大厅.png", record_pos=(-0.083, 0.274), resolution=(2266, 1488))) 423 | if exists(Template(r"确定6.png", record_pos=(0.102, 0.117), resolution=(2266, 1488))): 424 | logger.warning("确定") 425 | touch(Template(r"确定6.png", record_pos=(0.102, 0.117), resolution=(2266, 1488))) 426 | break 427 | sleep(15) 428 | 429 | 430 | def handler2(signum, frame): 431 | logger.warning("关闭王者荣耀 {}".format(设备信息["链接"])) 432 | stop_app(设备信息["王者应用ID"]) 433 | 434 | 435 | def handler(signum, frame): 436 | if not 辅助: 437 | os.kill(os.getpid(), signal.SIGUSR1) 438 | else: 439 | for p in process_list: 440 | os.kill(p.pid, signal.SIGUSR1) 441 | sleep(3) 442 | for p in process_list: 443 | p.terminate() 444 | logger.warning("程序退出") 445 | os.kill(os.getpid(), signal.SIGTERM) 446 | 447 | 448 | def 王者子进程(type, 设备类型, 设备IP地址): 449 | global 英雄属性 450 | global 设备信息 451 | global device 452 | global 次数 453 | global 次数2 454 | signal.signal(signal.SIGUSR1, handler2) 455 | if type: 456 | 英雄属性 = { 457 | "type": type, 458 | "想玩位置": 想玩位置, 459 | "参战英雄": 参战英雄, 460 | "参战英雄线路": 参战英雄线路, 461 | "备战英雄": 备战英雄, 462 | "备战英雄线路": 备战英雄线路, 463 | } 464 | else: 465 | 英雄属性 = { 466 | "type": type, 467 | "想玩位置": 辅助想玩位置, 468 | "参战英雄": 辅助参战英雄, 469 | "参战英雄线路": 辅助参战英雄线路, 470 | "备战英雄": 辅助备战英雄, 471 | "备战英雄线路": 辅助备战英雄线路, 472 | } 473 | 设备信息 = { 474 | "链接": format("{}:///{}:{}".format(设备类型, 设备IP地址, 5555)), 475 | "王者应用ID": "com.tencent.tmgp.sgame" 476 | } 477 | if 设备类型 == "iOS": 478 | 设备信息 = { 479 | "链接": format("{}:///{}:{}".format(设备类型, 设备IP地址, 8100)), 480 | "王者应用ID": "com.tencent.smoba" 481 | } 482 | 次数2 = 次数 483 | atexit.register(重启游戏) 484 | 重启游戏() 485 | 486 | 487 | def 重启游戏(): 488 | logger.warning("重启游戏") 489 | global 次数 490 | global 次数2 491 | global device 492 | 493 | if 次数 <= 0: 494 | return 495 | for k in range(次数): 496 | 次数2 -= 1 497 | logger.warning("第 {} 次运行子程序".format(次数 - 次数2)) 498 | device = connect_device(设备信息["链接"]) 499 | logger.warning("设备信息: {}".format(设备信息)) 500 | 启动王者荣耀() 501 | 启动游戏() 502 | 503 | 504 | if len(sys.argv) > 1: 505 | if sys.argv[1] == "-f": 506 | 辅助 = True 507 | logger.warning("辅助英雄 启用") 508 | 509 | if __name__ == '__main__': 510 | signal.signal(signal.SIGINT, handler) 511 | global process_list 512 | process_list = [] 513 | if not 辅助: 514 | 王者子进程(True, 设备类型, 设备IP地址) 515 | # 王者子进程(False, 辅助设备类型, 辅助设备IP地址) 516 | else: 517 | p1 = Process(target=王者子进程, args=(True, 设备类型, 设备IP地址)) 518 | p2 = Process(target=王者子进程, args=(False, 辅助设备类型, 辅助设备IP地址)) 519 | process_list.append(p1) 520 | process_list.append(p2) 521 | p1.start() 522 | p2.start() 523 | logger.warning('主英雄pid: {}'.format(p1.pid)) 524 | logger.warning('辅助英雄pid: {}'.format(p2.pid)) 525 | --------------------------------------------------------------------------------