ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

MaaAssistantArknights 库存保持(Depot Maintain)全指南:从计划配置到智能理智判定的源码级解读

MaaAssistantArknights 库存保持(Depot Maintain)全指南:从计划配置到智能理智判定的源码级解读 MaaAssistantArknights 库存保持Depot Maintain全指南从计划配置到智能理智判定的源码级解读【免费下载链接】MaaAssistantArknights《明日方舟》小助手全日常一键长草| A one-click tool for the daily tasks of Arknights, supporting all clients.项目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights库存保持是《明日方舟》小助手 MaaAssistantArknights 的 UI 层自动化任务它根据仓库识别缓存的材料库存数据自动计算缺口、逐条刷取指定关卡直到材料达到目标库存后停止。本文以官方文档为基础结合 DepotMaintainTask.cs、DepotMaintainTaskUserControlModel.cs 与 FightSettingsUserControlModel.cs 的源码实现完整讲解工作原理、计划配置、预设、高级设置与理智不足跳过规则让你既能熟练上手也能理解每条规则背后的判定逻辑。说明本页功能由 UI 层MaaWpfGui实现详见新手上路中的说明。它不是一个独立的底层任务类型而是 UI 层将仓库识别 若干理智作战任务动态拼接成任务链下发到核心MaaCore执行。工作原理库存保持的完整执行流程可拆解为五个阶段更新库存基准任务开始时如果勾选了「任务开始前更新库存数据」先追加一个Depot仓库识别任务获取最新的材料库存取消勾选则直接使用上次缓存的库存数据。计算缺口根据每条计划中设定的目标库存DropCount减去当前已有数量currentCount计算需要刷取的缺口need DropCount - currentCount。生成作战任务对有缺口的材料自动添加对应的理智作战任务TaskType.Fight并将Drops设为{ dropId: need }次数上限设为int.MaxValue——即刷到达标为止没有次数上限。实时更新库存缓存每次关卡掉落后UI 层通过AsstProxy中的UpdateDepotFromDrops联动更新仓库缓存见 AsstProxy.cs因此前序计划刷出的材料会实时影响后续计划的缺口计算。逐条即时判定每条计划开始前会重新判定是否需要执行详见下文「理智不足时的跳过规则」日志中会逐条说明跳过原因。::: tip 库存数据同步 库存数据是缓存值手动刷关、合成或消耗材料后可能与实际不一致。可通过 更新数据 任务或 小工具 - 仓库识别 工具同步。 :::从源码看序列化阶段Serialize会逐条遍历计划掉落物为空或目标数量 ≤ 0 的计划直接报错跳过库存已达标的计划输出库存充足日志后跳过关卡无效未填写或当日未开放的计划输出对应日志后跳过只有真正存在缺口且关卡可用的计划才会被拼进任务链见 DepotMaintainTaskUserControlModel.cs。数据模型每条计划在配置层对应一个Plan记录DepotMaintainTask.cspublic record class Plan( string Stage , // 关卡 string DropId , // 目标掉落材料 ID int DropCount 0, // 目标库存 bool UseMedicine false, // 是否使用理智药 int MedicineCount 0, // 理智药数量 bool UseStone false, // 是否使用源石 int StoneCount 0, // 源石数量 [property: JsonIgnore] int TaskId 0); // 下发后的核心任务 ID不参与序列化计划配置每条计划包含以下配置项配置项说明关卡选择选择刷取的关卡。支持常规关卡、芯片本、资源关卡等不支持「当前/上次」。指定掉落物选择目标掉落材料。每个关卡可能有多个可掉落物请选择实际需要刷取的材料。目标库存设定该材料的目标持有数量。达到后该条计划自动完成。使用药剂勾选后可设定使用理智药的数量。使用源石勾选后可设定碎源石的数量。计划列表中的条目可以拖拽调整顺序。运行时会按顺序逐条执行——注意顺序意味着前序计划刷出的材料会先更新缓存进而影响后续计划的缺口计算因此把急需的材料排前面、把可能顺手刷出的材料排后面往往更高效。预设无需手动逐条填写界面内置以下预设可一键填充计划预设数据定义见 DepotMaintainTaskUserControlModel.cs低级芯片全职业PR-A/B/C/D-1目标各 20 个高级芯片组全职业PR-A/B/C/D-2目标各 20 个龙门币CE-6目标 200 万采购凭证红票AP-5目标 5000技巧概要·卷3CA-5目标 200以「低级芯片」为例该预设实际展开为 4 条计划PR-A-1医疗芯片 3261、重装芯片 3231、PR-B-1术师芯片 3251、狙击芯片 3241、PR-C-1先锋芯片 3211、辅助芯片 3271、PR-D-1近卫芯片 3221、特种芯片 3281各目标 20 个。预设只是批量填充的快捷方式填充后仍可按需增删改。高级设置任务开始前更新库存数据勾选后任务开始时会先追加一次Depot仓库识别任务以获取最新库存取消勾选则使用上次缓存的库存数据。建议保持勾选除非你确定缓存数据仍然准确或想节省识别时间。从源码看勾选时会在任务链最前面插入仓库识别任务并记录其 taskId 以便识别完成后刷新缓存同步时间见 DepotMaintainTaskUserControlModel.cs。AUTO 代理倍率未勾选时按单倍1×代理刷取下发参数Series 1勾选后按当前理智可刷的最大倍率代理Series 0单次刷取数量可能超过目标库存上限。这在刷取少量缺口、但当前理智足以支撑高倍率时能显著节省时间。启用「使用药剂」/「使用源石」勾选框控制各计划是否显示对应的药剂/源石行。关闭后所有计划统一不使用药剂或源石——源码中体现在下发作战参数时做了一次总开关 × 计划开关的双重判断Medicine depot.UseMedicine plan.UseMedicine ? plan.MedicineCount : 0, Stone depot.UseStone plan.UseStone ? plan.StoneCount : 0,只要任一开关关闭对应数量就被强制置 0见 DepotMaintainTaskUserControlModel.cs。使用 48 小时内过期的理智药勾选后所有计划都会优先使用 48 小时内即将过期的理智药固定 2 天阈值源码常量ExpiringMedicineDays 2见 DepotMaintainTask.cs。该值会随作战任务下发为medicine_expire_days参数见 AsstFightTask.cs。未设药剂预算的计划也会尝试使用临期药。这类计划只有在以下情况才会被理智不足判定跳过本次执行的任务链中已有库存保持计划或「目标库存」模式的理智作战未达到目标库存而正常结束即已尝试用尽窗口内的临期药仍然打不动。按次数刷的理智作战结束原因不唯一可能只是刷够了次数不构成此证明。这一耗尽证明机制在 FightSettingsUserControlModel.cs 中实现当无次数上限的库存任务正常结束但当前库存仍未达标时说明结束原因只能是理智不足且结束前已尝试用尽窗口内的临期药由于运行内药剂库存只减不增程序会记录临期药窗口的历史最大值ProvenExhaustedMedicineDays Math.Max(...)供后续计划判定是否可跳过。活动期间跳过勾选后当检测到有活动SideStory进行中时跳过整个库存保持任务。源码判定调用StageManager.IsActivityOpen()命中时输出活动进行中跳过库存保持计划日志并直接返回见 DepotMaintainTaskUserControlModel.cs。适合活动期间想把理智留给活动关卡的场景。资源收集限时全天开放期间跳过勾选后当检测到资源收集关卡处于限时全天开放期间时跳过整个库存保持任务。判定调用StageManager.IsResourceCollectionOpen()见 DepotMaintainTaskUserControlModel.cs。原理与活动期间跳过相同限时全天开放时资源关卡往往有更高的性价比或更灵活的刷取窗口此时跳过避免与活动规划冲突。仅执行第一个库存不足的计划勾选后每次运行只执行第一个库存不足且当日可执行的计划日志也只显示到该计划为止该计划补满后下次运行自动继续后续计划。当日不可执行的计划关卡未开放、配置无效会被跳过。源码中的实现非常直接在序列化循环中一旦成功下发了一个存在缺口的计划且该选项开启立即break后续计划本轮不评估也不输出日志见 DepotMaintainTaskUserControlModel.cs。适合理智有限、希望补完一个再补下一个的细粒度控制场景。理智不足时的跳过规则这是库存保持最核心也最容易被忽略的智能机制官方文档给出了完整规则结合源码可进一步理解其判定链条理智来源判定依据的是本次执行的任务链中最近一场进图战斗库存保持的计划或独立理智作战上报的理智值并按每 6 分钟回复 1 点、不足 6 分钟按 6 分钟计算来估算当前值不超过理智上限。有预算不跳过设置了药剂或源石预算的计划不会被理智不足判定跳过——即使理智不够也会进图并按预算回复理智继续作战。无预算的跳过条件未设预算的计划在库存已达标、或估算的当前理智低于本关卡单次进图的最低消耗StageApCostHelper.GetApCost(stage)见 StageApCostHelper.cs**且临期药窗口已证明耗尽或未启用临期药**时会被直接跳过不进图查看。最新状态优先判定使用的是最新状态——中间计划吃药打到目标库存后剩余的理智仍会流向后续关卡。从源码看该判定在RefreshFightTaskDrops中统一实现FightSettingsUserControlModel.cs并同时服务于理智作战的「目标库存」模式和库存保持任务判定命中时直接将下发任务的MaxTimes置为 0核心侧收到后不会进终端、不会导航从而实现零操作跳过。若关卡消耗未知手输关卡、复刻前缀等则跳过理智判定并记录日志保持可观测避免误判。兜底细节关卡失效与掉落物校验序列化时还会处理两类边界情况未选择掉落物或目标数量 ≤ 0 的计划直接报错关卡未填写或当日未开放的计划被跳过其中当日未开放会输出带关卡名的提示日志见 DepotMaintainTaskUserControlModel.cs。此外手动输入关卡时需自行确保关卡名有效关闭手动模式后无效关卡会被自动清空。任务下发与日志标识库存保持和更新用户数据会在一个任务项里拼接多条独立任务链默认日志任务名全部相同因此 UI 层按链区分更新用户数据按链型追加半角括号功能名库存保持的计划链按 taskId 反查PlanList追加#N序号仓库识别链追加功能名见 AsstProxy.cs 中关于日志任务名的处理。也就是说你在运行日志里看到的库存保持 #2这类标签对应的是计划列表中第 2 条计划。与仓库识别、更新数据的关系库存保持依赖两条数据链路小工具 - 仓库识别支持从首页自动进入仓库若自动跳转失败请手动切换到仓库「养成材料」界面并滑动到最左侧后开始功能。识别后的库存数据会缓存保存供库存保持任务和理智作战中的「目标库存」模式使用。更新数据与手动的小工具仓库识别共享同一套缓存但会自动进入仓库界面完成识别并可配合触发间隔每次 / 每天 / 每周实现自动化。建议设为「每天」在每天首次运行时自动同步数据避免频繁 OCR 影响效率。将「库存保持」与「更新数据每天」搭配使用即可形成每天先同步库存、再按缺口自动补材料的闭环自动化。常见配置场景速查目标场景推荐配置全职业芯片储备使用「低级芯片全职业」或「高级芯片组全职业」预设缺龙门币使用「龙门币」预设CE-6200 万理智药快过期勾选「使用 48 小时内过期的理智药」活动期间不想动库存勾选「活动期间跳过」或「资源收集限时全天开放期间跳过」理智有限、想逐个补齐勾选「仅执行第一个库存不足的计划」库存数据可能不准 / 想节省识别时间按需开关「任务开始前更新库存数据」想用高倍率快速清理智勾选「AUTO 代理倍率」注意单次刷取可能超过目标库存上限不想让 MAA 消耗任何药剂 / 源石关闭「启用使用药剂 / 使用源石」总开关最后提醒仓库识别结果只是缓存值手动刷关、合成或消耗材料后请及时通过更新数据或仓库识别同步否则库存保持会基于过期数据计算缺口导致刷多或刷少。【免费下载链接】MaaAssistantArknights《明日方舟》小助手全日常一键长草| A one-click tool for the daily tasks of Arknights, supporting all clients.项目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表