跳转至

循环选择熟练度最低的英雄

说明

若需调整第mynode个账户的对战分路和英雄

  • 则在运行目录,创建WZRY.mynode.运行模式.txt文件
  • mynode替换为你的账户编号
  • 文件为UTF8格式编码, 内容为标准的python语法,不支持超过一行的python语句.

循环选熟练度最低的英雄

提前在选英雄界面设置为熟练度排序,而不是赛季常用等选项

⭐小白看这里

在运行目录,创建WZRY.mynode.运行模式.txt文件, 并填入self.自动选择英雄 = True

如果self.自动选择英雄 = True无法满足你的需求, 可以使用下面的自定义选择英雄选择熟练度最低的原理

自定义选择英雄

  • 图片展示,在运行目录,创建WZRY.mynode.运行模式.txt文件, 并填入下面内容 小白熟练度

《5v5人机匹配》可以选所有英雄, 而其他模式只能选择已经购买的英雄, 此时下面内容中的位置坐标要根据实际情况修改, 例如:位置坐标=[(4,1),(4,1),(4,1),(4,1),(4,1)]

# 选择对战线路和英雄
分路名称=["对抗", "打野","中路","发育","游走"]
线路坐标=[(-0.314, -0.26),  (-0.194, -0.26), (-0.069, -0.26), (0.037, -0.26),  (0.18, -0.26)]
# 对应分路的第(,)的英雄, 不同账户对战模式的英雄数目不一样多, 根据实际情况设置对应分路的最后一个英雄的(列号,行号)
位置坐标=[(6,5),(9,5),(4,4),(9,2),(2,4)]
index=(self.runstep+self.mynode)%len(分路名称)
TimeECHO(f"本次{self.runstep}对战分路: {分路名称[index]}")
#
#主战英雄
pos=位置坐标[index]
参战英雄头像坐标=(-0.552+pos[0]*0.095,-0.292+pos[1]*0.11)
self.Tool.cal_record_pos(参战英雄头像坐标, self.移动端.resolution, "参战英雄头像", savepos=True)
self.Tool.cal_record_pos(线路坐标[index], self.移动端.resolution, "参战英雄线路", savepos=True)
#备战英雄, 因为对抗打野游走之间的英雄会互相冲突, 所以这些位置冲突的时候换成其他路(发育3,中路2)
index=[3,2,3,2,3][index]
pos=位置坐标[index]
参战英雄头像坐标=(-0.552+pos[0]*0.095,-0.292+pos[1]*0.11)
self.Tool.cal_record_pos(参战英雄头像坐标, self.移动端.resolution, "备战英雄头像", savepos=True)
self.Tool.cal_record_pos(线路坐标[index], self.移动端.resolution, "备战英雄线路", savepos=True)

选择熟练度最低的原理

助手通过点击屏幕最后一个英雄的绝对坐标(x,y),来选择熟练度最低的英雄,
优先使用android.var_dict_mynode.yaml中定义的(x,y), 没有则进行重新识别.

  • 在对局前, 将分路和英雄头像的绝对坐标写到android.var_dict_mynode.yaml文件中就可以实现选择熟练度最低的英雄了
  • 当王者因为活动导致战令入口、商店入口、活动入口的位置改变时,
    也可以手动计算修改android.var_dict_mynode.yaml中的绝对坐标(x,y), 就不用更新代码里的图片资源了,

计算绝对坐标的步骤

在选择英雄界面,使用AirtestIDE截取分路的中心位置

airtest截取图片相对坐标

可以得到这样一串代码

touch(Template(r"tpl1730369563802.png", record_pos=(-0.314, -0.26), resolution=(960, 540)))
  • 利用相对坐标record_pos屏幕分辨率resolution计算该分路的绝对坐标
record_pos=(-0.314, -0.26)
resolution=(960, 540)
x = 0.5*resolution[0]+record_pos[0]*resolution[0]
y = 0.5*resolution[1]+record_pos[1]*resolution[0]
pos = (x, y)

