Цели Elite Script
Цели являются центральной частью Elite Scripts и необходимы для работы действий и зон.
Типы целей
Типы целей определяют, какие сущности или локации будут целью скрипта.
| Тип цели | Детали | Особенности |
|---|---|---|
NEARBY_PLAYERS | Игроки в радиусе | Требует range |
NEARBY_MOBS | Мобы в радиусе | Требует range |
NEARBY_ELITES | Элиты в радиусе | Требует range |
WORLD_PLAYERS | Игроки в мире | ❌ |
ALL_PLAYERS | Игроки на сервере | ❌ |
DIRECT_TARGET | Игроки в событии | Требует совместимое событие |
SELF | Элита, использующая способность | ❌ |
SELF_SPAWN | Нацеливается на место спавна босса | ❌ |
LOCATION | Конкретная локация | Требует location |
LOCATIONS | Несколько конкретных локаций | Требует locations |
ZONE_FULL | Цели внутри зоны | Требует Zone |
ZONE_BORDER | Цели на границе зоны | Требует Zone |
ACTION_TARGET | Наследует цели от действия. | Может использоваться только для условий действий и относительных векторов!! |
LANDING_LOCATION | Нацеливается на место падения блока. | Может использоваться только для действия SPAWN_FALLING_BLOCK! |
INHERIT_SCRIPT_TARGET | Наследует цель от скрипта, который запускает этот скрипт | Может работать только если скрипт был вызван другим скриптом! |
INHERIT_SCRIPT_ZONE_FULL | Цели внутри зоны, унаследованной от скрипта, который запускает этот скрипт | Требует Zone в скрипте, который вызывает этот скрипт! |
INHERIT_SCRIPT_ZONE_BORDER | Цели на границе зоны, унаследованной от скрипта, который запускает этот скрипт | Требует Zone в скрипте, который вызывает этот скрипт! |
Пример
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: ALL_PLAYERS
sValue: "&2Hello World!"
Это отправляет сообщение цели. Поскольку целью установлен ALL_PLAYERS, это отправит сообщение всем игрокам онлайн.
Общие атрибуты
Следующие настройки могут быть применены ко всем целям.
| Значения | Детали | Особенности |
|---|---|---|
offset | Устанавливает смещение для локации цели. | Не может нацеливаться на сущности! |
Пример
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions
- action: STRIKE_LIGHTNING
Target:
targetType: SELF
offset: "0,2,0"
Это вызывает молнию на 2 блока выше босса. Обратите внимание, что STRIKE_LIGHTNING использует локации и не влияет на сущности, поэтому может иметь смещения.
Вы не можете установить смещение для отправки сообщения, так как сообщения отправляются игрокам. Однако вы можете установить смещение для зоны, которая затем может нацеливаться на сущности.
range
Устанавливает радиус для сканирования ближайших игроков в типе цели NEARBY_PLAYERS.
| Значения | Детали | По умолчанию |
|---|---|---|
range | Устанавливает радиус в блоках для сканирования целей-игроков. | 20.0 |
Пример
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions:
- action: MESSAGE
Target:
targetType: NEARBY_PLAYERS
range: 25.0
sValue: "&2Targeted players within 25 blocks!"
Это отправляет сообщение игрокам в радиусе 25 блоков от босса, когда босс умирает.
location
Устанавливает локацию для типа цели LOCATION.
| Значения | Детали | По умолчанию |
|---|---|---|
location | Устанавливает мировую локацию, которая будет целью. | none |
Использует формат location: worldname,x,y,z,pitch,yaw для локации.
Обратите внимание, что same_as_boss является допустимым заполнителем для названия мира, например same_as_boss,100,64,100,0,0 будет допустимой локацией, которая нацелится на тот же мир, где находится босс.
Пример
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions
- action: STRIKE_LIGHTNING
Target:
targetType: LOCATION
location: "myWorld,100,64,200,0,0"
Это создает удар молнии в локации x=100, y=64, z=200 мира с названием myWorld.
locations
Устанавливает локации для типа цели LOCATIONS.
| Значения | Детали | По умолчанию |
|---|---|---|
locations | Устанавливает список мировых локаций, которые будут целями. | none |
Использует формат worldname,x,y,z,pitch,yaw для локации.
Обратите внимание, что same_as_boss является допустимым заполнителем для названия мира, например same_as_boss,100,64,100,0,0 будет допустимой локацией, которая нацелится на тот же мир, где находится босс.
Пример
eliteScript:
Example:
Events:
- EliteMobDeathEvent
Actions
- action: STRIKE_LIGHTNING
Target:
targetType: LOCATIONS
locations:
- "myWorld,100,64,200,0,0"
- "same_as_boss,-100,12,130,0,0"
Это создает удар молнии в локации x=100, y=64, z=200 мира с названием myWorld и другой удар молнии в том же мире, что и босс, в локации x=-100, y=12 и z=130.
Нацеливание зон
Зоны имеют несколько целей, и важно понимать, как они работают, чтобы использовать Elite Scripting в полной мере.
Зоны работают в две части:
Часть 1 - Установка места размещения зоны
Зоны должны знать, где они должны находиться, и для этого вы используете систему целей так же, как для любого другого эффекта, основанного на локации, например удара молнии.
Пример
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Это создает цилиндрическую зону вокруг босса. Обратите внимание, что в этом примере еще не установлены действия, это рассматривается ниже.
Некоторые зоны, такие как STATIC_RAY, имеют две или более целей. Это потому что лучи представляют собой линии, а линии определяются двумя точками. Это более подробно рассматривается на странице зон, но все они работают по сути одинаково.
Часть 2 - Нацеливание на внутреннюю часть зоны
Теперь, когда зона знает, где она находится, нам нужно, чтобы действие знало, что его целью является зона, которую мы определили. Для этого используются targetType: ZONE_FULL и targetType:ZONE_BORDER.
Пример
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
Используя ту же зону из первой части, мы теперь добавляем действие. Цель для этого действия - ZONE_FULL, что означает, что частицы будут создаваться внутри всей зоны.
Обратите внимание, что ZONE_BORDER доступен не для каждой зоны. Подробнее об этом на странице зон скрипта.
Отслеживание зоны
Устанавливает, будет ли зона перемещаться вместе с целью, например, будет ли зона перемещаться, когда босс перемещается для targetType: SELF.
| Значения | Детали | По умолчанию |
|---|---|---|
track | Устанавливает, будет ли зона перемещаться вместе с целью. | true |
Обратите внимание, что анимируемые зоны не могут отслеживаться. Подробнее об этом здесь.
Пример
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false
Используя тот же пример из части 1 и части 2, зона теперь настроена на неотслеживание. Это означает, что зона появится в месте нахождения босса, но даже когда босс продолжит двигаться, зона останется там, где она впервые появилась.
Наконец, обратите внимание, что если зона настроена на неотслеживание, она зарегистрирует свою локацию в момент вызова скрипта.
Например, если вы хотите иметь фазу предупреждения и фазу урона для вашего скрипта, вам нужно убедиться, что вы запускаете все действия в начале и устанавливаете время ожидания для всех действий, связанных с уроном, которые вы хотите запустить позже индивидуально. Вы не должны задерживать весь скрипт, который вы вызываете через RUN_SCRIPT, по техническим причинам.
Ниже приведен правильный пример способности с фазой предупреждения и фазой урона, взятый из Frost Palace Sanctum.
Пример
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false
- action: SPAWN_PARTICLE
wait: 60
times: 13
repeatEvery: 3
particles:
- particle: FLAME
amount: 0
x: 0
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: -0.5
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: 0
speed: 0.2
- particle: FLAME
amount: 0
x: 0
y: 1
z: -0.5
speed: 0.2
- particle: FLAME
amount: 0
x: -0.5
y: 1
z: 0.5
speed: 0.2
- particle: FLAME
amount: 0
x: 0.5
y: 1
z: -0.5
speed: 0.2
Target:
targetType: ZONE_FULL
track: false
- action: RUN_SCRIPT
scripts:
- DamageCylinder
- action: PLAY_ANIMATION
sValue: fire_zone
Target:
targetType: SELF
- action: SET_MOB_AI
duration: 100
bValue: false
Target:
targetType: SELF
Cooldowns:
local: 1200
global: 300
DamageCylinder:
Zone:
radius: 10.0
shape: CYLINDER
height: 10
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
offset: 0,-1,0
Actions:
- action: DAMAGE
wait: 60
repeatEvery: 10
times: 4
multiplier: 4
Target:
targetType: ZONE_FULL
track: false
- action: SET_ON_FIRE
wait: 60
duration: 80
Target:
targetType: ZONE_FULL
track: false
Этот скрипт делает много вещей, но он разделен на два четких скрипта: VisualCylinder и DamageCylinder.
VisualCylinder запускается первым и имеет действие RUN_SCRIPT, которое немедленно также запускает DamageCylinder в то же время, когда работает VisualCylinder.
Однако каждое отдельное действие в DamageCylinder настроено на ожидание 60 тиков, или 3 секунды.
Это означает, что у босса есть фаза предупреждения в 3 секунды, а затем фаза урона, и хотя зоны настроены на неотслеживание, зона предупреждения и зона урона будут в одном и том же месте.
Специфичные свойства целей зон
Зоны имеют следующие специфичные свойства:
coverage
Устанавливает процент зоны, который фактически будет использоваться для действия. Работает только для целей-локаций (не будет работать при нацеливании на игроков или другие сущности).
| Значения | Детали | По умолчанию |
|---|---|---|
coverage | Устанавливает процент зоны, который будет покрыт. Вы можете рандомизировать это значение, используя ~ например: 1.0~0.3. | 1.0 |
Пример
eliteScript:
VisualCylinder:
Events:
- EliteMobDamagedEvent
Zone:
radius: 10.0
shape: CYLINDER
height: 1
filter: PLAYER
borderRadius: 5.0
Target:
targetType: SELF
Actions:
- action: SPAWN_PARTICLE
times: 12
repeatEvery: 5
particles:
- particle: SMOKE_NORMAL
Target:
targetType: ZONE_FULL
track: false
coverage: 0.5
В этом случае только 50% зоны будут покрыты частицами.
Наследование целей
Когда скрипт запускает другой скрипт (или "вызывает" этот скрипт), возможно передать информацию о зоне и цели от первого скрипта ко второму.
Примеры использования
- Улучшенные запускатели скриптов
Запускатели скриптов - это скрипты, единственная функция которых - запускать множество других скриптов. Они используются для упрощения управления скриптами, особенно при работе с несколькими скриптами, требующими точного тайминга.
С наследованием целей несколько скриптов могут использовать одну и ту же зону или цель, сокращая потенциально сотни строк повторяющегося скриптинга.
- Матрешечная фильтрация целей / Фильтрация целей по принципу русской матрешки
Условия фильтрации могут применяться к целям в действии. Передавая цели другому скрипту с другими фильтрами, становится возможным наслаивать условия и применять различные эффекты к одному и тому же пулу целей на основе все более конкретных критериев.
Например, возможно создать зону, которая ищет игроков, и создать действие, которое проверяет, имеют ли все игроки в зоне определенный тег. Затем допустимые цели могут быть переданы другому скрипту, где другое действие может выполнить случайную проверку условия и применить эффект на основе этого шанса. Затем цели могут быть далее переданы другому скрипту, где другое условие может проверить, живы ли еще цели, и выполнить какое-то особое поведение, если они мертвы.
Это, конечно, только примеры. Это очень гибкая система.
- Сложные зоны
Наконец, возможно наслаивать цели для создания сложных зон, опционально используя условия при необходимости, и даже возможно создавать полурандомизированные зоны, используя условия скрипта и возможность запускать только один из перечисленных скриптов из действий скрипта.
Примечание: Для этого раздела "родительский скрипт" относится к скрипту, который запускает "наследующий скрипт", который является скриптом, который будет использовать унаследованные цели.
При использовании наследования целей важно внимательно посмотреть на родительский скрипт, чтобы убедиться, что передаются правильные данные.
INHERIT_SCRIPT_TARGET
При использовании INHERIT_SCRIPT_TARGET цели из родительского скрипта будут переданы наследующему скрипту. Это имеет несколько оговорок:
-
При передаче целей-сущностей возможно запускать действия, требующие локации (например, создание частиц), так как будет использована локация сущностей. Конечно, также возможно использовать действия, требующие сущностей.
-
При передаче целей-локаций возможно использовать только локации. Единственный способ получить сущность из локации - это создать зону в этой локации и искать сущности. Так что, хотя получить сущности из локации не невозможно, это потребует немного дополнительной работы.
Наследование зон
При использовании INHERIT_SCRIPT_ZONE_FULL или INHERIT_SCRIPT_ZONE_BORDER крайне важно, чтобы родительский скрипт определял зону, иначе наследующий скрипт не сможет выполниться правильно.
Кроме того, зоны могут опционально отслеживаться. Это также будет передано вместе с зоной.
-
Неотслеживаемая зона всегда будет создавать зону там, где определено наследующим скриптом. Это означает, что настройки зоны будут использоваться действиями в наследующих скриптах для создания совершенно новых зон каждый раз, когда запускается действие, и локация этих зон будет определяться действием.
-
Отслеживаемая зона может передать точно такую же локацию зоны всем наследующим скриптам, если родительский скрипт настроен на цель
ZONE_FULLилиZONE_BORDER. Это означает, что каждый скрипт будет действовать на одних и тех же локациях.