配置详解
plugins/EmakiStation/config.yml 是主配置。version 是配置结构标记,插件按它合并新增的默认键;它与模块发布版本不同轨,不需要手工改成插件版本。
顶层键
| 键 | 默认值 | 说明 |
|---|---|---|
version | "1.0.8" | 配置结构版本标记,随默认资源同步维护。源码内部迁移常量另为 1.0.2,不要混用。 |
language | "zh_CN" | 语言文件名,对应 lang/<language>.yml。 |
release_default_data | true | 首次启动时是否释放示例数据(stations/、gui/、recipes/ 下的示例文件)。改为 false 后已存在文件不会被覆盖,也不会再补齐缺失示例。 |
queue 队列默认值
每个工作站可以在自己的 stations/<id>.yml 里覆盖同名键。
| 键 | 默认值 | 说明 |
|---|---|---|
base_length | 3 | 基础队列长度。只有 waiting / running 占用长度,pending_claim 不占用。 |
permission_tiers | true | 是否启用权限分级。启用后 emakistation.queue.<n> 中数字最大的一档生效。 |
max_length | 32 | 权限分级后的硬上限,任何权限都不能突破。 |
progress_mode | "offline" | 队首推进方式:offline 按真实时间推进,online 仅在玩家在线时累计。 |
cancel_refund_rate | 1.0 | 取消队列条目时退还材料的比例(0.0 ~ 1.0)。 |
tick_interval | 20 | 队列推进任务的间隔(tick)。全服只有这一个定时器。 |
speed_multiplier | 1.0 | 全局配方耗时倍率。小于等于 0 时按 1.0 处理。 |
purchase.enabled | true | 付费队列位全服总开关。 |
purchase.cost_file | "queue_costs.yml" | 价格档位文件名,相对插件数据目录。 |
pending_claim 不占用队列长度是有意设计:否则背包和仓库同时满的玩家会被自己未领取的产物锁死队列。
cancel_refund_rate 不按进度折算。串行单线队列里只有队首有进度,为一个几乎不存在的情况引入逐条目进度记账不值得,这是有意的简化。
progress_mode: offline 只表示「计时继续」,不表示「离线发货」。EmakiStorage 拒绝对离线玩家做任何写操作,所以离线期间到点的条目只是「已到期」,真正结算发生在玩家下次上线时。
价格文件缺失、为空或没有任何可用价格时,购买一律被拒绝而不是免费放行。
limits 容量上限
| 键 | 默认值 | 说明 |
|---|---|---|
max_pending_claim | 100 | 单个玩家最多累积多少条未领取产物。达到上限后拒绝新提交。 |
warn_material_types | 50 | 单个配方材料种类数超过这个值时只记录警告,不阻止加载。 |
batch_multiplier_max | 0 | 单次提交的最大倍率,0 表示不额外限制,仍受材料数量限制。 |
配方材料种类数不受 GUI 槽位数限制,warn_material_types 只是防手滑。
storage 仓库通道
| 键 | 默认值 | 说明 |
|---|---|---|
enabled | true | 总开关。关闭后 EmakiStation 完全不调用 EmakiStorage。 |
batch_max_ops | 200 | 单批最多多少个操作,与 EmakiStorage 的 behavior.batch_max_ops 对应。 |
即使 enabled 为 true,仓库通道仍需要 EmakiStorage 提供 emakistorage:atomic_batch 能力才会启用。缺少该能力时不会退化为逐个 withdraw:那样会让材料在玩家背包里闪现一次,反而制造可利用的时间窗口。
材料同时来自背包和仓库时,插件优先使用 emakistorage:reservation 能力:先在仓库挂预留(不真正取出),再扣背包,最后提交预留。中途失败只需释放预留,而释放不会因为仓库容量不足而失败。EmakiStorage 版本较低、没有这个能力时,会退化为「先扣仓库、失败再存回」,存回本身可能因容量不足被拒,因此不如预留路径。
persistence 持久化
| 键 | 默认值 | 说明 |
|---|---|---|
autosave_interval_seconds | 60 | 自动保存间隔(秒)。 |
save_on_submit | true | 提交成功后是否立刻落盘,而不是等到下一次自动保存。 |
队列文件里的条目对应「已经扣掉的材料」,所以这个间隔比仓库的自动保存更短。
队列文件和仓库文件是两份独立文件,硬崩溃仍可能让两者不一致(材料已扣但条目未存,或条目已存但扣料未落盘)。每个条目都完整记录了消耗清单,便于人工对账。彻底消除这个窗口需要跨插件两阶段提交,代价过高。
gui 界面
| 键 | 默认值 | 说明 |
|---|---|---|
click_throttle_ms | 200 | 同一会话内两次点击的最小间隔(毫秒)。 |
refresh_interval_ticks | 20 | 打开的界面多久重绘一次进度显示(tick)。 |