一键自动完成多个账号(官服/B服任意组合)的每日任务,含自动切换账号。
新电脑部署:想让 AI 助手代劳安装与配置,把整个仓库给它并让它读
AI_SETUP.md——照做即可补齐缺失组件并验证可用。后续优化:待办项、技术债与已知的环境坑见
OPTIMIZATION.md。
仓库中不包含任何真实账号密码:config.json(本地配置,含账号密码)和 scripts\accounts\(登录 token/uid 等账号数据)都被 .gitignore 排除,不会上传到仓库。下载代码后需要自己配置:
- 将
config.example.json复制为config.json(两文件同目录D:\1\) - 用文本编辑器打开
config.json,在accounts中填写自己的游戏账号(手机号/邮箱)和密码(推荐直接在控制台「账号管理」里输入,密码会加密保存,见下);paths里没写的官服 MAA 路径会自动探测(D:\软件\MAA\下MAA-v*-win-x64目录取版本号最新),MAA/模拟器装在非默认位置时才需要手动填写 - 启动 GUI 控制台(
启动控制台.bat),或在「账号管理」页面维护账号
提示:不手动创建
config.json也可以——GUI 首次保存设置时会自动生成空白的config.json,在「账号管理」页面输入账号密码即可。登录后程序会把 token/uid 写入scripts\accounts\(仅本机使用,不会上传)。
密码存储(DPAPI):
accounts[].password保存为dpapi:<base64>密文 (Windows DPAPI,CurrentUser 范围),只有当前 Windows 用户能解密,明文只存在于 内存和输入框里。旧版明文配置在手填或控制台下一次保存设置时自动加密; 手写的明文同样可用,保存一次即完成迁移。密文与 Windows 用户绑定——换电脑、 重装系统或换登录用户后需要重新输入密码:登录校验会提示「密码无法解密」并转人工 登录,不会拿空密码反复尝试,控制台账号详情里也会留空并提示重填(不输入则保留原 密文,不会被空值覆盖)。回退到旧版本程序时,旧版会把dpapi:前缀当成密码原文, 需使用当前版本或重新手填明文。捕获登录时密码仍经进程环境变量传给capture_account.ps1(读完立即清除),这一点 DPAPI 不改变。迁移后旧的config.json.daily.bak可能仍是明文版本,最多保留到下一次每日备份(次日首次 启动);想立即消除可删除该文件,GUI 下次启动会自动重建。
搬迁项目时请整目录移动(包含 config.json、scripts\accounts\ 和运行时)。GUI、
PowerShell 子脚本和插件读取配置时,会按配置文件所在目录重新推导 paths.script_dir
及原默认日志路径 scripts\master_log.txt,即使旧目录还在也不会调用旧副本;读取时
不改写配置文件。单独指定的日志位置和 MAA、模拟器等外部软件路径保持原值。
Windows 计划任务和 MAA 内保存的完成回调属于外部配置:项目搬迁后仍需在控制台
重新同步班次/收菜计划,并分别执行官服/B 服「MAA 服务器配置」。
- 每天按设定的时间点自动启动(默认 4:00 / 16:00,可在控制台增删改,Windows 计划任务)
- 班次级账号筛选(可选):每个启动时间可单独勾选本次跑哪些号(如 4:00 全跑、 16:00 只跑还想刷第二把理智的号);不勾 = 全部账号(含以后新增的号)
- 自动开启 MuMu 模拟器
- 槽位切号(非点击):每个账号的登录数据(token/uid)保存在
scripts\accounts\<slot>\,切换 = 停游戏 → 推入数据文件 → 重启游戏,全程不点击 - 游戏更新检测:切号后若游戏在更新(资源下载/校验/安装/强制重装客户端),自动等待更新完成再进入登录校验,避免对着更新界面误操作;更新超时该号判失败、不空跑
- MAA 前登录校验:每个号跑 MAA 前屏幕级确认已登录;官服与 B服 分开校验
(官服 token 预检 + 失效自动输账号密码重登并刷新槽位;B服 开屏剧情自动跳过 +
观察窗判定,登录界面不可自动化直接快速失败),失败则跳过该号。
屏幕识别为 MAA 同款能力:OpenCV 模板匹配 + PaddleOCR ONNX(模板与模型
拷自 MAA resource,720p 基准),实现见
scripts\vision\与vision_lib.ps1 - 官服 ↔ B服 自动切换客户端
- 每个号完成后自动启动 MAA 执行每日任务
- 失败自动重试:有账号失败时(部分失败或全部失败),整轮跑完后等 60 秒对失败号
按原顺序完整重试一遍(切号 → 登录校验 → MAA 同一管线);重试的号无论成败都
推送通知:成功标「重试成功」(正文带首跑失败原因),仍失败标「重试后仍失败」。
全部失败常见于系统性问题(游戏维护/更新),重试等于赌维护在两轮之间结束;手动切号
(人在电脑前)不走自动重试。运行历史给重试过的号带
retried标记 - 任务队列:公开招募 → 基建换班 → 剿灭(周六) → 刷1-7 → 信用商店 → 领奖励
- 基建收菜(控制台一键):逐号快速收一波——收制造站产物与贸易站订单(生产 房间 skip:不换干员、不用无人机、不动班次计划),宿舍自动换休:计划里 宿舍留空 + autofill,MAA 按心情把最疲惫的空闲干员换进宿舍休整、满心情的换出 (只从未进驻干员里选,不抽走在岗干员,生产不受影响);收完自动切回常规方案; 支持定时收菜(仪表盘「收菜计划」增删时间,独立计划任务到点自动收: 跑全部启用账号、不做班次账号筛选,每个时间点可单独设置收菜后是否关机, GUI 关闭后照常触发;手动按钮收菜永不关机)
- 精确基建派驻(可选插件):按账号为 6 类设施指定进驻干员(批次随启动时间 自动划分,如 8点/12点/24点三批;333/243 布局),MAA 运行前自动套用;不启用则 继续用 MAA 自带基建换班
- 菲亚梅塔心情恢复(并入精确基建,按批次):换班开始前先把目标干员与满心情的
菲亚梅塔放进宿舍互换心情(菲亚梅塔随后留在宿舍恢复),先恢复心情、再执行
换班;每个班次可单独开关(有的批次开、有的不开),配置在「精确基建配置」
窗口里跟着「批次」下拉切换,也可用「导入排班文件」按各计划的
Fiammetta字段分别导入 - 完成后自动关闭模拟器;成功时不弹窗,仅失败时弹出提示窗口(每号耗时 + 失败详情)
- 通知推送(可选):按账号逐步骤检查(切号 → 登录校验 → 任务自检 → MAA), 某个步骤失败的账号单独推送一条(标题含账号名与失败步骤),成功默认不推送 (「运行设置 → 通知推送 → 成功也推送」开启后,全部号成功也发一条极简汇总); 模拟器启动失败也会推送。渠道支持 Server酱 / PushPlus / 企业微信机器人, 控制台「运行设置 → 通知推送」里配置渠道与密钥,并可一键发送测试消息
- 运行历史:每轮(挂机/收菜/切号)结果留存为
scripts\run_history\run_<时间戳>.json(保留 60 天),控制台新增「运行历史」页,可回溯每号成功/失败、耗时与失败原因 (无进展超时 / 中途退出 / 登录校验失败 / MAA 任务链报错——MAA「正常退出」但 个别任务失败(如资源过期导致全链报错)也按失败处理并推送,不再误报成功); 失败现场归档:失败账号的截图与调试日志同时复制到scripts\run_history\<时间戳>\<槽位>\,跟历史一起保留 60 天——debug 目录每轮 开头会被清空,归档后事后才能回看当时那一帧,而不是只有一行错误文字; 证据总量有上限(默认 200MB,config.cleanup.evidence_limit_mb可调):每轮 归档后统计超限就从最老的轮次删起,只删截图/日志、run_*.json记录不动,当前轮 永不删除 - 一键切号不跑日常(「账号管理 → 账号详情 → 切换到此账号」):切号 + 登录校验完成 即停,模拟器保持运行,可直接手动游戏;与挂机/收菜/导出互斥
- 每个启动时间可单独设置是否关机(仪表盘「班次计划」每行一个开关):该班次 运行结束后 60 秒自动关机(无需确认,失败也关——失败通知会先推送到手机); GUI 手动运行传 -NoShutdown 永不自动关机
- GUI 控制台(
gui\,PySide6):仪表盘实时状态、账号管理(增删账号/启停/捕获登录)、图形化改配置、日志查看、一键运行/停止
打开方式(任选):
- 桌面快捷方式「MAA 挂机控制台」(已创建,带图标)
- 双击
D:\1\启动控制台.bat - 命令行:
D:\1\gui\.venv\Scripts\python.exe D:\1\gui\main.py
| 页面 | 功能 |
|---|---|
| 仪表盘 | 账号状态卡片(数量随列表变化)、班次计划(增删改启动时间、每项启用/关机开关、「账号」勾选该班次跑哪些号,立即生效)、收菜计划(基建收菜每日定时,独立计划任务,每项启用/关机开关)、最近一次运行汇总、连接状态(含 MAA RunDirectly 检查) |
| 账号管理 | 增删账号、拖动卡片调整运行顺序、每号启用开关、每号第二理智候选关卡、捕获登录数据、「切换到此账号」(只切号不跑日常)、精确基建派驻开关与配置(含无人机与菲亚梅塔心情恢复)(输入账号密码自动登录并保存槽位;特殊字符密码/验证码自动转人工登录) |
| 运行设置 | MAA/ADB/MuMu CLI 路径、超时、关模拟器开关、MAA 服务器一键配置(官服/B服独立按钮)、通知推送(渠道/密钥/成功也推送/发送测试)、数据清理(含 Python 缓存与生成的基建计划文件) |
| 运行历史 | 每轮运行结果列表(挂机/收菜/切号,保留 60 天):逐号成功/失败、耗时、失败原因;支持打开记录目录与清空;工具栏显示失败现场占用(如「失败现场 12.4 MB」)并可单独「清空失败现场」(只删截图/日志,历史记录保留;挂机运行中禁止清理) |
| 日志 | 深色日志视图(灰阶高亮),自动 tail、关键字过滤、清空、打开文件 |
- 所有设置写入
D:\1\config.json,master.ps1等脚本启动时读取(字段缺失时回退脚本内硬编码) - 「运行设置 → MAA 服务器配置」:官服 / B服 各一个按钮,一键修正该服 MAA 的 客户端类型、ADB 路径与地址、RunDirectly、结束脚本、常用任务启用;若该服 MAA 目录不存在,会自动从另一服复制一份再修正(修改前先备份原配置)
- GUI 点「立即运行」时自动加
-NoShutdown:手动运行即使成功也不关机(符合人工操作预期);计划任务照常关机逻辑不变 - 「停止」会结束 master.ps1 与 MAA 进程,并执行
shutdown /a取消已排定的自动关机 - 控制台为单实例:重复启动时新进程自动退出,已开着的窗口被带到前台
(
gui\console.lock原子锁 + PID 存活校验;崩溃残留的锁下次启动自动清理)。 两份控制台同时运行会互相覆盖 config.json(各自持有加载时的旧快照,任何一次 保存都会整份写回)——推送密钥曾被这样抹掉过,故加此保护 - 「通知推送 → 发送测试」成功时会自动保存当前通知设置(渠道/密钥/开关), 不必再点「保存配置」;成功气泡里会注明「通知设置已自动保存」
- 计划任务为 1 个任务(MAA_明日方舟自动挂机),内含 config.schedule.times 的
全部启用时间触发(默认 04:00 / 16:00);仪表盘「班次计划」增删改后自动同步,
更新需要管理员权限(否则会弹提示)。定时收菜另有 1 个任务(MAA_基建收菜,
触发来自 config.schedule.collect_times,仪表盘「收菜计划」维护,动作只带
-InfrastCollect);收菜后是否关机由 master.ps1 按启动时刻匹配「收菜计划」 最近一个已到的启用时间点的关机开关判定(任务动作无法按触发器带参数,与挂机 班次同一套机制;GUI 手动收菜带 -NoShutdown 永不关机);没有配置收菜时间时 该任务不会创建 --smoke参数:加载全部页面后自动退出,用于无交互自检
启动模拟器 → 对每个启用账号循环:
槽位切号(停游戏 → 推入该账号登录数据 → 重启游戏,非点击)
→ 游戏更新等待(检测到更新界面则等待下载/校验/安装完成,不点击)
→ 登录校验(官服/B服 各自独立流程:官服 token 预检 + 停在登录界面时自动输入
账号密码重新登录并刷新槽位数据;B服 开屏剧情自动跳过后观察窗放行,登录界面
不可自动化直接快速失败;失败则跳过该号防 MAA 空跑)
→ 跑该服务器的 MAA
→ 有号失败时等 60 秒对失败号整体重试一遍(部分失败、全部失败都重试)
→ 关模拟器 → 弹窗通知
- MAA 启动前记录日志位置并清除旧信号,启动后立即监测;收到完成信号后先检查 本次新增日志中的任务链错误,避免快速完成信号丢失或“报错却显示成功”。
- 登录校验、收菜、关卡及排班配置按阶段检查结果;必须应用的配置失败时停止该号, 不继续使用上一账号或另一运行模式的配置。失败历史记录实际耗时和具体阶段。
- 每个账号回拉完登录快照后才开始下一号切换,同一模拟器的账号数据操作保持串行。 子脚本参数独立传递,槽位名称含空格或引号时不会被拆开;看门狗超时会结束子进程树并保留诊断输出。
- 登录后刷新与任务后回拉共用
slot_snapshot.ps1:暂存下载、检查 ADB 退出码、 校验 XML 与 UID,再备份和发布。原件保存在各槽位的.refresh-backup/,该目录不会推入游戏。 写入失败会尝试恢复所有已修改文件。若写入被中断或回滚不完整,会留下recovery-required.txt并阻止该槽位再次切号和覆盖备份;确认相关进程已停止后, 按备份内相对路径恢复原件,确认完整再移除此标记。
测试通过临时目录、假 ADB 和假 MAA 进程验证以上时序,不使用真实账号或游戏数据。
config.json 的 accounts 必须为数组(GUI「账号管理」页维护);非数组或缺失时
master.ps1 拒绝运行(防止用旧格式跑错账号;旧点击切号流程已废弃)。
每个账号的登录数据(含 SDK token、uid)在首次登录后保存到 scripts\accounts\<slot>\:
accounts\<slot>\
├── uid.txt # 登录 UID(切换后校验用)
└── shared_prefs\ # 镜像设备 /data/data/<pkg>/ 相对路径
│ ├── <pkg>.v2.playerprefs.xml # 含 u8sdk_cached_uid 等登录态
│ └── HypergryphSdkPreferences.xml # 含 USER_CACHE token
└── files\zx\lc.cache
- 切号(
slot_switch.ps1):强制停止两个客户端 →adb push数据文件并修正 owner/权限/SELinux 上下文 → 重启目标客户端 → 轮询校验 uid 与槽位一致(一致即通过, 通常 3 秒内;不一致或超时该号判失败,防止跑到错误账号)。需要 adb root(MuMu 12 自带)。 - 游戏更新等待(自 v1.3.2 起内置于
login_check.ps1): 识别游戏更新界面特征(正在获取更新/下载更新/正在校验/正在安装/版本更新等,特征取自 官方更新公告与模拟器官网资料)并检测系统包安装器(强制更新重装客户端场景);更新中只等待 不点击,回到标题/登录/主界面后放行;更新失败立即判该号失败,不空跑。 - 登录校验(官服
login_check.ps1/ B服login_check_bilibili.ps1,master.ps1 在切号后、MAA 前按账号的服务器分别调用):屏幕级确认游戏实际已登录 (文件级 uid 校验通过不代表真在登录态——token 失效时游戏会回到登录界面)。 识别能力为 MAA 同款:vision\vision.py常驻进程做 OpenCV 模板匹配(开始唤醒、 公告关闭 X、主界面判定等,模板拷自 MAA resource)+ PaddleOCR det/rec ONNX 文字识别(更新标记/表单字段/弹窗按钮),截图走 gzip 快速通道(~100-170ms/帧)。 官服:token 预检(不点开始唤醒先向官方接口校验槽位缓存的通行证 token,失效快速 失败)+ 检测到登录界面时自动用 config.accounts 里的账号密码登录(点掉首次启动 弹窗/标题画面 → 账号登录 → 密码登录 → 输入 → 登录),成功后校验 uid 与槽位一致 并刷新槽位数据(token 续期)。B服:走 B站 SDK,槽位镜像文件里无可离线校验的 会话凭据(无官服式 token 预检);启动先播开屏世界观剧情,自动点 START 逐页跳过, 开屏消失后 10 秒内未出现登录界面即放行(开屏剧情只在登录态出现);检测到 B站 登录界面(扫码/短信/验证码,无法自动化)则快速失败。两服的设备/槽位刷新函数 共用login_device_lib.ps1。任一服失败均跳过该号防止 MAA 对着登录界面空跑。 - 捕获(
capture_account.ps1,由控制台「添加账号」触发):清空登录态 → 重启游戏 → OCR 自动点掉首次启动弹窗(配音包下载/选择)→ 登录界面 → 自动输入账号密码 → 轮询登录成功 → 拉取文件保存到槽位。密码含特殊字符或出现验证码时自动转「人工登录」: 提示你在模拟器窗口手动登录,脚本检测成功后自动拉取。失败自动恢复原登录态。 拉取时会在槽位 playerprefs 补写全部「界面首次进入引导·已看过」标记 (key_GB_viewed#*,清单见scripts/login_device_lib.ps1的$guideViewedKeys, 覆盖基建建筑管理/干员信息/危机合约/集成战略/作战主页等 16 项), 新账号进这些界面不再弹「第一次进入」引导,且后续每次都不会再出现。 - B 服单账号无需捕获也可以正常运行(槽位缺失时仅切客户端);官服槽位缺失会拒绝运行 该号(防止用错账号数据跑错号)。
| 机制 | 文件 | 说明 |
|---|---|---|
| 互斥锁 | master.lock |
存当前运行的 PID + 进程启动时间(原子创建,防重复启动与 PID 复用误判) |
| 完成信号 | maa_done.signal |
MAA 跑完后由 signal_done.ps1 创建,master.ps1 轮询检测 |
| MAA 回调 | signal_done.ps1 / signal_done.bat |
在 MAA 设置中配置为「任务结束后执行脚本」,指向 signal_done.bat |
| 项目 | 说明 |
|---|---|
| 系统 | Windows 10/11 |
| PowerShell | PowerShell 7+(pwsh,全部脚本以此运行;不再使用系统内置 5.1) |
| 模拟器 | MuMu 模拟器 12(1280×720 横屏) |
| 游戏 | 明日方舟 官服 + B服 |
| MAA | v6.11.1,已配置两套(官服/B服各一套) |
D:\1\
├── README.md # 本文件
├── 启动挂机.bat # 手动启动(双击运行)
├── config.json # GUI 生成的统一配置(脚本启动时读取,可缺省)
├── scripts\
│ ├── master.ps1 # 主控入口(班次判定 + 账号循环/重试 + 收尾)
│ ├── master_lib.ps1 # 主控基础设施层(进程锁/日志/配置/模拟器启停/数据清理)
│ ├── master_plugins.ps1 # Python 插件调用与输出读取
│ ├── master_process.ps1 # 子脚本参数传递/看门狗/进程树清理
│ ├── master_maa.ps1 # MAA 启动、日志游标、完成及失败判定
│ ├── master_pipeline.ps1 # 账号阶段管线与统一结果
│ ├── master_history.ps1 # 主控留痕与通知层(运行历史 JSON/通知推送)
│ ├── refresh_slot.ps1 # 同步槽位回拉入口
│ ├── slot_snapshot.ps1 # 登录快照暂存/校验/备份/发布与异常回滚
│ ├── slot_switch.ps1 # 槽位切号(停游戏→推登录数据→重启游戏→校验uid,非点击)
│ ├── login_check.ps1 # 官服登录校验(token预检+屏幕确认+自动登录+刷新槽位)
│ ├── login_check_bilibili.ps1 # B服登录校验(开屏剧情跳过+观察窗放行;登录界面快速失败)
│ ├── login_device_lib.ps1 # 登录校验共用设备/槽位函数(点击/uid/槽位刷新/安装器检测/表单录入)
│ ├── config_lib.ps1 # config.json 统一读取(全部 PS 脚本共用)
│ ├── vision_lib.ps1 # MAA 同款识别封装(常驻 vision.py + gzip 截图)
│ ├── vision\ # 识别模块(vision.py + MAA 模板 + PaddleOCR ONNX 模型)
│ ├── capture_account.ps1 # 账号捕获(清登录态→过弹窗→输入账号密码→拉取槽位数据)
│ ├── accounts\ # 账号槽位目录(每个槽位一份登录数据 + uid.txt)
│ ├── switch_to_B服.ps1 # 关官服App → 开B服App
│ ├── switch_to_官服.ps1 # 关B服App → 开官服App(独立工具,主流程未使用)
│ ├── switch_to_B服.bat # B服切换快捷方式
│ ├── signal_done.ps1 # MAA 完成信号(创建 maa_done.signal)
│ ├── signal_done.bat # MAA 完成信号 bat 包装(供 MAA 调用)
│ ├── 启动挂机.bat # 手动启动(同上)
│ ├── maa_done.signal # 信号文件(MAA 完成后自动生成)
│ ├── master.lock # 互斥锁(运行时自动生成,防止重复启动)
│ ├── master_log.txt # 运行日志(自动生成)
│ └── run_history\ # 运行历史(每轮一个 JSON + 失败现场目录,保留 60 天,GUI「运行历史」页读取)
├── plugins\base_schedule\ # 精确基建派驻插件
│ ├── base_schedule.py # 计划生成 + MAA 配置切换(独立于 MAA 版本)
│ └── plans\ # 生成的计划 JSON(每个槽位一个文件)
├── plugins\fight_stage\ # 账号级第二理智候选关卡插件
│ └── fight_stage.py # 运行前把账号候选关卡写入 MAA 第二个 FightTask
├── plugins\fiammetta\ # 菲亚梅塔心情恢复插件(精确基建关闭时走常规模式)
│ └── fiammetta.py # 运行前把精确基建里的菲亚梅塔设置写进 MAA 基建任务
├── plugins\common.py # 插件公共工具(config 读取/账号定位/MAA 目录/原子写/日志)
├── plugins\notify\ # 通知推送插件(发送逻辑全项目仅此一份)
│ └── notify.py # Server酱 / PushPlus / 企业微信机器人;master.ps1 与 GUI 测试共用
├── tests\ # 单元测试(unittest 标准库零依赖;python -m unittest discover -s tests)
├── gui\
│ ├── main.py # GUI 入口(--smoke 自检模式)
│ ├── config.py # config.json 读写与默认值
│ ├── theme.py / widgets.py # 调色板与通用组件(状态徽章/卡片等)
│ ├── core\ # adb / 运行控制 / 日志解析 / 计划任务 / 通知
│ ├── pages\ # 仪表盘 / 账号管理 / 运行设置 / 运行历史 / 日志
│ ├── mockup.html # 界面设计草图(浏览器打开预览)
│ └── requirements.txt # PySide6 + PySide6-Fluent-Widgets
├── 软件\
│ ├── MAA\ # 官服 MAA(Official 客户端)
│ └── MAA(b)\ # B服 MAA(Bilibili 客户端)
└── MuMu模拟器\
└── MuMu Player 12\ # MuMu 模拟器
- 下载安装 MuMu 模拟器 12
- 设置分辨率:1280×720(横屏)
- 安装明日方舟(官服)和明日方舟(B服)
- 官服内登录两个账号
- 下载 MAA(MaaAssistantArknights),版本不限(新版目录自动识别)
- 解压到
D:\软件\MAA\下,保持默认目录名MAA-v<版本号>-win-x64; 官服 MAA 路径会自动探测该目录(多套并存取版本号最新),装在别处时在 控制台「运行设置 → 路径」里指定即可。MAA 自身的版本更新是原地升级、 目录名不变,无需改配置 - 运行 MAA,配置连接 MuMu 模拟器(ADB:
127.0.0.1:16384;挂机脚本每轮启动会按 MuMu 实例配置自动发现实际端口并回写 MAA 与config.json,手动配置保持默认即可) - 配置任务队列:公开招募、基建换班、剿灭、刷1-7、信用商店、领奖励
- 在 MAA 设置 → 「任务结束后」→ 执行脚本,填入
D:\1\scripts\signal_done.bat - 复制一份到
D:\软件\MAA(b)\,将客户端类型改为 Bilibili,同样配置结束脚本
- 将本项目
scripts\目录下所有文件放到D:\1\scripts\ - 将
启动挂机.bat放到D:\1\(根目录)
推荐直接在控制台「仪表盘 → 班次计划」增删改启动时间(保存时自动同步计划任务, 需要管理员权限)。基建收菜的定时在「仪表盘 → 收菜计划」维护,保存时会自动 创建/同步第二个计划任务 MAA_基建收菜(到点只收菜,收菜后是否关机按每项的 「关机」开关)。也可以手动用 schtasks 创建(以管理员运行,示例为每天 4:00 / 16:00 两个时间点):
schtasks /Create /TN "MAA_明日方舟自动挂机" /TR "D:\1\启动挂机.bat" /SC DAILY /ST 04:00
schtasks /Create /TN "MAA_明日方舟自动挂机_2" /TR "D:\1\启动挂机.bat" /SC DAILY /ST 16:00修改时间:
schtasks /Change /TN "MAA_明日方舟自动挂机" /ST 08:00注意:手动创建的任务与 GUI 保存的配置互不感知;建议只用一种方式维护。 每次运行属于哪一班(基建批次/关机选项)由
config.json中最近一个已过的启用 时间点决定,例如 8点/12点/24点 三班:08:00–11:59 属 8点班,12:00–23:59 属 12点班,00:00–07:59 属 24点班。
打开「MAA 挂机控制台」→「账号管理」页:
- 账号卡片:每个账号一张卡片,每行放 2 个,以后新增账号也自动按这个 格式排。卡片表面只保留「精确基建」和「启用」两个开关,点击卡片空白处打开 该账号的详细控制界面:重新捕获登录数据、删除账号、候选关卡、基建配置等 不常用的功能都集中在里面,保持列表干净。
- 添加账号:点「+ 添加账号」,输入名称/服务器/账号/密码 →「开始捕获」。 脚本会自动启动模拟器(如未运行)、清空登录态、重启游戏、点掉首次弹窗、 输入账号密码登录,登录成功后继续点掉公告/配音选择等剩余首次弹窗、等主界面 与「已处理」标记写入后再拉取登录数据,保证下次启动不再重复弹窗。 密码含特殊符号(% ^ _ + = [ ] 等)或出现验证码时自动转人工登录:脚本会提示你在 模拟器窗口手动登录,检测到登录成功后自动继续。
- 启停 / 精确基建:卡片上直接切换(立即生效,master.ps1 会跳过关闭的号)。
- 调整运行顺序:按住卡片(或账号名)拖动——被拖的卡片会浮在鼠标位置(原位
让出空位),其他账号实时平滑让位、预览最终排列,松手即落位并自动保存;也可以在
账号详情里用「↑ 上移 / ↓ 下移」。卡片左上角数字就是运行顺序,顺序保存进
config.json的accounts数组,master.ps1 就按这个顺序逐个切号运行 (正在挂机时改动从下次运行开始生效)。 - 候选关卡(账号详情):仿 MAA 的候选关卡窗口,每一行一个关卡下拉框,支持 「+ 添加候选关卡 / ✕ 删除 / ↑↓ 调整顺序」和「使用备选关卡」开关;新添加的 关卡自动排在最前(顺序即尝试顺序),1-7 固定为保底关卡、永远排在最后 (其他关卡未开放或没选其他关卡时兜底,写入 MAA 前自动规范化); 没单独设置时自动映射 MAA 当前候选,保存后运行前原样写回 MAA。
- 重新捕获 / 删除(账号详情):重新拉取登录数据 / 从列表移除账号。
在「账号管理」页,每个账号卡片上都有「精确基建」开关;点卡片空白处打开 「账号详情 → 精确基建配置」即可打开配置窗口:
- 基建开关:打开后,该账号运行 MAA 时使用配置好的自定义计划;关闭则继续 使用 MAA 自带基建换班(Rotation)。
- 基建配置(账号详情):打开配置窗口。
- 导入排班文件(基建配置窗口左下角):选一图流基建排班表 / MAA 自定义基建
导出的 JSON,控制台自动识别布局(333/243)、换班时段与干员配置,按当前班次
计划填入对应批次(如 03:00–05:00 的 A班 → 4点批),并保留产品类别、无人机
与菲亚梅塔(每个计划的
plan["Fiammetta"]只落到它自己那个批次,窗口顶部 「菲亚梅塔」一行跟着「批次」下拉就能逐批检查)。导入后点「保存并生成计划」 才写入配置并生成 MAA 计划文件。 文件中带 candidates/编组等进阶字段或 skip 条目时,控制台会在提示里说明仅导入 可表达的部分。 - 导出排班文件(基建配置窗口左下角「导入排班文件」旁):把当前弹窗里的排班按 一图流 / MAA 自定义基建相同的 JSON 格式保存(默认存到桌面),可用于备份或转给 其它工具 / MAA;只写文件,不修改配置。
配置窗口里可以:
- 选布局(名称按贸易站/制造站/发电站顺序读):333(贸易3台·制造3台·发电3台)或 243(贸易2台·制造4台·发电3台)
- 选产品类别:制造站每台可选 赤金 / 原石碎片 / 作战记录,贸易站每台可选
赤金订单 / 原石碎片订单;计划应用时 MAA 会按类别匹配游戏内对应设施并
设置对应配方(生成到计划 JSON 的
product字段) - 切换批次:批次随启动时间自动划分(如 8点/12点/24点)。本次运行发生在哪个 时间点之后就用哪个批次(如 08:00–11:59 用 8点批,12:00–23:59 用 12点批, 00:00–07:59 用 24点批),不会因为 MAA 实际执行基建时跨过整点而选错批次
- 逐个设施填写进驻干员:控制中枢 5 人、会客室 2 人、制造站 3 人/台、 贸易站 3 人/台、发电站 1 人/台、办公室 1 人、加工站 1 人(可留空)
- 顶部还有两行设置:无人机(全局:启用/目标站台/投放时机)与 菲亚梅塔心情恢复(按批次:跟着「批次」下拉切换,启用/恢复目标,详见下一节)
注意事项:
- 干员名必须与游戏内名称一致(MAA 靠截图识别干员,例如「银灰」「澄闪」)
- 某一项全部留空时,MAA 会自动按默认算法把该设施补满;只填了一部分 时,MAA 只派你填的人,剩余位置保持空着(不会自动补位)
- 干员休整(宿舍):弹窗里可指定 4 间宿舍、每间最多 5 名进驻干员;全部 留空时 MAA 按默认算法自动安排休整;填了干员的宿舍,剩余空位也会自动补满。 生成计划时会把指定了干员的宿舍排到前面、空宿舍排后面,且宿舍一律不带排序 (sort=false,规避 MAA 宿舍「清空→按序重选」失败导致留空位的已知问题)。 计划始终包含 4 间宿舍——自定义模式下计划文件缺少宿舍会导致「清空宿舍但不补人」
- 已进驻干员不进宿舍:应用精确换班时脚本会自动开启 MAA 的「不将已进驻的 干员放入宿舍」(DormFilterNotStationed),宿舍自动补位只从「未进驻」干员里选, 训练室/加工站等已在岗干员不会被拉进宿舍破坏排班;本轮被设施换下的干员仍会 正常进宿舍休整。恢复 MAA 自带 Rotation 时不改动该开关。
- 加工站:自定义模式下 MAA 不会自动给加工站派人,想派驻就填 1 个干员, 留空则跳过加工站
- 保存后即生成计划文件(
D:\1\plugins\base_schedule\plans\<槽位>.json),master.ps1在每次跑该账号前自动应用,无需手动改 MAA - 插件只依赖 MAA 官方稳定的自定义基建协议,MAA 升级不影响
按批次独立设置:配置位置是「账号管理」页点账号卡片空白处 →「账号详情」→ 「精确基建配置」→ 顶部「菲亚梅塔」一行(和「无人机」并排)。这一行跟着上面的 「批次」下拉切换——切到哪个批次就编辑哪个批次,后面会显示「(仅 X点批 生效)」:
- 开关 + 恢复目标:目标可选 清流 / 可露希尔 / 但书 / 巫恋 / 龙舌兰 /
歌蕾蒂娅(与 MAA 界面同一份候选)。保存在
config.json的accounts[].base_schedule.batches[<批次>].fiammetta = {enable, target}, 所以有的批次开、有的批次不开都可以。 - 导入排班文件:一图流 / MAA 自定义基建导出的 JSON 里每个计划的
Fiammetta(含target)只落到它自己那个批次上,其余批次保持原样;文件里某批次写着不用, 那个批次就是关的;某批次压根没写Fiammetta,该批次沿用你原来的设置。 导出排班文件时也按批次写回去。 - 时机固定为「换班前」:MAA 的做法是把恢复目标与满心情的菲亚梅塔放进宿舍
互换心情(菲亚梅塔随后留在宿舍恢复),完成后再执行换班。
- 账号开着精确基建(自定义模式):
base_schedule.py生成计划时,只给开启了 该批次的计划写入plan["Fiammetta"] = {enable, target, order: "pre"}, MAA 会把该任务插到这套换班任务的最前面。 - 账号没开精确基建(常规模式):
plugins\fiammetta\fiammetta.py把 当前班次那一条设置(按启动时间判断本次跑哪一批)写进 MAA 的基建任务 (FiammettaRecoveryEnabled/FiammettaTarget1),对应 MAA 的「宿舍前置轮」, 同样排在换班设施之前。 两条路径互斥(MaaCore 在自定义模式不读任务级参数、常规模式不读计划级 Fiammetta),所以不会重复恢复。
- 账号开着精确基建(自定义模式):
- 会覆盖 MAA 界面里的同名设置:控制台按账号/批次写入,关闭时也会把 MAA 的 「启用菲亚梅塔心情恢复」关掉,避免两边不一致(没配置过该字段的老配置不碰)。
- 注意:
- 需要该账号拥有菲亚梅塔且她当前心情是满的,否则 MAA 会记
full-mood Fiammetta was not found并跳过本次恢复——这是 MAA 内部行为, 控制台无法绕过或补偿; - MAA 明确不推荐恢复巫恋 / 龙舌兰(理论上可以 007,自动换班下难以实现);
- 自定义模式(精确基建)下 MAA 每个计划只能指定 1 个恢复目标,所以面板上 只给一个目标;
- 依赖 MAA 自带能力(本机实测 v6.17.5:
InfrastTask.cpp的计划级 Fiammetta 与 常规模式参数)。MAA 升级若改掉这些字段,需要重新适配。
- 需要该账号拥有菲亚梅塔且她当前心情是满的,否则 MAA 会记
双击 D:\1\启动挂机.bat,或控制台右上角「▶ 立即运行」(不会触发自动关机)。
计划任务到时间自动执行。前提:
- 电脑开机且不休眠
- 用户已登录 Windows
打开 D:\1\scripts\master_log.txt 查看实时日志。
在 master_lib.ps1 顶部(默认路径段)可修改以下参数;config.json 的
paths/timeouts 同名键优先于这些默认值:
| 参数 | 默认值 | 说明 |
|---|---|---|
$maaStallTimeoutSec |
180 (3分钟) | MAA 无战斗/任务进展判超时(秒);正常打关不限制单号总时长 |
$retryFailedDelaySec |
60 | 有号失败时、重试前的等待秒数(部分失败、全部失败都重试) |
$device |
127.0.0.1:16384 |
MuMu ADB 地址;每轮启动按实例配置自动发现端口(vms\<实例>\configs\vm_config.json),发现到不同地址会自动回写 config 与两份 MAA 配置 |
$adb |
D:\软件\MuMu模拟器\...\adb.exe |
ADB 路径 |
$maaOfficial |
自动探测 D:\软件\MAA\MAA-v*-win-x64(取版本号最新) |
官服 MAA 路径 |
$maaBilibili |
D:\软件\MAA(b)\MAA.exe |
B服 MAA 路径 |
Q: 双击 bat 没反应? A: 检查 PowerShell 执行策略:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy BypassQ: MAA 连接不上模拟器?
A: 确认 MuMu 模拟器已开启;挂机脚本启动时会自动发现 ADB 端口(日志里的
ADB port source / ADB connected),若仍失败,检查 MuMu 实例是否正常、
或在控制台「运行设置」里把 ADB 地址改成实际值(adb devices 里显示的地址)。
Q: 想改任务内容? A: 分别打开官服 MAA 和 B服 MAA,修改任务队列后保存
Q: MAA 报超时(长时间没有战斗/任务进展)?
A: 现在超时只看“进展心跳”:只要 MAA 一直在正常进战斗/结算就不会超时;只有超过
$maaStallTimeoutSec(默认 180 秒,即 3 分钟)没有任何战斗/任务推进才放弃该账号。
常见卡死原因:MAA 任务配置问题、模拟器卡顿、游戏更新/弹窗未被处理。
Q: 运行完成后怎么知道结果?
A: 成功不弹窗、无需确认;只有失败时弹出提示窗口,显示每号耗时和状态。启用了
「运行设置 → 通知推送」的话,失败/成功会推送到手机(模拟器启动失败也会推)。
每轮结果另存于 scripts\run_history\,控制台「运行历史」页可随时回溯;
也可以查看 D:\1\scripts\master_log.txt
Q: 提示"已在运行中"无法启动?
A: 上一次运行可能未正常结束,删除 D:\1\scripts\master.lock 后重试
Q: 控制台偶尔点了没反应(比如点关闭没反应)、窗口有些位置拖不动? A: 有三个原因,已全部修复:
- 界面主线程每 2~5 秒反复调用 tasklist / adb devices / 查询计划任务,系统命令偶尔 卡几秒就会让界面“点了没反应”。已改为本地毫秒级进程检测,并把计划任务/ADB 检查 挪到后台线程。
- 布局改造时内容层把标题栏盖住了,导致关闭/最小化按钮和大部分标题栏拖拽区域点不到。 已重新把标题栏置顶。
- 右上角“操作成功”之类的提示条会临时盖住关闭按钮。已把提示条下移到控制栏下方。 另外,顶部白色控制栏现在按住空白处也能拖动窗口(按钮区域除外)。
Q: 切号/登录后游戏总弹「维持原有配置」「确认」这类首次启动提示,影响 MAA? A: 这是游戏的首次启动/配音包弹窗,根因是槽位里的登录数据缺少游戏写入的「已处理」标记。 脚本已自动处理:登录校验和 MAA 跑完后会把设备上最新的登录数据拉回槽位,已保存的官服槽位 也补上了标记。之后切号不会再弹;若游戏大版本更新后弹窗重现一次,脚本会在本轮自动记住, 下一轮起不再弹出。
Q: 进基建界面会弹一次指引,导致 MAA「基建换班」卡住/跳过?
A: 这是「基建站管理」的首次引导弹窗,同样是因为槽位数据缺「已看过」标记
(key_GB_viewed#BUILDING_STATION_MANAGE)。脚本在捕获和每轮登录校验后会把
$guideViewedKeys 清单里全部 16 项引导标记(基建/干员信息/危机合约/集成战略/
作战主页等)补写进槽位,四个账号槽位已一次性补齐;若游戏更新后出现清单外的
新引导弹窗一次,下一轮把新键名加进清单即可。
Q: 如何手动切回官服?
A: 运行 D:\1\scripts\switch_to_官服.ps1
仓库附带自解压安装包构建脚本(7-Zip SFX:引导程序 + 压缩的项目文件 +
setup.bat → install.ps1 安装逻辑)。安装包内置 Python 运行环境与 GUI 依赖
(体积约数百 MB),不包含 MuMu/MAA 本体;安装时无需预装 Python,也不用联网安装依赖。
- 本地构建:
版本号默认取最近的 git 标签(如
pwsh -ExecutionPolicy Bypass -File build\build_installer.ps1
v1.1.3→1.1.3),也可-Version 1.1.3指定。首次运行会自动引导 7-Zip(无需管理员:官方 MSI 用msiexec /a解压到build\tools,自解压模块 7zS.sfx 从官方 Extra 包下载)。产物在build\dist\MAA-Farm-Console-v<版本>-Setup.exe。 - 自动构建(推荐):推送
v*.*.*标签后,GitHub Actions(.github/workflows/release.yml) 会在 Windows 构建机上自动打包,并把Setup.exe挂到对应 Release;也可在 Actions 页手动触发(workflow_dispatch,填要挂载的标签名)。