cost_type(消耗)
需要消耗东西的字段统一是数组,每项写一种 Cost。写 type 的四种由固有注册表 mxt:cost_type 分派:mxt:resource、mxt:aura、mxt:item、mxt:js;另一种是不写 type、只写 id 与 amount 的简写,读作 mxt:resource。整族由模组注册,数据包只能选用,不能新增。整份数组的全有或全无语义、通道规则与共用的求值口径见共享数据类型 · Cost。
这一族被满包引用——技能、法器、功法、符箓、修炼、阵法、丹药等定义里凡是「要扣什么」的字段都写成一组 Cost,所以它没有专属的定义页,只是一页独立的类型页;costs 出现在哪张定义里由那张定义页自己写。
mxt:resource
从付款者的数值账户中消耗一个数据包数值。
| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
resource | 数值 id | 必填 | 要消耗的数值 |
amount | NumberProvider | 必填 | 要消耗的数量;必须求值为有限正数 |
{"type": "mxt:resource", "resource": "example:qi", "amount": "5 + level"}mxt:aura
按灵气身份消耗。
| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
aura | 灵气 id | 必填 | 要消耗的灵气身份 |
amount | NumberProvider | 必填 | 要消耗的数量;必须求值为有限正数 |
{"type": "mxt:aura", "aura": "example:fire_qi", "amount": 2}扣的是什么由付款通道决定:付款者自己支付时扣这门灵气所度量的那个数值(付款者身上装的是数值,不是灵气),从共享灵气池或方块存量支付时扣这门灵气本身,后者按整单位向上取整。两条通道的差别见共享数据类型 · Cost。
mxt:item
从玩家背包中消耗匹配的物品。
| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
items | ItemMatcher | 必填 | 哪些物品可以被消耗;见 ItemMatcher |
amount | NumberProvider | 必填 | 要消耗的匹配物品数量,向上取整;结果非正或非有限表示这笔 Cost 无法支付 |
{"type": "mxt:item", "items": "#minecraft:logs", "amount": 8}mxt:js
检查与支付都交给服务端脚本回调。
| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
id | String | 必填 | 用 MxtCosts.register 注册的回调 id |
params | Object | {} | 传给回调的任意 JSON |
{"type": "mxt:js", "id": "example:quest_token", "params": {"count": 3}}脚本 Cost 在服务端先检查、后支付,并且需要一个玩家。回调收到的是付款者与 params,而不是技能的公式上下文,因为 Cost 只用付款者求值。
不写 type 的简写。 数组里的一项也可以只写 id 与 amount,它会被读作 mxt:resource:
{"id": "example:qi", "amount": 5}上面这一项等价于 {"type": "mxt:resource", "resource": "example:qi", "amount": 5}。
付款者是活着的实体(玩家、生物、召唤物都算),不一定是玩家。mxt:item 需要玩家背包或调用点提供的容器,mxt:js 需要玩家;缺通道时模拟拒付。脚本保持它在数组中的位置,不自动后置。
付款先诊断重复目标(开发 WARN、运行 DEBUG),再按原序逐条模拟;任意模拟失败则整笔不扣。全部通过后按相同顺序逐条实扣,失败或运行时异常始终只 WARN,继续后续条目与业务,不抛出、不回滚、不取消。重复目标不合并、不预留余额,建议一个目标一次性写完费用,并避免交叠物品需求。付款成功不保证全额收齐,凭据只报告已知真实扣量。解码失败仍使整份定义加载失败,不会静默丢条目。