技能配置
技能文件放在插件目录的 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 | 字符串 | 无 | 技能类型,只识别 active 和 passive。未知类型会被跳过。 |
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-tick、cooldown 和 mana 在配置中会以原始文本保存,并在运行时按玩家上下文计算。需要使用 PlaceholderAPI 变量或四则运算时,建议用引号包裹整个值。
yaml
cast-time-tick: "40"
cooldown: "6000"
mana: "20"
gcd: "1200"主动释放方式
trigger 值 | 说明 |
|---|---|
instant | 瞬间释放,不进入读条状态。 |
tap_cast | 按下键位后开始读条,读条完成时自动释放。 |
hold_cast | 按住键位读条,提前松开会中断;完整读条后自动释放。 |
hold_release_cast | 按住键位完成读条,读条完成后等待松开键位才释放。提前松开会中断。 |
hold_cast 和 hold_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} | 本次读条完成比例,范围为 0 至 1。 |
冷却生效时机
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-start、on-cast-finish、on-cast-interrupt 或 on-cast-trigger。被动技能没有读条,当前被动配置解析也不会读取这些事件。
脚本通用变量
事件脚本示例确认可使用以下当前技能变量:
| 变量 | 说明 |
|---|---|
{player} | 当前玩家名称。 |
{skill_id} | 当前技能 ID。 |
{skill_name} | 当前技能名称。 |
{skill_level} | 当前有效技能等级。 |
{skill_base_level} | 当前基础技能等级。 |
{mana_now} | 当前蓝量。 |
{mana_max} | 当前最大蓝量。 |
特定事件还会提供分段、读条中断、充能恢复或蓝量扣除变量,具体见对应章节。
已确认的脚本动作
| 动作 | 说明 |
|---|---|
玩家消息('内容') | 给当前玩家发送消息。 |
全服消息('内容') | 向全服发送消息。 |
范围消息('内容', 范围) | 向指定范围内的玩家发送消息。 |
音效('声音名称') | 为玩家播放指定声音。 |
MM技能('技能ID', '参数=值', ...) | 触发 MythicMobs 技能。第一个参数为技能 ID,之后可以继续传入参数。 |
减少冷却('技能ID', '秒数') | 减少当前玩家指定技能的剩余冷却。 |
增加冷却('技能ID', '秒数') | 增加当前玩家指定技能的剩余冷却。 |
减少蓝量('数量') | 减少当前玩家蓝量。 |
增加蓝量('数量') | 恢复当前玩家蓝量,不会超过最大蓝量。 |
执行指令('身份', '指令') | 使用指定身份执行命令。身份支持 console、op、player。 |
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 | 触发概率,范围按 0 至 1 配置。 |
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 使用 0 至 1 的数值:
| 值 | 说明 |
|---|---|
0 | 不触发。 |
0.25 | 25% 概率。 |
0.5 | 50% 概率。 |
1.0 | 100% 概率。 |
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只识别active和passive,其它值不会注册为技能。- 建议从
0级开始连续配置技能等级,并让最高配置等级与max-level保持一致。 - 主动技能固定需要绑定;
require-bind-slot只影响被动技能。 - 不需要绑定的被动技能不能绑定到技能栏,学习后直接参与被动触发检查。
cast-time-tick使用 tick,cooldown和gcd使用毫秒,冷却增减脚本动作使用秒数。- 使用 PlaceholderAPI 表达式或四则运算的数值建议使用引号包裹,避免 YAML 自动转换类型。
cast-trigger-count至少配置为1,大于1时会按读条时间等分触发on-cast-trigger。- 被动技能没有读条和公共冷却,不要为其配置读条专用事件。
- 使用
eco、point、PlaceholderAPI 或 MythicMobs 相关能力前,需要确保对应插件已经安装并正常工作。 - 禁止释放技能的世界由全局配置控制,主动与被动技能都会受到该限制。