拓冰建站拓冰建站
首页 / 资讯中心 / 正文

MaaAssistantArknights 保全派驻协议(SSS):SSS 作业 JSON 的字段语义、执行流程与源码级实现解析

MaaAssistantArknights 保全派驻协议SSSSSS 作业 JSON 的字段语义、执行流程与源码级实现解析【免费下载链接】MaaAssistantArknights《明日方舟》小助手全日常一键长草| A one-click tool for the daily tasks of Arknights, supporting all clients.项目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights本文基于 MaaAssistantArknights明日方舟小助手下称 MAA仓库中的协议文档 保全派驻協定 展开完整覆盖 SSS保全派驻协议 JSON 的每一项顶层字段与关卡内字段的取值、必填性及其在游戏内对应的实际行为并结合 SSSCopilotConfig.cpp、SSSBattleProcessTask.cpp 等源码说明策略求值、掉落挑选与失败重开的底层实现帮助读者能够独立编写、校验和调试一份可用的保全派驻作业文件。协议概述SSS 作业文件的定位与基本约定保全派驻是《明日方舟》中的 Roguelike 模式每局需要多张干员、随关卡变化调整阵容传统抄作业式的逐步指令难以覆盖其随机性。MAA 为此设计了 SSS 协议用户用一份 JSON 描述哪些干员是核心core、每个格子还需要哪些职业的工具人tool_men、掉落时优先挑谁核心引擎在战斗中自主循环决策。协议文件的基本约定以 协议文档 为准JSON 不支持注释文档示例中的//注释仅用于说明实际文件必须去除type字段固定为SSS用于与其他协议类型如普通抄作业区分不可修改minimum_required声明该作业所需的最低 MAA 版本避免低版本执行不支持的作业示例文件中字段标注必选/選填本文按此逐项展开。一个最小可运行文件的骨架如下去掉注释{ type: SSS, stage_name: 多索雷斯在建地块, minimum_required: v4.9.0, tool_men: { Pioneer: 13, Warrior: 2, Medic: 2 }, drops: [ 空弦, 能天使, 先锋, Support ], stages: [ { stage_name: 蜂拥而上, strategies: [ { core: 棘刺, tool_men: { Pioneer: 1, Warrior: 1, Medic: 1 }, location: [10, 1], direction: Left } ], draw_as_possible: true } ] }顶层字段逐项说明基本信息与描述字段必填说明type必选固定为SSSstage_name必选保全派驻地图名称整局地图如多索雷斯在建地块minimum_required必选最低 MAA 版本号如v4.9.0doc选填展示用描述title/title_color/details/details_color。建议作者在此署上自己姓名与参考攻略出处在源码中doc、stage_name、minimum_required等基础信息由 SSSCopilotConfig::parse 中的CopilotConfig::parse_basic_info(json)统一解析进battle::copilot::BasicInfo结构定义见 AsstBattleDef.h供界面展示与版本校验使用。开局选择buff、equipment、strategybuff: 自适应补给元件, // 开局导能元件选择选填 equipment: [ A,A,A,A,B,B,B,B ], // 开局装备选择横着数 strategy: 优选策略, // 或者 自由策略选填从源码可以确认equipment的解析约束SSSCopilotConfig.cpp 只接受A/a/B/b四个取值大小写不敏感映射到EquipmentType::A/B若数组长度不等于8引擎仅会输出一条equipment size is not 8的警告日志而不中断。因此写这份数组时务必横向数满 8 格。需要注意文档明确说明equipment在当前版本暂未实现自动选择只会在界面上显示实际开局元件/装备仍需人工确认strategy优选策略/自由策略同理。干员指定与编组opers、groupsopers: [ { name: 棘刺, skill: 3, skill_usage: 1 } ], groups: [ { name: 地面阻挡, opers: [ { name: 棘刺, skill: 3 }, { name: 泥岩, skill: 2 } ] } ]opers指定编队干员、技能序号与技能用法选填文档注明当前版本仅用于界面显示groups干员编组用法与普通抄作业协议中的groups完全一致可参考 copilot 协议文档其价值在于actions 中可以直接填编组名来代表组内任意干员。源码侧groups在 SSSCopilotConfig::parse 中通过CopilotConfig::parse_groups解析后会复制到每一个 stage 的CombatData.groups中第 70 行即编组是全局定义、按关卡继承的。工具人、掉落优先级与黑名单tool_men: { Pioneer: 13, 近衛: 2, Medic: 2 }, drops: [ 空弦, 能天使, // 支援幹員名稱 先锋, Support, // 職業名稱中英文均可 無需增調幹員, // 不招人 重整導能組件, 反制導能組件, // 支援裝備名稱 戰備激活閥, 改派發訊器 // 關卡中途的可選裝備也放這裡 ], blacklist: [ 夜半, 梅爾 ]tool_men必选声明整局还需要各职业若干人引擎按费用排序随便拿人填充。文档注明当前版本仅作界面显示实际招募由drops驱动drops战斗开始与中途招募干员、获取装备的优先级列表。这是一个混合数组干员名、职业名中英文均可、特殊指令如無需增調幹員表示本次不招人、支援装备名与关卡中途可选装备名全部混排引擎按列表顺序逐个尝试匹配blacklist黑名单。挑选掉落时不会选中名单内的干员。职业名的中英文归一由 AsstBattleDef.h 的get_role_type实现Pioneer/Vanguard/先锋都映射到Role::Pioneer近卫/Guard/Warrior映射到Role::WarriorDrone/Summon/无人机映射到Role::Drone共覆盖 8 大职业与无人机。drops 的实际执行逻辑在 SSSDropRewardsTaskPlugin.cpp 中插件在SSSDropRecruitmentFlag子任务触发时用SSSDropRecruitmentOCR对掉落面板做 OCR先剔除黑名单中的名字对应文档在 drops 里不会选这些人然后按drops列表顺序逐个与 OCR 结果比对——条目若是职业名则比对干员职业若是具体名字则比对文本命中即点击并确认若全部落空则回退选择第一个候选。这与文档战斗开始时和战斗中途招募干员、获取装备优先级的描述完全对应。关卡结构stages 数组stages是整份作业的核心写几关打几关——只写到第 4 关则打完第 4 关自动重开。每个元素代表一张单层关卡{ stage_name: 蜂拥而上, // 單層關卡名稱必填 strategies: [ /* 必填 */ ], draw_as_possible: true, // 「調配幹員」按鈕是否好了就用必選 actions: [ /* 選填 */ ], retry_times: 3 // 失敗重試次數選填預設 0 }字段注意关卡定位支持name、stageId、levelId推荐后两者请勿使用code如 LT-1因为会与其他保全关卡冲突。strategies格位策略与求值规则strategies是必选数组每条策略描述在某格子部署谁{ core: 棘刺, tool_men: { Pioneer: 1, Warrior: 1, Medic: 1 }, location: [10, 1], direction: Left }core核心干员选填可省略tool_men该格还需要部署的各职业工具人数量location格子坐标[x, y]direction部署朝向对应源码枚举 DeployDirectionRight默认、Down、Left、Up。引擎对strategies的求值规则文档注释与 check_and_do_strategy 一致每次检查都从头自上而下依次进行跳过已执行完毕的策略若当前策略的工具人已部署完毕没有core→ 策略视为执行完毕有core且可部署费用已转好→ 部署 core策略执行完毕源码中会标记all_deployed true并清掉该 core 名字见 SSSBattleProcessTask.cppcore正在转费用 →等待并跳过后续策略若工具人还未部署完毕待部署区没有所需职业的工具人 → 检查下一条策略有但费用未转好 → 等待存在可立即部署的 →优先部署费用少的同一格的策略没有core时允许在待部署区没有所需工具人时继续检查同一格后续策略有core则未执行完毕时忽略同一格后续策略同一格可以写多个干员 core非最靠后的 core 在其策略执行完毕后等效过牌不计入工具人需求。一个不含core的策略如文档示例中tool_men: {Support: 100}的条目常被用来部署辅助过牌类干员——数量上限只是约束实际按可用情况部署。此外源码还揭示了一个文档未写的行为工具人部署时引擎会为其自动登记技能用法SkillUsage::Possibly好了就用见 SSSBattleProcessTask.cpp 的m_skill_usage写入逻辑。draw_as_possible 与 actionsdraw_as_possible必选控制调配干员按钮是否好了就用。在主战斗循环 do_strategic_action 中每一帧的固定顺序是check_and_get_drops——处理掉落/增援选择check_and_do_strategy——按上述规则执行 strategiesuse_all_ready_skill——已就绪的技能全部使用draw_as_possible draw_card——满足条件时点调配干员。actions选填复用抄作业协议的 actions 体系可参考 copilot 协议符合 action 触发条件就执行 action否则回落到 strategies 逻辑。SSS 在此基础上新增了两个 type定义见 ActionType 枚举{ type: 調配幹員 } // 点一下「調配幹員」按鈕在 draw_as_possible 为 true 时无效 { type: CheckIfStartOver, name: 棘刺 } // 檢查幹員在不在不在就結束重開 { name: 桃金娘, location: [4, 5], direction: 左 } // 普通部署 { kills: 10, type: 撤退, name: 桃金娘 } // 击杀 10 个后撤退CheckIfStartOver的实现见 check_if_start_over先刷新待部署区与战场干员列表若指定name的干员既不在待部署区、也不在战场上支持按role放宽匹配则调用abandon()放弃本局重开若给的是role_counts职业需求则检查待部署区职业数量是否不足。retry_times失败重开retry_times选填默认 0是战斗失败重试次数超过则直接放弃整局。源码中 SSSStageManagerTask::preprocess_data 将每关预算记为retry_times 1首打 重试次数每次打失败扣一次预算耗尽后走settle()流程结算并回调SSSSettlementwhy: Cant win, run!。整局调度从进关到结算的源码级流程单局保全的总控在 SSSStageManagerTask主循环为confirm_battle_complete()用模板匹配SSSConfirmBattleComplete确认上一战结束analyze_stage()用SSSStageNameOCR识别当前关卡名与stages中已写的关卡匹配。关卡在配置解析阶段已通过Tile.find(stage_name)查得格子代码SSSCopilotConfig.cpp因此这里只认作业里写过的关——没写的关卡不会进入stages_data自然触发结算退出这就是写几关打几关的机制若处于开局界面SSSBegin命中且战斗未开始回调SSSGamePass判定通关成功click_start_button()后创建 SSSBattleProcessTask 执行单关战斗随后--times继续下一关。SSS 单关战斗继承自通用BattleProcessTask但有两个针对性定制开局换人wait_until_start 在预选界面会把费用 ≥ 29 的非 core 干员替换掉最多 4 个无人机如超重绝缘水泥直接丢弃若先锋不足 2 个则把费用阈值降到 25 以试图换出先锋若 core 名单里含超重绝缘水泥则只替换 1 个防止换掉水泥帧率节流do_strategic_action开头按全局配置项SSSFightScreencapInterval对应 GeneralConfig.h 中sss_fight_screencap_interval保全战斗截图最小间隔限制截图频率避免空转消耗 CPU配合 update_deployment_with_skip待部署区 30 秒无变化通常是挂机攒费阶段时检查间隔放宽到 1 秒。编写建议与限制总结结合文档标注与源码实现编写 SSS 作业时需注意事项依据提交前删除所有//注释JSON 不支持注释协议文档equipment必须横着数满 8 格取值仅 A/B大小写均可SSSCopilotConfig.cpp关卡名勿用LT-x类 code改用 stageId/levelId文档明确提示会与其他保全关卡冲突tool_men与策略内的职业名中英文均可get_role_typedraw_as_possible是 stages 内必选项遗漏会导致解析失败stage.at(draw_as_possible)为强访问SSSCopilotConfig.cppbuff/strategy/equipment/opers/顶层tool_men当前多为界面展示实际行为以dropsstrategiesactions为准文档目前版本暫未實現只會在介面上顯示一下示例文件方面协议文档指向官方数据仓库 dev-v2 分支的resource/copilot/目录数据仓库与代码仓库分离本仓库内不含该目录可从源码解析入口SSSCopilotConfig::parse与上述字段表交叉校验任何一份示例作业的合法性。【免费下载链接】MaaAssistantArknights《明日方舟》小助手全日常一键长草| A one-click tool for the daily tasks of Arknights, supporting all clients.项目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门