常见问题
/ldsv open 打不开菜单
按以下顺序检查:
- 菜单 ID 是否存在于
skill-class配置节点。 - 菜单是否配置了
open-condition。 - 玩家是否满足职业、权限或 PAPI 表达式条件。
- 玩家数据是否已经加载。
- DragonCore 界面文件是否已正确放置。
open-condition 支持以下条件类型:
| 条件类型 | 作用 |
|---|---|
class:{职业} | 检查玩家当前职业 |
permission:{权限} | 检查玩家是否拥有权限 |
nopermission:{权限} | 检查玩家是否没有权限 |
papi:{表达式} | 使用 PAPI 变量和表达式判断 |
玩家职业由 /ldsv class [玩家] [职业ID] 设置,也可以使用 clear、null 或 none 清除职业。职业 ID 必须存在于 class-setting。
命令可以使用,但没有权限提示
项目未注册独立的命令权限节点。命令处理逻辑使用服务器 OP 状态进行权限判断,管理类命令需要由 OP 执行。
已确认的命令如下:
| 命令 | 用途 | 使用限制 |
|---|---|---|
/ldsv reload | 重载插件配置 | OP |
/ldsv open [菜单ID] | 为自己打开技能菜单 | 玩家执行;菜单条件仍会生效 |
/ldsv open [菜单ID1;菜单ID2;菜单ID3] | 按顺序尝试打开多个菜单 | 玩家执行;找到第一个可打开的菜单后停止 |
/ldsv open [菜单ID] [玩家] | 为指定玩家打开技能菜单 | OP |
/ldsv uplevel [玩家] [技能ID] [数量] | 提升指定玩家技能等级 | OP;数量可省略,默认提升 1 级 |
/ldsv downlevel [玩家] [技能ID] [数量] | 降低指定玩家技能等级 | OP;数量可省略,默认降低 1 级 |
/ldsv addsp [玩家] [数量] | 增加技能点 | OP |
/ldsv takesp [玩家] [数量] | 扣除技能点 | OP |
/ldsv setsp [玩家] [数量] | 设置技能点 | OP;数量可以为 0 |
/ldsv class [玩家] [职业ID|clear] | 设置或清除玩家职业 | OP |
/ldsv cast [玩家] [技能ID] [等级] | 让玩家按指定等级释放技能 | OP |
/ldsv interrupt [玩家] | 打断玩家当前读条 | OP |
/ldsv addmana [玩家] [数值|百分比%] | 为玩家恢复蓝量 | OP;支持固定值或百分比 |
/ldsv reducecd [玩家] [秒数|百分比%] | 减少玩家技能冷却 | OP;同时处理技能冷却、充能恢复和 GCD |
目标玩家必须在线,且玩家数据已经加载。命令中的技能 ID 必须是技能配置中的全局唯一 ID。
技能显示了但是不能释放
检查以下内容:
- 技能是否已经学习,且当前等级存在有效技能等级配置。
- 主动技能是否绑定到了技能栏。
- 当前世界是否配置在
disable-skill-world中。 - 当前蓝量是否足够。
- 技能是否仍处于技能冷却、充能恢复或公共冷却
gcd状态。 - 技能的
cast-condition是否全部满足。 - 当前技能的最大充能层数是否已经用尽。
- 绑定键位是否与
bind-key中注册的键位一致。
主动技能需要绑定到技能栏后才能通过键位释放。被动技能可以通过 require-bind-slot: false 配置为学习后直接生效;不需要绑定的技能不会允许绑定到技能栏。
技能释放条件不生效
每条 cast-condition 的格式为:
yaml
cast-condition:
- "条件表达式|条件不满足时提示文本"也可以只写条件表达式,不配置失败提示。条件失败时会使用全局消息 message.释放失败-条件拦截。
条件表达式支持技能上下文变量、PAPI 变量以及 &&、|| 逻辑运算。逻辑或必须写成 ||,插件不会把它误认为条件与提示文本之间的单个 | 分隔符。
主动技能和被动技能都支持 cast-condition。被动技能触发前也会先检查条件,任意一条不满足时,本次触发会被拦截。
可用的技能条件变量包括:
| 变量 | 含义 |
|---|---|
{player} | 玩家名称 |
{player_name} | 玩家名称 |
{skill_id} | 当前技能 ID |
{skill_name} | 当前技能名称 |
{skill_level} | 当前技能有效等级,包含额外等级 |
{skill_base_level} | 当前技能原始等级 |
{mana_now} | 当前蓝量 |
{mana_max} | 最大蓝量 |
{count} | 当前读条段数 |
{count_now} | 当前读条段数 |
{count_max} | 读条总段数 |
{scale} | 当前读条比例,范围为 0~1 |
{elapsed} | 当前已按压时间,单位为秒 |
{elapsed_ms} | 当前已按压时间,单位为毫秒 |
{trigger_index} | 当前触发段序号 |
{interrupt_reason} | 读条中断原因 |
{recover} | 本次恢复的充能层数 |
{charge_recover} | 本次恢复的充能层数 |
{stack_before} | 恢复前充能层数 |
{stack_now} | 恢复后充能层数 |
{stack_max} | 最大充能层数 |
{mana_consume} | 本次扣除的蓝量 |
{mana_before} | 扣蓝前蓝量 |
{mana_after} | 扣蓝后蓝量 |
读条技能一移动就断
检查当前技能等级配置中的 interrupt-when:
yaml
interrupt-when:
- move支持的读条打断场景如下:
| 值 | 触发时机 |
|---|---|
move | 玩家发生方块位置变化时 |
attack | 玩家进行左键攻击交互时 |
damaged | 玩家受到伤害时 |
仅转动视角不会被视为移动。需要保留读条的场景时,移除对应的打断值。
按住技能无法正常释放
按住型主动技能使用以下触发方式:
trigger 值 | 行为 |
|---|---|
instant | 瞬发 |
tap_cast | 按下一次后进行读条,完成后释放 |
hold_cast | 按住读条,读条完成后自动释放 |
hold_release_cast | 按住读条,完成后松开按键才释放 |
hold_cast 和 hold_release_cast 依赖 DragonCore 的按键按下与抬起事件。请确认客户端 HUD、键位名称和 DragonCore 配置均已加载。
如果提前松开按键,按压型技能可能触发中断事件。此时会使用 message.按压中断,并显示本次按压持续时间。
被动技能没有触发
检查以下配置:
- 技能类型是否为
passive。 - 当前等级是否存在
passive-trigger。 events是否配置了正确的触发场景。condition-list是否满足。cast-condition是否满足。chance是否大于 0。- 被动技能是否受
max-stack、cooldown或mana限制。 - 如果设置了
require-bind-slot: true,技能是否已经绑定到技能栏。
被动技能支持的触发场景包括:
| 场景 | 触发条件 |
|---|---|
attack | 玩家造成伤害 |
damaged | 玩家受到伤害 |
kill | 玩家击杀实体 |
cast_skill:all | 玩家成功释放任意主动技能 |
cast_skill:技能ID | 玩家成功释放指定主动技能 |
tick:5 | 每 5 个服务器 tick 检测一次 |
cast_skill 只会把主动技能的成功释放作为来源技能,不会因为被动技能触发而循环触发自身。
技能栏没有刷新
确认以下内容:
- 技能栏 HUD 文件已放入
plugins/DragonCore/Gui/。 - 打开 HUD 后发送了 DragonCore 自定义数据包
初始化技能栏HUD。 - 读条 HUD 需要发送
初始化读条HUD。 - 完整界面初始化时可以发送
初始化。 bind-key中的键位与技能栏组件中的键位名称一致。dragon-placeholder-interval没有设置得过大。packet-interval没有因连续点击而拦截后续数据包。
相关配置:
| 配置项 | 作用 |
|---|---|
dragon-placeholder-interval | DragonCore 变量刷新间隔,单位为 tick,最低为 1 |
packet-interval | DragonCore 自定义数据包的最小发送间隔,单位为毫秒 |
bind-key | 开放并注册的技能键位列表 |
show-bind-key-enable | 是否显示技能键位名称 |
技能冷却完成或充能达到满层时,绑定该技能的技能栏图标会触发闪烁动画。
DragonCore 界面缺少贴图
服务端 YAML 界面文件和客户端贴图是两部分内容:
- 服务端界面文件放在
plugins/DragonCore/Gui/。 - 技能配置中的
texture使用客户端贴图路径,例如gui/LyDragonSkillView/skill.png。 - 客户端需要存在与该路径对应的 DragonCore 贴图文件。
只放置服务端 YAML 文件不会自动生成客户端贴图。贴图路径、文件名和大小写必须与技能配置一致。
蓝量显示或扣除不正确
检查以下配置项和变量来源:
| 配置项 | 作用 |
|---|---|
default-max-mana | 玩家默认最大蓝量 |
default-regen-per-second | 玩家默认每秒回蓝速度 |
mana-placeholder | 蓝量属性来源 |
mana-max | 蓝量属性上限,填写 20 表示 20%,填写 0 表示不限制 |
mana-reduction-placeholder | 蓝耗缩减属性来源 |
mana-reduction-max | 蓝耗缩减属性上限 |
蓝耗缩减会影响技能实际扣除的蓝量,计算后的结果会向上取整。技能释放失败提示中显示的是应用蓝耗缩减后的最终蓝耗。
如果使用 PlaceholderAPI,相关占位符必须能够返回可解析的数字。百分比配置建议使用数字格式,不要返回带有额外文本的内容。
冷却、充能或 GCD 显示不正确
检查技能等级中的以下配置:
| 配置项 | 作用 |
|---|---|
cooldown | 技能冷却时间,单位为毫秒 |
max-stack | 最大充能层数;大于 1 时表示充能技能 |
gcd | 公共冷却时间,单位为毫秒 |
cooldown-on-cast-start | 是否在开始释放时进入冷却 |
cooling-reduction-placeholder | 冷却缩减属性来源 |
cooling-reduction-max | 冷却缩减属性上限 |
单层技能通常显示技能冷却,多层技能优先显示下一层充能恢复倒计时。/ldsv reducecd 会同时处理技能冷却、下一层充能恢复时间和公共冷却。
相关 PAPI 变量包括:
| 变量 | 含义 |
|---|---|
%ldsv_gcd% | 公共冷却剩余时间,单位为秒,保留 1 位小数 |
%ldsv_gcdScale% | 公共冷却剩余比例,范围为 0~1 |
%ldsv_skillbar_cooldown_{键位}% | 指定键位技能的剩余冷却时间 |
%ldsv_skillbar_cooldownScale_{键位}% | 指定键位技能的剩余冷却比例 |
%ldsv_skillbar_charge_{键位}% | 指定键位技能当前可用层数 |
技能升级失败
检查技能当前原始等级、max-level 和下一级的 upgrade-list。
升级条件可以使用以下类型:
| 类型 | 作用 |
|---|---|
papi:{表达式} | 检查 PAPI 表达式 |
item:{物品名#数量} | 检查并消耗指定显示名物品 |
eco:{数量} | 检查并消耗经济余额 |
point:{数量} | 检查并消耗点券 |
skill-point:{数量} | 检查并消耗技能点 |
升级条件通常使用 条件|显示文本 格式。界面显示文本中的 {item} 和 {amount} 会替换为物品名和数量。
技能达到 max-level 后不能继续升级。等级为 0 的配置只用于显示技能信息,并用于显示下一级升级条件。
技能无法降级
检查:
level-down-enable是否为true。- 技能当前等级是否已经是最低等级。
level-down-skill-point是否配置了正确的返还技能点数量。
降级成功后会按 level-down-skill-point 统一返还技能点。该配置不能按技能等级逐级单独设置。
也可以使用以下命令管理技能等级:
text
/ldsv downlevel <玩家> <技能ID> [数量]主动或被动技能无法绑定
检查以下限制:
- 技能是否已经学习。
- 被动技能是否配置了
require-bind-slot: false。不需要绑定的被动技能不能绑定到技能栏。 max-active-skill-amount是否限制了主动技能装备数量。max-passive-skill-amount是否限制了被动技能装备数量。- 目标键位是否存在于
bind-key。
数量上限配置为 0 时表示不限。重新绑定同一个技能时,插件会先移除该技能已有的绑定记录,再检查绑定后的类型数量。
切换数据库后数据异常
插件支持 YAML 文件存储和 MySQL 存储两种模式。
启用 MySQL 时必须同时满足以下条件:
- 安装
LyMySQLCore。 - 在
LyMySQLCore中成功连接数据库。 - 将本插件配置中的
mysql.enable设置为true。 - 修改数据库模式后重启服务器。
如果 MySQL 未连接完成,玩家登录会被拦截,直到数据库初始化完成。MySQL 玩家数据按玩家名称保存,插件会在玩家加入时读取、退出时保存。
YAML 模式的数据保存在:
text
plugins/LyDragonSkillView/data/<玩家UUID>.yml数据库模式和 YAML 模式使用不同的数据来源,不会自动合并已有存档。正式切换前请先备份原有玩家数据,并确认新模式能够正常读取和保存。
属性插件没有生效
attribute-plugin 支持的可选属性插件包括:
AttributePlusSX-Attribute2SX-Attribute3AttributeSystemItemLoreOrigin
修改 attribute-plugin 后需要重启服务器。冷却缩减、蓝耗缩减、吟唱加速和最大蓝量等属性占位符必须能返回插件可以解析的数值。
技能事件脚本没有执行
检查脚本是否写在当前技能等级的 event 节点下,并确认事件名称正确。
主动技能支持:
| 事件配置 | 触发时机 |
|---|---|
on-cast-start | 开始释放或开始读条 |
on-cast-success | 技能释放成功 |
on-cast-interrupt | 读条被中断 |
on-cast-trigger | 读条分段触发 |
on-charge-recover | 充能恢复一层 |
on-mana-consume | 扣蓝成功 |
被动技能支持:
| 事件配置 | 触发时机 |
|---|---|
on-cast-success | 被动触发成功 |
on-charge-recover | 充能恢复一层 |
on-mana-consume | 扣蓝成功 |
多行脚本需要使用 YAML 块字符串,例如:
yaml
on-cast-success: |-
玩家消息('&a释放成功: &6{skill_name}')
音效('ENTITY_EXPERIENCE_ORB_PICKUP')脚本中的 PAPI 变量会在执行前尝试解析。脚本执行失败时不会自动修复技能配置,应检查表达式、方法名称、参数数量和字符串引号。
PAPI 变量没有返回内容
确认已安装并启用 PlaceholderAPI,并检查变量中的键位名和技能 ID 是否真实存在。
常用变量如下:
| 变量 | 含义 |
|---|---|
%ldsv_skill_point% | 当前技能点数量 |
%ldsv_mana_now% | 当前蓝量 |
%ldsv_mana_max% | 最大蓝量 |
%ldsv_boot_skill% | 当前读条技能名称 |
%ldsv_boot_scale% | 当前读条进度比例 |
%ldsv_boot_elapsed% | 当前读条已用时间,单位为秒 |
%ldsv_boot_total% | 当前读条总时间,单位为秒 |
%ldsv_boot_trigger_count% | 当前读条总段数 |
%ldsv_selected_skill_name% | 当前选中技能名称 |
%ldsv_selected_skill_level% | 当前选中技能原始等级 |
%ldsv_selected_skill_extra_level% | 当前选中技能额外等级 |
%ldsv_selected_skill_result_level% | 当前选中技能最终等级 |
%ldsv_selected_skill_max_level% | 当前选中技能最大等级 |
%ldsv_selected_upgrade_condition% | 当前选中技能下一级升级条件显示文本 |
带有 {键位} 的变量必须替换为 bind-key 中注册的键位名;带有 {技能ID} 的变量必须替换为技能配置中的技能 ID。
玩家数据没有加载
先确认玩家在线且数据初始化完成。以下情况会导致命令或技能操作失败:
- 玩家不在线。
- 玩家数据尚未加载。
- MySQL 模式下数据库尚未连接完成。
- YAML 存档读取失败。
- 玩家数据文件或数据库中的存档内容损坏。
使用 MySQL 时,数据库连接未完成会阻止玩家登录;使用 YAML 时,插件会从 plugins/LyDragonSkillView/data/ 读取对应 UUID 的存档文件。