Skip to content

配置文件 config.yml

上一页:脚本 · 下一页:被动技能


plugins/QinhSkills/config.yml 是 QS 的总配置:运行时窗口、门控、被动、吟唱默认值、MM 桥、调试、解锁、资源、技能槽、actionbar HUD,还有技能路由表。 本页先给出当前完整文件,再逐段讲清楚每一行。

⚠️ 本页对应 QS 1.0.22。 QS 是单一运行时——配置里没有 v1/v2/v2_enabled 之类的开关。runtime: 段现在只有 combo_window_ms 一项,不要去找别的。

🖼️ [图片占位] config.yml 各段职责分区图 · 建议 assets/config-sections.png


📄 完整 config.yml(当前版本,逐字)

yaml
# QinhSkills — 玩家技能管理
# 运行时流程:QISkillUseEvent → Input → StateMachine → SkillGraph → ExecutionPlan → Gate → EXEC → Post

runtime:
  combo_window_ms: 800

# 冲突组互斥窗口(ms):施放带 conflict_groups 的技能后,同组其它技能在此窗口内不可施放,到点自动解除
gate:
  conflict_window_ms: 1000

# 被动触发:ON_DAMAGED/ON_ATTACK/ON_KILL 由事件驱动;TICK 由下面的周期任务驱动
# tick_interval_ticks:TICK 被动的触发间隔(tick,20=1秒);无 TICK 被动技能时任务自动空转不开销
passive:
  tick_interval_ticks: 20

# 吟唱(读条/CHANNEL)默认值 — 技能 yml 里 channel.* 可逐项覆盖
# 资源消耗仍走 QS 既有扣费缝(profile),不另造资源池;mana/耐力将来归 QC
channel:
  # 读条进度 UI:bossbar(顶部血条,推荐)/ actionbar(屏幕下方文字)/ none(无内置 UI,交给 BetterHud 等读占位符)
  bar_type: bossbar
  # 位移超过该距离(格)打断;0 表示原地不动才算(任何位移都打断)
  interrupt_on_move: true
  move_threshold: 0.5
  # 受到伤害打断
  interrupt_on_damage: true
  # 扣费时机:默认两者都在完成时扣(被打断不惩罚);技能 yml 可单独设
  #   channel.cost_on_start: true     → 起手即扣资源(防刷)
  #   channel.cooldown_on_start: true → 起手即进 CD
  cost_on_start: false
  cooldown_on_start: false

# Mythic 桥 — 推荐 AUTO:API 注册失败自动降级 YAML + loadSkills
mythic:
  bridge_enabled: true
  bridge_mode: AUTO
  bridge_debug: false
  bridge_verify_after_register: true
  bridge_verify_cast: false
  bridge_mythic_yaml_file: QinhSkillsBridge.yml
  bridge_stub_mechanic: 'message{m="&7[QinhSkills] &f{skill}"} @Self'

# true → 输出 [QI][EVENT][PARSE][ROUTE][GATE][EXEC][POST][FALLBACK] trace
# [BYPASS] 警告始终记录(无论 debug)
debug: false

# 生产环境禁止 validation.* — 见 integrations/config.integration-test.example.yml
# validation.ci_dry_run_mythic: true  # 仅无 MM 技能时用于 /qs test 链路冒烟

unlock:
  default_all: false
  starter_skills:
    - fire_wave
    - demo_slash
    - demo_slash_charged

resources:
  default_mana: 100.0
  max_mana: 100.0

slots:
  active_count: 5

actionbar:
  enabled: true
  refresh_ticks: 10
  # 未配置任何技能槽位时不刷屏(发送空 actionbar)
  hide_when_empty_slot: true
  template: "&7[%cast_mode%] &e%skill% &8| &b%mana%&7/&b%mana_max% &8| &fLv.%level%"

# 技能路由 — 支持模式分支(架构图 config 示例)
skills:
  fire_wave:
    RIGHT_CLICK: fire_wave
    LEFT_CLICK: blade_slash
    default: fire_wave
aliases:
  FireWave: fire_wave
  fw: fire_wave
  DemoSlash: demo_slash
  DemoSlashCharged: demo_slash_charged
  ChainPrimaryOk: chain_primary_ok

🔧 逐段详解

runtime — 运行时

yaml
runtime:
  combo_window_ms: 800
默认说明
combo_window_ms800连招输入的默认时间窗口。graph 里的 combo 没指定 window_ms 时用它兜底;也是 COMBO_WINDOW 状态的延续判断依据

⚠️ runtime 段现在只有这一项。 没有任何运行时开关。

gate — 门控

yaml
gate:
  conflict_window_ms: 1000
默认说明
conflict_window_ms1000冲突组互斥窗口。放了带 conflict_groups 的技能后,同组其它技能在此窗口(ms)内不可施放,到点自动解除

详见 冷却充能GCD与冲突

passive — 被动

yaml
passive:
  tick_interval_ticks: 20
默认说明
tick_interval_ticks20TICK 被动的触发间隔(tick,20 = 1 秒)。没有 TICK 被动技能时,这个周期任务自动空转、无开销

