Туториал [VarScript 0.5] Планировщик: модель задачи

Полезен туториал?

  • Нет, не хватает некоторых плюшек

    Голосов: 0 0,0%
  • Нет, слишком сложная тема

    Голосов: 0 0,0%

  • Всего проголосовало
    6

DPOH-VAR

Старожил
Пользователь
Баллы
153
-----------------------------------------------------
VarScript 0.5 на рубукките (описание, инструкции, модули)
VarScript 0.5 на dev.bukkit.org
-----------------------------------------------------
Это второй туториал по функциям планировщика плагина VarScript 0.5
Ознакомиться подробнее с плагином можно тут.
Первая часть тут.

Модель задачи

Задача состоит из четырех блоков правил:
- Инициализация (init)
- События (events)
- Условия (conditions)
- Действия (actions)
Каждый блок может содержать несколько элементов или вовсе ни одного.
Рабочий цикл задачи:
1) при включении задачи или загрузке плагина, исполняются все действия из блока init.
2) задача ждет наступления любого события из блока events.
3) при наступлении события формируется окружение.
Окружение - это набор переменных, по которым мы можем в дальнейшем отреагировать на это событие.
4) Начинают проверяться все условия из списка conditions по порядку. Проверка условия дает либо положительный, либо отрицательный результат. Если проверка завершилась отрицательно - задача завершает свою работу.
Каждое условие может использовать переменные из окружения.
5) Как только все условия прошли проверку, начинают по порядку исполняться действия из списка actions.

Пример задачи:
YAML:
enabled: true
init:
- VS "foo" %text
- JS text2 = "bar"
events:
- BUKKIT PlayerChatEvent
conditions:
- JS Event.getMessage() == text
actions:
- JS Event.setMessage(text2)
1) При загрузке задачи исполнятся два действия:
1a) VS "foo" %text - на языке varscript: запись текста "foo" в переменную text
1b) JS text2 = "bar" - на языке javascript: запись текста "bar" в переменную text2
Два разных языка выбраны только для наглядности примера.
2) Далее, задача ждет события:
BUKKIT PlayerChatEvent - ожидание сообщения в чат от любого игрока
3) Как только событие происходит - формируется следующее окружение:
Event - произошедшее событие
Player - игрок, который написал сообщение
4) С этим окружением запускается проверка условия:
JS Event.getMessage() == text - javascript проверка того, что сообщение равно переменной text. В нашем случае условие сработает, только если игрок ввел в чат слово foo
5) Если условие верно - с тем же окружением начинают исполняться действия
JS Event.setMessage(text2) - javascript изменение сообщения на text2. В нашем случае - игрок увидит сообщение bar от своего лица, вместо введенного foo.

Следующая задача полностью аналогична по своей работе предыдущей, но не использует переменные и блок init:
YAML:
enabled: true
events:
- BUKKIT PlayerChatEvent
conditions:
- VS @Evеnt:getMessage "foo" =
actions:
- VS "bar" @Evеnt:setMessage

Команды для просмотра и редактирования задачи

/task <задача>
Отобразит всю информацию о задаче

/task <задача> <блок>
Показать соответствующий блок у задачи
Блок: init, events, conditions, actions, или просто по первой букве. Например, /task test e

/task <задача> <блок> add <тип> <?текст>
Добавить новую запись в блок.
Типы будут рассмотрены ниже

/task <задача> <блок> <номер> remove
Удалить строчку из блока. Внимание! строки нумеруются, начиная с 0.

/task <задача> <блок> <номер> disable|off
Отключить выбранную строку. Она просто будет игнорироваться задачей.

/task <задача> <блок> <номер> enable|on
Включить строку.

/task <задача> <блок> <номер> edit <тип> <?текст>
Редактирование некоторой строки. Она будет перезаписана

/task <задача> reload
Перезагрузка задачи. Заставляет снова исполнить блок init.
Также загружает новые данные, если yml файл был изменен.
 
Типы событий

Все типы событий можно будет посмотреть на официальной страничке плагина. Тут приведены только существующие на момент написания.

BUKKIT <событие> <?приоритет>
заставляет задачу ожидать определенного события из Bukkit API.
Пример команды:
/task test e add BUKKIT BlockBreakEvent HIGHEST
Список всех возможных событий можно глянуть где-нибудь в документации.
Событие указывается по краткому имени класса (если это стандартное событие bukkit)
Можно отслеживать нестандартные события (например события других плагинов) - тогда нужно вместо имени указать полный путь класса.
Список приоритетов - тоже в документации.
Приоритет указывается просто по названию

REPEAT <период> <задержка=0>
событие происходит с определенной периодичностью. Период указывается в серверных тиках (~ 1/20 секунды). Задержка перед первым срабатыванием указывается тоже в тиках, по умолчанию (если не указать) равна нулю.

LOAD
Без параметров. Сработает однократно при загрузке задачи.

CRON <запись>
Указывается запись для планировщика Cron. С помощью него можно настроить запуск задачи в определенное время и с определенной периодичностью, с точностью до минуты. Почитать о нем можно на вики.
Пример записи: CRON */2 * * * sun - выполнять каждые 2 минуты по воскресеньям.

Типы условий

CHANCE <вероятность>
Задает вероятность для проверки условия. Указывается либо в процентах, либо числом в диапазоне 0...1
Примеры:
CHANCE 10% - условие будет истинным только в 10% случаев
CHANCE 0.5 - шансы фифти/фифти, что условие выполнится

EVENT <состояние>
Имеет три формы:
EVENT is cancelled
EVENT is not cancelled
EVENT type is <событие>
Событие - указывается в виде короткого имени класса или полного пути (см. событие BUKKIT). Остальные формы должны быть понятны.

VS <скрипт>
В скрипте должно содержаться некое условие на языке varscript.
Пример:
VS @Player ISOP
будет истинным только если событие произошло с админом.

JS <скрипт>
В скрипте должно содержаться некое условие на языке javascript.
Пример:
JS Server.getOnlinePlayers().length > 10
событие будет истинным только если на сервере более 10 игроков онлайн.
Результатом должно быть булево значение.

Типы действий

Эти типы подходят как для блока действий, так и для инициализации

VS <скрипт>
Исполнить скрипт на языке varscript. Пример:
VS @Player KILL
убить игрока, с которым произошло событие

JS <скрипт>
Исполнить скрипт на языке javascript. Пример:
JS Server.shutdown()
это действие отключит сервер.

EVENT <действие>
Имеются две формы:
EVENT cancel
EVENT uncancel
Первая для того, чтобы отменить событие, а вторая - чтобы принудительно задействовать.

BROADCAST <сообщение>
Выводит сообщение всем игрокам. Форматирование не поддерживается

LOG <сообщение>
Выводит сообщение только в консоль и лог-файл. Форматирование не поддерживается

TASK <действие> <?задача>
Выполнить действие с какой-либо задачей.
Действия:
ENABLE - включить задачу
DISABLE - отключить задачу
RUN - принудительно запустить задачу
CHECKRUN - проверить условия, а после (в случае успеха) - запустить.
Задача - указывается по имени. Если задача не указана - действия применяются к текущей задаче.
 
Назад
Верх