Skip to content

技能配置

技能文件放在插件目录的 skills/ 文件夹中。插件会读取该目录内的技能配置文件;每个 YAML 文件可以定义多个技能,顶层节点名就是全局技能 ID。

技能 ID 会被菜单分类、技能绑定、被动触发、指令、变量和 API 使用,因此不同文件中的技能 ID 也不能重复。技能仅支持以下两种类型:

类型配置值说明
主动技能active学习后需要绑定到技能栏,通过 DragonCore 键位主动释放。
被动技能passive由攻击、受伤、击杀、释放技能或定时检查等事件触发。

基础结构

yaml
示例技能:
  name: "炎爆术"
  type: "active"
  texture: "gui/LyDragonSkillView/skill.png"
  simple-description: "&a主动技能"
  max-level: 2
  extra-level-placeholder: "0"
  show-condition: []
  skill-level:
    0:
      description:
        - "&a主动技能 &b{level_result}级"
        - "&7升级条件:"
        - "{upgrade_condition}"
    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:
        - "skill-point:{1}|&b技能点 x{amount}"
      description:
        - "&a主动技能 &b{level_result}级"
        - "&7冷却: &e{result_cooldown}s"
        - "&7蓝耗: &b{result_mana}"

通用节点

以下节点写在技能 ID 下,对该技能的全部等级生效。

节点类型默认值说明
name字符串技能 ID技能显示名称。
type字符串技能类型,只识别 activepassive。未知类型会被跳过。
texture字符串空字符串DragonCore 菜单和技能栏使用的技能贴图路径。
simple-description字符串空字符串技能列表中显示的简短描述。配置文件支持字符串写法。
max-level整数已解析的最高等级界面显示和满级判断使用的基础最高等级。
extra-level-placeholder字符串0额外技能等级表达式,运行时按玩家解析。可用于实现装备或属性提供的额外等级。
show-condition字符串列表空列表技能菜单显示条件。为空时默认显示。
require-bind-slot布尔值false仅被动技能使用,决定是否必须绑定到技能栏才生效。主动技能固定需要绑定。
skill-level配置段技能各等级的配置,子节点名称必须是整数等级。

max-level 是技能界面显示和满级判断所用的上限。玩家实际保存的基础等级还会受到已解析等级配置范围限制。建议从 0 级开始连续配置,并使最高等级与 max-level 一致。

显示条件

show-condition 控制技能是否出现在技能菜单中。未配置、留空或使用空列表时,技能默认显示。

yaml
show-condition:
  - "papi:{%player_level% >= 10}"
  - "permission:{skill.fireball}"

项目示例确认支持以下条件格式:

格式说明
papi:{表达式}使用 PlaceholderAPI 变量和表达式判断。
permission:{权限节点}玩家拥有指定权限时满足。
nopermission:{权限节点}玩家没有指定权限时满足。
class:{职业ID}玩家当前职业与指定职业匹配时满足。
yaml
show-condition:
  - "papi:{%player_level% >= 20}"
  - "class:{战士}"

show-condition 只控制菜单中的显示,不代表玩家已经学习技能,也不会代替释放条件或被动触发条件。

技能等级

每个等级写在 skill-level 下。等级节点内可以包含等级描述、升级条件以及对应类型的触发配置。

节点适用类型说明
description主动、被动当前等级在技能详情中显示的描述。
upgrade-list主动、被动升到该等级所需检查或扣除的条件。
active-trigger主动当前等级的主动释放配置。
passive-trigger被动当前等级的被动触发配置。

0 级配置

0 级通常只配置 description,用于显示未学习状态和下一级升级条件,不配置实际触发节点。

yaml
skill-level:
  0:
    description:
      - "&a主动技能 &b{level_result}级&7({level_now}+{level_extra}) / &b{level_max}级"
      - ""
      - "&7升级条件:"
      - "{upgrade_condition}"

技能等级大于 0 时才视为已学习。未学习技能不能绑定到技能栏。

等级配置回退

额外等级可能让有效等级超过基础学习上限。运行时读取技能参数时,如果有效等级没有完全对应的配置,插件会优先使用不高于目标等级的最近配置;如果不存在更低等级,才使用更高的最近配置。

因此,额外等级可以提高最终等级显示,但如果需要额外等级改变冷却、蓝耗或事件内容,仍应配置对应等级节点。

主动技能

主动技能使用 active-trigger。主动技能固定要求绑定到技能栏,玩家按下已配置的 DragonCore 键位后触发释放。

