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

Создание событий

webapp_banner.jpg

Это руководство для EliteMobs 10 и новее

Что такое Кастомные события?​

Кастомные события здесь относятся к событиям, которые происходят в игре случайным образом, будь то на основе действий игрока или по триггеру-таймеру. Плагин поставляется с рядом предзагруженных Кастомных событий, таких как событие Балрога, событие Кракена и события Гоблина сокровищ, и это лишь некоторые из них.

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

Создание ваших Кастомных событий​

Конфигурационные файлы кастомных событий следует создавать в: plugins/EliteMobs/customevents/

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

Пример: my_cool_event.yml указывается как my_cool_event.yml

Сохраните файлы и выполните /em reload, чтобы загрузить изменения. В events.yml также должен быть включён соответствующий переключатель событий-действий или событий по времени.

Общие настройки конфигурации

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


isEnabled​

Задаёт, включено ли событие.

КлючЗначенияПо умолчанию
isEnabledЛогическое значениеtrue
Пример
isEnabled: true

eventType​

Задаёт тип события.

КлючЗначенияПо умолчанию
eventTypeBREAK_BLOCK / FISH / TILL_SOIL / TIMEDDEFAULT

Учтите, что BREAK_BLOCK, FISH и TILL_SOIL — это События-действия, а TIMED — это События по времени.

eventType обязателен. DEFAULT — это заглушка, к которой EliteMobs откатывается, когда настройка отсутствует или не совпадает ни с одним из типов выше. Событие, оставшееся на DEFAULT, выводит предупреждение и вообще не регистрируется, поэтому ни одна из расположенных ниже настроек даже не читается.

Пример
eventType: BREAK_BLOCK

bossFilenames​

Перечисляет файлы кастомных боссов, которые появятся вместе, включая расширение .yml. Обязательно! Это не случайный выбор одного босса из списка. Проверьте все ссылки перед использованием события. События по времени пропускают неверные имена файлов и не встают в очередь без допустимых боссов. Событие-действие с любым неверным именем файла отменяется до появления кого-либо, а если спавн одного из боссов отклонён, уже появившиеся боссы удаляются.

КлючЗначенияПо умолчанию
bossFilenamesСписок строкнет
Пример
bossFilenames:
- balrog.yml
- my_event_boss.yml

announcementPriority​

Определяет получателей сообщений о начале и конце события. Приоритеты событий работают иначе, чем приоритеты объявлений боссов:

ПриоритетПолучатели
0Игроки в мире события; сообщения не отключаются
1Все игроки онлайн, а при announcementBroadcastWorldOnly: true — только игроки мира события
2Игроки в мире события
3 и вышеИгроки в мире события и настроенный DiscordSRV

Не указывайте startMessage или endMessage, чтобы отключить соответствующее сообщение события. Собственное объявление о появлении босса работает отдельно.

КлючЗначенияПо умолчанию
announcementPriorityЦелое число0
Пример
announcementPriority: 1

startMessage​

Задаёт сообщение при фактическом начале события, а не при постановке события по времени в очередь. Начальное и конечное сообщения поддерживают цвета, но система не подставляет значения вместо маркеров босса или игрока вроде $boss и $player.

КлючЗначенияПо умолчанию
startMessageСтроканет
Пример
startMessage: An event has started!

create_events_start_message.jpg


endMessage​

Задаёт сообщение, отправляемое в конце события.

КлючЗначенияПо умолчанию
endMessageСтроканет
Пример
endMessage: An event has ended!

create_events_end_message.jpg


eventStartCommands​

Задаёт консольные команды при начале события, без начального / и без подстановок игрока или босса. Команды выполняются независимо; необязательное $chance=0.5$ даёт конкретной команде шанс 50%. Используйте вероятность от 0 до 1; без этого маркера команда выполняется всегда.

КлючЗначенияПо умолчанию
eventStartCommandsСписок строкнет
Пример
eventStartCommands:
- say The event now starts!!
- "$chance=0.5$ say What a spawn!"

create_events_start_commands.jpg


eventEndCommands​

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

КлючЗначенияПо умолчанию
eventEndCommandsСписок строкнет
Пример
eventEndCommands:
- say The event ends, so sad.
- "$chance=0.5$ say Too slow bud!"

create_events_end_commands.jpg


minimumPlayerCount​

Задаёт минимум игроков онлайн, учитывая все миры и режимы игры. Это не число подходящих участников рядом с событием.

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

КлючЗначенияПо умолчанию
minimumPlayerCountЦелое число1
Пример
minimumPlayerCount: 5

Пример конфигурации события

Здесь только общие настройки; полному событию по времени также нужны spawnType и положительный вес выбора.

