艾诺迪亚4-AScript脚本讲解

开发花了好久,效果也就一般,比自动点击器好不到哪去。而且太难推广了。关键是OCR和ImageMatch要有高效、通用的模型。现有的框架能力配上本人有限的开发水平,只能做出这样的东西。作为游戏辅助工具来推广的意义完全就是没有,作为自动化入门工程的代码样例还有一点点价值。

适配版本为 艾诺迪亚4 by琉璃姬 盗版大修版: 发布页链接
自动化框架为 AScript (Python): AScript 官网
本脚本开源地址: https://github.com/SevDaisy/inotia4-liuliji-helper

inotia4 by琉璃姬 自动化脚本开源讲解

艾诺迪亚4 by琉璃姬 盗版大修版

详见发布页,非本文重点。
本版本移除了原版的默认强制保存,所以小退+读档的简单SL得以实现。

如何学习 AScript

跟着官方的新手入门教程就好了:新手入门教程

如何使用本自动化脚本

安装依赖环境

  1. 手机安装 AScript.apk, 可从 qq 群文件下载安装
  2. 手机打开 AScript.apk, “运行模式” 选择 “无障碍模式”
  3. 脚本代码在电脑上写。可从qq群文件下载安装 VSCode 和 AScript 插件并安装
  4. 脚本通过 VSCode 内装好的 AScript 插件,传输到手机上,并运行
  5. 传输过一次后以后就可以在手机上直接运行了,除非要调参

调参

本脚本是通过点击固定坐标的。因为不同的手机分辨率不同,所以实际坐标点位也会不一样。
point.sh、rect.sh 中是适配了笔者手机的点位数据。需要自己调整成自己手机的点位数据。

  1. 手机上打开 AScript APK, 注意到首页的 “开发者地址”
  2. 电脑上打开浏览器,输入这个地址http://192.168.31.10:9096/website/src/screen.html?plug=FindImages。其中http://192.168.31.10:9096/换成自己在手机上看到的
  3. 鼠标放到要点的地方,右键,复制坐标,粘贴到 point.sh 中
  4. 鼠标框左键按住,拉出一个框框。框框坐标复制粘贴到 rect.sh 中
  5. 文件管理器中找到右键使用 powershell 运行.ps1,右键菜单,选择使用 powershell 运行
  6. 通过 VSCode 的 AScript 插件,将调好参的工程导入至手机

自动化工程介绍

(.venv) PS D:\playground\AScript\inotia4> tree .\
D:\PLAYGROUND\ASCRIPT\INOTIA4
├─.vscode
├─auto # 无关文件夹,忽略
├─pkg # 存放单独的功能实现,现有 SL强化、SL宝石
├─res
│ ├─img # 程序运行时可以用作参考的截图
│ ├─point # 程序运行时从此处
│ └─rect
└─utils
D:\PLAYGROUND\ASCRIPT\INOTIA4
| .gitignore
| build.as
| main.py # 主程序入口
| README.md
| __init__.py
|
+---pkg # 存放单独的功能实现,现有 SL强化、SL宝石
+---res
| | common.sh
| | hack.bat
| | hack.sh
| | point.sh # 标点坐标写在这里,可以自动生成标点数据,后面程序要读取的
| | rect.sh # 矩形范围写在这里,可以自己生成矩形数据,后面程序要读取的
| | 右键使用 powershell 运行.ps1 # 运行此文件,把上面两个文件里写好的文本变成程序可以读取的数据
| |
| +---img # 程序运行时可以用作参考的截图
| +---point # point.sh 生成的标点数据,也是程序读取标点数据的直接位置
| \---rect # rect.sh 生成的矩形数据,也是程序读取矩形数据的直接位置
|
\---utils
auto.py # 封装了 AScript API
db.py # 处理 point、rect 数据的读取和更新
model.py # 一些自定义数据类
__init__.py

功能介绍

现在就只支持两个功能,SL强化 和 SL 宝石
SL强化:程序重复在背包中完成对装备的强化,并读取强化结果,不是成功 +2 就自动 SL,否则继续强化,直到达到设定好的上限次数为止。
SL宝石:程序逐个浏览背包中的物品,将属性不达标的宝石全部作为原料合成到比目标宝石次一级的品质。自动保存一次,然后开始合成目标品质的宝石,属性达标的话保存,不达标的话自动SL。

SL强化

如何调用

在 main.py 中传递参数并调用即可

from .pkg.SL强化 import SL强化
SL强化(saveIndex=1, packIndex=4, maxRetry=0, maxSuccess=12)
参数名 参数解释
saveIndex SL的时候用第几个存档位
packIndex 强化的时候点开第几个背包
maxRetry 连续失败多少次时停下;设置0即为无限次
maxSuccess 总共强化成功多少次时停下

特殊的,虽然第几个背包可以选,但是本函数是固定将背包格11拖动到背包格12的。
也就是下图中这两个中级宝石的位置。从左边拖动到右边。
image.png

SL宝石

如何调用

在 main.py 中传递参数并调用即可

from .pkg.SL宝石 import SL宝石
from .utils.model import GemLevel, GemFilter, Entry

# print("main OK")

# 规定到什么水平的宝石可以留.
# 我现在比较穷, 顶级宝石基本就留了.
gf = GemFilter([
Entry.from_str("暴击率: 6%"), # 顶7混8.5
Entry.from_str("命中率: 6%"), # 顶7混8.5
Entry.from_str("暴击伤害增加率: 10%"), # 顶12混13.5
Entry.from_str("魔法抵抗率: 3.5%"), # 顶3.4混4
Entry.from_str("MP恢复: 4"), # 顶4混5
])

# SL宝石(gf, saveIndex=1, target=GemLevel.顶级, mode="Only Prepare")
# SL宝石(gf, saveIndex=1, 背包上界=1, target=GemLevel.顶级, mode="FULL")
SL宝石(gf, saveIndex=1, 背包上界=1, target=GemLevel.混沌, mode="FULL")
参数名 参数解释
gf 比这些宝石差的,都会被SL
saveIndex SL的时候用第几个存档位
背包上界 程序从背包第一页开始扫描第{背包上界}页
target 目标宝石的等级要求
mode Only Prepare: 将宝石尽可能都合成为目标宝石的原料
FULL: 在 Only Prepare 的基础上把原料全都合成为目标宝石。品质不达标自动SL