Skip to content

[pull] v2 from MaaEnd:v2#303

Merged
pull[bot] merged 3 commits into
Yuneko-dev:v2from
MaaEnd:v2
Jul 25, 2026
Merged

[pull] v2 from MaaEnd:v2#303
pull[bot] merged 3 commits into
Yuneko-dev:v2from
MaaEnd:v2

Conversation

@pull

@pull pull Bot commented Jul 25, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

he0119 added 3 commits July 25, 2026 18:32
## 用户侧变化

设置物品的最低保留数量后,售卖任务会根据当前库存与单次最大可售数量精确判断是否已经卖够。

以“优质芽针针剂保留 1000”为例:

- 当前库存不超过 1000:不会发起交易,直接确认该产品已达到保留量。
- 本次交易能够将库存降至 1000:按精确保留量完成交易,并且只在交易确认成功后标记完成。
- 单次交易不足以降至 1000:先卖出本次允许的最大数量,然后继续检查并售卖同一产品,不会提前跳过。
- 达到保留量后,该产品会从本次任务后续据点的售卖候选中排除,避免再次切换商品或尝试售卖。
- 达到时会立即提示:`🎯 优质芽针针剂已达到保留数量 1000,本次任务后续据点将跳过该产品`。
- 后续据点的计划不再把该产品列入“售卖顺序”,而会单独显示在“🎯 保留量已满足”中。
- 完成状态仅在当前任务内共享;下次运行会根据新的库存重新判断。

## 实现说明

- BetterSliding 新增可选参数
`TargetReachedOverrideEnable`:当解析后的目标处于本次滑块可选择范围内时,启用调用方提供的结果节点。
- `TargetReachedOverrideEnable` 只表示“本次交易可以达到目标”;SellProduct
仍会等待外层交易确认成功后,才把产品标记为保留量已满足。
- 如果一次交易无法达到目标,BetterSliding 会按当前最大可售数量执行,交易确认后再次检查当前产品。
- 已满足状态与缺货排除、用户“永不售卖”配置分别维护;优先商品识别会跳过已满足产品,但仍保留稳定 OCR 识别结果用于耗尽判断。
- PC 与 ADB 的据点 Pipeline 均由生成模板同步更新。
- 中英文 BetterSliding 组件文档已补充参数说明、结果矩阵和外层操作确认约束。
- 即时提示和据点计划文案已同步五种语言。

## 兼容性

- 保留数量 `0`(全部售卖)行为不变。
- “永不售卖”行为不变。
- 未配置 `TargetReachedOverrideEnable` 的其他 BetterSliding 调用方行为不变。
- 用户配置的保留数量始终作为精确下限。

## 验证

- `GOFLAGS=-mod=mod go test ./sellproduct ./bettersliding`:通过
- `node --test tools/pipeline-generate/SellProduct/*.test.mjs`:32/32 通过
- `pnpm check`:通过
- `pnpm test`:638/638 通过
- `pnpm format:go`、`git diff --check`:通过
## 为什么要改


「一键售卖产品」会缓存账号拥有的干员,用来规划各据点的联络干员。账号的干员情况发生变化后,这份缓存可能已经过期:游戏里当前派驻的明明是已知干员,缓存中却没有他。此时继续使用旧缓存规划,可能会漏掉可用人选,影响售前切换或售后恢复。

## 更新后的表现

进入据点准备售卖时,任务会核对当前派驻干员。如果发现他不在缓存中,会提示:

> 当前派驻干员 %s 不在干员缓存中,缓存可能已过期,将重新扫描干员列表

随后任务会自动重新扫描完整干员列表,再按最新结果继续售卖。用户不需要为这种情况手动开启「强制刷新干员缓存」。


重新扫描只会在一次任务中触发一次。如果本次任务已经完成过完整扫描,即使仍有干员没有识别出来,也不会反复重扫。刷新时只清除干员快照,已记录的据点发展值状态会保留。

同一画面下的缓存检查和最优干员判断现在共用一次 OCR 结果,避免连续识别两次相同区域。

## 其他调整

- 六个据点均已接入缓存过期检查,生成器模板同步更新。
- 维护文档中的干员加成档位、局部扫描、保留规则等说明按当前实现重新校正。
- 补充缓存失效、单次重扫限制和 OCR 复用测试。

## 验证

- `go test -mod=mod ./sellproduct`
- `python tools/validate_schema.py ...`
- `pnpm check`
- `pnpm test`
- SellProduct 生成器测试(22 项)
- GitHub Actions 全部通过
## 用户侧变化

- 无功能行为变化;新增地区接入时不再需要手动编辑任何 Pipeline 节点,仅需维护生成器数据。
- 补齐灼铜零件、分离芯的五语言 item.* 键,任务选项随之获得可翻译 label。

## 实现说明

