流程说明
强化流程围绕“目标装备 + 强化配方 + 消耗材料 + 成功/失败结果”运行。排查问题时按流程定位:先看配方是否匹配,再看材料和费用,最后看 PDC 写入与展示刷新。
标准流程
text
┌─────────────────────────────────────────────────────────────┐
│ 1. 玩家打开强化 GUI │
│ 2. 放入目标装备 → 读取当前星级和装备类型 │
│ 3. 匹配可用强化配方(等级段、装备类型、权限) │
│ 4. 校验材料、金币、保护符、幸运符和条件 │
│ 5. 计算成功率(基础率 + 材料加成 + 幸运符加成 - 星级修正) │
│ 6. 检查保底状态(连续失败计数是否达到阈值) │
│ 7. 扣除消耗(材料、金币、保护符) │
│ 8. 执行随机判定 → 成功 / 失败 │
│ 9. 写入 PDC 强化数据 │
│ 10. CoreLib 重建装备展示 │
│ 11. 执行对应分支动作 │
│ 12. 刷新 GUI 和玩家背包 │
└─────────────────────────────────────────────────────────────┘排查入口
| 现象 | 先检查 |
|---|---|
| GUI 显示无法强化 | 配方 match、当前星级、权限和 stars 节点。 |
| 点击后提示材料不足 | materials、物品来源、数量和玩家实际背包。 |
| 金币不足或扣费异常 | economy.currencies、经济提供器和 cost_formula。 |
| 星级没有变化 | PDC strengthen layer 是否写入,是否被失败分支降级或保护。 |
| Lore 没刷新 | CoreLib 装配是否执行,必要时使用 refresh 命令。 |
详细阶段说明
阶段 1-2:打开 GUI 与装备识别
玩家打开强化 GUI 后,将目标装备放入指定槽位。模块会:
- 读取装备当前的 strengthen layer(星级、锻印状态、保底计数)。
- 识别装备类型(通过 Material tag、物品来源或 PDC 标记)。
- 如果装备没有 strengthen layer,视为 +0。
阶段 3:配方匹配
根据以下条件筛选可用配方:
- 装备类型是否匹配配方的
match规则。 - 当前星级是否未超过
limits.max_star,且目标星级存在对应stars配置。 - 玩家是否拥有配方所需权限。
- 配方是否启用。
如果没有匹配到配方,GUI 应提示"无法强化"。
阶段 4:校验
校验以下内容:
| 校验项 | 失败行为 |
|---|---|
| 必需材料数量 | 提示材料不足,阻止操作。 |
| 经济余额 | 提示金币不足,阻止操作。 |
| 条件检查 | 执行 deny_actions,阻止操作。 |
| 星级上限 | 提示已达最高等级,阻止操作。 |
保护符和幸运符在此阶段被识别但不强制要求。
阶段 5:成功率计算
text
最终成功率 = 基础成功率 + 材料加成 + 幸运符加成成功率通常限制在 0~1 范围内。部分配方可能允许超过 100%(保证成功)。
阶段 6:保底检查
如果配方配置了 guarantee_after:
- 连续失败次数 ≥
guarantee_after时,本次强制成功。 - 保底触发后重置计数器。
阶段 7:消耗扣除
在所有校验通过后扣除:
- 必需材料(按配置数量消耗)。
- 经济费用(按
economy.currencies[].cost_formula计算)。 - 保护符(如果放入了保护符,无论成功失败都消耗)。
- 幸运符(如果放入了幸运符,无论成功失败都消耗)。
阶段 8:随机判定
生成 0~1 随机数,与最终成功率比较:
- 随机数 ≤ 成功率 → 成功
- 随机数 > 成功率 → 失败
阶段 9:写入 PDC
根据结果更新 strengthen layer:
- 成功:星级 +1,重置保底计数,可能触发里程碑。
- 失败 keep:星级不变,保底计数 +1。
- 失败 downgrade:星级 -N(N 由
downgrade_levels决定),保底计数 +1。 - 失败 destroy:装备被摧毁(从背包移除),保底计数重置。
- 保护触发:抵消 downgrade 或 destroy,改为 keep,保底计数 +1。
阶段 10-12:展示重建与反馈
- CoreLib Assembly 重建装备名称和 Lore(更新星级显示)。
- Attribute 可选读取新的强化属性。
- 执行对应分支的动作列表。
- 刷新 GUI 显示。
结果分支
| 分支 | 触发条件 | 说明 |
|---|---|---|
success | 随机判定成功或保底触发 | 星级提升,重置保底计数。 |
failure_keep | 失败且惩罚为 keep | 星级不变,材料和金币已消耗。 |
failure_downgrade | 失败且惩罚为 downgrade,无保护符 | 星级降低。 |
failure_destroy | 失败且惩罚为 destroy,无保护符 | 装备被摧毁。 |
protected | 失败且惩罚为 downgrade/destroy,但有保护符 | 保护符抵消惩罚,等效于 keep。 |
锻印(Temper / Crack)
部分配方可能在失败时产生锻印(历史命名为 crack)。锻印是一种累积标记:
- 每次特定类型的失败可能增加锻印计数。
- 锻印达到阈值时可能触发额外惩罚或限制。
- 部分配方可能提供"清除锻印"的材料或流程。
锻印状态保存在 strengthen layer 的 PDC 中。
里程碑
达到指定星级时可以触发里程碑效果:
- 额外属性加成。
- 特殊名称前缀或 Lore 标记。
- 执行里程碑动作(如全服广播)。
里程碑配置通常在配方或全局配置中定义。
动作节点
| 节点 | 触发时机 |
|---|---|
actions.success | 强化成功后。 |
actions.failure | 强化失败后(所有失败类型)。 |
actions.failure_downgrade | 降级失败后。 |
actions.failure_destroy | 摧毁失败后。 |
actions.protected | 保护符触发后。 |
actions.guarantee | 保底触发后。 |
动作示例
yaml
actions:
success:
- 'sendtitle title="<green>强化成功</green>" subtitle="<gray>装备提升至 +%star%</gray>" fade_in=5t stay=40t fade_out=10t'
- 'playsound sound=minecraft:block.anvil.use volume=1 pitch=1.3'
- 'spawnparticle particle=happy_villager count=15 offset_x=0.3 offset_y=0.5 offset_z=0.3'
failure_keep:
- 'sendmessage text="<red>强化失败,装备等级未变。</red>"'
- 'playsound sound=minecraft:entity.villager.no volume=1 pitch=1'
failure_downgrade:
- 'sendmessage text="<red>强化失败,装备等级下降至 +%star%。</red>"'
- 'playsound sound=minecraft:block.anvil.destroy volume=1 pitch=0.8'
failure_destroy:
- 'sendtitle title="<dark_red>装备损毁</dark_red>" subtitle="<gray>强化失败,装备已被摧毁</gray>"'
- 'playsound sound=minecraft:entity.wither.death volume=0.5 pitch=1.5'
protected:
- 'sendmessage text="<yellow>保护符发挥了作用,抵消了失败惩罚。</yellow>"'
- 'playsound sound=minecraft:block.enchantment_table.use volume=1 pitch=1.2'
guarantee:
- 'sendmessage text="<gold>保底触发!本次强化必定成功。</gold>"'