Условия 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 блока выше локации элитки только в том случае, если этот блок является блоком воздуха. У отдельных действий могут быть собственные условия.
Цель
Условия используют систему целей, чтобы определить, к какой сущности или локации применяется условие. Это значит, что вы можете привязать условия к боссу, к игрокам или к чему угодно ещё, что можно сделать целью.
Тип условия
| Key | Details | Values |
|---|---|---|
conditionType | Задаёт тип условия | BLOCKING / FILTERING |
Существует два типа условий: BLOCKING и FILTERING. Условия BLOCKING останавливают выполнение скриптов или действий. Условия FILTERING заставляют действия пропускать цели, которые не удовлетворяют условию. Это значит, что если вы хотите воздействовать только на блоки, которые не являются воздухом, вам нужно условие FILTERING, а если вы хотите остановить действие, когда игрок мёртв, вам нужно условие BLOCKING.
Условия вне действий всегда являются BLOCKING. Условия внутри действий могут быть BLOCKING или FILTERING.
Примечание: если цель — SELF (босс), а проверка условия — 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"
Проверяет, является ли локация на 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
| Key | Details | Values |
|---|---|---|
runIfConditionIs | Задаёт, должно ли условие разрешать выполнение действия, когда оно истинно или ложно. | true / false |
Условие можно инвертировать, используя префикс runIf и суффикс Is вокруг имени условия.
Например, возьмём условие isAlive. Обычно запись:
isAlive: true
означает, что действие выполнится только в том случае, если босс жив.
Но если вы также напишете:
runIfAliveIs: false
в том же условии, то условие инвертируется — теперь действие выполнится только в том случае, если босс мёртв.
Эта структура позволяет управлять тем, должно ли условие пройти или провалиться перед выполнением действия.
Пример:
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
Теперь этот скрипт установит грозу только в том случае, если босс мёртв.
Условия на основе локации
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"
Проверяет, является ли локация на 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
Проверяет, стоит ли босс на твёрдом блоке, и если да, то выполняет скрипт, в противном случае блокирует выполнение скрипта.
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
Будет выполняться только в том случае, если босс стоит на блоке 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
Будет выполняться только в том случае, если босс в данный момент жив, в противном случае скрипт будет заблокирован.
hasTags
Проверяет, есть ли у целевой сущности определённые теги. Скриптеры могут назначать и снимать любые теги через действия и использовать их как условия для последующего поведения. Теги — это просто строки (слова), которые вы можете назначить боссу.
| 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
Будет выполняться только в том случае, если у босса есть теги "isCool" и "hasANiceBeard", в противном случае скрипт будет заблокирован.
doesNotHaveTags
То же, что и hasTags, но проверяет, что у босса этих значений нет.
| 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
Будет выполняться только в том случае, если у босса нет тегов "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: # Не обязательно
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
Создаёт условие, позволяющее выполнить действие только в том случае, если указанное число целей меньше или больше заданного значения.
| 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: #обязательно
targetType: NEARBY_MOBS #обязательно
range: 15
Скрипт будет выполняться только в том случае, если в радиусе 15 блоков находится более 2 мобов.
Обратите внимание, что этому условию ТРЕБУЕТСЯ цель.