简体中文
CoreLib 动作
EmakiSkills 注册到 CoreLib 动作注册表的段如下, 每个段的用途与参数一并列出, 可在动作管道中直接调用
EmakiSkills 启用后, 会往 CoreLib 的动作注册表里加上技能释放, 等级, 槽位, 冷却和手动解锁这几类段. 前置条件是 EmakiSkills 已启用; 加载完成后即可在别的模块当奖励, 当触发器的后续效果, 或者给 CoreLib 管道模板使用
NOTE
范围说明: 仅记录 EmakiSkills 注册的段; EmakiSkills 自己的原生技能脚本动作见 原生脚本系统, CoreLib 自带通用段见 CoreLib 动作系统
段 ID 速查
目标类型要求: 这十二个段要求的目标类型都是 REQUIRED_ENTITY. 除了 cast_skill 和 cast_mythic_skill, 其余段只接受玩家目标, 非玩家目标会被跳过. 在注册分类上, cast_mythic_skill 属于 integration, 其余十一个段属于 skills
| 段 ID | 用途 |
|---|---|
cast_skill | 让目标释放一个 EmakiSkills 技能 |
cast_mythic_skill | 让目标释放一个 MythicMobs 技能 |
skill_set_level | 直接设置目标某个技能的等级 |
skill_upgrade | 走升级服务, 尝试升级目标某个技能 |
skill_equip | 把技能装到指定技能槽 |
skill_unequip | 清空指定技能槽 |
skill_bind | 给指定技能槽绑定触发器 |
skill_cooldown_clear | 清掉指定技能或全部技能的冷却 |
skill_cooldown_set | 设置指定技能的冷却 |
skill_learn | 通过手动来源解锁技能 |
skill_forget | 移除一个手动解锁的技能 |
skill_forget_all | 移除全部手动解锁的技能 |
旧 id 迁移对照: castskill 与 skill.cast 已不再注册, skill_setlevel 现在写作 skill_set_level, skill_clearcooldown 与 skill_setcooldown 现在写作 skill_cooldown_clear 与 skill_cooldown_set. skill_upgrade, skill_equip, skill_unequip, skill_bind, skill_learn, skill_forget, skill_forget_all 的 id 未变
"作用于谁"由 source 决定: 作用在执行者自己身上就写 self, 指定玩家就写 player_by_name
cast_skill
让目标作为施法者释放一个 EmakiSkills 技能
NOTE
破坏性变更. skill 参数接受的是 EmakiSkills 技能 id, 不再是 MythicMobs 技能 id. 原先在这里写 MythicMobs 技能名的配置必须改用 cast_mythic_skill
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
skill | STRING | 是 | — | EmakiSkills 技能 id |
bypass_cooldown | BOOLEAN | 否 | false | 跳过这个技能自身冷却和全局冷却的检查 |
bypass_resource_check | BOOLEAN | 否 | false | 资源不足时也照样施放 |
consume_resource | BOOLEAN | 否 | true | 施放成功后是否扣掉资源消耗 |
yaml
actions:
- 'self | cast_skill skill=fireball'
# 管理员测试: 不吃冷却, 不扣资源
- 'self | cast_skill skill=fireball bypass_cooldown=true consume_resource=false'
# 免费施放一次, 即使资源不够
- 'self | cast_skill skill=heal bypass_resource_check=true consume_resource=false'该段走 EmakiSkills 自己的施法流程, 因此冷却, 资源消耗, 施放条件和前后的施法事件全部生效. 验证: 施放成功后技能进入冷却, 资源按定义扣除
玩家与非玩家施法者
两条路径行为不同, 前置条件是技能档案只对玩家存在:
- 玩家施法者: 走完整施法流程, 上面三个开关都有效
- 其他实体施法者: 只施放该技能的
mythicSkill部分. 实体没有技能档案, 既没有冷却可读, 也没有资源池可扣, 所以三个开关在这条路径上不起作用; 纯脚本技能 (没配mythicSkill) 会以失败返回, 而不是不声不响地什么都不做
结果判定
施法流程是异步的, 但段必须当场给出结果, 所以它只看一眼「是否已完成」, 不等待: 调用返回时, 已经失败的施放是在同步的检查环节上被拦下的 (冷却, 资源, 激活类型不符), 这个结果管道可以拿来分支; 还在进行中的施放会报成成功, 之后的失败只写进 debug 日志. 这和 start_task 的取舍是一样的: 段保证的是这次施放已经被接受, 不是它已经完成
异常处理: skill 为空, 技能 id 不存在都会以 INVALID_CONFIG 失败
cast_mythic_skill
让目标释放一个 MythicMobs 技能. 这个段这一轮从 CoreLib 迁到了 EmakiSkills, 注册分类是 integration
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
skill | STRING | 是 | — | MythicMobs 技能 id |
yaml
actions:
- 'self | cast_mythic_skill skill=FireballSkill'
# 让准星上的实体释放
- 'looking_at range=20 | cast_mythic_skill skill=ExplodeSkill'任何实体都能当施法者, 这也是它和 cast_skill 分成两个段的原因. MythicMobs 是可选依赖: 未安装, 或桥接初始化失败时, 这个段会以 OWNER_DISABLED 失败, 不会把管道拖下去. skill 的值不做 id 规范化, 按 MythicMobs 的写法原样传进去
技能等级
skill_set_level
直接写入等级, 不检查升级材料, 也不摇成功率
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
skill | STRING | 是 | — | 技能 id |
level | INTEGER | 是 | — | 目标等级 |
skill_upgrade
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
skill | STRING | 是 | — | 技能 id |
yaml
actions:
- 'self | skill_set_level skill=fireball level=3'
- 'self | skill_upgrade skill=fireball'skill_upgrade 走 EmakiSkills 的升级服务, 因此仍会检查升级材料, 经济, 成功率, 并执行升级动作. 异常处理: 技能 id 不存在时以 INVALID_CONFIG 失败
技能槽
| 段 ID | 参数 | 说明 |
|---|---|---|
skill_equip | slot (INTEGER, 必填), skill (STRING, 必填) | 把技能装到指定槽位 |
skill_unequip | slot (INTEGER, 必填) | 清空指定槽位 |
skill_bind | slot (INTEGER, 必填), trigger (STRING, 必填) | 把触发器绑到指定槽位 |
yaml
actions:
- 'self | skill_equip slot=0 skill=fireball'
- 'self | skill_bind slot=0 trigger=right_click'
- 'self | skill_unequip slot=0'槽位校验全部在 PlayerSkillStateService 里做: 它掌握着已解锁的技能集合, 触发器冲突表和槽位变更事件. slot 读不出来时会按 -1 处理, 会被状态服务拒绝, 所以写错的值会明确失败, 而不是打到 0 号槽. 验证: 校验失败时该段返回失败, 槽位内容不变
冷却
skill_cooldown_clear
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
skill | STRING | 否 | "" | 技能 id; 为空时清掉全部冷却和施法延迟 |
skill_cooldown_set
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
skill | STRING | 是 | — | 技能 id |
duration_ticks | DURATION | 是 | — | 冷却时间; 小于等于 0 时, 等于清掉这个技能的冷却 |
yaml
actions:
- 'self | skill_cooldown_set skill=fireball duration_ticks=5s'
- 'self | skill_cooldown_clear skill=fireball'
- 'self | skill_cooldown_clear'手动解锁
手动解锁来源会写进玩家的技能档案, 在 GUI 里显示成"手动解锁". 遗忘技能后, EmakiSkills 会校验并清理无效的槽位绑定
| 段 ID | 参数 | 说明 |
|---|---|---|
skill_learn | skill (STRING, 必填) | 把技能加进玩家的手动解锁来源 |
skill_forget | skill (STRING, 必填) | 移除一个手动解锁技能 |
skill_forget_all | 无 | 移除全部手动解锁技能 |
yaml
actions:
- 'self | skill_learn skill=fireball'
- 'self | skill_forget skill=fireball'
- 'self | skill_forget_all'适用范围: 这三个段只管手动来源. 装备或其他来源授予的技能是在别处收集的, 没法用它们遗忘
skill_learn 对已经解锁的技能按跳过处理, 不算失败: 反正管道的意图已经达到了
使用提示
cast_skill与cast_mythic_skill接受任意实体作为施法者, 其余十个段只接受玩家目标cast_mythic_skill需要 MythicMobs 已安装并启用, 且skill指向的技能存在- 技能 id 传进去之前会做规范化 (大小写和分隔符), MythicMobs 技能 id 不做规范化
- 相关服务还没就绪时, 段会以
MISSING_CONTEXT失败, 不会不报错地跳过