GUI 界面
EmakiForge 有两套 GUI 界面:锻造界面(玩家用来锻造)、配方书(浏览可用配方)。所有 GUI 配置文件放在 gui/ 目录下。
锻造界面
forge_gui.yml 布局
锻造界面是一个 5 行(45 格)的箱子界面:
行 1: [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
行 2: [ ] [BP] [BP] [ ] [CP] [ ] [RM] [RM] [ ]
行 3: [ ] [BP] [BP] [ ] [CP] [ ] [RM] [RM] [ ]
行 4: [ ] [OM] [OM] [OM] [ ] [ ] [ ] [CF] [ ]
行 5: [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
BP = blueprint_inputs 图纸输入槽
CP = capacity_display 容量显示槽
RM = required_materials 必选材料槽
OM = optional_materials 可选材料槽
CF = confirm 确认按钮| 槽位区域 | 槽位编号 | 说明 |
|---|---|---|
blueprint_inputs | 10, 11, 19, 20 | 放图纸的地方。配方要求什么图纸,就在这里放 |
capacity_display | 13, 22 | 显示当前已用容量和最大容量 |
required_materials | 15, 16, 24, 25 | 必选材料区域,这些材料必须放齐才能锻造 |
optional_materials | 28, 29, 30 | 可选材料区域,放了有额外效果,不放也能锻造 |
confirm | 34 | 确认锻造按钮,所有条件满足后点击执行锻造 |
配方书界面
recipe_book.yml 布局
配方书是一个 6 行(54 格)的箱子界面,用来展示玩家有权限查看的所有配方:
行 1: [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ]
行 2: [RL] [RL] [RL] [RL] [RL] [RL] [RL] [ ] [ ]
行 3: [RL] [RL] [RL] [RL] [RL] [RL] [RL] [ ] [ ]
行 4: [RL] [RL] [RL] [RL] [RL] [RL] [RL] [ ] [ ]
行 5: [RL] [RL] [RL] [RL] [RL] [RL] [RL] [ ] [ ]
行 6: [ ] [ ] [ ] [PV] [ ] [NX] [ ] [ ] [ ]
RL = recipe_list 配方列表槽位
PV = prev_page 上一页按钮
NX = next_page 下一页按钮| 槽位区域 | 槽位编号 | 说明 |
|---|---|---|
recipe_list | 10-16, 19-25, 28-34, 37-43 | 配方展示区域,每页最多 28 个配方 |
prev_page | 48 | 上一页 |
next_page | 50 | 下一页 |
完整锻造执行流程
从玩家点击确认按钮到锻造完成,系统内部经历了这些步骤:
玩家点击确认按钮 (confirm)
↓
canForge — 前置检查
├── 图纸是否匹配 blueprint_requirements
├── 必选材料是否齐全
├── 可选材料数量是否超过 optional_material_limit
├── 材料总容量是否超过 forge_capacity
├── 条件是否满足(condition_type + conditions)
└── 权限是否通过
├── 任一检查失败 → 提示错误,中止
└── 全部通过 ↓
prepareForge — 准备锻造
├── 收集所有材料的 effects
├── 汇总 stat_contribution
├── 汇总 quality_modify
├── 汇总 capacity_bonus
└── 汇总 structured_presentation
execute — 执行锻造
├── 执行 action.pre 动作
├── 确定品质等级(走品质计算流程)
├── 把品质倍率乘到所有属性值上
└── 消耗材料和图纸
build snapshot — 构建快照
├── ForgeLayerSnapshotBuilder 构建 layer snapshot
├── 写入 stat 数据
├── 写入 attribute 数据
└── 写入 structured_presentation 数据
preview — 预览产物
└── 生成输出物品并应用 meta_actions
give — 给予产物
├── 将产物放入玩家背包
├── 执行 action.success 动作
└── 执行品质动作(如有)
record — 记录审计
├── 写入玩家数据文件
└── 更新保底计数器提示
整个锻造流程是同步执行的,保证物品操作的原子性。如果中途出了异常,系统会回滚已消耗的材料,不会出现"材料扣了但没出东西"的情况。