isEnabled: true
eventType: TIMED
bossFilenames:
- "cool_boss.yml"
- "other_cool_boss.yml"
announcementPriority: 3
startMessage: "Cool event is starting!"
endMessage: "Cool event is ending!"
eventStartCommands:
- say The event started!
eventEndCommands:
- say The event ended!

Полный пример события по времени
isEnabled: true
eventType: TIMED
bossFilenames:
- "my_timed_boss.yml"
announcementPriority: 3
startMessage: "A timed event has started!"
endMessage: "The timed event has ended!"
eventStartCommands:
- say The timed event began!
eventEndCommands:
- say The timed event concluded!
spawnType: "my_spawn_location.yml"
localCooldown: 120
globalCooldown: 30
weight: 100
eventDuration: 15
endEventWithBossDeath: true

События-действия​

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

При начале события-действия включается перезарядка для игрока: по умолчанию 4 минуты, настраивается через actionEventMinimumCooldownMinutes в events.yml. Одно действие запускает только одно событие: как только начинается подходящий файл, для игрока включается перезарядка, и остальные файлы пропускаются. Событие, которое не удалось запустить, не расходует перезарядку. Настройка actionEventsEnabled: false отключает эти события на всём сервере.

Три типа действий срабатывают следующим образом:

eventTypeТриггер
BREAK_BLOCKИгрок ломает блок. Сначала разыгрывается chance, затем сломанный блок сверяется с breakableMaterials.
FISHУ события рыбалки есть пойманная сущность, в том числе зацепленный моб. Без пойманной сущности оно не срабатывает. Спавн происходит в позиции этой сущности.
TILL_SOILИгрок нажимает правой кнопкой на DIRT или GRASS_BLOCK с деревянной, каменной, железной, золотой, алмазной или незеритовой мотыгой в основной руке. Фактическое превращение блока в пашню не проверяется.

Отменённые события Bukkit игнорируются. Место должно находиться в мире с включённым EliteMobs, вне миров подземелий EliteMobs и инстансовых областей подземелий, арен и классовых испытаний, а флаг WorldGuard elitemobs-events должен разрешать событие. Эти обработчики отдельно не ограничивают режим игры.

Боссы появляются в точке взаимодействия: в центре X/Z разрушенного блока, на месте пойманной сущности или на блок выше нажатой земли. События-действия не используют spawnType, веса и перезарядки выбора событий по времени.

Защита Peace Banner тоже предотвращает событие при включённом suppressEvents. Описанные ниже проверки длительности, времени окончания и удаления боссов применяются также к событиям-действиям.

chance​

Задаёт шанс того, что событие произойдёт при выполнении действия.

КлючЗначенияПо умолчанию
chanceЗначение между 0.0 и 1.00
Пример
chance: 0.001

breakableMaterials​

Задаёт список материалов для проверки, если действие установлено в BREAK_BLOCK.

КлючЗначенияПо умолчанию
breakableMaterialsСписок материаловнет
Пример
breakableMaterials:
- BEEHIVE
- BIRCH_WOOD

Пример конфигурации
chance: 0.001
breakableMaterials:
- COAL_ORE

Задаёт 0.1%-ный шанс запуска события при разрушении блока угольной руды, при условии что тип события — BREAK_BLOCK.


Полный пример события-действия
isEnabled: true
eventType: BREAK_BLOCK
bossFilenames:
- "mining_boss.yml"
announcementPriority: 2
startMessage: "You've awakened something..."
chance: 0.001
breakableMaterials:
- DIAMOND_ORE
- EMERALD_ORE

События по времени​

События по времени проходят автоматический взвешенный выбор, затем попадают в очередь кастомного спавна. Выбор не гарантирует немедленное появление или фиксированное расписание. События из разных файлов могут одновременно ждать в очереди или выполняться.

Без игроков онлайн автоматического выбора нет. Автоматический выбор исключает файл, пока копия события из него стоит в очереди или выполняется, а также пока онлайн меньше игроков, чем его minimumPlayerCount. Настройка timedEventsEnabled: false в events.yml отключает события по времени на всём сервере.

spawnType​

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

КлючЗначенияПо умолчанию
spawnTypeИмя файланет
Пример
spawnType: nether_spawn.yml

localCooldown​

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

КлючЗначенияПо умолчанию
localCooldownДробное число0
Пример
localCooldown: 120

globalCooldown​

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

КлючЗначенияПо умолчанию
globalCooldownДробное число0
Пример
globalCooldown: 60

weight​

Задаёт относительный вес среди доступных сейчас событий по времени. Используйте конечное положительное значение. Рекомендуется: 100. Нулевой вес ненадёжно отключает событие, особенно когда все доступные веса равны нулю; используйте isEnabled: false.