这些分路、英雄、各种图标的(x,y)就存储在android.var_dict_mynode.yaml文件中, 例如

参战英雄线路: !!python/tuple
- x
- y

计算英雄相对坐标

  • 对于分辨率960x540,dpi=160的模拟器, 使用 计算绝对坐标的步骤 可以发现:
  • 对角线上的两个英雄之间的相对坐标record_pos差约为(0.095,0.11)
  • 第1列第1行的英雄的record_pos为(-0.457,-0.182)
  • 英雄列表共(9列,5行), 第i列第j行的英雄坐标为(-0.552+i*0.095,-0.292+j*0.11).
  • 把下面的代码填到WZRY.mynode.运行模式.txt, 就可以对局前修改分路坐标和英雄头像坐标
    • 注意下面的位置坐标=[(列,行)]是根据我的模拟器和王者账户算出来的
    • 有可能和你的账户有微小区别, 你可以把(列,行)微调一下, 可以用小数,如(5.9,4.5)
# 选择对战线路和英雄
分路名称=["对抗", "打野","中路","发育","游走"]
线路坐标=[(-0.314, -0.26),  (-0.194, -0.26), (-0.069, -0.26), (0.037, -0.26),  (0.18, -0.26)]
# 对应分路的第(,)的英雄, 不同账户对战模式的英雄数目不一样多, 根据实际情况设置对应分路的最后一个英雄的(列号,行号)
位置坐标=[(6,5),(9,5),(4,4),(9,2),(2,4)]
# 我的小号英雄不够多,所以选择每个分路的第4个英雄
if self.mynode > 0: 位置坐标=[(4,1),(4,1),(4,1),(4,1),(4,1)]
index=(self.runstep+self.mynode)%len(分路名称)
TimeECHO(f"本次{self.runstep}对战分路: {分路名称[index]}")
#
#主战英雄
pos=位置坐标[index]
参战英雄头像坐标=(-0.552+pos[0]*0.095,-0.292+pos[1]*0.11)
self.Tool.cal_record_pos(参战英雄头像坐标, self.移动端.resolution, "参战英雄头像", savepos=True)
self.Tool.cal_record_pos(线路坐标[index], self.移动端.resolution, "参战英雄线路", savepos=True)
#备战英雄, 因为对抗打野游走之间的英雄会互相冲突, 所以这些位置冲突的时候换成其他路(发育3,中路2)
index=[3,2,3,2,3][index]
pos=位置坐标[index]
参战英雄头像坐标=(-0.552+pos[0]*0.095,-0.292+pos[1]*0.11)
self.Tool.cal_record_pos(参战英雄头像坐标, self.移动端.resolution, "备战英雄头像", savepos=True)
self.Tool.cal_record_pos(线路坐标[index], self.移动端.resolution, "备战英雄线路", savepos=True)

刷特定分路、特定的英雄

该功能也可以用于刷特定分路、特定的英雄(此时不能按照熟练度排序). 即直接设置pos参战英雄线路坐标的值. 其他分辨率的设备,请使用AirtestIDE截图获得record_pos后,计算自己的坐标规则.

选择特定分路和英雄

  • 对于分辨率960x540,dpi=160的模拟器,在WZRY.mynode.运行模式.txt文件内填入下面内容,则会选中对抗路和第6列第5行的英雄.
  • 其他的分辨率,阅读上面的循环选熟练度最低的英雄内容, 就知道怎么操作了.
pos=(6,5)
参战英雄头像坐标=(-0.54+pos[0]*0.09,-0.31+pos[1]*0.11)
参战英雄线路坐标=(-0.314, -0.26)
self.Tool.cal_record_pos(参战英雄头像坐标, self.移动端.resolution, "参战英雄头像", savepos=True)
self.Tool.cal_record_pos(参战英雄线路坐标, self.移动端.resolution, "参战英雄线路", savepos=True)