Skip to content

常见问题

/ldsv open 打不开菜单

按以下顺序检查:

  1. 菜单 ID 是否存在于 skill-class 配置节点。
  2. 菜单是否配置了 open-condition
  3. 玩家是否满足职业、权限或 PAPI 表达式条件。
  4. 玩家数据是否已经加载。
  5. DragonCore 界面文件是否已正确放置。

open-condition 支持以下条件类型:

条件类型作用
class:{职业}检查玩家当前职业
permission:{权限}检查玩家是否拥有权限
nopermission:{权限}检查玩家是否没有权限
papi:{表达式}使用 PAPI 变量和表达式判断

玩家职业由 /ldsv class [玩家] [职业ID] 设置,也可以使用 clearnullnone 清除职业。职业 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_casthold_release_cast 依赖 DragonCore 的按键按下与抬起事件。请确认客户端 HUD、键位名称和 DragonCore 配置均已加载。

如果提前松开按键,按压型技能可能触发中断事件。此时会使用 message.按压中断,并显示本次按压持续时间。

被动技能没有触发

检查以下配置:

  • 技能类型是否为 passive
  • 当前等级是否存在 passive-trigger
  • events 是否配置了正确的触发场景。
  • condition-list 是否满足。
  • cast-condition 是否满足。
  • chance 是否大于 0。
  • 被动技能是否受 max-stackcooldownmana 限制。
  • 如果设置了 require-bind-slot: true,技能是否已经绑定到技能栏。

被动技能支持的触发场景包括:

场景触发条件
attack玩家造成伤害
damaged玩家受到伤害
kill玩家击杀实体
cast_skill:all玩家成功释放任意主动技能
cast_skill:技能ID玩家成功释放指定主动技能
tick:5每 5 个服务器 tick 检测一次

cast_skill 只会把主动技能的成功释放作为来源技能,不会因为被动技能触发而循环触发自身。

技能栏没有刷新

确认以下内容:

  1. 技能栏 HUD 文件已放入 plugins/DragonCore/Gui/
  2. 打开 HUD 后发送了 DragonCore 自定义数据包 初始化技能栏HUD
  3. 读条 HUD 需要发送 初始化读条HUD
  4. 完整界面初始化时可以发送 初始化
  5. bind-key 中的键位与技能栏组件中的键位名称一致。
  6. dragon-placeholder-interval 没有设置得过大。
  7. packet-interval 没有因连续点击而拦截后续数据包。

相关配置:

配置项作用
dragon-placeholder-intervalDragonCore 变量刷新间隔,单位为 tick,最低为 1
packet-intervalDragonCore 自定义数据包的最小发送间隔,单位为毫秒
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 时必须同时满足以下条件:

  1. 安装 LyMySQLCore
  2. LyMySQLCore 中成功连接数据库。
  3. 将本插件配置中的 mysql.enable 设置为 true
  4. 修改数据库模式后重启服务器。

如果 MySQL 未连接完成,玩家登录会被拦截,直到数据库初始化完成。MySQL 玩家数据按玩家名称保存,插件会在玩家加入时读取、退出时保存。

YAML 模式的数据保存在:

text
plugins/LyDragonSkillView/data/<玩家UUID>.yml

数据库模式和 YAML 模式使用不同的数据来源,不会自动合并已有存档。正式切换前请先备份原有玩家数据,并确认新模式能够正常读取和保存。

属性插件没有生效

attribute-plugin 支持的可选属性插件包括:

  • AttributePlus
  • SX-Attribute2
  • SX-Attribute3
  • AttributeSystem
  • ItemLoreOrigin

修改 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 的存档文件。