Skip to content

CoreLib 动作

EmakiSkills 启用后会向 CoreLib 动作注册表追加技能释放、等级、槽位、冷却和手动解锁段。它们可用于其他模块的奖励、触发器后续效果或 CoreLib 管道模板。

NOTE

本页只记录 EmakiSkills 注册的段;EmakiSkills 自己的原生技能脚本动作见 原生脚本系统,CoreLib 自带通用段见 CoreLib 动作系统

段 ID 速查

十二个段的目标要求都是 REQUIRED_ENTITY。除 cast_skillcast_mythic_skill 外,其余段只接受玩家目标,非玩家目标会跳过。

段 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 的对应关系:castskillskill.cast 已不再注册,skill_setlevel 现在写作 skill_set_levelskill_clearcooldownskill_setcooldown 现在写作 skill_cooldown_clearskill_cooldown_setskill_upgradeskill_equipskill_unequipskill_bindskill_learnskill_forgetskill_forget_all 的 id 未变。

「作用于谁」由 source 决定:作用于执行者自己写 self,指定玩家用 player_by_name

cast_skill

让目标作为施法者释放一个 EmakiSkills 技能。

NOTE

破坏性变更。 skill 参数接受的是 EmakiSkills 技能 id,不再是 MythicMobs 技能 id。原先在这里写 MythicMobs 技能名的配置必须改用 cast_mythic_skill

参数类型必填默认值说明
skillSTRINGEmakiSkills 技能 id。
bypass_cooldownBOOLEANfalse跳过该技能自身冷却与全局冷却检查。
bypass_resource_checkBOOLEANfalse资源不足时也照样施放。
consume_resourceBOOLEANtrue施放成功后是否扣除资源消耗。
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

参数类型必填默认值说明
skillSTRINGMythicMobs 技能 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_ticksTIME冷却时间;小于等于 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_skillcast_mythic_skill 接受任意实体作为施法者,其余十个段只接受玩家目标。
  • cast_mythic_skill 需要 MythicMobs 已安装并启用,且 skill 指向的技能存在。
  • 技能 id 在传入前会做归一化(大小写与分隔符),MythicMobs 技能 id 不做归一化。
  • 相关服务尚未就绪时,段以 MISSING_CONTEXT 失败而不是静默跳过。