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

EliteScript

webapp_banner.jpg

EliteScript — это комплексная система скриптов для плагинов MagmaGuy, предоставляющая расширенные возможности настройки для создания динамического поведения боссов и других сущностей в Minecraft.

EliteScript или Lua?

У EliteMobs две системы скриптинга, и обе полностью поддерживаются. EliteScript не устарел.

  • EliteScript (эта страница и соседние с ней) — декларативный YAML. Лучше всего, когда ваша способность — это «по такому-то событию выполнить такие-то действия над такими-то целями». Ничего здесь не было удалено или заменено.
  • Lua-способности — файлы .lua в той же папке powers. Лучше всего, когда нужны переменные, циклы, случайное ветвление, состояние на каждого босса или отложенные действия. Большинство встроенных способностей написано на Lua; некоторые встроенные YAML-способности сохраняются.

Они не соперники: API context.script в Lua — это тонкая обёртка вокруг движка EliteScript. Когда вы пишете context.script:target({...}) или context.script:zone({...}) в Lua, передаваемая таблица попадает ровно в тот же код целей/зон/относительных векторов/частиц, который описан на этих страницах, поэтому каждое имя поля ниже применимо дословно. Изучение EliteScript не будет напрасным, если вы позже перейдёте на Lua.

Одно практическое следствие: если способность .lua и способность .yml имеют общее базовое имя, запись в списке powers: босса, указывающая на .yml, разрешается в файл .lua. Именно так поставляемые способности были переведены на Lua без поломки существующих конфигов боссов.

Обзор​

EliteScript позволяет администраторам серверов создавать поведение пользовательских боссов и мобов, управляемое событиями. Система скриптов состоит из шести основных компонентов:

  • Events: Триггеры, запускающие выполнение скрипта (урон, появление, смерть и т.д.)
  • Conditions: Требования, которые должны быть выполнены для запуска действий
  • Actions: Выполняемые поведения (урон, телепортация, создание частиц и т.д.)
  • Targets: Какие сущности или местоположения затрагиваются действиями
  • Zones: Определённые области в мире для нацеливания и обнаружения
  • Cooldowns: Временные ограничения для предотвращения спама скриптами

Elite Scripts можно добавлять как автономные файлы способностей или напрямую в файлы конфигурации пользовательских боссов.

Если у босса несколько скриптов, скрипт с неверным форматом пропускается, а сообщение в консоли указывает его имя и файл босса. Остальные корректные скрипты могут загрузиться. Conditions и Cooldowns должны содержать пары ключ–значение, а не списки YAML. Недопустимые числа тоже приводят к пропуску скрипта: дробное число там, где ожидается целое, например duration: 1.5, обратный диапазон вроде 5~1 или текст, не являющийся числом. Исправьте указанный скрипт и перезагрузите конфигурацию, чтобы восстановить его поведение.

Пример быстрого старта​

Вот простой EliteScript, который заставляет босса бить игроков молнией при получении урона:

eliteScript:
LightningStrike:
Events:
- EliteMobDamagedByPlayerEvent
Actions:
- action: STRIKE_LIGHTNING
Target:
targetType: DIRECT_TARGET
repeatEvery: 20
times: 3
Cooldowns:
local: 60
global: 20

Этот скрипт срабатывает, когда игрок наносит урон боссу, затем трижды показывает молнию в позиции игрока (раз в секунду). До повторного срабатывания требуется перезарядка в 60 тиков. STRIKE_LIGHTNING — только визуальный эффект; добавьте действие DAMAGE, если способность должна наносить игроку урон.

Компоненты скрипта​

EliteScript предоставляет обширные возможности настройки через систему компонентов. Подробную информацию о каждом компоненте смотрите на следующих страницах:

Основные компоненты​

  • Events - 13 типов событий, включая урон, смерть, появление, бой и зональные триггеры
  • Actions - 35 типов действий для создания сложного поведения
  • Targets - 17 типов целей для выбора сущностей и местоположений
  • Conditions - Условия фильтрации и блокировки с множеством типов проверок
  • Zones - 8 форм зон (сферы, цилиндры, кубоиды, лучи, конусы и т.д.)
  • Cooldowns - Системы локальной и глобальной перезарядки
  • Относительные векторы - Продвинутое позиционирование и перемещение

Распространённые случаи использования​

EliteScript обычно используется для:

  • Фазовые бои с боссами: Различные паттерны атак при разных процентах здоровья
  • Механики арены: Зональный урон, усиления или спавн в определённых областях
  • Пользовательские атаки: Уникальные эффекты частиц, снаряды и атаки по области
  • Опасности окружающей среды: Периодические молнии, падающие блоки или огонь
  • Интерактивные механики: Телепортация, спавн мобов и модификация мира
  • Общение с игроками: Сообщения, заголовки, панели действий и панели босса
  • Условное поведение: Различные действия в зависимости от количества игроков, местоположения или состояния босса

Реализация​

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

  1. Файлы способностей: Создайте автономные файлы .yml в ~/plugins/EliteMobs/powers/
  2. Файлы пользовательских боссов: Добавьте секции eliteScript: напрямую в конфигурации пользовательских боссов

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

Соображения по производительности​

При создании скриптов учитывайте следующие лучшие практики:

  • Используйте перезарядки для предотвращения проблем производительности от часто срабатывающих скриптов
  • Зональные события (ZoneEnterEvent, ZoneLeaveEvent) являются вычислительно затратными — используйте маленькие зоны и подходящие перезарядки
  • Используйте условия фильтрации для сокращения ненужных проверок
  • Тщательно тестируйте скрипты перед развёртыванием на рабочих серверах

Следующие шаги​

Чтобы начать создавать свои собственные EliteScripts:

  1. Просмотрите страницу Events, чтобы понять, что может запускать скрипты
  2. Изучите страницу Actions, чтобы увидеть, какое поведение можно создать
  3. Узнайте о Targets, чтобы контролировать, на что влияют ваши действия
  4. Изучите примеры на каждой странице компонентов
  5. Начните с простых скриптов и постепенно увеличивайте сложность