详见 被动技能

channel — 吟唱默认值

yaml
channel:
  bar_type: bossbar
  interrupt_on_move: true
  move_threshold: 0.5
  interrupt_on_damage: true
  cost_on_start: false
  cooldown_on_start: false

这是所有吟唱技能的全局默认值,技能 yml 里 channel.*逐项覆盖。各字段含义见 施法模式与吟唱

默认说明
bar_typebossbar读条 UI:bossbar / actionbar / none
interrupt_on_movetrue位移打断
move_threshold0.5位移阈值(格),0 = 任何位移都打断
interrupt_on_damagetrue受伤打断
cost_on_startfalsetrue = 起手即扣资源(防刷)
cooldown_on_startfalsetrue = 起手即进 CD

mythic — MythicMobs 执行桥

yaml
mythic:
  bridge_enabled: true
  bridge_mode: AUTO
  bridge_debug: false
  bridge_verify_after_register: true
  bridge_verify_cast: false
  bridge_mythic_yaml_file: QinhSkillsBridge.yml
  bridge_stub_mechanic: 'message{m="&7[QinhSkills] &f{skill}"} @Self'

桥决定 QS 怎么把技能交给 MM 执行。完整说明见 对接 MythicMobs,这里只给速览:

默认说明
bridge_enabledtrue是否启用 MM 桥
bridge_modeAUTO桥模式:AUTO(API 失败自动降级 YAML)/ API_MODE / YAML_STUB
bridge_debugfalse桥调试日志
bridge_verify_after_registertrue注册后校验技能是否登记成功
bridge_verify_castfalse校验时是否试放
bridge_mythic_yaml_fileQinhSkillsBridge.ymlYAML 降级时写入的桥文件名
bridge_stub_mechanic见上没装 MM / 占位时的桩机制(默认发一条占位消息)

debug — 调试

yaml
debug: false

设为 true 时输出全链路 trace 标签: [QI] [EVENT] [PARSE] [ROUTE] [GATE] [EXEC] [POST] [FALLBACK]

[BYPASS] 警告无论 debug 是否开启都始终记录

validation — 校验(生产禁用)

文件里这段是注释掉的

yaml
# validation.ci_dry_run_mythic: true

validation.* 仅集成测试用,生产环境禁止开启。集成测试配置见 integrations/config.integration-test.example.yml

unlock — 默认解锁

yaml
unlock:
  default_all: false
  starter_skills:
    - fire_wave
    - demo_slash
    - demo_slash_charged
默认说明
default_allfalsetrue = 新玩家默认解锁所有技能
starter_skills见上新玩家默认解锁的技能列表(default_all: false 时生效)

resources — 资源池(临时占位)

yaml
resources:
  default_mana: 100.0
  max_mana: 100.0
默认说明
default_mana100.0玩家初始法力
max_mana100.0法力上限

⚠️ 这是临时占位,将来归 QinhClass(QC)管。详见 消耗条件与变量

slots — 技能槽

yaml
slots:
  active_count: 5
默认说明
active_count5主动技能槽数量(1–9)

actionbar — actionbar HUD

yaml
actionbar:
  enabled: true
  refresh_ticks: 10
  hide_when_empty_slot: true
  template: "&7[%cast_mode%] &e%skill% &8| &b%mana%&7/&b%mana_max% &8| &fLv.%level%"
默认说明
enabledtrue是否开启 actionbar HUD
refresh_ticks10刷新间隔(tick)
hide_when_empty_slottrue没配任何技能槽时不刷屏(发空 actionbar)
template见上HUD 文本模板,支持下面的占位符

template 可用占位符:

占位符含义
%cast_mode%当前施法模式
%skill%当前技能显示名
%mana%当前法力
%mana_max%法力上限
%level%技能等级

skills — 技能路由表

yaml
skills:
  fire_wave:
    RIGHT_CLICK: fire_wave
    LEFT_CLICK: blade_slash
    default: fire_wave

路由表把「一个入口名 → 不同触发模式 → 不同 MM 技能」对应起来,实现一个键位按不同操作放不同技能

读法(以上面的 fire_wave 条目为例):

触发路由到
RIGHT_CLICK(右键)fire_wave
LEFT_CLICK(左键)blade_slash
其它没列出的触发defaultfire_wave 兜底

default 是没匹配到具体触发模式时的兜底目标,建议每条都写上。

aliases — 别名

yaml
aliases:
  FireWave: fire_wave
  fw: fire_wave
  DemoSlash: demo_slash
  DemoSlashCharged: demo_slash_charged
  ChainPrimaryOk: chain_primary_ok

别名把「外部传进来的名字」映射到「标准技能名」。例如物品 / 命令里写 FireWavefw,QS 都识别为 fire_wave。 左边是别名(大小写随意起),右边是真实技能 id。方便给老配置、外部插件、缩写留兼容入口。


🔄 改完怎么生效

改完 config.yml 后用:

/qs reload

重载定义 / graph / 路由,并同步 MM 桥。命令详见 命令与权限


📚 继续阅读