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

Цели 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% зоны будут покрыты частицами.

Наследование целей

Когда скрипт запускает другой скрипт (или "вызывает" этот скрипт), возможно передать информацию о зоне и цели от первого скрипта ко второму.

Примеры использования

  1. Улучшенные запускатели скриптов

Запускатели скриптов - это скрипты, единственная функция которых - запускать множество других скриптов. Они используются для упрощения управления скриптами, особенно при работе с несколькими скриптами, требующими точного тайминга.

С наследованием целей несколько скриптов могут использовать одну и ту же зону или цель, сокращая потенциально сотни строк повторяющегося скриптинга.

  1. Матрешечная фильтрация целей / Фильтрация целей по принципу русской матрешки

Условия фильтрации могут применяться к целям в действии. Передавая цели другому скрипту с другими фильтрами, становится возможным наслаивать условия и применять различные эффекты к одному и тому же пулу целей на основе все более конкретных критериев.

Например, возможно создать зону, которая ищет игроков, и создать действие, которое проверяет, имеют ли все игроки в зоне определенный тег. Затем допустимые цели могут быть переданы другому скрипту, где другое действие может выполнить случайную проверку условия и применить эффект на основе этого шанса. Затем цели могут быть далее переданы другому скрипту, где другое условие может проверить, живы ли еще цели, и выполнить какое-то особое поведение, если они мертвы.

Это, конечно, только примеры. Это очень гибкая система.

  1. Сложные зоны

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

Примечание: Для этого раздела "родительский скрипт" относится к скрипту, который запускает "наследующий скрипт", который является скриптом, который будет использовать унаследованные цели.

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

INHERIT_SCRIPT_TARGET

При использовании INHERIT_SCRIPT_TARGET цели из родительского скрипта будут переданы наследующему скрипту. Это имеет несколько оговорок:

  • При передаче целей-сущностей возможно запускать действия, требующие локации (например, создание частиц), так как будет использована локация сущностей. Конечно, также возможно использовать действия, требующие сущностей.

  • При передаче целей-локаций возможно использовать только локации. Единственный способ получить сущность из локации - это создать зону в этой локации и искать сущности. Так что, хотя получить сущности из локации не невозможно, это потребует немного дополнительной работы.

Наследование зон

При использовании INHERIT_SCRIPT_ZONE_FULL или INHERIT_SCRIPT_ZONE_BORDER крайне важно, чтобы родительский скрипт определял зону, иначе наследующий скрипт не сможет выполниться правильно.

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

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

  • Отслеживаемая зона может передать точно такую же локацию зоны всем наследующим скриптам, если родительский скрипт настроен на цель ZONE_FULL или ZONE_BORDER. Это означает, что каждый скрипт будет действовать на одних и тех же локациях.