События

Событийность по матрице судьбы онлайн…

Мы так много говорили про конструкции языка, что вообще забыли про взаимодействие игрока с самим сервером. Исправляем данное недоразумение и представляем вам События, или как их принято называть Events (Эвенты).

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

Список событий всегда можно узнать на странице официальной документации https://docs.skriptlang.org/events.html.

Синтакс события в языке Skript:

on %event%:
  #ваш код

Пример:

on break:
  broadcast "%event-block%"

При ломании какого-либо блока игроком в чат выведется название сломанного блока

Взглянем на синтакс события: [on] [block] (break[ing]|min(e|ing)) [[of] %item types/block datas%]

Исходя из этого мы можем указать какой именно блок должен быть сломан, это аналогично условию внутри этого же события,

пример:

on break of stone:
  broadcast "%event-block%"

on break:
  if event-block is stone:
    broadcast "%event-block%"

Как вы заметили, тут, как и в циклах есть особые выражения, которые представляют какие-либо данные участвующие в событии, в примере выше event-block - это блок который был сломан. В основном почти во всех событиях участвует player - игрок. Все это описано в документации по ссылке выше. Мы могли бы вам это все описать, но событий настолько много, что это будет лишним. Чтобы все это понять вам не нужно быть профессианалом.

Начиная с версии Skript 2.6 события, аналогично событиям в java имеют приоритет.

Синтакст события с приоритетом:

on %event% with priority %priority%:
  #ваш код

Зачем это нужно? Данный параметр определяет, какое событие внутри ядра будет обрабатываться раньше, а какое позже.

Список всех приоритетов от вызываемого самым первым и самым последним: LOWEST, LOW, NORMAL, HIGH, HIGHEST, MONITOR

Приведу конкретный пример:

on break with priority LOW:
  broadcast "message 1"
on break with priorty LOWEST:
  broadcast "message 2"

Первым будет выведено ‘message 2’ затем ‘message 1’ Если вы не указываете приоритет события, то его приоритет будет взят из конфига самого плагина

Как отменить, или грубо говоря переписать событие? Для этого есть выражение cancel event

Например:

on break:
  cancel event

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

on break with priority LOWEST:
  cancel event
on break with priority LOW:
  broadcast "Message"

Сообщение не будет выведено потому что данное событие ранее уже было отменено.

Если вы отменили событие, то это еще не значит что код после этой строки не будет выполнен - будет, не будет лишь того, что по приоритету находится ниже чем текущее событие и то, что должно выполнится по стандарту (стандартная функция - имеется ввиду, то что предусмотрено самим ядром, например в событии ломании блока - сломать сам блок)

Мы также можем проверить было-ли отменено какое-либо событие при помощи условия:

on break:
  if event is cancelled:
    broadcast "cancelled"
on break:
  if event is not cancelled:
   broadcast "is not cancelled"

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

ГЛОССАРИЙ

Event - событие, действие

Priority - приоритет, очередность