Условия Elite Script
Условия позволяют разработчикам скриптов предотвращать выполнение скриптов и/или действий на основе определенных условий.
Пример
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 для выбора сущности или местоположения, которые подлежат проверке условиями. Это означает, что вы можете связывать условия с боссом, игроками или любой другой целью, которую можно указать.
Condition Type
| Ключ | Описание | Значения |
|---|---|---|
conditionType | Устанавливает тип условия | BLOCKING / FILTERING |
Существует два типа условий: BLOCKING и FILTERING. Условия BLOCKING прекращают выполнение скриптов или действий. Условия FILTERING заставляют действия пропускать цели, которые не соответствуют условию. Это означает, что если вы хотите нацеливаться только на блоки, которые не являются воздухом, вам понадобится условие FILTERING, но если вы хотите остановить действие, когда игрок мертв, вам понадобится условие BLOCKING.
Условия вне действий всегда являются BLOCKING. Условия внутри действий могут быть BLOCKING или FILTERING.
Примечание: если целью является SELF (босс) и проверка условия isAlive, проверка всегда является BLOCKING! Это можно поместить внутри условия FILTERING, и эта конкретная часть все равно будет вести себя как BLOCKING.
Условия внутри действий по умолчанию установлены как FILTERING.
Condition Block Placement
Вы можете размещать или вкладывать блоки условий двумя способами:
-
Под отдельными действиями – Условие будет применяться только к конкретному действию. Если условие выполнено, действие выполняется; в противном случае — нет.
-
Под всем скриптом – Условие применяется ко всем действиям внутри скрипта. Если условие не выполнено, ни одно из действий не будет выполнено.
Ниже приведены примеры, демонстрирующие, как вкладывать блоки условий как для отдельных действий, так и для всего скрипта.
Под отдельными действиями:
Пример
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"
Проверяет, является ли местоположение на 2 блока выше места, где стоит босс, воздухом, и если да, то выполняет действие SET_WEATHER когда моб получает урон. В противном случае блокирует действие SET_WEATHER. Но босс всегда будет выполнять действие 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"
Если блок, расположенный на два блока выше места, где стоит босс, является воздухом, то разрешить выполнение всех скриптов когда моб получает урон. В противном случае блокировать выполнение всего скрипта, включая действия SET_WEATHER и MESSAGE.
runIfConditionIs
| Ключ | Описание | Значения |
|---|---|---|
runIfConditionIs | Устанавливает, должно ли условие разрешать выполнение действия, когда условие истинно или ложно. | true / false |
Вы можете инвертировать условие, используя префикс runIf и суффикс Is вокруг имени условия.
Например, возьмем условие isAlive. Обычно запись:
isAlive: true
означает, что действие будет выполнено только если босс жив.
Но если вы также напишите:
runIfIsAliveIs: false
в том же условии, то условие инвертируется — теперь действие будет выполнено только если босс мертв.
Эта структура позволяет вам контролировать, должно ли условие пройти или не пройти перед выполнением действия.
Пример:
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
isAlive: true
runIfIsAliveIs: false
Target:
targetType: SELF
Этот скрипт теперь будет устанавливать погоду на грозу только если босс мертв.
Условия на основе местоположения
locationIsAir
Устанавливает условие, является ли местоположение цели воздухом.
| Ключ | Описание | Значения |
|---|---|---|
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"
Проверяет, является ли местоположение на 2 блока выше места, где стоит босс, воздухом, и если да, то не блокирует выполнение скрипта погоды когда моб получает урон. В противном случае блокирует действие.
isOnFloor
Проверяет, находится ли местоположение на полу. Это означает, что блок в местоположении не является твердым, но блок под ним является твердым.
| Ключ | Описание | Значения |
|---|---|---|
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
Проверяет, находится ли босс на твердом блоке, и если да, то выполняет скрипт, в противном случае блокирует выполнение скрипта.
isStandingOnMaterial
Проверяет, является ли местоположение под целью соответствующим типом материала.
| Ключ | Описание | Значения |
|---|---|---|
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
Будет выполнен только если босс стоит на блоке BIRCH_WOOD, в противном случае скрипт будет заблокирован.
Условия на основе сущности
isAlive
Устанавливает условие, жива ли целевая сущность условия.
| Ключ | Описание | Значения |
|---|---|---|
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
Будет выполнен только если босс в настоящее время жив, в противном случае скрипт будет заблокирован.
hasTags
Проверяет, имеет ли целевая сущность определенные теги. Разработчики скриптов могут назначать и отменять назначение любого тега через действия и использовать их как условия для последующего поведения. Теги — это просто строки (слова), которые вы можете назначить боссу.
| Ключ | Описание | Значения |
|---|---|---|
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
Будет выполнен только если босс имеет теги "isCool" и "hasANiceBeard", в противном случае скрипт будет заблокирован.
doesNotHaveTags
То же самое, что и hasTags, но проверяет, не имеет ли босс этих значений.
| Ключ | Описание | Значения |
|---|---|---|
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
Будет выполнен только если босс не имеет тегов "isStinky" и "isSus", в противном случае скрипт будет заблокирован.
Другие условия
randomChance
Дает условию случайный шанс быть действительным.
| Ключ | Описание | Значения |
|---|---|---|
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: # Не требуется
targetType: SELF # Не требуется
Это даст скрипту 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, и если у них есть тег, он отключит их ИИ.
targetCountLowerThan и targetCountGreaterThan
Создает условие, которое позволяет выполнить действие только если указанное количество целей меньше или больше определенного значения.
| Ключ | Описание | Значения |
|---|---|---|
targetCountLowerThan | Выполнять действие только если количество целей меньше указанного числа. | Число от 0 до 999 |
| Ключ | Описание | Значения |
|---|---|---|
targetCountGreaterThan | Выполнять действие только если количество целей больше указанного числа. | Число от 0 до 999 |
Пример
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: SET_WEATHER
Target:
targetType: SELF
weather: THUNDER
duration: 120
Conditions:
conditionType: BLOCKING
targetCountGreaterThan: 2
Target: #требуется
targetType: NEARBY_MOBS #требуется
range: 15
Скрипт будет выполнен только если в радиусе 15 блоков находится более 2 мобов.
Обратите внимание, что это условие ТРЕБУЕТ цель.