1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Туториал [VarScript 1.x] Триггеры, воркспейсы, автозагрузка

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

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

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

    Баллы:
    153
    Skype:
    dpohvar
    VarScript 1.x
    Триггеры, воркспейсы, автозагрузка
    -------------------------------------------------
    VarScript на dev.bukkit.org |
    Описание плагина на rubukkit.org |
    -------------------------------------------------​
    1 Workspace
    Workspace - это рабочее пространство, в котором пользователь исполняет команды. Он имеет замкнутый набор переменных и триггеров. По умолчанию игрок использует воркспейс, соответствующий его имени.
    Команда /ws отображает имя текущего воркспейса.
    Команда /ws set <workspace> позволяет сменить пользователю свой воркспейс.
    Все переменные, которые создал пользователь, сохраняются внутри воркспейса.
    Пример:
    /ws
    [ws>] workspace is active

    Создаем две переменные в текущем воркспейсе ws
    /> a = "foo"
    [ws>] foo
    /> b = "bar"
    [ws>] bar

    Получаем список всех переменных в текущем воркспейсе (ws)
    /> workspace.getBinding().variables
    [ws>] [b:bar, a:foo]

    Выбираем для работы другой воркспейс
    /ws set newWorkspace
    [ws>] new workspace set: newWorkspace

    Получаем список всех переменных в текущем воркспейсе (newWorkspace)
    /> workspace.getBinding().variables
    [newWorkspace>] [:]

    2 Регистрация таймеров
    Воркспейс позволяет зарегистрировать таймеры, по истечении которых выполнит определенное действие.
    Регистрация таймера с однократным действием:
    Код:
    timeout(100){
        println "Это действие выполнится через 5 секунд"
    }
    Время задержки указывается в игровых тиках (~1/20 секунды)

    Регистрация многократного повторения действия:
    Код:
    interval(100){
        println "Это сообщение появляется каждые 5 секунд"
    }
    interval(100, 200){
        println "А это - каждые 5 сек. с начальной задержкой в 10 сек."
    }
    Первым аргументом указывается период повторения, вторым (не обязательно) - начальная задержка.

    Чтобы остановить таймер, нужно вызвать у него метод stop(). Пример:
    /> timer = interval(100){ println "timer!" }
    [ws>] ru.dpohvar.varscript.trigger.BukkitIntervalTrigger@46a001bd
    [ws>] timer!
    [ws>] timer!
    [ws>] timer!
    /> timer.stop()

    [ws>] true
    Остановить все таймеры и триггеры в текущем воркспейсе можно командой /ws stop:
    /ws stop
    [ws>] workspace ws is stopped

    3 Регистрация событий:
    У воркспейса есть возможность подписаться на событие bukkit.
    Есть несколько вариантов подписаться на событие:
    listen (класс) { действие }
    listen (класс, приоритет) { действие }
    listen (приоритет) { класс event -> действие }
    listen { класс event -> действие }
    Примеры:
    Код:
    listener = listen (PlayerChatEvent) {
        println "$it.player.name написал сообщение!"
        it.cancelled = true
    }
    listener = listen (EventPriotity.HIGH) { PlayerChatEvent event ->
        println "$event.player.name написал сообщение!"
    }
    Класс события должен быть обязательно указан. Приоритет по умолчанию выбирается NORMAL.
    Отменить подписку на событие можно вызвав метод stop:
    /> listener.stop()
    Также, при остановке или удалении воркспейса отменяются все подписки.

    4 Регистрация команд
    Есть возможность зарегистрировать дополнительные команды
    Синтаксис:
    command( имя, описание, использование, [список алиасов] ) { обработчик }
    Пример:
    Код:
    def desc = "Отображает сообщение всем игрокам"; \
    def usage = "/alert сообщение"; \
    def aliases = ["al"]; \
    
    cmdAlert = command ("alert", desc, usage, aliases) { sender, args ->
        broadcast "$sender.name говорит всем: ${args[0]}"
    }
    /alert Hello!
    CONSOLE говорит всем: Hello!
    Обработчик команды может принимать такие аргументы:
    CommandSender sender, List<String> args, String commandName
    где:
    sender - исполнитель команды
    args - массив аргументов
    commandName - имя команды, которую он вызвал
    Остановить обработку команды:
    /> cmdAlert.stop()
    При остановке воркспейса останавливается обработку всех его команд.

    5 Триггер завершения
    Иногда там требуется отследить тот момент, когда воркспейс завершает свою работу.
    Для этого есть команда stopHook { }
    Код:
    hook = stopHook {
        println "Воркспейс завершил работу!"
    }
    /> hook = stopHook { println "Воркспейс равершил работу" }
    [ws>] ru.dpohvar.varscript.trigger.StopHookTrigger@62caa282
    /ws stop
    [ws>] Воркспейс равершил работу
    [ws>] workspace ws is stopped
    Чтобы отменить действие хука, нужно остановить его принудительно:
    /> hook.stop()
    При завершении или удалении воркспейса выполнятся все хуки, которые не были принудительно остановлены.
    Хуки успешно сработают при остановке сервера.
    Это может быть полезно, когда при завершении скрипта нужно сохранить состояние в файл или базу данных.

    6 Группа триггеров
    Таймеры, команды, события и хуки можно объединять в группы.
    Код:
    // создание группы-генератора:
    group = workspace.generator()
    
    // добавление триггеров в группу аналогичным образом
    group.timeout(100){ println "foo" }
    group.interval(19){ println "bar" }
    Остановить всю группу можно так:
    /> group.stop()
    При остановке группы выполнятся все хуки, которые были в ней зарегистрированы.

    7 Автозагрузка
    При запуске плагина происходит поиск всех скриптов в директории plugins/VarScript/autorun/ с расширением .groovy. Каждый скрипт запускается в отдельном воркспейсе, имя которого совпадает с именем файла.
    Также при создании воркспейса, если для него существует соответствующий скрипт в директории autorun, скрипт будет загружен.
    Пример:
    Файл plugins/VarScript/autorun/msg.groovy:
    Код:
    message = "Hello World";
    timer = interval(100){
        broadcast ">>> "  + message
    }
    создаем воркспейс, который каждые 5 секунд будет писать Hello World:
    /ws reload msg
    [ws>] workspace msg is created
    >>> Hello World
    >>> Hello World

    переключаемся на этот воркспейс:
    /ws set msg
    [ws>] new workspace set: msg

    изменяем значение переменной:
    /> message
    [msg>] Hello World
    /> message = "London, Goodbye!"
    [msg>] London, Goodbye!

    Теперь каждые 5 секунд отображается другое сообщение:
    >>> London, Goodbye!
    >>> London, Goodbye!

    останавливаем воркспейс:
    /ws stop
    [msg>] workspace msg is stopped

     
    Последнее редактирование: 2 мар 2015

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