События Elite Script
EliteScripts основаны на событиях. Это означает, что они запускаются при срабатывании определённого события. Ниже перечислены текущие допустимые события:
| Событие | Описание | Прямая цель [?] |
|---|---|---|
| EliteMobDamagedByEliteMobEvent | Элита получила урон от другой элиты | Живая сущность атакующей элиты |
| EliteMobDamagedByPlayerEvent | Элита получила урон от игрока | Атакующий игрок |
| EliteMobDamagedEvent | Элита получила урон от чего угодно | ❌ |
| EliteMobDeathEvent | Смерть элиты | ❌ |
| EliteMobEnterCombatEvent | Элита вступает в бой с игроком | Вступивший в бой игрок |
| EliteMobExitCombatEvent | Элита выходит из боя | ❌ |
| EliteMobHealEvent | Исцеление элиты (включая полное исцеление) | ❌ |
| EliteMobSpawnEvent | Появление элиты | ❌ |
| EliteMobTargetPlayerEvent | Элита нацеливается на игрока | Целевой игрок |
| PlayerDamagedByEliteMobEvent | Элита наносит урон игроку | Пострадавший игрок |
| ElitePhaseSwitchEvent | Босс появляется при смене фазы | ❌ |
| ZoneEnterEvent (ScriptZoneEnterEvent) | Сущность входит в зону. Требуется установленная зона! | Сущность, вошедшая в зону |
| ZoneLeaveEvent (ScriptZoneLeaveEvent) | Сущность покидает зону. Требуется установленная зона! | Сущность, покинувшая зону |
«Элита» — сущность, которую EliteMobs отслеживает как элитную, включая боссов и элитные подкрепления. Примечание: ZoneEnterEvent и ZoneLeaveEvent требуют значительных вычислительных ресурсов, пожалуйста, используйте их экономно!
Direct Target используется целями скриптов, подробнее здесь.
В YAML используйте ZoneEnterEvent и ZoneLeaveEvent. Имена в скобках, ScriptZoneEnterEvent и ScriptZoneLeaveEvent, обозначают внутренние события Java и не принимаются как псевдонимы YAML. Отмена отменяемого события останавливает последующие скрипты и Lua-способности в порядке его обработки, но не оставшиеся действия уже запущенного скрипта. Сами события входа в зону и выхода из неё не отменяются.
EliteMobDamagedEvent охватывает урон из любого источника; EliteMobDamagedByPlayerEvent и EliteMobDamagedByEliteMobEvent — из своих конкретных источников. Это отдельные вызовы событий, а не взаимоисключающие варианты. Если указать общее и специальное событие урона, один удар может запустить скрипт несколько раз, когда это позволяют перезарядки. Урон, отменённый до выполнения общего слушателя, не вызывает это событие.
Примечание: имена событий сопоставляются точно, символ в символ. elitemobdeathevent или ELITEMOBDEATHEVENT отклоняются с предупреждением в консоли; работает только EliteMobDeathEvent. Имена секций уровня скрипта тоже чувствительны к регистру: Events, Actions, Zone, Conditions и Cooldowns должны писаться именно так. Вложенный в действие блок Conditions читается в любом регистре. Всё, что находится внутри этих секций (targetType, radius, borderRadius, isAlive, Target, ...), к регистру не чувствительно, а каждое значение перечисления — это обычная константа в UPPER_SNAKE_CASE с точным регистром.
on_zone_enter / on_zone_leaveУказание здесь ZoneEnterEvent или ZoneLeaveEvent — именно то, что запускает потиковый слушатель зон на боссе. Этот слушатель — единственное, что вызывает хуки верхнего уровня on_zone_enter / on_zone_leave в Lua-способности на том же боссе. Собственный context.zones:watch_zone(...) Lua-способности их не вызывает.
ZoneEnterEvent и ZoneLeaveEvent запускают действия при входе сущностей в объединение созданных скриптом форм зоны или выходе из него. Их DIRECT_TARGET — вошедшая или вышедшая сущность. У самого сканера нет прямой цели, поэтому не используйте DIRECT_TARGET для определения зоны. Фиксированные позиции и SELF / SELF_SPAWN подходят для простых точек отсчёта. NEARBY_PLAYERS тоже может определить их без прямой цели, но зона будет двигаться с выбранными игроками, а вход и выход будут отражать нахождение в общей движущейся области.
Слушатель сканирует зону каждый тик, даже когда перезарядки не дают запустить действия. Перезарядки сокращают число выполнений действий, но не стоимость обнаружения сущностей в зоне. При первом сканировании нового слушателя уже находящиеся внутри сущности считаются вошедшими.
События зоны содержат босса и пересекающую границу сущность, но не исходный скрипт или зону. Переход, обнаруженный слушателем одного скрипта, передаётся всем соответствующим скриптам и Lua-способностям этого босса. Поэтому отдельные слушатели могут вызывать повторы или срабатывания между разными зонами. filter зоны определяет проверяемые живые сущности; по умолчанию это PLAYER.
Используйте один раздел Events на скрипт и перечислите необходимые поддерживаемые события. Скрипт без событий не запускается ими автоматически, но его может вызвать другой скрипт:
Пример
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
- EliteMobTargetPlayerEvent
Actions:
- action: PUSH
Target:
targetType: SELF
vValue: 0,.3,0
Cooldowns:
local: 60
global: 20
Этот скрипт заставит элиту подпрыгнуть при получении удара от игрока или при нацеливании на игрока.