Elite Script 条件
条件(Conditions)允许脚本编写者根据特定条件让脚本和/或动作不运行。
示例
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Conditions:
isAlive: true
conditionType: BLOCKING
Target:
targetType: SELF
Actions:
- action: PLACE_BLOCK
Target:
targetType: DIRECT_TARGET
duration: 20
material: DIRT
offset: 0,3,0
Conditions:
locationIsAir: true
conditionType: BLOCKING
Target:
targetType: ACTION_TARGET
Cooldowns:
local: 60
global: 20
在此示例中,Example 脚本只有在精英怪仍存活时才会运行,并且只有当精英怪位置上方 3 格处的方块为空气方块时,才会在那里放置一个泥土方块。各个动作可以拥有各自独立的条件。
Target
条件使用 Targets 系统来确定哪个实体或位置受到条件的约束。这意味着你可以将条件关联到 Boss、玩家或任何其他你能够定位的对象上。
条件类型
| Key | Details | Values |
|---|---|---|
conditionType | 设置条件的类型 | BLOCKING / FILTERING |
条件有两种类型:BLOCKING(阻断)和 FILTERING(过滤)。BLOCKING 条件会使脚本或动作停止运行。FILTERING 条件会让动作跳过不满足条件的目标。这意味着,如果你只想定位非空气的方块,就需要使用 FILTERING 条件;但如果你想在玩家死亡时停止某个动作,就需要使用 BLOCKING 条件。
动作之外的条件始终为 BLOCKING。动作内部的条件可以是 BLOCKING 或 FILTERING。
注意:如果目标是 SELF(Boss)且条件检查是 isAlive,则该检查始终为 BLOCKING! 即使将其放入 FILTERING 条件中,这一特定部分仍会以 BLOCKING 的方式运作。
动作内部的条件默认设置为 FILTERING。
条件块放置
你可以通过以下两种方式放置或嵌套条件块:
-
置于单个动作下 —— 该条件仅作用于特定动作。如果满足条件,该动作就会执行;否则不执行。
-
置于整个脚本下 —— 该条件作用于脚本内的所有动作。如果不满足条件,则所有动作都不会执行。
下面是演示如何为单个动作和整个脚本嵌套条件块的示例。
置于单个动作下:
示例
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 10
sValue: "&2Hello World!"
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"
检查 Boss 站立位置上方 2 格处是否为空气,如果是,则在怪物被击中时运行 SET_WEATHER 动作;否则阻断 SET_WEATHER 动作。但由于没有对 MESSAGE 动作应用任何条件,Boss 被击中时总是会运行 MESSAGE 动作。
置于整个脚本下:
示例
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 10
sValue: "&2Hello World!"
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"
如果 Boss 站立位置上方 2 格处的方块为空气,则在怪物被击中时允许所有脚本运行;否则阻断整个脚本的执行,包括 SET_WEATHER 和 MESSAGE 动作。
runIfConditionIs
| Key | Details | Values |
|---|---|---|
runIfConditionIs | 设置条件为 true 还是 false 时才允许动作运行。 | true / false |
你可以在条件名称前加上 runIf 前缀、后加上 Is 后缀,从而反转该条件。
例如,以 isAlive 条件为例。通常情况下,写:
isAlive: true
表示动作只有在 Boss 存活时才会运行。
但如果你在同一个条件中再写上:
runIfAliveIs: false
那么该条件就会被反转 —— 此时动作只有在 Boss 死亡时才会运行。
这种结构允许你控制条件应当通过还是失败,再决定是否运行动作。
示例:
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isAlive: true
runIfAliveIs: false
Target:
targetType: SELF
现在,该脚本只有在 Boss 死亡时才会将天气设置为雷暴。
基于位置的条件
locationIsAir
将条件设置为检查目标所在位置是否为空气。
| Key | Details | Values |
|---|---|---|
locationIsAir | 设置为检查该位置是否为空气方块(或相反)。 | Boolean |
示例
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
locationIsAir: true
Target:
targetType: SELF
offset: "0,3,0"
检查 Boss 站立位置上方 2 格处是否为空气,如果是,则在怪物被击中时不阻断天气脚本的运行;否则阻断该动作。
isOnFloor
检查该位置是否处于地面上。这意味着该位置上的方块不是固体,但其下方的方块是固体。
| Key | Details | Values |
|---|---|---|
isOnFloor | 设置为检查该位置是否为地面位置(或相反)。 | Boolean |
示例
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isOnFloor: true
Target:
targetType: SELF
检查 Boss 是否站在固体方块上,如果是则运行脚本,否则阻断脚本运行。
isStandingOnMaterial
检查目标下方的位置是否为匹配的材质类型。
| Key | Details | Values |
|---|---|---|
isStandingOnMaterial | 设置应当检查的材质类型。 | Material |
示例
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isStandingOnMaterial: BIRCH_WOOD
Target:
targetType: SELF
只有当 Boss 站在 BIRCH_WOOD 方块上时才会运行,否则脚本将被阻断运行。
基于实体的条件
isAlive
将条件设置为检查条件目标实体是否存活。
| Key | Details | Values |
|---|---|---|
isAlive | 设置为检查该实体是否存活(或死亡)。 | Boolean |
示例
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isAlive: true
Target:
targetType: SELF
只有当 Boss 当前存活时才会运行,否则脚本将被阻断。
hasTags
检查目标实体是否拥有特定的标签。脚本编写者可以通过动作分配和取消分配任意标签,并将其用作后续行为的条件。标签只是你可以分配给 Boss 的字符串(词语)。
| Key | Details | Values |
|---|---|---|
hasTags | 设置为检查该实体是否拥有一组标签。 | String List |
示例
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
hasTags:
- isCool
- hasANiceBeard
Target:
targetType: SELF
只有当 Boss 拥有 "isCool" 和 "hasANiceBeard" 标签时才会运行,否则脚本将被阻断。
doesNotHaveTags
与 hasTags 相同,但检查 Boss 是否不拥有这些值。
| Key | Details | Values |
|---|---|---|
doesNotHaveTags | 设置为检查该实体是否不拥有一组标签。 | String List |
示例
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
doesNotHaveTags:
- isStinky
- isSus
Target:
targetType: SELF
只有当 Boss 不拥有 "isStinky" 和 "isSus" 标签时才会运行,否则脚本将被阻断。
其他条件
randomChance
为条件赋予一个随机生效的几率。
| Key | Details | Values |
|---|---|---|
randomChance | 条件生效的几率。 | 0.0 到 1.0 之间的数字 |
示例
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
randomChance: 0.1
Target: # Not required
targetType: SELF # Not required
这将使脚本拥有 10% 的运行几率,否则脚本将被阻断。
注意,该条件比较特殊,因为它不需要目标。
使用标签过滤 NEARBY
要根据特定标签过滤 NEARBY_MOBS 或 NEARBY_PLAYERS,请使用 ACTION_TARGET 作为条件的目标(前提是该条件应用于某个动作而非脚本本身)。这能确保脚本准确地仅过滤出带有指定标签的怪物/玩家。
示例
eliteScript:
Example:
Actions:
- action: SET_MOB_AI
Target:
targetType: NEARBY_MOBS
range: 40
bValue: false
Conditions:
conditionType: FILTERING
hasTags:
- TurnOff
Target:
targetType: ACTION_TARGET
该脚本会查找附近任何带有 TurnOff 标签的怪物,如果它们带有该标签,便会关闭它们的 AI。
targetCountLowerThan 和 targetCountGreaterThan
创建一个条件,仅当指定的目标数量低于或高于设定值时才允许动作运行。
| Key | Details | Values |
|---|---|---|
targetCountLowerThan | 仅当目标数量低于指定数值时才运行该动作。 | 0 到 999 之间的数字 |
| Key | Details | Values |
|---|---|---|
targetCountGreaterThan | 仅当目标数量高于指定数值时才运行该动作。 | 0 到 999 之间的数字 |
示例
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
targetCountGreaterThan: 2
Target: #required
targetType: NEARBY_MOBS #required
range: 15
仅当 15 格半径内有超过 2 只怪物时,该脚本才会运行。
注意,该条件确实需要目标。