Skip to content

锻造历史记录 ​

锻造历史记录存在哪里, 存了哪些内容, 怎么控制它什么时候写盘, 以及出问题时怎么排查

Forge 会给每个玩家单独保存锻造记录, 用来统计配方用了多少次, 驱动品质保底计数, 以及给锻造相关的占位符提供数据

配置位置 ​

历史记录的配置在 config.yml 的 history 节点里. 发货默认值:

yaml
history:
  enabled: true
  auto_save: true
  # 自动保存间隔, 6000 tick = 5 分钟
  save_interval: 6000
字段类型必填默认值取值范围说明
history.enabledboolean否truetrue / false它和 auto_save 一起决定要不要调度定时保存任务.它不会改变锻造次数和保底计数的累计: 计数一直都在记录, 关掉的只是定时写盘
history.auto_saveboolean否truetrue / false是否按固定间隔保存玩家数据
history.save_intervalinteger否6000tick 数, >= 0 (无法解析时用 6000)定时保存的间隔和第一次保存的延迟, 单位是 tick (20 tick = 1 秒 (一个游戏刻)). 6000 tick 大约是 5 分钟

NOTE

enabled 与 auto_save 里只要有一个是 false, 定时自动保存任务就不会被调度. 关掉自动保存不等于不写文件: 玩家退出, 重载和关服时仍然会写盘

yaml
history:
  enabled: true
  auto_save: true
  # 10 分钟
  save_interval: 12000

存储位置 ​

玩家数据保存在 plugins/EmakiForge/data/<玩家UUID>.yml, 每名玩家一个文件. 写入走异步路径 (不占用主线程); 文件里另有一块 _meta 版本信息, 用来在多个会话同时写时判断哪份快照更新

文件结构 ​

字段类型必填默认值取值范围说明
uuidstring是—玩家 UUID这份数据属于哪个玩家
recipesmap否空key 为配方 ID按配方分组的历史记录. 只包含锻造过的配方
recipes.<recipe_id>.craft_countinteger否0>= 0这个配方成功锻造了多少次
recipes.<recipe_id>.first_crafted_atstring否空ISO-8601 时间戳首次锻造的时间
recipes.<recipe_id>.last_crafted_atstring否空ISO-8601 时间戳最近一次锻造的时间, 给 %emakiforge_last_crafted% 提供数据
guaranteemap否空key 为配方 ID, 值为整数品质保底的连续未达标计数. 只包含被改动过的配方
_meta.epochinteger是0>= 0会话纪元, 用来在多处同时写时判断哪份更新
_meta.revisioninteger是0>= 0同一纪元内的修订号
_meta.tombstoneboolean是falsetrue / false为 true 时这个文件是一个删除标记, 加载时当成空数据处理
yaml
uuid: "3f1c1f2a-0000-0000-0000-000000000000"
recipes:
  flame_sword:
    craft_count: 3
    first_crafted_at: "2026-01-01T10:00:00Z"
    last_crafted_at: "2026-01-02T12:30:00Z"
guarantee:
  flame_sword: 2
_meta:
  epoch: 12
  revision: 0
  tombstone: false

与品质保底的关系 ​

保底计数器就存在玩家数据文件的 guarantee 节点里, 两者直接相关:

  • 每次锻造结果低于保底最低品质时, 保底计数 +1
  • 计数达到阈值后触发保底, 并重置计数
  • 保底触发条件和阈值见品质系统

使用建议 ​

  • 正式服建议你开启 enabled 和 auto_save
  • 并发高的服务器可以把 save_interval 调大一些, 少写几次盘
  • 赛季服或活动服可以在活动结束后把 data/ 目录归档, 用来统计配方产出

排查建议 ​

  • 数据没保存: 你先检查 enabled, auto_save 和 data/ 目录的权限
  • 玩家数据加载失败时, 这个玩家的会话会保持只读, 以保护已有文件, 控制台会输出对应的警告
  • 保底表现不对: 你先用 %emakiforge_guarantee_<recipe_id>% 确认当前计数, 再核对配方和全局的保底配置
  • 重载后数据不对: 你确认自动保存间隔, 必要时在维护前先停服, 等数据写盘完成