- `sync-locales.mjs` 新增 item.* 键同步:为未被既有键覆盖的货品按 zmdmap
五语言名称补齐缺失键;中文名与既有键相同的货品复用旧键,不重复创建;已存在的键视为人工维护内容保留原值。
- 地区流程入口包装节点 `SellProduct{RegionPrefix}` 从手维护的 SellProduct.json 移入按地区生成的
Sell.json。
- `SellProductLoop` 的地区遍历列表依赖模型中的完整地区集合,改由单行数据的 loop-template.jsonc 生成到
SellProduct/Loop.json;手维护的 SellProduct.json 只保留任务入口与初始化链。
- 生成产物按地区分组组织:参考 EnvironmentMonitoring 的嵌套 outputPattern,Win32/ADB
两套据点文件从 Outposts/ 迁入 {RegionPrefix}/ 地区文件夹,地区入口节点由合并的 Sell.json
拆分为各地区独立的 SellProduct{RegionPrefix}.json。
- 地区据点锚点 `SellProductIn{RegionPrefix}Outpost` 并入 sell-template
按地区自动生成,锚定各地区第一个据点的标签页文本检查节点;EnterOutpost.json 更名为
OutpostShared.json,仅保留与地区无关的共享识别节点。
- 会话初始化链改为入口 SubTask 平行调度:SellProduct.json 新增
SellProductPrepareSession,以 SubTask 平行调度保留规则、优先售卖与干员会话三条初始化链,主干收口为
CaptureUid → PrepareSession → SellProductLoop;各链末端节点摘除 next
成为终止节点,消除跨文件隐式接续,避免 SubTask RunTask 沿 next 把主循环裹进子任务。
- 清理各据点无人引用的 `SellProduct{LocationId}RestoreOperatorNotFound`
遗留节点,恢复干员缺失统一由 RestoreOperatorNotFoundAtBottom 处理;task-data.mjs 的 18
个槽位选项字段改为按槽位编号展开,输出保持不变。

## 兼容性

- 售卖流程行为与生成产物内容不变,仅组织方式与归属调整。
- 已人工维护的 item.* 键值保留原值。

## 验证

- `node --test tools/pipeline-generate/SellProduct/*.test.mjs`:35/35 通过
- `pnpm check`:通过
- `pnpm test`:通过

## Summary by Sourcery

重构 SellProduct 流水线,使区域入口节点和主循环节点由生成器产生并按区域分组,同时保持销售流程行为不变,并改进物品标签的多语言维护。

New Features:
- 自动从模型驱动的循环和销售模板生成 SellProduct 区域入口节点和主 SellProductLoop。
- 扩展语言环境同步,为尚未覆盖的交易物品创建五种语言的 `item.*` 键,从而支持可翻译的预留规则标签。

Enhancements:
- 将 SellProduct 前哨站和区域流水线重新组织到按区域划分的文件夹中,适用于 Win32 和 ADB 资源包,实现统一的区域化结构。
- 更改会话初始化方式,将预留规则、优先销售和操作员会话作为并行 SubTask 分发,并设置明确的终止点。
- 在生成器数据中添加 RegionPrefix 和锚点位置元数据,以支持自动生成区域入口和前哨站锚点。
- 简化任务槽位选项投影,通过程序化展开每个槽位的 case 字段,而不是重复定义。

Documentation:
- 更新英文和中文的 SellProduct 维护文档,描述新的生成产物、区域文件夹布局、针对 `item.*`
键的语言环境同步行为,以及区域创建步骤。

Tests:
- 扩展 SellProduct 生成器测试,覆盖物品语言键插入行为、循环与入口的分离、区域路径预期,以及基于 SubTask 的会话初始化。

Chores:
- 将共享前哨站流水线重命名并精简为 `OutpostShared.json`,移除未使用的 `RestoreOperatorNotFound`
节点,使缺失操作员由单一共享节点处理。

<details>
<summary>Original summary in English</summary>

## Summary by Sourcery

Refactor the SellProduct pipeline so region entry and main loop nodes
are generator-produced and region-grouped, while keeping sell flow
behavior unchanged and improving locale maintenance for item labels.

New Features:
- Automatically generate SellProduct region entry nodes and the main
SellProductLoop from model-driven loop and sell templates.
- Extend locale syncing to create five-language item.* keys for trade
items not already covered, enabling translatable reserve-rule labels.

Enhancements:
- Reorganize SellProduct outpost and region pipelines into per-region
folders for both Win32 and ADB resource packs, unifying region-based
structure.
- Change session initialization to dispatch reserve rules, priority
selling, and operator sessions as parallel SubTasks with explicit
termination points.
- Add RegionPrefix and anchor location metadata to generator data to
support automated region entry and outpost anchor generation.
- Simplify task slot option projections by programmatically expanding
per-slot case fields instead of duplicating definitions.

Documentation:
- Update SellProduct maintenance documentation in English and Chinese to
describe the new generated artifacts, region folder layout, locale sync
behavior for item.* keys, and region creation steps.

Tests:
- Extend SellProduct generator tests to cover item locale key insertion
behavior, loop and entry separation, region-path expectations, and
SubTask-based session initialization.

Chores:
- Rename and trim shared outpost pipeline to OutpostShared.json and
remove unused RestoreOperatorNotFound nodes so missing operators are
handled by a single shared node.

</details>
@pull pull Bot locked and limited conversation to collaborators Jul 25, 2026
@pull pull Bot added the ⤵️ pull label Jul 25, 2026
@pull
pull Bot merged commit 1f7a414 into Yuneko-dev:v2 Jul 25, 2026
3 of 4 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant