配方如何存储材料与产物

配方定义把材料放在 needItems,把产物放在 chanceOutputItems 里——这就是为什么一个配方可以产出多个物品,以及产物为什么可以是概率性的。

  • 攻略
  • 正式版 1.0
  • 已核验
  • 核对于 2026-09-25

事实

配方定义数量
827
至少有一个材料
584
至少有一个产物
468
材料结构
物品 id 加一个数量表达式
产物结构
chanceOutputItems 数组,因此一个配方可以有多个产物
数字从哪来

游戏在 resources.assets 里随包发布一个 GameBalance 对象,其中 craftDefs 数组有 827 条。每条包含消耗用的 needItems 与产出用的 outputItems。本页数字不是估算,而是直接从该对象读出。

材料列表是扁平的

needItems 是扁平列表,每一项是「物品 id + 数量」。827 个配方中有 584 个至少有一项。需要两种材料的配方会表现为两条记录,而不是一条含两个数量的记录。

产物是嵌套的——这是最容易踩坑的地方

outputItems 不是列表,而是一个对象,其 chanceOutputItems 字段才是产物。由于字段名带有 chance,一个配方可以带多个可能产物;而把 outputItems 当扁平数组读的实现,会在全部 827 个配方上都报出零产物。改读 chanceOutputItems 才能找到 468 个有产物的配方。

如何推出基础材料

推出基础材料的做法是:反复把每一项替换成「能产出它的配方」的材料,并累加数量。当某个物品没有任何配方能产出时,它就是基础材料。递归必须记住当前路径上已经出现过的物品,因为生产链可能绕回自身;没有这层保护,展开不会终止。

本页不声称的内容

上述数量读自随包数据,但「配方在哪个工作站提供」以及「产物是必得还是概率」仍需复核后才能作为事实发布。这些字段已记录,但有意未写入本页的结论。

相关条目

关于中文文本

中文名称为本站翻译,尚未与游戏内官方中文本地化逐条核对,因此中文页面在核对前不视为权威命名。

来源

Read directly from the GameBalance object in the shipped build through scripts/gb_reader.py, cross-checked against the handover snapshot.

Read this page in English