yaml
示例主动技能:
  name: "炎爆术"
  type: "active"
  texture: "gui/LyDragonSkillView/skill.png"
  simple-description: "&a主动技能"
  max-level: 1
  extra-level-placeholder: "0"
  show-condition: []
  skill-level:
    0:
      description:
        - "&7尚未学习"
        - "{upgrade_condition}"
    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-success:
            - "玩家消息('&a释放了 {skill_name}')"
        max-stack: 1
        cooldown: "6000"
        mana: "20"
        gcd: "1200"
      upgrade-list:
        - "skill-point:{1}|&b技能点 x{amount}"
      description:
        - "&a主动技能 &b{level_result}级"
        - "&7冷却: &e{result_cooldown}s"
        - "&7蓝耗: &b{result_mana}"

主动触发节点

节点类型默认值说明
trigger字符串instant主动技能释放方式。
interrupt-when字符串列表空列表允许打断读条的事件。
cast-time-tick数字或字符串0基础读条时间,单位为 tick。支持 PlaceholderAPI 变量和四则运算。
cast-trigger-count整数1读条期间的分段触发次数,至少应为 1
cooldown-on-cast-start布尔值true是否在开始释放时进入冷却。
cast-condition字符串列表空列表正式释放前检查的条件。
event配置段技能释放过程中的事件脚本。
max-stack整数1最大充能层数。
cooldown数字或字符串0每层充能或技能冷却时间,单位为毫秒。
mana数字或字符串0技能基础蓝量消耗。
gcd数字或字符串0释放后施加的公共冷却,单位为毫秒。

cast-time-tickcooldownmana 在配置中会以原始文本保存,并在运行时按玩家上下文计算。需要使用 PlaceholderAPI 变量或四则运算时,建议用引号包裹整个值。

yaml
cast-time-tick: "40"
cooldown: "6000"
mana: "20"
gcd: "1200"

主动释放方式

trigger说明
instant瞬间释放,不进入读条状态。
tap_cast按下键位后开始读条,读条完成时自动释放。
hold_cast按住键位读条,提前松开会中断;完整读条后自动释放。
hold_release_cast按住键位完成读条,读条完成后等待松开键位才释放。提前松开会中断。

hold_casthold_release_cast 会处理按键抬起事件。同一键位从按下到抬起期间只会处理一次按下操作,避免长按产生重复释放或重复提示。

读条时间与分段触发

cast-time-tick 的单位为 tick,20 tick 等于 1 秒。玩家的吟唱加速属性会影响实际读条时间。

cast-trigger-count 会把完整读条时间等分为指定段数。每到达一个分段时间点,触发一次 event.on-cast-trigger。每段只会触发一次。

yaml
active-trigger:
  trigger: "tap_cast"
  cast-time-tick: "80"
  cast-trigger-count: 4
  event:
    on-cast-trigger:
      - "玩家消息('&e当前段数: {count_now}/{count_max}')"

分段触发事件可使用:

变量说明
{count_now}当前触发段数。
{count_max}总分段数,即 cast-trigger-count

读条打断

interrupt-when 只对正在读条的主动技能生效。

打断时机
move玩家移动时。
attack玩家造成伤害时。
damaged玩家受到伤害时。
yaml
interrupt-when:
  - "move"
  - "attack"
  - "damaged"

按压类型技能在读条完成前松开键位时,也会以 release 原因中断。中断会触发 on-cast-interrupt,并提供本次读条进度信息。

变量说明
{count_now}中断前已经触发的分段数。
{count_max}总分段数。
{elapsed}本次读条已经过的秒数。
{scale}本次读条完成比例,范围为 01

冷却生效时机

cooldown-on-cast-start 控制读条技能何时进入冷却。

说明
true开始释放时立即进入冷却。
false读条中断或成功完成时再进入冷却。

瞬发、读条、充能和公共冷却会共同参与释放检查。技能没有可用充能、仍处于技能冷却、处于公共冷却、蓝量不足或释放条件失败时,本次释放不会继续执行。

释放条件

主动技能的 cast-condition 写在 active-trigger 下;被动技能的 cast-condition 写在 passive-trigger 下。被动技能在事件、触发条件和概率检查通过后,也会在正式执行前检查此列表。

每行格式:

text
条件表达式|失败提示

失败提示可以省略:

text
条件表达式

示例:

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

确认可用的内置变量如下:

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

条件支持 PlaceholderAPI 变量、比较表达式以及 &&|| 逻辑运算。逻辑或必须写成 ||,不会被当作失败提示的分隔符。

yaml
cast-condition:
  - "{mana_now} >= 20 && %player_level% >= 10|&c蓝量或等级不足"

任意一条条件不满足时,本次释放会被拦截。配置了 |失败提示 时优先发送该行提示;未配置提示时使用全局释放条件失败消息。

冷却、充能、蓝量与公共冷却

充能层数

max-stack 决定技能最多保存多少层可用次数。

配置效果
max-stack: 1普通单层技能。
max-stack 大于 1充能技能,可连续消耗多层。

玩家学习技能后,初始可用层数会设置为当前等级的最大层数。每次使用会消耗可用层数,并按照 cooldown 逐层恢复。每恢复一层会触发 on-charge-recover;恢复至满层时还会产生充能完成事件,供插件界面和 API 监听。

on-charge-recover 可使用:

变量说明
{recover}本次恢复的层数。
{stack_before}恢复前层数。
{stack_now}恢复后层数。
{stack_max}最大层数。
yaml
event:
  on-charge-recover:
    - "玩家消息('&b充能恢复: +{recover}层 &7({stack_before}->{stack_now}/{stack_max})')"

冷却

cooldown 单位为毫秒。玩家的冷却缩减属性会影响最终冷却时间。

yaml
cooldown: "5000"

技能冷却结束时会产生冷却完成事件。DragonCore 技能栏会根据对应键位执行图标闪烁动画。

蓝量

mana 是技能的基础蓝耗。玩家的蓝耗缩减属性会影响最终消耗,最终蓝耗按整数结算。

成功扣除蓝量后触发 on-mana-consume

变量说明
{mana_consume}本次实际扣除的蓝量。
{mana_before}扣除前蓝量。
{mana_after}扣除后蓝量。
yaml
event:
  on-mana-consume:
    - "玩家消息('&9蓝量消耗: -{mana_consume} &7({mana_before}->{mana_after})')"

公共冷却

主动技能可以通过 gcd 设置公共冷却,单位为毫秒。公共冷却由玩家共享,处于公共冷却期间不能继续释放受其控制的主动技能。

被动技能没有可配置的公共冷却,其统一运行值固定为 0

技能事件脚本

事件脚本写在主动技能或被动技能触发节点的 event 下。事件既可以使用 YAML 列表,也可以使用多行字符串。

列表写法:

yaml
event:
  on-cast-success:
    - "音效('ENTITY_EXPERIENCE_ORB_PICKUP')"
    - "玩家消息('&a释放成功: {skill_name}')"

多行脚本写法:

yaml
event:
  on-cast-success: |-
    音效('ENTITY_EXPERIENCE_ORB_PICKUP')
    玩家消息('&a释放成功: {skill_name}')
    范围消息('&6{player}&a 释放了 &6{skill_name}', 8)

多行字符串会按行读取。项目示例也确认脚本支持注释、条件语句和表达式:

yaml
event:
  on-cast-trigger: |-
    # 每段显示当前进度
    玩家消息('&e读条段触发: &f{count_now}&7/&f{count_max}')
    if count_now >= count_max {
      范围消息('&6{player}&e 完成了最后一段读条', 6)
    }

主动技能事件

事件节点触发时机
on-cast-start主动技能开始释放时。
on-cast-finish主动技能读条结束时。该节点会被配置解析器读取。
on-cast-success技能成功释放时。瞬发技能立即触发,读条技能完整完成后触发。
on-cast-interrupt读条被移动、攻击、受伤、提前松键或其它中断操作打断时。
on-cast-trigger读条到达分段时间点时。触发次数由 cast-trigger-count 决定。
on-charge-recover技能恢复充能层数时。
on-mana-consume技能成功扣除蓝量时。

被动技能事件

被动技能当前读取以下事件:

事件节点触发时机
on-cast-success被动技能成功触发时。
on-charge-recover被动技能恢复充能层数时。
on-mana-consume被动技能成功扣除蓝量时。

不要在被动技能中依赖 on-cast-starton-cast-finishon-cast-interrupton-cast-trigger。被动技能没有读条,当前被动配置解析也不会读取这些事件。

脚本通用变量

事件脚本示例确认可使用以下当前技能变量:

变量说明
{player}当前玩家名称。
{skill_id}当前技能 ID。
{skill_name}当前技能名称。
{skill_level}当前有效技能等级。
{skill_base_level}当前基础技能等级。
{mana_now}当前蓝量。
{mana_max}当前最大蓝量。

特定事件还会提供分段、读条中断、充能恢复或蓝量扣除变量,具体见对应章节。

已确认的脚本动作

动作说明
玩家消息('内容')给当前玩家发送消息。
全服消息('内容')向全服发送消息。
范围消息('内容', 范围)向指定范围内的玩家发送消息。
音效('声音名称')为玩家播放指定声音。
MM技能('技能ID', '参数=值', ...)触发 MythicMobs 技能。第一个参数为技能 ID,之后可以继续传入参数。
减少冷却('技能ID', '秒数')减少当前玩家指定技能的剩余冷却。
增加冷却('技能ID', '秒数')增加当前玩家指定技能的剩余冷却。
减少蓝量('数量')减少当前玩家蓝量。
增加蓝量('数量')恢复当前玩家蓝量,不会超过最大蓝量。
执行指令('身份', '指令')使用指定身份执行命令。身份支持 consoleopplayer
yaml
event:
  on-cast-success: |-
    MM技能('请替换为你的MM技能ID', 'damage=120', 'phase={count_now}')
    玩家消息('&a释放成功: &6{skill_name}')
    范围消息('&6{player}&a 释放了 &6{skill_name}', 8)
    执行指令('console', 'say {player} 释放了技能')

MythicMobs 参数在技能中可按项目示例使用 <skill.var.damage><skill.var.phase> 读取。因为尖括号内容可能被文档框架解析,必须始终放在行内代码或代码块中。

升级条件

upgrade-list 写在对应等级节点中,用于设置升级到该等级时的前置条件和消耗。每条规则由检查部分和显示文本组成:

text
类型:{规则内容}|显示文本
类型格式作用相关插件
PAPI 条件`papi:显示文本`判断 PlaceholderAPI 表达式,不扣除资源。
物品`item:显示文本`检查并扣除指定数量的物品。
金币`eco:显示文本`检查并扣除 Vault 经济。
点券`point:显示文本`检查并扣除 PlayerPoints 点券。
技能点`skill-point:显示文本`检查并扣除本插件保存的技能点。
yaml
upgrade-list:
  - "papi:{%player_level% >= 10}|&b等级大于等于 10 级"
  - "item:{测试技能书#3}|&b{item} x{amount}"
  - "item:{火焰碎片#5}|&b{item} x{amount}"
  - "eco:{5000}|&e金币 x{amount}"
  - "point:{30}|&5点券 x{amount}"
  - "skill-point:{1}|&b技能点 x{amount}"

显示文本支持:

变量说明
{item}item 规则中的物品 ID。
{amount}当前规则配置的数量。

升级时会检查该等级配置中的全部规则。任意条件不满足时升级失败;升级失败提示可取得第一条未满足规则的显示文本。

只有实际使用对应升级条件时才需要相关软依赖。例如使用 eco 条件需要 Vault 和可用的经济实现,使用 point 条件需要 PlayerPoints。

技能描述

description 是当前等级的详情文本列表。simple-description 用于技能列表中的简短说明,两者用途不同。

yaml
description:
  - "&a主动技能 &b{level_result}级&7({level_now}+{level_extra}) / &b{level_max}级"
  - "&7冷却: &e{result_cooldown}s&7(原{origin_cooldown}s)"
  - "&7蓝耗: &b{result_mana}&7(原{origin_mana})"
  - ""
  - "&7升级条件:"
  - "{upgrade_condition}"

已确认的描述变量:

变量说明
{name}技能显示名称。
{level_result}最终等级,即基础等级加额外等级。
{level_now}当前基础等级。
{level_extra}extra-level-placeholder 提供的额外等级。
{level_max}技能 max-level
{result_cooldown}应用冷却缩减后的最终冷却秒数。
{origin_cooldown}技能配置中的原始冷却秒数。
{result_mana}应用蓝耗缩减后的最终蓝耗。
{origin_mana}技能配置中的原始蓝耗。
{upgrade_condition}下一级升级条件的显示文本。满级时使用全局满级文本。

{upgrade_condition} 会组合升级规则中 | 后面的显示文本,并替换 {item}{amount}。当技能已满级时,显示内容由全局配置 upgrade-condition-full-level-text 决定。

被动技能

被动技能使用 passive-trigger,没有读条和公共冷却。触发事件发生后,插件依次处理学习状态、绑定要求、世界限制、事件类型、条件、概率、充能、冷却、蓝量和释放条件,全部通过后执行 on-cast-success

yaml
示例被动技能:
  name: "灼焰印记"
  type: "passive"
  texture: "gui/LyDragonSkillView/skill.png"
  simple-description: "&6被动技能"
  max-level: 1
  extra-level-placeholder: "0"
  require-bind-slot: false
  show-condition: []
  skill-level:
    0:
      description:
        - "&7尚未学习"
        - "{upgrade_condition}"
    1:
      passive-trigger:
        events:
          - "attack"
          - "tick:5"
        condition-list: []
        chance: "1.0"
        cast-condition: []
        event:
          on-cast-success:
            - "玩家消息('&6触发被动技能: {skill_name}')"
          on-charge-recover: []
          on-mana-consume: []
        max-stack: 1
        cooldown: "0"
        mana: "0"
      upgrade-list:
        - "skill-point:{1}|&b技能点 x{amount}"
      description:
        - "&6被动技能 &b{level_result}级"

被动通用节点

require-bind-slot 写在技能外层,不写在具体等级中。

说明
true被动技能必须学习并绑定到技能栏后才会生效。
false被动技能学习后即可生效,不允许再绑定到技能栏。

主动技能不读取此配置,始终视为 true

被动触发节点

节点类型默认值说明
events字符串列表空列表允许触发该被动技能的事件。
condition-list字符串列表空列表被动事件发生后的触发条件。
chance数字或字符串1.0触发概率,范围按 01 配置。
cast-condition字符串列表空列表正式触发前的额外释放条件。
event配置段被动触发成功、充能恢复和扣蓝事件。
max-stack整数1被动技能最大充能层数。
cooldown数字或字符串0被动技能冷却时间,单位为毫秒。
mana数字或字符串0被动技能触发时消耗的蓝量。

被动触发事件

项目示例和监听器说明确认以下事件格式:

事件说明
attack玩家对目标造成伤害时检查。
damaged玩家受到伤害时检查。
kill玩家击杀目标时检查。
cast_skill:all玩家成功释放任意技能时检查。
cast_skill:技能ID玩家成功释放指定技能时检查。
tick:间隔按指定 tick 间隔检查,例如 tick:5
yaml
passive-trigger:
  events:
    - "attack"
    - "damaged"
    - "kill"
    - "cast_skill:all"
    - "cast_skill:示例主动技能"
    - "tick:5"

同一个被动技能可以配置多个事件。cast_skill:技能ID 中的技能 ID 必须与 skills/ 下定义的顶层技能 ID 完全对应。

被动触发条件

condition-list 用于筛选被动事件。项目示例确认可使用以下格式:

格式说明
papi:{表达式}PlaceholderAPI 表达式满足时通过。
permission:{权限节点}玩家拥有权限时通过。
nopermission:{权限节点}玩家没有权限时通过。
yaml
condition-list:
  - "papi:{%player_level% >= 20}"
  - "permission:{skill.passive.fire}"

condition-list 用于判断本次被动事件是否符合触发条件;cast-condition 则使用与主动技能相同的释放条件格式,并支持为失败条件配置提示文本。

被动触发概率

chance 使用 01 的数值:

说明
0不触发。
0.2525% 概率。
0.550% 概率。
1.0100% 概率。
yaml
chance: "0.35"

主动技能完整示例

yaml
烈焰斩:
  name: "&c烈焰斩"
  type: "active"
  texture: "gui/LyDragonSkillView/skill.png"
  simple-description: "&7造成一次火焰伤害"
  max-level: 2
  extra-level-placeholder: "0"
  show-condition:
    - "papi:{%player_level% >= 10}"

  skill-level:
    0:
      description:
        - "&a主动技能 &b{level_result}级&7({level_now}+{level_extra}) / &b{level_max}级"
        - ""
        - "&7升级条件:"
        - "{upgrade_condition}"

    1:
      active-trigger:
        trigger: "tap_cast"
        interrupt-when:
          - "move"
          - "damaged"
        cast-time-tick: "40"
        cast-trigger-count: 2
        cooldown-on-cast-start: true
        cast-condition:
          - "{mana_now} >= 20|&c蓝量不足,至少需要 20 点蓝量"
        event:
          on-cast-start:
            - "玩家消息('&7开始释放 &6{skill_name}')"
          on-cast-finish: []
          on-cast-success: |-
            MM技能('请替换为你的MM技能ID', 'damage=120')
            玩家消息('&a释放成功: &6{skill_name}')
          on-cast-interrupt:
            - "玩家消息('&c读条中断,进度: {scale}')"
          on-cast-trigger:
            - "玩家消息('&e读条进度: {count_now}/{count_max}')"
          on-charge-recover:
            - "玩家消息('&b充能恢复: {stack_now}/{stack_max}')"
          on-mana-consume:
            - "玩家消息('&9消耗蓝量: {mana_consume}')"
        max-stack: 1
        cooldown: "6000"
        mana: "20"
        gcd: "1200"
      upgrade-list:
        - "papi:{%player_level% >= 10}|&b等级大于等于 10 级"
        - "skill-point:{1}|&b技能点 x{amount}"
      description:
        - "&a主动技能 &b{level_result}级&7({level_now}+{level_extra}) / &b{level_max}级"
        - "&7冷却: &e{result_cooldown}s&7(原{origin_cooldown}s)"
        - "&7蓝耗: &b{result_mana}&7(原{origin_mana})"
        - ""
        - "&7升级条件:"
        - "{upgrade_condition}"

    2:
      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:
            - "MM技能('请替换为你的MM技能ID', 'damage=180')"
          on-cast-interrupt: []
          on-cast-trigger: []
          on-charge-recover: []
          on-mana-consume: []
        max-stack: 3
        cooldown: "5000"
        mana: "24"
        gcd: "1000"
      upgrade-list:
        - "papi:{%player_level% >= 20}|&b等级大于等于 20 级"
        - "skill-point:{2}|&b技能点 x{amount}"
      description:
        - "&a主动技能 &b{level_result}级&7({level_now}+{level_extra}) / &b{level_max}级"
        - "&7冷却: &e{result_cooldown}s&7(原{origin_cooldown}s)"
        - "&7蓝耗: &b{result_mana}&7(原{origin_mana})"

被动技能完整示例

yaml
灼焰印记:
  name: "&6灼焰印记"
  type: "passive"
  texture: "gui/LyDragonSkillView/skill.png"
  simple-description: "&6攻击时有概率触发"
  max-level: 1
  extra-level-placeholder: "0"
  require-bind-slot: false
  show-condition: []

  skill-level:
    0:
      description:
        - "&6被动技能 &b{level_result}级&7({level_now}+{level_extra}) / &b{level_max}级"
        - ""
        - "&7升级条件:"
        - "{upgrade_condition}"

    1:
      passive-trigger:
        events:
          - "attack"
        condition-list:
          - "papi:{%player_level% >= 10}"
        chance: "0.25"
        cast-condition:
          - "{mana_now} >= 5|&c蓝量不足"
        event:
          on-cast-success: |-
            MM技能('请替换为你的MM技能ID', 'damage=50')
            玩家消息('&6触发被动技能: {skill_name}')
          on-charge-recover: []
          on-mana-consume: []
        max-stack: 1
        cooldown: "3000"
        mana: "5"
      upgrade-list:
        - "papi:{%player_level% >= 10}|&b等级大于等于 10 级"
        - "skill-point:{1}|&b技能点 x{amount}"
      description:
        - "&6被动技能 &b{level_result}级&7({level_now}+{level_extra}) / &b{level_max}级"
        - "&7冷却: &e{result_cooldown}s&7(原{origin_cooldown}s)"
        - "&7蓝耗: &b{result_mana}&7(原{origin_mana})"
        - ""
        - "&7升级条件:"
        - "{upgrade_condition}"

配置注意事项

  • 技能 ID 在全部技能文件中必须保持唯一。
  • type 只识别 activepassive,其它值不会注册为技能。
  • 建议从 0 级开始连续配置技能等级,并让最高配置等级与 max-level 保持一致。
  • 主动技能固定需要绑定;require-bind-slot 只影响被动技能。
  • 不需要绑定的被动技能不能绑定到技能栏,学习后直接参与被动触发检查。
  • cast-time-tick 使用 tick,cooldowngcd 使用毫秒,冷却增减脚本动作使用秒数。
  • 使用 PlaceholderAPI 表达式或四则运算的数值建议使用引号包裹,避免 YAML 自动转换类型。
  • cast-trigger-count 至少配置为 1,大于 1 时会按读条时间等分触发 on-cast-trigger
  • 被动技能没有读条和公共冷却,不要为其配置读条专用事件。
  • 使用 ecopoint、PlaceholderAPI 或 MythicMobs 相关能力前,需要确保对应插件已经安装并正常工作。
  • 禁止释放技能的世界由全局配置控制,主动与被动技能都会受到该限制。