|
1 | 1 | # ArknightsAutoOperator |
2 | 2 |
|
3 | | -明日方舟赛博塑料,自动凹图(帧级自动操作 + 费用条计时 + 打轴对轴)。 |
| 3 | +明日方舟自动凹图:帧级自动操作 + 费用条计时 + 打轴对轴。 |
| 4 | + |
| 5 | +MaaFramework **方案二**(JSON pipeline + 进程内 custom action)+ PySide6 单进程主控台 + loguru 日志。 |
| 6 | +仅支持 **PC 官方客户端**(Win32,`Arknights.exe`),不再适配模拟器。 |
4 | 7 |
|
5 | | -> **状态**:正推翻 Go + Wails 重写为 Python(MaaFramework **方案二** pipeline + 进程内 custom action + PySide6)。 |
6 | 8 | > 总体方案见 [`docs/rewrite-plan.md`](docs/rewrite-plan.md)。 |
7 | 9 |
|
| 10 | +## 功能 |
| 11 | + |
| 12 | +- **凹图**:自动点关卡 → 开战 → 帧级执行时间轴 → 结算 → 三星停 / 非三星或漏怪放弃重试,循环到通关或达次数上限 |
| 13 | +- **打轴**:F8/F9/F10 标记部署/技能/撤退,时间轴 canvas 双刻度(frame + 秒),节点可拖拽改帧 |
| 14 | +- **对轴**:游标跟随实时帧,临近节点磁铁高亮,校验时间轴能否稳定复现 |
| 15 | +- **校准**:费用条像素宽 → 逻辑帧映射(Jaccard 聚类),支持多档 profile(交替回费) |
| 16 | +- **悬浮窗**:置顶显示实时帧 / 计时器 / profile |
| 17 | +- **WebSocket API**:实时帧状态广播(`ws://localhost:2606`) |
| 18 | + |
8 | 19 | ## 开发 |
9 | 20 |
|
10 | 21 | ```bash |
11 | 22 | uv sync |
12 | | -uv run python agent/main.py --mode win32 # MAA 进程内接线 + 截图 smoke(里程碑 1) |
13 | | -# 或 --mode adb 连模拟器 |
| 23 | +uv run python -m aao.app # 启动主控台(可选 --profile xxx.json) |
| 24 | +uv run python -m aao.resources.syncer # 同步干员名 + 地图数据 |
| 25 | +``` |
| 26 | + |
| 27 | +前置:管理员终端(PostMessage 输入需 UIPI 权限)+ AFA(arknights-frame-assistant)常驻 + 游戏窗口前台。 |
| 28 | + |
| 29 | +## 项目结构 |
| 30 | + |
| 31 | +```txt |
| 32 | +aao/ 应用主体(UI / 计时 / 打轴 / 测量 / 资源 / 工具) |
| 33 | + app.py 主控台入口(QMainWindow 侧栏:凹图/打轴/校准/设置) |
| 34 | + core/ timing(费用条计时)/ geometry(投影)/ battle / avatar / afa_hotkey |
| 35 | + measure/ 测量 worker + 悬浮窗 + WebSocket API |
| 36 | + timeline/ 时间轴模型 + 打轴编辑器 |
| 37 | + ui/ 各功能页 + farm_worker + canvas + map_picker |
| 38 | + resources/ 干员名/地图同步 + 更新检查 |
| 39 | +custom/ MAA custom 实现(pipeline 调用) |
| 40 | + agent.py MAA 子进程入口(interface.json 的 child_exec) |
| 41 | + action/ ExecuteTimeline(帧级执行)/ KeyPress |
| 42 | + reco/ ClickStage(关卡 OCR + 凹图计数) |
| 43 | + registry.py / outcome.py |
| 44 | +resource/ MAA pipeline(farm.json 自循环)/ image 模板 / ocr 模型 |
| 45 | +config/ calibration(校准)/ timelines(时间轴)/ settings.json |
| 46 | +debug/ 日志(aao/YYYY-MM-DD.log,按天轮转保留 2 周) |
14 | 47 | ``` |
15 | 48 |
|
| 49 | +## 日志 |
| 50 | + |
| 51 | +loguru 双 sink: |
| 52 | + |
| 53 | +- **控制台 / UI 日志面板**:仅消息,去来源,INFO |
| 54 | +- **文件 `debug/aao/*.log`**:完整含来源(模块:函数:行),DEBUG,按天轮转、保留 2 周、zip 压缩 |
| 55 | + |
16 | 56 | ## 鸣谢 |
17 | 57 |
|
18 | | -### 开源库与参考项目 |
| 58 | +### 依赖 |
19 | 59 |
|
20 | | -- [MaaFramework](https://github.com/MaaXYZ/MaaFramework) — 图像识别自动化框架(pipeline + 自定义扩展) |
| 60 | +- [MaaFramework](https://github.com/MaaXYZ/MaaFramework) — 图像识别自动化框架(pipeline + 进程内 custom action) |
21 | 61 | - [PySide6](https://www.qt.io/) — Qt UI |
22 | | -- [prts-plus](https://github.com/jue-ce-zhe/prts-plus) — 模拟器帧级自动操作(执行器算法来源) |
23 | | -- [ArknightsCostBarRuler](https://github.com/ZeroAd-06/ArknightsCostBarRuler) — 费用条计时 / 悬浮窗 / 打轴对轴(测量层来源) |
24 | | -- [MaaAssistantArknights](https://github.com/MaaAssistantArknights/MaaAssistantArknights) — 地图数据 / 投影 / 粗流程参照 |
25 | | -- [arknights-frame-assistant](https://github.com/CloudTracey/arknights-frame-assistant) — PC 端帧操(PC 输入模型来源) |
| 62 | +- [loguru](https://github.com/Delgan/loguru) — 日志 |
| 63 | +- [numpy](https://numpy.org/) / [websockets](https://websockets.readthedocs.io/) / [Pillow](https://python-pillow.org/) / [json5](https://github.com/dpranke/pyjson5) |
| 64 | + |
| 65 | +### 参考项目 |
| 66 | + |
| 67 | +- [MaaAssistantArknights](https://github.com/MaaAssistantArknights/MaaAssistantArknights) — 地图数据(`Arknights-Tile-Pos`,运行时同步)+ 粗流程参照 |
| 68 | +- [ArknightsCostBarRuler](https://github.com/ZeroAd-06/ArknightsCostBarRuler) — 费用条计时 / 悬浮窗 / 打轴对轴(测量层、校准、tick 检测来源) |
| 69 | +- [prts-plus](https://github.com/jue-ce-zhe/prts-plus) — 帧级自动操作的执行器算法(action / 投影 / 配置) |
| 70 | +- [ArknightsFrameAssistant](https://github.com/CloudTracey/arknights-frame-assistant) — PC 端帧操、AFA 热键输入模型 |
0 commit comments