跳到主要内容

MxtProgression:进度等级

灵宠的等级与功法用的是同一套账,区别只在所有者——所有者的 id 就是等级记录的键:功法写功法 id,灵宠写它自己那份 生物档案 的 id。读方法两侧都能用,setLevel 是服务端操作。

方法参数返回值说明
level(entity, owner)Entity、所有者 IDString 或 null记录下来的等级 ID;没晋升过时为 null(它可能仍站在入口等级上,那要问 current)。
current(entity, owner)Entity、所有者 IDString 或 null生效的等级 ID:记录,或该所有者的入口等级。实体不持有这个所有者时为 null。
next(entity, owner)Entity、所有者 IDString 或 null当前等级的下一级;已经是最高一级、或不持有该所有者时为 null。
mastery(entity, owner)Entity、所有者 ID{have, required, resource} 或 null离下一级还差多少:mastery_resource 的当前值、该级要求的数值与资源 ID。没有下一级、所有者没写 mastery_resource、或公式算不出来时为 null。
setLevel(entity, owner, level)LivingEntity、所有者 ID、等级 ID{changed, failure}走与 /contract level 同一个服务:校验该级在它的链上、写记录、重建它授予的能力,并发一次 mxt:progression_level 信号。不看该级自己的 mastery 与 condition。

failure 词表:UNKNOWN_OWNER(这具身体不持有这个所有者,或那份定义没有链)、FOREIGN_LEVEL(这一级不在它的链上)、SAME_LEVEL(它已经在这一级了)、UNKNOWN_LEVEL(注册表里没有这个 id)、SERVER_ONLY(在客户端调用)。

// kubejs/server_scripts/mxt_progression.js
// 灵宠:所有者是它自己那份档案的 id,写进去之后它当场带上这一级授予的能力。
const current = MxtProgression.current(beast, 'mxt_test:probe_beast')
const growth = MxtProgression.mastery(beast, 'mxt_test:probe_beast') // {have, required, resource}
const advanced = MxtProgression.setLevel(beast, 'mxt_test:probe_beast', 'mxt_test:beast_3')
if (!advanced.changed) {
console.warn(`promotion refused: ${advanced.failure}`)
}
// 功法走同一个入口,owner 换成功法 id。
const sword = MxtProgression.level(player, 'mxt_test:sword_manual')

相关​