Skip to content

原生脚本系统

EmakiSkills 除了支持 MythicMobs 执行技能效果外,还内置了原生脚本系统。原生脚本不依赖任何外部插件,直接在技能配置中定义效果逻辑。

全局脚本引擎配置

原生脚本引擎位于 config.ymlscript_engine 节点:

yaml
script_engine:
  enabled: true
  default_mode: "native"
  stop_on_failure: true
  max_lines_per_phase: 64
  max_targets_per_action: 16
  debug: false
字段说明
enabled是否启用原生技能脚本。关闭后仅保留非脚本释放流程。
default_mode技能未声明脚本模式时使用的默认模式。
stop_on_failure动作失败后是否停止后续动作。
max_lines_per_phase单个阶段允许的最大动作行数。
max_targets_per_action单个动作最多处理的目标数量。
debug是否输出脚本调试信息。

这些限制用于避免单个技能一次释放处理过多动作或目标。大型范围技能建议控制目标数量,并把视觉效果、伤害和消息分开测试。

脚本模式

通过 script.mode 字段选择执行方式:

模式别名说明
native只使用内置脚本动作。
mythic只使用 MythicMobs 技能(通过 mythic_skill 字段)。
hybridboth同时执行 native 脚本和 mythic 技能。

脚本阶段

每个阶段可独立配置 conditionsactions 列表:

阶段别名触发时机
caston_cast技能释放时。
hiton_hit命中目标时。
misson_miss未命中时。
failon_fail释放失败时(条件不满足、资源不足等)。

配置结构

yaml
id: flame_strike
trigger_type: active
display_name: '<red>烈焰斩'
script:
  mode: native
  stop_on_failure: true
  cast:
    actions:
      - 'sound sound=ENTITY_BLAZE_SHOOT volume=1 pitch=1.5'
      - 'particle particle=FLAME at=target count=20 speed=0.1'
      - 'damage amount=%fire_damage% damage_type=spell'
  hit:
    actions:
      - 'ignite ticks=60'
      - 'message text="<red>烈焰灼烧!"'
  fail:
    actions:
      - 'message text="<gray>技能释放失败。"'

脚本上下文变量

脚本执行时自动注入以下变量,可在动作中通过 {变量名} 引用:

变量说明
%level%当前技能等级。
%skill_id%技能 ID。
%trigger_id%触发器 ID。
%has_target%是否有目标(0 或 1)。
%target_name%目标名称(有目标时)。
%target_uuid%目标 UUID。
%target_world%目标所在世界。
%target_x%目标 X 坐标。
%target_y%目标 Y 坐标。
%target_z%目标 Z 坐标。

内置脚本动作

damage

对目标造成伤害。

参数必填默认值说明
amount伤害量。
targettarget目标(target/caster/look/共享状态键名)。
damage_typegeneric伤害类型。
element元素类型。

heal

治疗目标。

参数必填默认值说明
amount治疗量。
targetcaster目标。

ignite

点燃目标。

参数必填默认值说明
ticks点火持续 tick 数。
targettarget目标。

message

发送消息(支持 MiniMessage)。

参数必填默认值说明
text消息文本。
targetcaster接收者。

sound

播放音效。

参数必填默认值说明
soundBukkit Sound 名称。
volume1音量。
pitch1音调。
atcaster播放位置。

particle

生成粒子。

参数必填默认值说明
particle粒子类型。
attarget生成位置。
count1粒子数量。
speed0粒子速度。

ray

射线追踪选取目标,结果写入共享状态供后续动作使用。

参数必填默认值说明
range16射线距离。
width1射线宽度。
savetarget结果存储的共享状态键名。

mythic

调用 MythicMobs 技能(需要安装 MythicMobs)。

参数必填默认值说明
skillMythicMobs 技能 ID。

aoe_damage

对范围内实体造成伤害。命中数量写入共享状态 aoe_hit_count

参数必填默认值说明
amount伤害数值。
radius5范围半径(格)。
centertarget中心点:castertargetlook
shapesphere范围形状:sphere(球形)、cylinder(圆柱)。
filterhostile目标过滤:hostile(排除玩家)、all(所有生物)。
max_targets20最大命中数量。
exclude_castertrue是否排除施法者。

projectile

发射自定义投射物,逐 tick 模拟飞行。命中时设置上下文目标实体。

参数必填默认值说明
speed1.5每 tick 飞行格数。
gravity0.05每 tick 重力加速度。
lifetime60最大存活 tick 数。
hit_radius0.5命中检测半径。
pierce0穿透实体数量。
homingfalse是否追踪目标。
homing_strength0.1追踪转向强度。
particleFLAME尾迹粒子类型。
damage0命中伤害(0 表示不造成伤害)。
directionlook初始方向:look(视线方向)、target(朝向目标)。

目标解析规则

动作中 target 参数的解析规则:

解析为
target当前目标实体。
caster / self / player施法者。
look视线前方 3 格位置(仅位置,无实体)。
其他字符串从共享状态查找(如 ray 动作存储的实体/位置)。

动作前缀修饰符

脚本动作支持前缀修饰符:

yaml
actions:
  - '@if="%has_target% == 1" damage amount=20'
  - '@chance=30% ignite ticks=100'
前缀说明
@if='%expr%'条件为真时才执行。
@chance=%n%%概率执行。

variables 字段

技能定义中的 variables 块定义运行时变量,可在脚本动作中通过 {变量名} 引用:

yaml
id: power_strike
variables:
  fire_damage:
    type: expression
    value: "10 + %level% * 5"
  is_enhanced:
    type: boolean
    value: "%level% >= 5"
  battle_cry:
    type: random_text
    values:
      - "<red>燃烧吧!"
      - "<red>烈焰之力!"

变量支持的类型与技能参数类型一致,可引用 %level%%has_target%%trigger_id% 等上下文变量。