Skip to content

配置说明 ​

LyDragonSkillView 的配置分为主配置 config.yml 与技能配置 skills/*.yml。主配置负责数据库、属性来源、技能菜单、职业、蓝量、键位、保存周期和提示文本;技能文件负责主动技能、被动技能、等级、释放方式、冷却、蓝耗、升级条件和事件脚本。

文件结构 ​

文件或目录说明
plugins/LyDragonSkillView/config.yml主配置文件。
plugins/LyDragonSkillView/skills/*.yml技能配置目录,可以拆分为多个 YAML 文件。
plugins/DragonCore/Gui/*.yml配套的 DragonCore 服务端界面配置。
客户端 DragonCore/gui/LyDragonSkillView/技能菜单、技能栏和读条界面使用的贴图资源。

skills 目录下每个文件可以配置多个技能,但技能 ID 在所有技能文件中必须全局唯一。插件只注册 type 为 active 或 passive 的技能,未知类型会被跳过。

config.yml ​

MySQL 数据库 ​

yaml
mysql:
  enable: false
  databasename: mc2
  username: mc2
  password: mc1234
  port: 3306
  ip: 127.0.0.1

MySQL 前置要求

启用 MySQL 存储前,必须安装 LyMySQLCore,并确认它已成功连接数据库。LyMySQLCore 未加载或数据库连接失败时,本插件的 MySQL 数据读取、保存和同步不会生效。

配置项默认值说明
mysql.enablefalse是否启用 MySQL 存储。修改后需要重启服务器。
mysql.databasenamemc2数据库名称。
mysql.usernamemc2数据库用户名。
mysql.passwordmc1234数据库密码。
mysql.port3306MySQL 服务端口。
mysql.ip127.0.0.1MySQL 服务地址。

插件连接后会创建名为 LyDragonSkillView 的数据表。数据表使用玩家名称作为唯一索引,数据正文保存在 data 字段中。

未启用 MySQL,或运行时数据库连接不可用时,循环保存会使用本地 YAML 玩家数据。

属性插件 ​

yaml
attribute-plugin: ''

attribute-plugin 用于选择职业属性的写入方式。修改后需要重启服务器。

可选值说明
空字符串不向属性插件写入职业属性。
AttributePlus使用 AttributePlus。
SX-Attribute2使用 SX-Attribute 2。
SX-Attribute3使用 SX-Attribute 3。
AttributeSystem使用 AttributeSystem。
ItemLoreOrigin使用 ItemLoreOrigin。

配置的插件必须已安装并正常加载,否则对应的职业属性不会生效。

技能装备数量 ​

yaml
max-active-skill-amount: 0
max-passive-skill-amount: 0
配置项默认值说明
max-active-skill-amount0玩家最多可装备的主动技能数量,0 表示不限制。
max-passive-skill-amount0玩家最多可装备的被动技能数量,0 表示不限制。

主动技能必须绑定技能栏才能释放。被动技能是否必须绑定,由技能自身的 require-bind-slot 决定。

技能菜单 ​

yaml
skill-class:
  战士:
    open-condition:
      - 'class:{见习战士|战士|战神}'
      - 'papi:{%player_level% >= 10}'
    skill:
      - '示例读条技能'
      - '示例主动技能'
      - '示例被动技能'
配置项说明
skill-class技能菜单分类根节点。
skill-class.菜单ID一个独立的技能菜单,节点名称就是菜单 ID。
open-condition打开菜单前需要满足的条件列表。留空表示不限制。
skill菜单中显示的技能 ID 列表。技能 ID 必须存在于 skills/*.yml。

菜单 ID 可用于 /ldsv open 菜单ID。多个 open-condition 条件会共同参与判断。

菜单与技能显示条件 ​

以下条件写法可用于菜单的 open-condition,也可用于技能的 show-condition:

写法说明
class:{战士}当前职业必须为指定职业。
class:{见习战士|战士|战神}当前职业为列表中的任意一个。
papi:{%player_level% >= 10}使用 PlaceholderAPI 变量表达式判断。
permission:{skill.example}玩家必须拥有指定权限。
nopermission:{skill.example}玩家必须没有指定权限。

条件为空或节点不存在时,默认允许打开菜单或显示技能。

职业设置 ​

yaml
class-setting:
  战士:
    tag: '&7[&6战士&7]'
    attribute:
      - '攻击力+1'
配置项说明
class-setting.职业ID职业配置节点,节点名称作为职业 ID。
tag职业显示称号。
attribute切换到该职业后写入属性插件的属性列表。

使用 /ldsv class 玩家 职业ID 设置职业,使用 /ldsv class 玩家 clear 清除职业。职业发生变化时,插件会更新对应的职业属性。

禁用技能的世界 ​

yaml
disable-skill-world:
  - 'world'
  - 'world_nether'

disable-skill-world 是世界名称黑名单。在列表中的世界里,主动技能不能释放,被动技能也不会触发;正在进行的按压释放流程也会被拦截。

世界名称按不区分大小写的方式匹配。

界面发包与数据保存 ​

yaml
packet-interval: 300
loop-save-thread-time: 600
dragon-placeholder-interval: 1
配置项单位默认值说明
packet-interval毫秒300DragonCore 界面操作的数据包处理间隔,用于限制高频点击。
loop-save-thread-time秒600在线玩家数据的循环保存间隔,填写 0 或负数可关闭循环保存。
dragon-placeholder-intervaltick1DragonCore HUD 变量同步间隔,20 tick 等于约 1 秒。

较低的 dragon-placeholder-interval 可以提高读条和技能栏界面的刷新频率,但会增加服务器与网络消耗。

蓝量基础值 ​

yaml
default-max-mana: 100
default-regen-per-second: 2
mana-placeholder: '0'
mana-max: 0.0
配置项默认值说明
default-max-mana100玩家基础最大蓝量。
default-regen-per-second2玩家每秒恢复的蓝量。
mana-placeholder0最大蓝量百分比加成来源,可以填写 PlaceholderAPI 变量。
mana-max0.0蓝量加成百分比上限,0 表示不限制。

百分比配置使用实际百分数,20 表示 20%,不是 0.2。

最大蓝量通常按以下方式计算:

text
基础最大蓝量 ×(1 + 蓝量加成 ÷ 100)

当 default-max-mana 为 0 时,插件会直接将蓝量加成数值作为最大蓝量。属性结果必须是纯数字,可以带小数;空值、非数字和负数会按 0 处理。

冷却、蓝耗与吟唱属性 ​

yaml
cooling-reduction-placeholder: '0'
cooling-reduction-max: 0.0

mana-reduction-placeholder: '0'
mana-reduction-max: 0.0

the-chant-accelerated-placeholder: '0'
the-chant-accelerated-max: 0.0
配置项说明
cooling-reduction-placeholder冷却缩减百分比来源,可以填写 PlaceholderAPI 变量。
cooling-reduction-max冷却缩减百分比上限,0 表示不限制。
mana-reduction-placeholder蓝耗缩减百分比来源,可以填写 PlaceholderAPI 变量。
mana-reduction-max蓝耗缩减百分比上限,0 表示不限制。
the-chant-accelerated-placeholder吟唱加速百分比来源,可以填写 PlaceholderAPI 变量。
the-chant-accelerated-max吟唱加速百分比上限,0 表示不限制。

这些属性同样使用实际百分数,例如 25 表示 25%。属性值小于 0 时按 0 处理;上限大于 0 时,超过上限的部分会被截断。

技能名称显示 ​

yaml
skill-show-name: '{name} &f({level_result}/{level_max})'
upgrade-condition-full-level-text: '&a技能已满级'
配置项说明
skill-show-name技能列表中的名称格式。
upgrade-condition-full-level-text技能满级后,描述中的 {upgrade_condition} 显示文本。

skill-show-name 支持以下内部变量:

变量说明
{name}技能显示名称。
{level_now}玩家保存的原始技能等级。
{level_extra}额外加成等级。
{level_result}原始等级与额外等级之和。
{level_max}技能配置的显示等级上限。

技能栏键位 ​

yaml
show-bind-key-enable: true
bind-key:
  - 'Q'
  - 'R'
  - 'Z'
  - 'X'
  - 'C'
  - 'V'
配置项说明
show-bind-key-enable是否在界面中显示技能绑定键位名称。
bind-key注册的技能栏键位列表。列表顺序同时用于槽位下标与键位名称之间的映射。

同一个技能只能绑定到一个键位。修改键位名称或数量后,需要同步调整 DragonCore 技能栏界面中使用的组件和变量。

技能降级 ​

yaml
level-down-enable: true
level-down-skill-point: 1
配置项默认值说明
level-down-enabletrue是否允许玩家通过界面降低技能等级。
level-down-skill-point1每实际降低一级返还的技能点数量。所有技能统一使用此值。

技能降至 0 级后,对应的技能栏绑定会被清理。

技能排序 ​

yaml
skill-sort-type: 'default'
值说明
default按菜单中 skill 列表的配置顺序显示。
level_down按玩家技能等级从高到低排序。
level_up按玩家技能等级从低到高排序。

消息文本 ​

yaml
message:
  释放失败-蓝量不足: '&7蓝量不足 {mana} 点, 无法释放.'
  释放失败-技能冷却: '&7技能冷却中, 剩余{time}s.'
  释放失败-GCD冷却: '&7公共冷却中, 稍后再尝试.'
  开始释放: '&f释放技能: {skill}'
  读条中断: '&c技能读条已中断'
  释放完成: '&a读条完成: {skill}'

消息支持 & 颜色符号。字符串中的 \n 会转换为实际换行。将某条消息设置为空字符串,可以禁止发送该条聊天消息。

消息键可确认变量触发场景
释放失败-蓝量不足{mana}当前蓝量不足以支付技能蓝耗。
释放失败-技能冷却{time}技能仍处于冷却状态。
释放失败-GCD冷却无主动技能仍处于公共冷却状态。
开始释放{skill}开始释放技能。
读条中断无技能读条被中断。
释放完成{skill}技能读条完成。
按压中断{skill}、{time}按压技能提前松开并中断。
无法绑定-不需要绑定无尝试绑定不要求技能栏的被动技能。
无法绑定-未学习无尝试绑定尚未学习的技能。
无法绑定-主动技能数量已满无已达到主动技能装备数量上限。
无法绑定-被动技能数量已满无已达到被动技能装备数量上限。
升级失败-条件不足{condition}下一级升级条件不满足。
升级失败-技能满级无技能已达到等级上限。
降级失败-条件不足无技能已经是最低等级。
降级失败-未启用无level-down-enable 已关闭。
降级成功无技能降级成功。
升级成功无技能升级成功。

skills/*.yml ​

技能通用结构 ​

yaml
火球术:
  name: '火球术'
  type: 'active'
  texture: 'gui/LyDragonSkillView/skill.png'
  simple-description: '&a主动技能'
  max-level: 2
  extra-level-placeholder: '0'
  show-condition:
    - 'papi:{%player_level% >= 10}'
  skill-level:
    0:
      description:
        - '&7尚未学习'
        - '{upgrade_condition}'
配置项说明
技能顶层节点技能 ID,必须在全部技能文件中保持唯一。
name技能显示名称,未配置时使用技能 ID。
type技能类型,仅支持 active 和 passive。
texture技能图标贴图路径。
simple-description技能列表中使用的简短描述。
max-level界面显示与升级判断使用的等级上限。未配置时按已解析的等级节点推算。
extra-level-placeholder额外技能等级来源,可以填写 PlaceholderAPI 变量。默认值为 0。
show-condition技能在菜单中的显示条件,留空表示始终显示。
skill-level各等级的具体配置。

skill-level.0 通常只配置未学习状态的描述。插件升级时会寻找高于当前原始等级的下一个已配置等级,因此等级节点可以被解析为数字,但建议连续配置。

额外等级不会修改玩家保存的原始等级,可以让技能运行时等级超过 max-level。界面中的原始等级、额外等级和最终等级分别使用 {level_now}、{level_extra} 和 {level_result}。

等级描述 ​

yaml
skill-level:
  1:
    description:
      - '&a主动技能 &b{level_result}级'
      - '&7冷却: &e{result_cooldown}s&7(原{origin_cooldown}s)'
      - '&7蓝耗: &b{result_mana}&7(原{origin_mana})'
      - ''
      - '&7升级条件:'
      - '{upgrade_condition}'
变量说明
{level_now}原始技能等级。
{level_extra}额外加成等级。
{level_result}最终有效等级。
{level_max}技能显示等级上限。
{origin_cooldown}配置中的原始冷却。
{result_cooldown}应用冷却缩减后的冷却。
{origin_mana}配置中的原始蓝耗。
{result_mana}应用蓝耗缩减后的蓝耗。
{upgrade_condition}下一级升级条件的显示文本;满级时使用主配置中的满级文本。

升级条件与消耗 ​

每个等级的 upgrade-list 表示升级到该等级时需要检查并扣除的内容。每行使用 规则|显示文本 格式,竖线后的文本用于技能描述界面。

yaml
upgrade-list:
  - 'papi:{%player_level% >= 10}|&b等级大于等于10级'
  - 'item:{测试技能书#3}|&b{item}x{amount}'
  - 'eco:{5000}|&e金币x{amount}'
  - 'point:{30}|&5点券x{amount}'
  - 'skill-point:{1}|&b技能点x{amount}'
规则说明相关前置
papi:{表达式}检查 PlaceholderAPI 表达式,不产生消耗。PlaceholderAPI
item:{物品ID#数量}检查并扣除指定数量的物品。对应物品配置
eco:{数量}检查并扣除经济余额。Vault 及经济插件
point:{数量}检查并扣除 PlayerPoints 点券。PlayerPoints
skill-point:{数量}检查并扣除本插件技能点。无

显示文本中的 {item} 和 {amount} 会用于展示对应物品或数量。升级前会先检查整组条件,检查通过后再执行消耗。

主动技能 ​

主动技能结构 ​

yaml
火球术:
  type: 'active'
  skill-level:
    1:
      active-trigger:
        trigger: 'instant'
        interrupt-when: []
        cast-time-tick: 0
        cast-trigger-count: 1
        cooldown-on-cast-start: true
        cast-condition: []
        event:
          on-cast-start: []
          on-cast-finish: []
          on-cast-success: []
          on-cast-interrupt: []
          on-cast-trigger: []
          on-charge-recover: []
          on-mana-consume: []
        max-stack: 1
        cooldown: '6000'
        mana: '20'
        gcd: '1200'
      upgrade-list: []
      description: []
配置项默认值说明
active-trigger.triggerinstant主动技能释放方式。
active-trigger.interrupt-when空列表可以中断读条的场景。
active-trigger.cast-time-tick0读条时间,单位为 tick,支持 PlaceholderAPI 变量和四则运算表达式。
active-trigger.cast-trigger-count1读条期间的分段触发次数,至少为 1。
active-trigger.cooldown-on-cast-starttrue是否在开始读条时进入冷却。
active-trigger.cast-condition空列表每次释放前检查的条件。
active-trigger.event空技能生命周期事件脚本。
active-trigger.max-stack1最大充能层数。大于 1 时作为多层充能技能。
active-trigger.cooldown0技能冷却或每层充能恢复时间,单位为毫秒。
active-trigger.mana0技能基础蓝耗。
active-trigger.gcd0主动技能公共冷却,单位为毫秒。

cast-time-tick、cooldown、mana 和 gcd 可以使用字符串保存表达式。包含变量或运算时应使用引号包裹,避免 YAML 将内容解析为其他类型。

主动释放方式 ​

trigger 值说明
instant瞬发技能,不进行读条。
tap_cast按下一次后开始读条,读条完成后自动释放。
hold_cast按住按键读条,读条完成后自动释放;抬键用于结束按键防重复状态。
hold_release_cast按住按键读条,读条完成后还需抬起按键才释放;提前抬起会中断。

当非瞬发技能的读条时间小于等于 0 时,不会形成有效读条流程。

读条中断 ​

yaml
interrupt-when:
  - 'move'
  - 'attack'
  - 'damaged'
值说明
move玩家移动时中断。
attack玩家造成伤害时中断。
damaged玩家受到伤害时中断。

interrupt-when 只对读条技能有效。空列表表示不会因这些场景自动中断。

冷却开始时机 ​

cooldown-on-cast-start说明
true开始释放时立即进入冷却并启动充能恢复计时。
false读条中断或成功完成后再进入冷却。仅对非瞬发读条技能有效。

释放条件 ​

yaml
cast-condition:
  - '{mana_now} >= 10|&c蓝量不足,至少需要10点蓝量'
  - '%player_level% >= 20|&c等级不足'

每行使用 条件表达式|失败提示 格式。失败提示可以省略。任意条件不满足时,本次主动释放或被动触发都会被拦截。

条件支持 PlaceholderAPI、比较表达式以及 &&、|| 逻辑运算。逻辑或必须写为 ||,避免与失败提示的单个 | 分隔符混淆。

内置变量说明
{player}玩家名称。
{skill_id}当前技能 ID。
{skill_name}当前技能显示名称。
{skill_level}当前有效等级,即原始等级加额外等级。
{skill_base_level}玩家数据中的原始等级。
{mana_now}当前蓝量。
{mana_max}最大蓝量。

技能事件 ​

事件节点既可以写成 YAML 列表,也可以使用 |- 编写多行脚本。

yaml
event:
  on-cast-start: |-
    玩家消息('&7开始释放: &6{skill_name}')
    音效('ENTITY_EXPERIENCE_ORB_PICKUP')
  on-cast-success: |-
    MM技能('请替换为你的MM技能ID', 'damage=120')
    玩家消息('&a释放成功: &6{skill_name}')
事件节点触发时机
on-cast-start主动技能开始释放或开始读条时。
on-cast-finish主动技能读条结束时。
on-cast-success瞬发技能成功释放,或读条技能完整完成时。
on-cast-interrupt主动技能读条被中断时。
on-cast-trigger读条时间线到达一个分段时。
on-charge-recover技能恢复一层或多层充能时。
on-mana-consume技能成功扣除蓝量后。

事件中可使用的变量取决于事件类型:

事件可确认变量
通用释放事件{player}、{skill_id}、{skill_name}、{skill_level}、{skill_base_level}、{mana_now}、{mana_max}
on-cast-trigger{count_now}、{count_max}
on-cast-interrupt{count_now}、{count_max}、{elapsed}、{scale}
on-charge-recover{recover}、{stack_before}、{stack_now}、{stack_max}
on-mana-consume{mana_consume}、{mana_before}、{mana_after}

项目示例中可以确认的脚本调用包括:

调用说明
玩家消息('文本')向当前玩家发送消息。
全服消息('文本')向全服发送消息。
范围消息('文本', 范围)向指定范围内的玩家发送消息。
音效('音效ID')为当前玩家播放音效。
MM技能('技能ID', '键=值')释放 MythicMobs 技能,并可追加参数。
减少冷却('技能ID', '秒数')减少指定技能的剩余冷却。
增加冷却('技能ID', '秒数')增加指定技能的剩余冷却。
减少蓝量('数值')减少当前玩家蓝量。
增加蓝量('数值')增加当前玩家蓝量。
执行指令('类型', '指令')执行指令,类型支持 console、op、player。

被动技能 ​

被动技能结构 ​

yaml
灼焰印记:
  name: '灼焰印记'
  type: 'passive'
  texture: 'gui/LyDragonSkillView/skill.png'
  simple-description: '&6被动技能'
  max-level: 2
  extra-level-placeholder: '0'
  require-bind-slot: false
  show-condition: []
  skill-level:
    1:
      passive-trigger:
        events:
          - 'attack'
        condition-list: []
        chance: '1.0'
        cast-condition: []
        event:
          on-cast-success: []
          on-charge-recover: []
          on-mana-consume: []
        max-stack: 1
        cooldown: '0'
        mana: '0'
      upgrade-list: []
      description: []
配置项默认值说明
require-bind-slotfalse是否必须将被动技能装备到技能栏后才会生效。该项写在技能外层,对全部等级生效。
passive-trigger.events空列表被动技能监听的触发场景。
passive-trigger.condition-list空列表触发场景命中后继续检查的条件。
passive-trigger.chance1.0触发概率,范围为 0 到 1。
passive-trigger.cast-condition空列表被动技能正式触发前检查的释放条件。
passive-trigger.event.on-cast-success空列表被动触发成功后执行的脚本。
passive-trigger.event.on-charge-recover空列表恢复充能时执行的脚本。
passive-trigger.event.on-mana-consume空列表成功扣蓝后执行的脚本。
passive-trigger.max-stack1被动技能最大充能层数。
passive-trigger.cooldown0被动技能冷却或充能恢复时间,单位为毫秒。
passive-trigger.mana0被动技能触发时消耗的蓝量。

被动技能固定按瞬发处理,不使用读条时间、读条分段、读条中断和公共冷却。

被动触发场景 ​

events 写法说明
attack玩家造成伤害时检测。
damaged玩家受到伤害时检测。
kill玩家完成击杀时检测。
cast_skill:all玩家释放任意技能时检测。
cast_skill:技能ID玩家释放指定技能时检测。
tick:5每隔指定 tick 数检测一次。

被动技能必须已经学习。若 require-bind-slot 为 true,还必须装备到技能栏。事件、条件、概率、冷却、充能和蓝量检查全部通过后,才会执行 on-cast-success。

被动条件 ​

yaml
condition-list:
  - 'papi:{%player_level% >= 20}'
  - 'permission:{skill.passive}'
  - 'nopermission:{skill.disabled}'
写法说明
papi:{表达式}检查 PlaceholderAPI 表达式。
permission:{权限}玩家必须拥有指定权限。
nopermission:{权限}玩家必须没有指定权限。

condition-list 用于被动事件匹配后的额外判断;cast-condition 则与主动技能使用相同的释放条件格式,并支持失败提示文本。

配置注意事项 ​

  • mysql.enable 与 attribute-plugin 修改后需要重启服务器。
  • skills/*.yml 中的技能 ID 必须全局唯一,菜单、绑定、变量和事件引用必须使用相同 ID。
  • 百分比属性统一使用实际百分数,20 表示 20%。
  • 时间单位并不统一:cast-time-tick 使用 tick,cooldown 和 gcd 使用毫秒,loop-save-thread-time 使用秒。
  • 带 PlaceholderAPI 变量或四则运算的数值建议使用引号包裹。
  • bind-key 调整后,需要同步修改 DragonCore 技能栏界面。
  • skill-level.0 代表未学习状态,实际释放配置应放在大于 0 的等级节点中。
  • 主动技能固定要求绑定技能栏;被动技能由 require-bind-slot 决定学习后直接生效还是装备后生效。
  • disable-skill-world 会同时阻止主动释放、按压释放完成和被动触发。