ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MAA 基建换班三种模式的决策链路与自定义排班 JSON 字段行为

MAA 基建换班三种模式的决策链路与自定义排班 JSON 字段行为 MAA 基建换班三种模式的决策链路与自定义排班 JSON 字段行为【免费下载链接】MaaAssistantArknights《明日方舟》小助手全日常一键长草| A one-click tool for the daily tasks of Arknights, supporting all clients.项目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknightsMAA《明日方舟》小助手的基建换班模块负责把干员排进制造站、贸易站、控制中枢等设施并完成心情恢复与产物切换。本文面向已跑通基础功能、想弄清换班如何决策与如何写自定义排班 JSON 的中高级用户读完你可以按源码口径解释任意一次换班的执行顺序并能独立编写、校验自己的排班作业。从一次点击到换班完成三种 mode 的执行路径现象上你在任务设置里选择常规模式队列轮换或自定义基建配置其余操作一致。差异全部集中在参数注入阶段src/MaaCore/Task/Interface/InfrastTask.cpp 的set_params读取mode参数枚举定义在 src/MaaCore/Task/Interface/InfrastTask.hDefault 0、Custom 10000、Rotation 20000再据此装配一条子任务链。mode 值模式参数依赖0常规Defaultfacility、threshold、drones、四个跨设施组合开关10000自定义Customfacility、filename、plan_index20000队列轮换Rotationfacilitydrones不生效换班设施列表为什么不是顺序在常规模式下facility参数取值Dorm/Mfg/Trade/Power/Office/Control/Reception/Processing/Training/AssistantChange在 AsstInfrastDef.h 的build_facility_plan中先被装入std::unordered_set去重然后按固定顺序输出步骤制造站巡检 → 宿舍前置轮 → 发电站 → 办公室 → 控制中枢 → 制造站 → 贸易站 → 会客室 → 宿舍重排轮 → 加工站 → 训练室 → 副手换人。也就是说你在 GUI 里调整换班设施的顺序不会产生任何效果顺序由这套固定编码决定。两个特殊分支只启用贸易站未启用制造站时计划开头插入MfgInspect制造站以set_inspect_only(true)运行只读取产物类型与赤金线数量供贸易站评分使用不进入干员选择、不使用无人机InfrastTask.cpp构造函数与build_facility_plan注释。宿舍前置轮DormPrepare在常规模式下仅当fiammetta_recovery_enabled为 true 时才执行否则整步跳过宿舍重排轮DormRearrange不受影响始终清空宿舍后按心情升序安置低心情干员。触发条件 → 处理 → 结果的降级逻辑facility中出现未知字符串或某项不是字符串时set_params会清空已装配的子任务、只保留进入基建入口任务并返回 false本次基建换班直接失败。常规模式下的菲亚梅塔心情恢复走的是常驻m_dorm_task_ptrprepare 相位fiammetta_targets经infrast::normalize_fiammetta_targets规范化最多 3 名换班开始时挑当前心情最低的目标与菲亚梅塔同进宿舍互换再把目标换出。这与自定义模式由 JSON 注入的临时宿舍任务见后文是两条独立实现。验证方法常规模式下只勾选贸易站与宿舍观察EnterFacility回调序列会依次出现 Mfg巡检→ Dorm → Trade → Dorm与勾选顺序无关把fiammetta_recovery_enabled关掉后前置宿舍轮不再出现。队列轮换与自定义模式的装配差异队列轮换mode20000走build_facility_plan的另一分支步骤按facility的声明顺序输出该分支保留数组顺序但Dorm、Power、Office、Control四类设施被rotation_skips集合整体跳过制造站、贸易站、会客室三个任务被set_skip_shift(true)只做轮换不执行换人并在链首插入InfrastEnterRotation入口任务set_ignore_error(true)进入失败不阻断后续。自定义模式mode10000不读取 GUI 的drones、四个跨设施组合开关相关代码位于mode ! Mode::Custom与default_mode判断之后全部行为由filename指向的作业文件决定。决策流每个设施入口处的筛选、枚举与复核现象上MAA 点进每个房间后自动选了效率最高的干员。这一句背后是 InfrastProductionTask.cpp 中shift_facility_list()的固定次序产物识别 → 无人机pre→ skip 判定 → 换人编组匹配 / 自定义选择 / 算法选择→ 复核 → 确认 → 无人机post。产物识别与无人机触发点每个房间先按InfrastFlag*模板匹配当前产物只有得分达到模板阈值才采信set_product回调ProductOfFacility识别不可靠时清空m_product跳过所有依赖产物的分支。常规模式下制造站还会在此处按产物是否赤金更新TaskData::gold_station_num供后续贸易站评分。无人机按m_custom_drones_config.order分两侧Pre在换人之前、Post在换人之后触发且index已转为 0 基必须等于当前房间下标才生效。干员候选如何过滤opers_detect()滑完整个干员列表过滤规则是mood_ratio低于m_mood_threshold即 GUI 的基建工作心情阈值默认 0.3的干员剔除脸像哈希距离过近的视为同一干员去重。常规模式下技能集合无法唯一确定身份时调用resolve_operator_identity做 OCR 确认身份仍冲突的干员只计通用技能效果不触发特殊加成与跨设施联动——这就是识别不出名字的干员不会被误联动的底层原因。常规模式如何给组合打分optimal_calc()在常规模式下构建ScoreContext设施、产物、空位数、宿舍容量与等级和、赤金线数、发电站数、selected_operator_ids等调用 InfrastScore.cpp 的select_best_opers做全组合枚举用score_trade/score_mfg打分取最高分。打分基于 8 小时平均收益近似不计算心情消耗与换班间隔概率性效果忽略部分技能值被手动微调以制造优先级。两个值得注意的规则容量防护max_storage storage_sum 20 || storage_sum -15时组合直接禁选score_mfg末尾。only_need机制巫恋组、温蒂自动化类等特殊组合标记出唯一需要的干员select_combinations会把其余被选中干员从结果中释放给后续房间使用。跨设施加成的判定依据是context.selected_operator_ids例如黑键在贸易站的怅惘和声只有在絮雨或迷迭香已被选入其他设施时补 0.44 效率。这份已选集合来自共享的TaskData干员点进房间时仅stage_operator_selection暂存到 pending点击确认按钮click_confirm_button才真正commit_pending进入全局集合——所以设施间谁先上直接受前面提到的固定换班顺序影响。红松骑士团、感知信息、人间烟火、深海猎人四个参数use_pinus_sylvestris/use_perception_information/use_worldly_plight/use_abyssal_hunter只写入m_default_mode任务自定义模式传了也会被忽略。验证方法查看日志中optimal_calc输出的infrastructure optimal score设施名、分数、选中数把基建工作心情阈值调到 1.0 会看到几乎所有干员被过滤、房间留空。配置面自定义排班 JSON 的解析、校验与字段行为现象上你只改一个 JSON 文件但它的解析发生在set_params阶段而非运行时任何解析错误文件不存在、JSON 非法、plan_index越界、未知product、未知房间键、无人机room取值错误都会让set_params返回 false整次基建换班无法启动。⚠️ 因此先验证 JSON 语法再运行比事后看日志更快。解析链与失败点parse_and_set_custom_config的执行顺序均在 InfrastTask.cpp校验文件存在且为普通文件 → 打开 JSON → 按plan_index从plans数组取计划 → 录入groups编组 → 遍历rooms把每类设施注入对应任务 → 处理Fiammetta→ 处理drones。其中rooms的键必须命中control/manufacture/trading/power/meeting/hire/processing/dormitory之一否则整体失败注意这里的键名与facility参数的取值Dorm、Mfg等是两套词表。换人后的复核select_opers_reviewInfrastAbstractTask.cppOCR 已选列表逐一核销自定义名单若选中了工作中的干员或自定义名单未选全则返回 false调用方还原原始房间配置并重选。宿舍类房间is_dorm_order跳过复核直接按心情排序进驻。房间字段与执行时序房间数组的下标必须与游戏内房间 tab 序号一致current_room_config()用m_cur_facility_index取配置越界时该房间起不再换班。字段默认值行为要点skipfalse只跳过换人产物识别、无人机、线索交流等操作照常autofillfalse空名单 整房走原算法非空 只按单干员效率补位不算组合sortfalse仅当选中人数大于 1 时生效稀音/帕拉斯等需要暖机顺序的干员必须置trueproduct空取值Battle Record/Pure Gold/Dualchip/Originium Shard/LMD/Orundum未知值解析直接失败candidates空备选名单有谁选谁直到选满文档声明与autofill: true不兼容use_operator_groupsfalse启用后operators里写的是编组名按声明顺序取第一个全员可用的编组groupsplan 级空编组定义仅对 control / manufacture / trading 生效只装载被引用的编组匹配失败回调CustomInfrastRoomGroupsMatchFailedFiammettaplan 级无target经 OCR 识别为空则整段跳过order取值pre/post默认predronesplan 级无room只接受trading/manufactureindex为 1 基对应左侧 tab 序号内部减 1order默认prerule为保留字段当前无任何代码读取durationplan 级—保留字段当前版本不产生任何行为period字段 core 同样不处理按计划文档说明需接口集成方自行实现按时段选计划的逻辑。产物不一致时触发ProductIncorrect回调界面红色提示随后change_product每类产物最多重试 3 次切换失败只记录警告不阻断后续换人。无人机与菲亚梅塔都是pre时additional_advance_drones触发在链首插入一个独立的纯无人机任务目标房间用skip: true占位只执行use_drone注释说明无人机和菲亚梅塔同时为 true 时优先使用无人机。菲亚梅塔pre的实现是插入两个临时InfrastDormTask先把target单独挪出宿舍再按target菲亚梅塔的顺序进驻——源码注释解释了原因若菲亚梅塔本来就在宿舍第二格直接换不会触发技能所以强制变位。最小可用示例与字段速查{ title: 基础两班, plans: [ { name: A 班, drones: { room: trading, index: 1, order: pre }, rooms: { manufacture: [ { operators: [芬, 稀音, 克洛丝], sort: true, product: Battle Record }, { skip: true } ], trading: [ { operators: [古米, 银灰], candidates: [梅], autofill: true } ], power: [ { autofill: true } ] } }, { name: B 班, Fiammetta: { target: 可露希尔, order: pre }, rooms: { manufacture: [ { autofill: true }, { autofill: true } ], trading: [ { autofill: true } ] } } ] }注释仅为示意直接复制会报错。rooms里没写的设施如control、dormitory使用默认算法换班想完全不处理某个设施用房间级skip: true或在任务设置里取消对应设施勾选。内置作业可参考 resource/custom_infrast/153_layout_3_times_a_day.json注意其文件头声明干员配置要求极高。延伸材料协议文档docs/zh-cn/protocol/base-scheduling-schema.md官方手册docs/zh-cn/manual/introduction/infrastructure.md任务装配src/MaaCore/Task/Interface/InfrastTask.cpp换班计划与设施步骤枚举src/MaaCore/Common/AsstInfrastDef.h组合评分src/MaaCore/Task/Infrast/InfrastScore.cpp选人与复核src/MaaCore/Task/Infrast/InfrastAbstractTask.cpp【免费下载链接】MaaAssistantArknights《明日方舟》小助手全日常一键长草| A one-click tool for the daily tasks of Arknights, supporting all clients.项目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表