Перейти к основному содержимому

Условия 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 блока выше локации элитки только в том случае, если этот блок является блоком воздуха. У отдельных действий могут быть собственные условия.

Цель

Условия используют систему целей, чтобы определить, к какой сущности или локации применяется условие. Это значит, что вы можете привязать условия к боссу, к игрокам или к чему угодно ещё, что можно сделать целью.


Тип условия

KeyDetailsValues
conditionTypeЗадаёт тип условияBLOCKING / FILTERING

Существует два типа условий: BLOCKING и FILTERING. Условия BLOCKING останавливают выполнение скриптов или действий. Условия FILTERING заставляют действия пропускать цели, которые не удовлетворяют условию. Это значит, что если вы хотите воздействовать только на блоки, которые не являются воздухом, вам нужно условие FILTERING, а если вы хотите остановить действие, когда игрок мёртв, вам нужно условие BLOCKING.

Условия вне действий всегда являются BLOCKING. Условия внутри действий могут быть BLOCKING или FILTERING.

Примечание: если цель — SELF (босс), а проверка условия — isAlive, то проверка всегда является BLOCKING! Это можно поместить внутрь условия FILTERING, и эта конкретная часть всё равно будет вести себя как BLOCKING.

По умолчанию условия внутри действий имеют тип FILTERING.


Размещение блоков условий

Блоки условий можно размещать или вкладывать двумя способами:

  1. Под отдельными действиями — условие будет применяться только к конкретному действию. Если условие выполнено, действие срабатывает; в противном случае — нет.

  2. Под всем скриптом — условие применяется ко всем действиям внутри скрипта. Если условие не выполнено, ни одно из действий не сработает.

Ниже приведены примеры, демонстрирующие, как вкладывать блоки условий как для отдельных действий, так и для всего скрипта.

Под отдельными действиями:

Пример
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

KeyDetailsValues
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

Задаёт условие проверки того, является ли локация цели воздухом.

KeyDetailsValues
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

Проверяет, находится ли локация на полу. Это значит, что блок в этой локации не твёрдый, а блок под ним — твёрдый.

KeyDetailsValues
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

Проверяет, является ли локация под целью совпадающим типом материала.

KeyDetailsValues
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

Задаёт условие проверки того, жива ли целевая сущность условия.

KeyDetailsValues
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

Проверяет, есть ли у целевой сущности определённые теги. Скриптеры могут назначать и снимать любые теги через действия и использовать их как условия для последующего поведения. Теги — это просто строки (слова), которые вы можете назначить боссу.

KeyDetailsValues
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, но проверяет, что у босса этих значений нет.

KeyDetailsValues
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

Даёт условию случайный шанс быть истинным.

KeyDetailsValues
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

Создаёт условие, позволяющее выполнить действие только в том случае, если указанное число целей меньше или больше заданного значения.

KeyDetailsValues
targetCountLowerThanВыполнять действие только в том случае, если количество целей меньше указанного числа.Число от 0 до 999
KeyDetailsValues
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 мобов.

Обратите внимание, что этому условию ТРЕБУЕТСЯ цель.