简体中文
命令与权限
下面列出 EmakiLevel 的全部命令, 每个命令需要什么权限, 以及命令失败时常见的报错原因
EmakiLevel 的主命令是 /emakilevel, 别名为 /elv 和 /elevel. 下面的示例统一用最短别名 /elv
先记住一条: 所有子命令都会先检查 emakilevel.use; 即使是管理员命令, 执行者也必须同时拥有 emakilevel.use 和对应的管理权限
玩家命令
| 命令 | 权限 | 说明 |
|---|---|---|
/elv | emakilevel.use | 查看自己所有已加载等级类型的当前等级, 经验, 需求经验和进度. 只能由玩家执行 |
/elv info [type] | emakilevel.use | 查看自己的指定等级类型. 不填 type 时和直接执行 /elv 一样 |
/elv gui [type] | emakilevel.use | 打开等级界面. 不填 type 时用 config.yml > primary_type 指定的类型. 别名: /elv open [type] |
/elv levelup [type] | emakilevel.levelup | 手动升级指定等级类型. 不填 type 时用 config.yml > primary_type, 该值默认是 main. 别名: /elv up [type] |
/elv top [type] | emakilevel.top | 查看指定等级类型排行榜的前 10 名, 数据来自插件当前缓存. 不填 type 时用主等级类型 |
/elv topgui [type] | emakilevel.top | 打开排行榜界面. 不填 type 时用主等级类型. 别名: /elv topopen [type]. 只能由玩家执行 |
示例:
text
/elv
/elv info combat
/elv gui main
/elv levelup mining
/elv up main
/elv top combat
/elv topgui combat手动升级会受到 types/<type>.yml 中以下字段影响:
yaml
upgrade:
enabled: true # false 时完全禁止升级
manual_upgrade: true # false 时禁止 /elv levelup
cost:
enabled: false # true 时需要满足经济/材料消耗如果某个类型只想靠获得经验自动升级, 保留 auto_upgrade: true, 把 manual_upgrade: false 就行
管理命令
这些命令要求 emakilevel.admin, 并且目标玩家必须在线, 因为命令实现使用在线玩家名精确匹配
| 命令 | 权限 | 说明 |
|---|---|---|
/elv giveexp <player> <type> <amount> | emakilevel.admin | 给在线玩家增加经验. 会按该类型的配置触发自动升级. 别名: addexp |
/elv takeexp <player> <type> <amount> | emakilevel.admin | 扣除在线玩家当前等级内的经验, 最多扣到 0, 不会掉级. 别名: removeexp |
/elv setexp <player> <type> <amount> | emakilevel.admin | 把在线玩家当前等级内的经验设成指定值, 等级本身不变 |
/elv addlevel <player> <type> <amount> | emakilevel.admin | 增加等级, 加完后会被限制在该类型的 start_level 与 max_level 之间. 别名: givelevel |
/elv takelevel <player> <type> <amount> | emakilevel.admin | 扣除等级, 扣完不会低于 start_level. 别名: removelevel |
/elv setlevel <player> <type> <level> | emakilevel.admin | 把等级设成指定值, 结果会被限制在该类型的等级范围内 |
/elv reset <player> <type> | emakilevel.admin | 重置指定类型: 等级回到 start_level, exp 与 total_exp 清零 |
示例:
text
/elv giveexp Steve combat 250
/elv takeexp Steve mining 30
/elv setexp Steve main 0
/elv addlevel Steve main 5
/elv takelevel Steve combat 1
/elv setlevel Steve fishing 20
/elv reset Steve mining经验与等级操作的差异:
| 操作 | 改变等级 | 改变当前经验 | 改变总经验 | 备注 |
|---|---|---|---|---|
giveexp | 可能自动升级 | 增加并在升级时扣除需求经验 | 增加 | 自动升级取决于类型配置 |
takeexp | 否 | 扣除到最低 0 | 不变 | 不会降级 |
setexp | 否 | 设置为指定值 | 不变 | 适合修正当前等级内经验 |
addlevel | 是 | 清零 | 不变 | 直接改等级, 不发放升级奖励 |
takelevel | 是 | 清零 | 不变 | 直接改等级, 不回退奖励 |
setlevel | 是 | 清零 | 不变 | 用于管理员修正 |
reset | 是 | 清零 | 清零 | 回到该类型起始状态 |
重载与调试命令
| 命令 | 权限 | 说明 |
|---|---|---|
/elv reload | emakilevel.reload 或 emakilevel.admin | 先保存当前缓存的数据, 再重载主配置, 等级类型, 需求, 来源规则, 语言, PDC 和属性贡献配置, 并把在线玩家的数据同步一遍 |
/elv convert-legacy [confirm] | emakilevel.admin | 把 sources/*.yml 中 sources.<id>.rules[] 的旧 result_item_sources 键改名为 item_sources. 不带参数时只演示一遍会改哪些地方, 不会真的写入; 加 confirm (或 --apply) 才真正改写, 并留一份 .bak 备份 |
/elv debug requirement <type> <level> | emakilevel.debug 或 emakilevel.admin | 查看某个类型升到目标等级时的需求经验, 以及命中的需求来源 |
/elv debug pdc <player> | emakilevel.debug 或 emakilevel.admin | 重新同步在线玩家的 PDC 数据. 实际执行时会把所有在线玩家都同步一遍 |
/elv debug | emakilevel.debug 或 emakilevel.admin | 输出 CoreLib 调试状态概览 |
/elv debug status / on / off | emakilevel.debug 或 emakilevel.admin | CoreLib 的通用调试开关: status 查看状态, on 全部开启, off 全部关闭 |
/elv debug player <player> | emakilevel.debug 或 emakilevel.admin | 切换某个在线玩家的调试输出 |
/elv debug module <module> | emakilevel.debug 或 emakilevel.admin | 切换调试子模块. EmakiLevel 自身提供 common, 另外可用 CoreLib 共享子模块 action, item_operation, variables, placeholder, gui, chat_input |
示例:
text
/elv reload
/elv debug requirement main 10
/elv debug requirement combat 35
/elv debug pdc Steve
/elv debug module commondebug requirement 的输出来源有以下几种:
| 输出来源 | 含义 |
|---|---|
type.values | types/<type>.yml > requirement.values 中写了目标等级的精确值 |
type.formula | types/<type>.yml > requirement.formula 里的公式盖过了分组和全局的公式 |
groups.<group>.values | requirements.yml > groups.<group>.values 中写了目标等级的精确值 |
groups.<group>.formula | 使用了 requirements.yml > groups.<group>.formula 里的公式 |
global.values | 使用了 requirements.yml > global.values 里的精确值 |
global.formula | 使用了 requirements.yml > global.formula 里的公式 |
权限节点
| 权限 | 默认 | 覆盖范围 |
|---|---|---|
emakilevel.use | true | 使用主命令和基础查询命令, 也是主命令自身的注册权限. 所有子命令都会先检查此权限 |
emakilevel.levelup | true | 使用 /elv levelup / /elv up |
emakilevel.top | true | 使用 /elv top 与 /elv topgui / /elv topopen |
emakilevel.reload | op | 使用 /elv reload |
emakilevel.debug | op | 使用 /elv debug requirement 与 /elv debug pdc |
emakilevel.admin | op | 使用经验/等级管理命令, 并可代替 reload/debug 的专用权限 |
常见 LuckPerms 示例:
text
/lp group default permission set emakilevel.use true
/lp group default permission set emakilevel.levelup true
/lp group default permission set emakilevel.top true
/lp group admin permission set emakilevel.admin true
/lp group admin permission set emakilevel.reload true
/lp group admin permission set emakilevel.debug true常见失败原因
遇到报错先来这里对号入座: 命令和 API 返回的失败原因是固定英文 ID, 语言文件会把常用原因翻译成玩家可读文本
| 原因 ID | 常见场景 |
|---|---|
player_not_found | 目标玩家不存在, 离线, 或 API 调用没有有效 UUID |
player_data_unavailable | 玩家等级数据尚未加载或已卸载 |
type_not_found | type 不存在, 或者 sources/*.yml / Action 中写错类型 ID |
type_disabled | 等级类型存在但 enabled: false |
invalid_amount | 经验或等级数量小于等于 0, 或设置经验时传入负数 |
daily_cap_reached | 该类型当日经验额度已用尽, 见 config.yml > daily_caps |
event_cancelled | 有监听器取消了 PlayerExpGainEvent 或 PlayerPreLevelUpEvent, 本次经验/升级被放弃 |
upgrade_disabled | 该类型的 upgrade.enabled 是 false |
manual_upgrade_disabled | 玩家手动执行 /elv levelup, 但类型禁用了手动升级 |
max_level | 已达到该类型 max_level |
not_enough_exp | 当前等级内经验不足以升到下一级 |
not_enough_money | 升级经济消耗不足 |
not_enough_material | 升级材料消耗不足 |
cost_compensation_failed | 升级消耗已扣除但后续步骤失败, 且退还消耗时出错 |
invalid_requirement | 需求经验公式或配置结果小于等于 0, 无法升级 |
通过公开 API 异步写入时还可能返回以下原因: api_unavailable, not_entity_owner, player_offline, owner_schedule_retired, owner_schedule_rejected. 这些原因与线程归属调度有关, 不由配置引起