Система весов определяет относительную вероятность выбора события. Например:

  • Событие A с весом 100 против События B с весом 50 = Событие A вдвое вероятнее будет выбрано
  • Выше вес = выше шанс быть выбранным
  • Планировщик впервые проверяет события примерно через 5 минут после инициализации, затем раз в минуту. Лаг сервера может задержать проверки.
КлючЗначенияПо умолчанию
weightДробное число0
Пример
weight: 60.5

eventDuration​

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

КлючЗначенияПо умолчанию
eventDurationДробное число0
Пример
eventDuration: 30

endEventWithBossDeath​

Завершает событие, когда больше не существует ни одного из объектов основных боссов. При нескольких bossFilenames удаления или победы над одним недостаточно, пока остаётся другой. Подкрепления не считаются дополнительными основными боссами. Проверяется существование, а не убийство, засчитанное игроку. При любом завершении события оставшиеся основные боссы удаляются как боссы с истёкшим сроком. Применяется также к событиям-действиям.

КлючЗначенияПо умолчанию
endEventWithBossDeathЛогическое значениеtrue
Пример
endEventWithBossDeath: true

eventEndTime​

Задаёт внутриигровое время (в тиках), когда событие заканчивается. Используйте систему времени Minecraft, где 0=рассвет, 6000=полдень, 12000=сумерки, 18000=полночь, 23000=поздняя ночь. Установите -1, чтобы отключить завершение по времени.

Условие — время мира > eventEndTime; оно не ждёт следующего дня или точного пересечения порога. Событие, начавшееся позже указанного времени, может закончиться при первой проверке. Согласуйте окно спавна со временем окончания. Время мира лежит в диапазоне 0–23999, поэтому пороги 23999 и выше никогда не превышаются. Применяется также к событиям-действиям.

КлючЗначенияПо умолчанию
eventEndTimeЦелое число (0–23998 для достижимого порога; -1 отключает)-1
Пример
eventEndTime: 23000


Постановка в очередь запускает поиск места и повторные попытки кастомного спавна. Он может ждать подходящего времени или фазы луны в сохранённой позиции; во время ожидания повторяются не все проверки места. Их ограничения описаны в руководстве по кастомному спавну по ссылке выше. Одновременно появляется только одно событие по времени, и спавн также ждёт выполнения minimumPlayerCount и истечения интервала timedEventMinimumCooldownMinutes. Сообщение и команды начала выполняются после того, как событие по времени подтвердит существование основных боссов.

Пример конфигурации событий
isEnabled: true
eventType: TIMED
bossFilenames:
- "cool_boss.yml"
- "other_cool_boss.yml"
announcementPriority: 3
startMessage: "Cool event is starting!"
endMessage: "Cool event is ending!"
eventStartCommands:
- say The event started!
eventEndCommands:
- say The event ended!
spawnType: "myCoolSpawn.yml"
localCooldown: 30
globalCooldown: 15
weight: 100
eventDuration: 20
endEventWithBossDeath: true
eventEndTime: 10000

Запуск события вручную​

/em event <event filename>

Ставит событие по времени в очередь для подходящего места и времени. Требует elitemobs.event.start, выполняется игроком и принимает только загруженные шаблоны событий по времени. Они создаются из включённых файлов TIMED, когда активен timedEventsEnabled.

Команда обходит взвешенный выбор, локальную/глобальную перезарядку выбора и проверку уже ожидающей или работающей копии. Повторный вызов может поставить дубликаты в очередь. Условия места и времени кастомного спавна, minimumPlayerCount события и интервал timedEventMinimumCooldownMinutes остаются в силе.

При отказе сообщается причина: отсутствующий или неверный spawnType, отсутствие допустимых bossFilenames или отмена другим плагином. Сообщение об успехе подтверждает принятие в очередь, а не видимый спавн. Проверьте самих боссов и сообщения о повторных попытках в консоли.

Общесерверные настройки событий​

Они находятся в plugins/EliteMobs/events.yml. После изменения выполните перезагрузку настроек:

КлючОписаниеПо умолчанию
actionEventsEnabledПроисходят ли события-действия вообщеtrue
timedEventsEnabledПроисходят ли события по времени вообщеtrue
actionEventMinimumCooldownMinutesПерезарядка на игрока, в минутах, после срабатывания события-действия4
timedEventMinimumCooldownMinutesЗадержка в минутах после начала события по времени, прежде чем другое событие по времени сможет искать место или спавнить своих боссов, включая событие, уже ожидающее в сохранённой позиции4
announcementBroadcastWorldOnlyОграничивает сообщения приоритета 1 миром события; другие приоритеты уже отправляют игровые сообщения только в этот мирfalse