Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Туториал [VarScript 0.5] Регистрация таймеров с помощью javascript

Тема в разделе "Руководства, инструкции, утилиты", создана пользователем DPOH-VAR, 28 авг 2013.

  1. Автор темы
    DPOH-VAR

    DPOH-VAR Старожил Пользователь

    Баллы:
    153
    Skype:
    dpohvar
    -----------------------------------------------------
    Разработка плагина (описание, инструкции, модули и прочее)
    Плагин на dev.bukkit.org (скачать можно отсюда)
    -----------------------------------------------------
    Синхронный и асинхронный режим

    Javascript код может исполняться в синхронном и асинхронном потоке.
    В случае синхронного исполнения - javascript исполняется в основном потоке сервера, в этом случае мы можем свободно использовать Bukkit API, не боясь вызвать ошибки. В этом случае сервер ждет, пока функция javascript исполнится до конца. Недостаток в том, что если javascript код слишком загружен и потребует много времени на исполнение - сервер зависнет на это время.
    Если программа исполняется в асинхронном потоке - она не зависит от сервера. Код может исполняться сколько угодно долго - сервер bukkit просто продолжит свою работу, не обращая внимания на программу. Недостаток - нельзя в полной мере использовать Bukkit API, это может вызвать ошибку. Например, нельзя создавать новые ентити, менять их параметры, отправлять игрокам любые пакеты, изменять блоки и т.д. - большинство параметров доступны только для чтения.

    Каждая отдельная функция исполняется синхронно или асинхронно.
    Как определить, в каком потоке была запущена функция?
    Функция запущена в основном потоке (синхронно), если:
    - Она запущена игроком по команде
    - Она запущена через консоль
    - Была запущена в коммандблоке
    - Запустилась в ответ на синхронное событие Bukkit
    - Запустилась по расписанию игровых тиков (например REPEAT у планировщика)
    - Она запустилась из другой синхронной функции
    Функция работает в асинхронном потоке (параллельно), если:
    - Она запущена по времени (ее запустил CRON или onTimer)
    - Запустилась в ответ на асинхронное событие Bukkit (с приставкой Async)
    - Она запустилась из другой асинхронной функции
    - Произошло божественное вмешательство в работу плагина

    Регистрация таймера по тикам

    Если нам нужно запланировать действие через определенное количество тиков, мы можем использовать такой метод:
    Код:
    trigger = program.onTicks(_function_ , _ticks_)
    _function_ - функция, которая исполнится после задержки
    _ticks_ - длительность задержки в серверных тиках.
    Функция запустится в синхронном режиме.

    Для регулярного исполнения функции через промежуток тиков используется такой метод:
    Код:
    trigger = program.everyTicks(_function_ , _ticks_);
    program.everyTicks(_function_ , _ticks_ , _delay_)
    _function_ - функция
    _ticks_ - интервал, указанный в тиках
    _delay_ - задержка перед первым исполнением. По умолчанию = 0
    Функция запустится в синхронном режиме.

    Регистрация таймера по времени

    Также задержку можно указывать в миллисекундах:
    Код:
    trigger = program.onTimeout(_function_ , _time_);
    _time_ - количество миллисекунд в задержке
    _function_ - эта функция будет запущена асинхронно

    Запланировать исполнение функции периодически:
    Код:
    trigger = program.everyTimeout(_function_ , _time_);
    _time_ - количество миллисекунд в периоде
    _function_ - эта функция будет запущена асинхронно

    Исполнение функции по завершении программы

    Есть еще одно особое событие:
    Код:
    trigger = program.onFinish(_function_);
    _function_ - функция будет запущена при завершении программы или ее принудительной остановке. Заранее неизвестно, в каком режиме она будет исполнена (синхронный или асинхронный).

    В любое время можно остановить таймер и отменить исполнение функции:
    Код:
    trigger.unregiser()
     
  2. Хостинг MineCraft
    <

Поделиться этой страницей