付费队列位
玩家可以在队列页花钱买额外队列位。价格档位写在 plugins/EmakiStation/queue_costs.yml,文件名由 config.yml 的 queue.purchase.cost_file 指定。
这是业务数据文件:release_default_data 只在文件缺失时释放一次,版本升级不会覆盖管理员已有内容。
三道开关
任一关闭都不能购买:
| 开关 | 位置 |
|---|---|
queue.purchase.enabled | config.yml,全服总开关。 |
queue.allow_purchase | stations/<id>.yml,单个工作站是否出售。 |
emakistation.purchase | 玩家权限,默认 true。 |
完整示例
yaml
tiers:
- count_range: "1-2"
currency:
type: vault
amount: 5000
- count_range: "3-4"
currency:
type: vault
amount: 20000
- count_range: "5-6"
currency:
type: vault
amount: 50000
item:
source: "diamond"
amount: 8
fallback:
currency:
type: vault
amount: "100000 * 1.15 ^ (%count% - 7)"
max_amount: 500000000
batch:
enabled: true
options: [1, 2, 5]字段
| 字段 | 说明 |
|---|---|
tiers[].count_range | 该档覆盖第几个到第几个队列位,如 "1-2"。 |
tiers[].currency.type | vault 或 excellent。 |
tiers[].currency.amount | 货币金额。 |
tiers[].item.source | 额外要求的物品,CoreLib ItemSource token。 |
tiers[].item.amount | 物品数量。 |
fallback.currency.type | 兜底档货币类型。 |
fallback.currency.amount | 兜底档金额,支持表达式,%count% 是即将购买的第几个队列位,走 CoreLib ExpressionEngine。 |
fallback.max_amount | 单个队列位的价格上限。 |
batch.enabled | 是否允许批量购买。 |
batch.options | 批量购买的可选数量。 |
fallback.max_amount 是必需项:缺失或非正数时兜底档整体失效,超出 tiers 的队列位将不可购买。它的作用是防止指数表达式溢出为 Infinity。
计价规则
玩家购买第 N 个队列位时,用 N 落在哪个 count_range 决定价格。N 是这个玩家在这个工作站已购数量 + 1,各工作站独立计数。越靠前的档优先;未匹配任何档则用 fallback。
批量购买按逐格计价再求和结算,不是「单价 × 数量」——否则玩家可以一次性按最便宜那档买下一大批。
缺价即拒绝:某一格既没有匹配档也没有 fallback 时,购买被拒绝而不是免费放行。文件缺失或整体不可用时,付费队列位功能整体关闭。
与上限的关系
买到的队列位是叠加在基础长度或权限档之上的,但最终仍受工作站 queue.max_length 截断。插件会在报价阶段就拒绝会被截断吞掉的购买,不会先收钱再发现买了没用。
取消队列条目时,已付的货币按工作站的 cancel_refund_rate 折算退还,与材料同一比例。