🧩流程控制能力
本页面会将每一种已注册能力作为完整条目进行说明。所有条目也支持能力页面中介绍的通用能力字段。
本页面的注册键
delayconditionalany_oflimitrepeatstate
delay
**用途:**经过计划的延迟后执行嵌套能力。
**上下文:**子能力复用原始 PowerContext。
字段
ticks
delay 或 1
延迟时间,单位为服务器 Tick,最小值为 1。
delay
1
未配置 ticks 时使用的旧版别名。
abilities
必填
嵌套能力条目。
示例
行为与限制
执行前,实体和物品可能已经失效。
调度会使用适合当前实体或区域的调度器。
conditional
**用途:**执行所有匹配的分支;没有任何分支匹配时执行后备能力。
**上下文:**子条件和子能力复用同一个上下文。
字段
cases
空
分支配置映射。
cases.<id>.conditions
空
使用逻辑 AND 的条件组。
cases.<id>.abilities
空
分支匹配时执行的子能力。
else-abilities
空
没有任何分支匹配时执行一次的子能力。
示例
行为与限制
分支按照配置中的顺序检查。
所有匹配的分支都会执行;不会在第一个匹配项后停止。
任意子能力返回的取消信号都会向上传播。
any_of
**用途:**根据权重无放回选择一个或多个不同的子能力。
**上下文:**子能力复用同一个上下文。
字段
amount
1
要选择的不同子能力数量。
abilities
必填
子能力映射。
abilities.<id>.rate
1
正数且为有限值的相对权重。
示例
行为与限制
无效或非正数的权重会被排除。
选中的子能力仍会执行自己的检查;执行失败不会重新抽取替代能力。
选中子能力返回的取消信号会向上传播。
limit
**用途:**使用一组共享的能力层级概率、冷却和执行次数限制包装嵌套能力。
**上下文:**子能力复用同一个上下文。
字段
abilities
必填
嵌套能力。
random
1
包装器执行概率。
cooldown
0
包装器冷却时间,单位为秒。
times
0
包装器允许的最大尝试次数;零表示无限制。
示例
行为与限制
除了包装器限制外,各子能力仍保留自己的独立限制。
子能力返回的取消信号会向上传播。
repeat
**用途:**立即执行一次嵌套能力,并在配置的持续时间内重复执行。
**上下文:**子能力复用原始上下文。
字段
abilities
必填
嵌套能力。
duration
duration-ticks 或 0
总持续时间;填写非正数时只执行一次。
duration-ticks
0
duration 的别名。
interval
period 或 20
每次执行之间的 Tick 数,最小值为 1。
period
20
interval 的别名。
示例
行为与限制
第一次执行会立即发生。
计划执行的子能力必须能够处理已经失效的实体、物品或位置。
state
**用途:**保存限定于当前能力、并可选择按目标区分的数字状态,在达到阈值时触发子能力。
**上下文:**状态键需要稳定的能力和来源身份。触发的子能力会收到原始上下文,以及状态结果占位符。
字段
owner
SOURCE
状态所有者的实体选择器。跨触发器共享玩家状态时建议使用 PLAYER。
key
default
状态池名称。
per-target
false
是否将目标身份加入状态键。
operation
ADD
可填写 ADD、SET、SUBTRACT 或 CLEAR。
amount
1
操作数。
maximum
无限制
保存数值的最大值。
duration
0
状态存储使用的有效时间,单位为秒;非正数表示不按时间过期。
trigger-at
无限制
触发子能力的阈值。
trigger-abilities
空
更新后的状态达到阈值时执行的子能力。
clear-on-trigger
true
未启用分组消耗时,执行后是否移除完整状态。
consume-trigger-value
false
消耗更新值中每个完整的 trigger-at 分组,并在执行子能力前只保存余数。要求阈值为正数且为有限值。
触发子能力占位符
{state_previous}
Double
当前能力执行操作前保存的数值。
{state_current}
Double
消耗阈值分组前的更新后数值。
{state_trigger_count}
Long
更新后数值中包含的完整 trigger-at 分组数量。
{state_remainder}
Double
移除所有完整阈值分组后剩余的数值。
这些占位符只对当前 state 能力执行的 trigger-abilities 可用。
基础示例
分组消耗示例
下方示例会在多次拾取经验球之间累计经验。每积累完整的 3 点经验就恢复 1 点生命值,不完整的余数会保留到后续拾取时继续累计。
例如,原本保存的余数为 1,随后拾取一个价值 7 点经验的经验球,会得到 {state_current} = 8、{state_trigger_count} = 2 和 {state_remainder} = 2。嵌套的治疗能力只执行一次,并恢复 2 点生命值。
行为与限制
CLEAR会立即移除状态。state_value条件可以读取状态;其owner、key和per-target必须与写入端一致。未启用
consume-trigger-value时,阈值行为与原始实现保持兼容:子能力执行一次,并由clear-on-trigger决定是否移除整个状态。启用
consume-trigger-value时,会在执行子能力前消耗所有完整分组,并忽略clear-on-trigger,使余数可以继续保存。无论
{state_trigger_count}是多少,每次外层状态更新只会执行一次触发子能力。需要根据分组数量缩放结果时,应在数值表达式中使用该占位符。trigger-at为非正数或非有限值时,不会执行分组消耗。状态保存在内存中,并会在运行时卸载或实体清理时删除。
最后更新于