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 在所有技能文件中必须全局唯一。插件只注册 typeactivepassive 的技能,未知类型会被跳过。

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-time600在线玩家数据的循环保存间隔,填写 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-mana0 时,插件会直接将蓝量加成数值作为最大蓝量。属性结果必须是纯数字,可以带小数;空值、非数字和负数会按 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技能类型,仅支持 activepassive
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-tickcooldownmanagcd 可以使用字符串保存表达式。包含变量或运算时应使用引号包裹,避免 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', '秒数')增加指定技能的剩余冷却。
减少蓝量('数值')减少当前玩家蓝量。
增加蓝量('数值')增加当前玩家蓝量。
执行指令('类型', '指令')执行指令,类型支持 consoleopplayer

被动技能

被动技能结构

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