Skip to content

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

参数类型必填默认值说明
skillSTRING是—EmakiSkills 技能 id
bypass_cooldownBOOLEAN否false跳过这个技能自身冷却和全局冷却的检查
bypass_resource_checkBOOLEAN否false资源不足时也照样施放
consume_resourceBOOLEAN否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

参数类型必填默认值说明
skillSTRING是—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 ​

直接写入等级, 不检查升级材料, 也不摇成功率

参数类型必填默认值说明
skillSTRING是—技能 id
levelINTEGER是—目标等级

skill_upgrade ​

参数类型必填默认值说明
skillSTRING是—技能 id
yaml
actions:
  - 'self | skill_set_level skill=fireball level=3'
  - 'self | skill_upgrade skill=fireball'

skill_upgrade 走 EmakiSkills 的升级服务, 因此仍会检查升级材料, 经济, 成功率, 并执行升级动作. 异常处理: 技能 id 不存在时以 INVALID_CONFIG 失败

技能槽 ​

段 ID参数说明
skill_equipslot (INTEGER, 必填), skill (STRING, 必填)把技能装到指定槽位
skill_unequipslot (INTEGER, 必填)清空指定槽位
skill_bindslot (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 ​

参数类型必填默认值说明
skillSTRING否""技能 id; 为空时清掉全部冷却和施法延迟

skill_cooldown_set ​

参数类型必填默认值说明
skillSTRING是—技能 id
duration_ticksDURATION是—冷却时间; 小于等于 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_learnskill (STRING, 必填)把技能加进玩家的手动解锁来源
skill_forgetskill (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 失败, 不会不报错地跳过