StarRailCopilot/README.md
2020-04-27 22:50:22 +08:00

181 lines
7.3 KiB
Markdown

# AzurLaneAutoScript
Alas, an Azur Lane automation tool with GUI (CN server only).
Alas, 一个带GUI的碧蓝航线脚本 (仅支持国服).
![gui](doc/README.assets/gui.png)
## 功能 Features
- **主线图出击** 暂时仅支持前六章和7-2
- **活动图出击** 支持复刻苍红的回响, C2和D3有单独优化, 支持开荒
- **每日任务** 半小时左右一套做完, 重复运行时会跳过当天做过的
每日任务(不支持潜艇每日). 困难图(暂时仅支持10-4). 演习, 自动SL.
- **活动图每日三倍PT** 半小时左右A1到B3一套做完
- **委托收派** 出击时每20分钟切出去收获, 支持收委托, 收科研, 收任务, 派委托
- **特定模式出击** 7-2三战拣垃圾, 12-4练级. ~~碧蓝航线不就只有两张图吗? 最多再算上12-2和1-1~~ (
- **其他小功能**
心情控制, 计算心情防止红脸或者保持经验加成状态
血量监控, 低血量撤退, 先锋血量平衡
整队换装备
掉落截图记录
自动退役
开荒模式
## 安装 Installation
- Clone 本项目
- 安装依赖, 最好使用虚拟环境
```
pip install -r requirements.txt
```
### 安装模拟器 Install an emulator
| 设备 | Device | 模拟器版本 | 安卓版本 | adb截图 | u2截图 | adb点击 | u2点击 |
| ---------- | ---------- | ---------- | -------- | ------- | ------ | ------- | ------ |
| 逍遥模拟器 | NemuPlayer | 7.1.3 | 5.1.1 | 0.308 | 0.275 | 0.294 | 0.146 |
| 雷电模拟器 | LDPlayer | 3.83 | 5.1.1 | 0.329 | 0.313 | 0.291 | 0.146 |
| 夜神模拟器 | NoxPlayer | 6.6.0.0 | 5.1.1 | 0.339 | 0.313 | 0.505 | 0.141 |
| MuMu模拟器 | MuMuPlayer | 2.3.1.0 | 6.0.1 | 0.368 | 0.701 | 0.358 | 0.148 |
| 一加5 | Oneplus5 | | 7.1.1 | 1.211 | 0.285 | 0.447 | 0.160 |
这里给出了一些常见模拟器的性能测试结果, 测试平台 Windows 10, I7-8700k, 1080ti, nvme SSD, 模拟器分辨率1280x720, 碧蓝航线 60帧开启, 进入地图 7-2, 执行100次取平均, 单位秒.
由于海图识别模块对截图质量有很高的要求, `AzurLaneAutoScript` 暂时不支持手机, 必须使用模拟器. (Alas其实是支持手机的, 远古版本的Alas也是在手机上测试的, 但是长时间运行会发热和假死, 就放弃了)
- 安装一款安卓模拟器
- 模拟器分辨率设置为 `1280x720` .
### 配置ADB Set up ADB
- 获取 [ADB](https://developer.android.com/studio/releases/platform-tools)
- 将ADB配置于系统的环境变量中, 并测试是否配置成功.
```
adb devices
```
### 调教国产模拟器 Dealing with chinese emulator
国产模拟器一般会使用自己的 ADB, 而不同的ADB之间会互相结束对方, 这里提供一个一劳永逸的方法: 直接替换.
- 前往模拟器的安装目录, 搜索 `adb`, 备份这些文件
- 将自己的 `adb.exe` 复制进安装目录, 并且把名字改成刚才备份的文件的名字.
比如说夜神模拟器的安装目录有 `adb.exe``nox_adb.exe` , 备份它们. 把自己的 `adb.exe` 复制两份进来, 其中一份改名为 `nox_adb.exe` .
这并不会影响模拟器运行, 还会带来方便. 每次打开模拟器的时候, 模拟器就会自动连接至ADB, 相当于执行了
```
adb connect <your emulator address>
```
### 安装 uiautomator2 Install uiautomator2
[uiautomator2](https://github.com/openatx/uiautomator2), 是一个自动化测试的库, 可以加快截图和点击的速度. `AzurLaneAutoScript` 也可以使用ADB来执行截图和点击, 就是慢一点而已.
出于性能优化, 建议使用ADB截图, uiautomator2点击. (u2截图稍稍快于adb截图, 但是cpu占用翻倍, u2点击则全方位碾压adb)
- 执行
```
python -m uiautomator2 init
```
会在所有连接的设备上安装 [uiautomator-server](https://github.com/openatx/android-uiautomator-server/releases) , [atx-agent](https://github.com/openatx/atx-agent), [minicap](https://github.com/openstf/minicap), [minitouch](https://github.com/openstf/minitouch) . 如果设备是模拟器, uiautomator2 将跳过 minicap 的安装.
- 检查 uiautomator2 是否安装成功
修改 `module.dev_tools` 下的 `emulator_test.py` 中的 `SERIAL`, 并执行.
一些模拟器的默认 serial:
| 设备 | Device | serial |
| ---------- | ---------- | --------------- |
| 夜神模拟器 | NoxPlayer | 127.0.0.1:62001 |
| MuMu模拟器 | MuMuPlayer | 127.0.0.1:7555 |
| 逍遥模拟器 | NemuPlayer | 127.0.0.1:21503 |
| 雷电模拟器 | LDPlayer | emulator-5554 |
## 使用方法 Usage
- 双击 alas.pyw, 通过图形界面(GUI)运行
- (不推荐) 通过命令行运行. 虽然alas使用了 [Gooey](https://github.com/chriskiehl/Gooey), 一个将命令行转为GUI的库, 但是Alas并不是先有命令行方法运行再用gooey的, Alas是为了使用gooey快速编写GUI而去拼凑命令行参数的. 因此使用命令行会很难受.
- (不推荐) 修改配置文件 `config/alas.ini` , 在 `alas.py` 中调用相关函数
- 多开运行, 复制 alas.pyw, 并重命名, 双击运行即可. 首次运行时会复制template.ini的设置. 脚本运行时会使用同名的ini配置文件.
## 已知问题 Known issue
按出现频率排列
- **GUI启动慢, uiautomator2启动慢**
- **无法处理网络波动** 重连弹窗, 跳小黄鸡
- **处理夜间委托的弹窗可能出错** 有捕捉, 但是可能会在一些奇怪的时间弹出来
- **会显示绿脸黄脸红脸, 红脸出击确认** 这个是瓜游心情值更新BUG的锅了, 只要填对了`RECOVER_PER_HOUR` 和 `EMOTION_LIMIT` 就不会红脸出击, 或者保证一直处于经验加成状态.
- **演习可能SL失败** 演习看的是屏幕上方的血槽, 血槽可能被立绘遮挡, 因此需要一定时间(默认1s)血量低于一定值(默认40%)才会触发SL. 一个血皮后排就有30%左右的血槽, 所以别以为在1s内被打掉40%是不可能的. 另外如果后排立绘过大且CD重叠严重, 建议增大确认时间(比如3s), 或者换皮肤, 这样可以减少误判.
- **极少数情况下ADB和uiautomator2会抽风**
- **拖动操作在极少数情况下无效**
## 文档 Doc
[海图识别 perspective](doc/perspective.md)
`海图识别` 是一个碧蓝航线脚本的核心. 如果只是单纯地使用 `模板匹配 (Template matching)` 来进行索敌, 就不可避免地会出现 BOSS被小怪堵住 的情况. `AzurLaneAutoScript` 提供了一个更好的海图识别方法, 在 `module.map` 中, 你将可以得到完整的海域信息, 比如:
```
2020-03-10 22:09:03.830 | INFO | A B C D E F G H
2020-03-10 22:09:03.830 | INFO | 1 -- ++ 2E -- -- -- -- --
2020-03-10 22:09:03.830 | INFO | 2 -- ++ ++ MY -- -- 2E --
2020-03-10 22:09:03.830 | INFO | 3 == -- FL -- -- -- 2E MY
2020-03-10 22:09:03.830 | INFO | 4 -- == -- -- -- -- ++ ++
2020-03-10 22:09:03.830 | INFO | 5 -- -- -- 2E -- 2E ++ ++
```
[参与开发 development](doc/development.md)
- 如何添加一个按钮 How to add a button
- 如何适配一张新的地图 How to adapt to a new map
## 参考 Reference
- (Not open source) http://asaiq2.lofter.com/
现成的碧蓝航线脚本, 完成度很高. 参考了主要的功能和设置.
- https://github.com/Egoistically/ALAuto
(Archived) https://github.com/perryhuynh/azurlane-auto
EN服的碧蓝航线脚本, 模仿了脚本架构.