快速上手
5 分钟,把自带的 fire_wave 从"占位聊天提示"变成真有火焰特效、还能用物品右键放出来的技能。全程复制粘贴即可。
整条路是这样的:
①/qs reload → ②看懂 fire_wave → ③解锁 → ④/qs cast 试放(看占位) → ⑤MM 写真技能 → ⑥绑到物品① 重载,让 QS 把示例释放出来
/qs reload/qs reload 会:重载所有技能定义 / graph / 路由,并同步 MM 桥。首次启动其实已经释放了示例文件;这一步确保它们都被加载。
② 看一眼自带的 fire_wave(先读它)
打开 plugins/QinhSkills/skills/combat/fire_wave.yml。它是一切技能的模板,看懂这一个,其余示例都只是它的变体。去掉注释后核心就这么点:
id: fire_wave # 技能唯一 id,全小写;别处都用这个 id 引用它
display: "&c火焰波" # 显示名
# ↓ 上半:生态信息(分类归档 + reload 时一致性校验)
meta:
category: combat # 固定五类之一:combat/movement/utility/combo/boss
type: active # active 主动 / passive 被动
rank: basic
trigger:
primary: RIGHT_CLICK # 主触发键,须出现在 graph 入口节点 triggers 里
state:
required: IDLE # 施放所需状态机状态
graph:
entry: fire_wave # 用哪张 graph(按 graph_id 找)
execution:
mythic_skill: fire_wave # 真正执行的 MythicMobs 技能名
# ↓ 下半:运行期实际读取的字段
type: active # 真正决定主动/被动的是这一行(loader 读它)
max_level: 5
cooldown:
base: 3000 # 冷却毫秒(3000 = 3 秒)
resource:
mana: 15 # 施放消耗(⚠ mana 将来归 QinhClass,这里是临时占位)
cast_mode: instant # instant 瞬发 / channel 吟唱 / toggle 开关
variables:
element: fire # 透传给 MM 的变量,MM 里用 <skill.var.element> 读
tags: [fire, aoe, combat]💡 为什么有"两套"字段? 上半
meta/trigger/state/graph/execution是生态信息(分类、reload 校验、连招用);下半type/cooldown/resource/...是运行期真正读取的字段。两边指向同一个技能,保持一致即可(详见 核心概念)。
它还配了一张 graph(graphs/combat/fire_wave.graph.yml),最简技能就一个入口节点:
graph_id: fire_wave # 要和技能文件 graph.entry 同名
entry: fire_wave # 入口节点名
nodes:
fire_wave: # 入口节点(名字 = entry)
skill_id: fire_wave
mythic_skill: fire_wave # = 技能文件的 execution.mythic_skill
require_state: IDLE # = 技能文件的 state.required
triggers: # 命中这些键就走本节点
- RIGHT_CLICK③ 解锁它
QS 默认不是全解锁(config.yml 里 unlock.default_all: false)。fire_wave 已经在 starter_skills 里,新玩家进服会自动有;手动给某人解锁:
/qs unlock fire_wave
/qs unlock fire_wave Steve # 给指定玩家
config.yml的unlock.starter_skills默认含fire_wave / demo_slash / demo_slash_charged,新玩家自动解锁这几个。
④ 命令试放,先看占位
/qs cast fire_wave如果你还没装 MM 或还没写同名技能,聊天栏会冒出:
[QinhSkills] fire_wave✅ 这正是我们要的中间态。 它证明 QS 整条管线(输入→状态→图→计划→门控→执行→后处理)全通了,只差 MM 把它演出来。下一步就补这块。
⑤ 在 MythicMobs 里写同名真技能
新建 plugins/MythicMobs/skills/fire_wave.yml(文件名随意,技能 key 必须叫 fire_wave,与 QS 的 execution.mythic_skill 对上):
fire_wave:
Skills:
- particles{p=flame;amount=40;hSpread=1;vSpread=1} @Origin
- sound{s=entity.blaze.shoot;v=1;p=1} @Self
- damage{amount=6} @EntitiesInRadius{r=4} # 伤害数值最终由属性插件结算口径然后让 MM 加载它:
/mm reload🔑 QS 不会覆盖你这个文件。 你一旦写了同名
fire_wave,QS 立刻改用你的真技能,占位消息消失。再/qs cast fire_wave,这次就是真火焰了。
🖼️ [图片占位] /qs cast fire_wave 放出真实火焰粒子的截图 · 建议 assets/quickstart-fire-wave.png
⑥ 绑到 QI 物品上,右键放出来
最后让一把剑右键就能放 fire_wave。在 QI 物品的动作里加一个 qinhskills:cast handler(这是 QI 的处理器,把按键交给 QS):
# plugins/QinhItems/items/weapon.yml 里某把剑的动作段(节选)
actions:
triggers:
right_click: # 右键触发
trigger:
atom: right_click
refs:
- handler: qinhskills:cast # 交给 QS
payload: "fire_wave" # 放哪个技能重载物品:
/qi reload
/qi give <你的剑ID>右键挥剑 —— QS 判定能不能放(解锁 / 冷却 / 消耗…),通过则交 MM 放出火焰。
物品对接的完整写法(payload 用 JSON、按键组合、shift 触发等)见 对接 QinhItems。
🔁 记住这个改动循环
三个文件、三条重载命令,各管各的,别记混:
| 你改了… | 用这条重载 | 例 |
|---|---|---|
| QS 技能 / graph / 路由 | /qs reload | 改冷却、改目标、加连招 |
| MM 技能表现 | /mm reload | 改粒子、改伤害、改位移 |
| QI 物品 / 物品动作 | /qi reload | 改绑定、改触发键 |
⚠️ 改了哪侧就重载哪侧。例如你改了 MM 的火焰特效却只
/qs reload,当然不生效——那不是 QS 的活。
📋 你刚用到的命令(共 11 条可用命令)
| 命令 | 权限 | 说明 |
|---|---|---|
/qs reload | qinhskills.admin | 重载定义 / graph / 路由 + 同步 MM 桥 |
/qs list [玩家] | qinhskills.use | 列出技能与解锁 / 等级 / 冷却状态 |
/qs info <技能> | qinhskills.use | 技能定义详情 |
/qs unlock <技能> [玩家] | qinhskills.admin | 解锁 |
/qs lock <技能> [玩家] | qinhskills.admin | 锁定 |
/qs level <技能> <等级> [玩家] | qinhskills.admin | 设等级 |
/qs slot <槽位> <技能|clear> [玩家] | qinhskills.admin | 设 / 清技能槽 |
/qs cast <技能> | qinhskills.cast | 命令施放(测试用) |
/qs silence <秒> [玩家] | qinhskills.admin | 封锁 N 秒内放不出任何技能(0=解除) |
/qs protocol | qinhskills.use | 运行时诊断 |
/qs bridge | qinhskills.use | MM 桥诊断 |
别名:/qskills、/qskill。权限:qinhskills.admin(管理类)、qinhskills.use(基础 / list / info / protocol / bridge)、qinhskills.cast(cast)、qinhskills.gui。
📌
/qs test、/qs gen等当前未对外开放,请勿使用。