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

Плагин [ADMN/DEV/FUN] VarScript 1.2 - Пишем скрипты на Groovy

Тема в разделе "Релизы плагинов", создана пользователем DPOH-VAR, 29 сен 2012.

  1. Artem0001

    Artem0001 Активный участник Пользователь

    Баллы:
    78
    Имя в Minecraft:
    eWaster
    тоже спасибки)
     
  2. Хостинг MineCraft
    <
  3. LightSunrider

    LightSunrider Активный участник Пользователь

    Баллы:
    78
    Имя в Minecraft:
    LightSunrider
    Очень интересная идея. Но вот жду документации -lang ru
    Так как английский непонятный и бедный язык, по сравнению с русским.
     
    Последнее редактирование: 15 сен 2014
  4. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    @LightSunrider
    придется пользоваться английской документацией. Она написана простым языком.
    Register events, tasks, commands, autorun
    << read more >>

    Tutorials
    << here >>, in progress.

    Остальное - читайте Bukkit API. Он, кстати, тоже на английском :lol:
     
  5. LightSunrider

    LightSunrider Активный участник Пользователь

    Баллы:
    78
    Имя в Minecraft:
    LightSunrider
    Спасибо, разобрался. Ещё бы пару стандартных готовых примеров и будет шикарно :)
    На разных ЯП))))
    Меня очень удивила своя система достижений, буду изучать :good:
     
    Последнее редактирование: 22 сен 2014
  6. MYXOMOPX

    MYXOMOPX Активный участник Пользователь

    Баллы:
    78
    Skype:
    MYXOMOPX
    Имя в Minecraft:
    MYXOMOPX
    Оффтопик:
    Пока не готов буккит (или Sponge) для 1.8 - Мы сделали Helljump на unity.
    Посмотреть можно тут: http://varscript.ru/helljump-unity/
    Helljump.jpg
     
  7. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    VarScript 0.7

    Я начал разработку версии 0.7
    Точнее, эту версию можно считать отдельной веткой.

    Особенности:

    1 Поддержка Ivy
    Apache Ivy - инструмент для разрешения зависимостей. Он позволяет скачивать по сети необходимые jar-ки перед запуском плагина. Совместим с maven-репозиториями. Ранее наработки у меня были в плагине Hedera. Сейчас они все будут включены в VarScript 0.7.

    2 Groovy, и только Groovy
    Да, писать скрипты теперь будем только на груви. Но благодаря этому я могу разработать нечто похожее на DSL для Bukkit. Собственно:

    3 DSL для Bukkit
    Groovy позволяет расширять синтаксис языка для какой-либо конкретной задачи.
    Просто приведу ниже несколько примеров:
    Код:
    // кикнуть всех игроков, у которых количество HP больше нормы
    players.each {
        if (it.hp > 20) 
            kick it, "Go away, cheater!"
    }
    // убить игрока Notch
    kill Notch
    // Написать всем Hello World
    bc "Hello World"
    // телепортироваться к указанному блоку
    tp me to targetBlock
    Большинство из этих функций доступны в VarScript 0.6, при подключении библиотеки BukkitExt.

    4 Groovy Grape
    Groovy Grape - это компонент груви, который позволяет подгружать отсутствующие библиотеки прямо во время исполнения. Теперь его можно будет использовать в своих скриптах когда угодно. Примеры - по ссылке.

    К моменту релиза некоторые фичи могут измениться.
     
    smilesdc нравится это.
  8. Tiberiumk

    Tiberiumk Активный участник Пользователь

    Баллы:
    76
    Skype:
    tiberium_11111
    Имя в Minecraft:
    Tiberium
    Я нашёл небольшую дырку у вас на сайте, и смог скачать версию 0.6.4 ,можешь сказать,что в ней нового?))
     
    Последнее редактирование: 4 фев 2015
  9. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Нового в сайте, дырке, или версии 0.6.4?
    http://dpohvar.ru/artifactory/ это не дырка, а наш репозиторий. В первую очередь плагины появляются там.
    В версии 0.6.4 я ставил эксперименты над воркспейсами, немного расширил их API.
    Ничего особенного не вышло, это скорее переходная версия к 0.7. Поэтому ее нет в паблике.
     
  10. Tiberiumk

    Tiberiumk Активный участник Пользователь

    Баллы:
    76
    Skype:
    tiberium_11111
    Имя в Minecraft:
    Tiberium
    Извиняюсь) Блин,срочно надо учить Groovy, чтобы VarScript 0.7 пользоваться) Надеюсь, первая бета версия версии 0.7 появится в конце февраля или начала марта? И кстати, Groovy сильно отличается от Java?
     
  11. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    в 99% случаев код, написанный на Java спокойно скомпилируется под Groovy.
    Язык Groovy - это расширенная версия Java.

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

    [DOUBLEPOST=1425304243][/DOUBLEPOST]
    VarScript 1.0.0
    Самое глобальное обновление.

    Полное описание и туториалы - тут: http://www.rubukkit.org/threads/21863/

    Все отличия от всех предыдущих версий 0.x:
    (о многом я уже писал выше, так что повторяюсь)

    -> Только Groovy
    VarScript использует только groovy. Выбор обусловлен тем, что из всех динамически компилируемых в JVM языков он наиболее гибкий.

    ->
    Автоматическая загрузка зависимостей
    Для работы плагина VarScript требуются компоненты Ivy и Groovy. А для работы некоторых скриптов - еще неизвестно что (с помощью Grape). Все библиотеки скачиваются при загрузке плагина.

    -> DSL
    Groovy позволяет динамически добавлять свои методы для уже существующих классов. Многие классы расширены для того, чтобы упростить написание скриптов.

    -> Дополнение по Tab
    Эта функция работает не очень уверенно, но в большинстве случаев помогает. По нажатию Tab предлагается список переменных, методов и свойств, которые можно вызвать. Список порой бывает очень большой. Метод поиска не является интеллектуальным, поэтому возможны ошибки.

    -> Импорт часто используемых классов
    Многие классы Bukkit по умолчанию импортированы, т.е. в скрипте нет необходимости указывать полное имя класса для его использования.

    -> Ввод скрипта в несколько строк
    Если команда слишком длинная и не умещается в одну команду, можно ввести ее в несколько строк. Плагин сам определяет, завершена команда или нет. (по открытые скобочкам, точкам, запятым и символу переноса '\')

    -> Простой способ запуска скриптов
    Скрипты в директории scripts запускаются как обычные функции. Они могут принимать параметры (массив args) и возвращать значение.

    -> Можно создавать классы
    Классы из директории scripts подгружаются и компилируются на лету. Это увеличивает коэффициент повторного использования кода

    -> import net.minecraft.server
    В скриптах и классах можно импортировать классы из net.minecraft.server.v* и org.bukkit.craftbukkit.v*. При компиляции, если версия классов не совпадает, импорт будет изменен под текущую версию nms.

    -> Воркспейсы теперь проще
    Можно создать воркспейс. Поработать в нем. Остановить или удалить. Всё. Никаких зависимостей между ними или полу-рабочих воркспейсов. Для автоматической загрузки воркспейсов есть директория autorun

    ->
    API для работы с PowerNBT
    Просто приведу пример:
    /> me.nbt {
    HealF = 100
    Inventory.each { it.count += 1 }
    }
    [DOUBLEPOST=1425929627,1425304243][/DOUBLEPOST]Скоро ждите релиз мини-игры DarkRuna 2.

    Отличия от предыдущей версии:

    Всё написано на груви, требуется VarScript 1.0 и PowerNBT. Версия mc - 1.8

    Арена разрушаемая. Перед началом каждого раунда она регенерируется.
    На арене можно запустить несколько типов игры (модов)
    Например:
    - Deathmatch (каждый за себя)
    - TeamMatch (битва по командам)
    - Domination (командная игра, удержание позиций)
    - CTF
    - Limit Deathmatch (deathmatch, но с ограниченным набором рун и спеллов)
    Перед началом раунда игроки выбирают тип игры путем голосования.
    Затем игроки выбирают команду, если это требуется (синие/красные)
    Далее - начинается новый раунд.
    Для битвы требуется жезл Grid_Blaze_Rod.png . Он всегда лежит в первом слоте и всегда выбран. В остальных слотах располагаются руны.
    Будет небольшое количество рун. Планируется штук 5-6:
    | Fire | | Water | | Death | | Life | | Air | | Earth |
    Список рун окончательный.
    При выборе руны в инвентаре (кнопками [2]-[9]) она накладывается на жезл.
    На жезл можно наложить одну или несколько рун.
    Таким образом мы можем создать спелл, основанный на комбинации рун.
    Каждый спелл может быть применен на себя (ПКМ) или на противника (ЛКМ).

    Спеллы:
    [D] Death-I, [DD] Death-II, [DDD] Death-III
    Игрок стреляет лучом темной энергии. Все, кто коснется луча - слепнут на 5 сек и получают постоянный дамаг. Бесполезно против мокрых игроков. Луч не распространяется через воду.
    От уровня зависит продолжительность эффекта и длина луча.

    [W] Water-I, [WW] Water-II, [WWW] Water-III
    Игрок стреляет аналогично водой. Противнику не наносится урон. Можно намочить противника. Вода тушит огонь или лаву, смыть негативные эффекты. Также может столкнуть противника. Чем выше уровень, тем больше напор и длительность. Можно намочить себя, чтобы снять негативные эффекты.

    [F] Fire-I, [FF] Fire-II, [FFF] Fire-III
    Ручной огнемет. Наносит моментальный дамаг, а также поджигает игрока. Длительность и кол-во дамага зависит от уровня. Можно использовать ЛКМ, чтобы высушить себя.

    [L] Life-I, [LL] Life-II, [LLL] Life-III
    Применение на себя - постепенно восстанавливает здоровье. Применение на противника - стреляет лучом жизни, который восстанавливает здоровье всем, кто его коснется. Не действует на мокрых игроков. Во время лечения игрок становится уязвим к атаке лучом [D] (он взорвется)

    [A] Air-I, [AA] Air-II, [AAA] Air-III
    Позволяет с помощью ПКМ игроку совершить рывок в воздух. При ЛКМ - отталкивает всех противников в определенном радиусе. Высота прыжка и радиус зависят от уровня.

    [E] Earth-I, [EE] Earth-II , [EEE] Earth-III
    Дает игроку силу земли. При атаке противника - ему наносится дополнительный урон. Если противник далеко - в него бросается камень. При использовании ПКМ - позволяет игроку выбить блок с определенной прочностью. Выбитый блок продолжает лететь по траектории удара и наносит урон игрокам. Наносимый дамаг и допустимая прочность блока зависят от уровня спелла.

    [DL, LD] Laser-I, [DLD, LDD] Laser-II, [DLDD, LDDD] Laser-III
    Стреляет лазером. Все, что коснется лазера - взрывается. Лазер взрывается при взаимодействии с огнем. Гасится водой. От уровня зависит длина лазера, длительность и мощность взрыва.

    [FL, LF] Thunder-I, [FLF, LFF] Thunder-II, [FLFF, LFFF] Thunder-III
    Игрок стреляет молнией. Может поразить несколько целей перед собой одновременно. Молния наносит моментальный урон. Мокрые игроки получают двойной урон. При ударе молнии в воду урон получают все игроки, которые находились в водоеме недалеко от места удара. Часто спелл ведет себя непредсказуемо.

    [FE, EF] FireRock-I, [FEF, EFF] FireRock-II, [FEFF, EFFF] FireRock-III
    Игрок бросает огненный камень. При столкновении с игроком камень поджигает его и наносит урон.
    При приземлении камень поджигает все в небольшом радиусе.

    Игрокам изначально доступны все спеллы 1-го уровня. Остальные потребуется изучить (купить за игровую валюту)
     
    Последнее редактирование: 30 мар 2015
  12. MYXOMOPX

    MYXOMOPX Активный участник Пользователь

    Баллы:
    78
    Skype:
    MYXOMOPX
    Имя в Minecraft:
    MYXOMOPX
  13. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Следующая идея для VarScript ( будет v1.2 ) - добавить в VarScript поддержку git.

    В чем преимущества:
    Можно будет быстро написать свой скрипт или сценарий, и поделиться им.
    Пользователь вводит команду:
    /ws clone PowerTower https://github.com/DPOH-VAR/PowerTower.git
    и у нас создается воркспейс PowerTower (в отдельной директории), в которую загружаются все скрипты с гитхаба. Такой простой способ установки кастомных скриптов.
    И как вариант - обновить скрипт до последней версии:
    /ws update PowerTower
    Или установить нужную версию/откатиться:
    /ws update PowerTower v1.2
    Со стороны разработчика требуется умение пользоваться гитом. Но для большинства это не проблема.

    ИМХО это намного проще, чем создавать артефакты и грабить их с помощью Grape.
     
  14. jwplaster

    jwplaster Старожил Пользователь

    Баллы:
    173
    Skype:
    jwplaster.smartworld
    Имя в Minecraft:
    QviNSteN
    ИМХО это лишнее...
     
  15. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Почти. Достаточно будет указать ссылку на гит (не обязательно гитхаб), чтобы установить себе скрипт. При этом пользователь может выбрать любое название скрипта.

    На данный момент скрипты можно распространять с помощью maven, что чуть тяжелее. Разработчику нужно скомпилировать скрипт и выложить jar в репозиторий. А пользователь должен использовать Grape, чтобы загрузить библиотеку себе. Таким образом, например, мы распространяем MimicChest[DOUBLEPOST=1440714839,1438190705][/DOUBLEPOST]Текущее состояние:
    Варскрипту ничего не стоит подгрузить недостающие зависимости. Теперь, кроме groovy и ivy, он подгружает еще библиотеку jGit. При первом запуске плагина все нужные библиотеки скачиваются в локальный репозиторий "./.ivy".

    Загрузка любых зависимостей теперь логает в консоль:
    Код:
    :: loading settings :: url = jar:file:./plugins/VarScript.jar!/ivysettings.xml
    :: resolving dependencies :: ru.dpohvar.varscript#VarScript;working
        confs: [default]
        found org.codehaus.groovy#groovy-all;2.4.4 in central
        found org.eclipse.jgit#org.eclipse.jgit;4.0.1.201506240215-r in central
        found com.jcraft#jsch;0.1.51 in central
        found com.googlecode.javaewah#JavaEWAH;0.7.9 in central
        found org.apache.httpcomponents#httpclient;4.1.3 in central
        found org.apache.httpcomponents#httpcore;4.1.4 in central
        found commons-logging#commons-logging;1.1.1 in central
        found commons-codec#commons-codec;1.4 in central
        found org.slf4j#slf4j-api;1.7.2 in central
    Добавил команды для работы с git. В большинстве случаев их поведение схоже с оригинальной утилитой.
    /ws git clone (url) [name] - скопировать себе проект с гитхаба
    перед использованием следующих команд нужно переключиться в нужный воркспейс /ws set (name)
    /ws git checkout [branch] - переключиться на указанную ветку
    /ws git branch - посмотреть список веток.
    /ws git pull - обновить локальный репозиторий, получить последнюю версию
    /ws git fetch - обновить локальные ветки
    С помощью этих команд нельзя создать ветку, тег, отправить изменения на сервер и т.д. Для всего этого пользуйтесь гитом. Команды дают только минимальный функционал и предназначены для того, чтобы можно было быстро скопировать себе любой проект, выбрать ветку или обновиться без необходимости ставить себе гит и изучать его.

    TODO: каждый проект, содранный гитом, должен иметь свой набор классов и скриптов. В то же время классы должны быть в общей видимости, чтобы разные проекты могли взаимодействовать между собой. Работаю над этим.[DOUBLEPOST=1444970570][/DOUBLEPOST]
    PS: Версия 1.2 с поддержкой git все еще в разработке.

    Заметил странную тенденцию:

    VarScript 0.1 ::: работал ужасно, имел около 100-150 команд, только текстовые переменные, при этом нужно было учить синтаксис Forth. Многие пользовались им, пытались составить программы и скрипты.
    По моей оценке написать что-либо сложное на нем почти невозможно. Скрипт HellJump представлял из себя кучу г-нокода.

    VarScript 0.5 ::: Фортоподобный синтаксис сохранен. Им пользуются. Добавлены принципы ООП, функции, конструкторы, прототипы. Язык стал сложнее, а желающих им пользоваться - меньше. В качестве бонуса добавлен язык JavaScript (движок Rhino или Nashorn в java из коробки), который оказался нафиг никому не нужен. HellJump, DarkRuna и другие скрипты написаны в стиле ООП и разбиты по файлам. Код достаточно легко читать и править (по сравнению с предыдущей версией).

    VarScript 1+ ::: Выглядит как-то так:
    — Эй, люди! Форт - это скучно! Давайте писать на Groovy! Это та же самая Java, только круче. В скриптах очень просто регистрировать события, таймеры. Это намного проще и понятнее, чем в языке varscript.
    — Нет! Groovy это язык программирования, поэтому я не буду его учить.
     
    Последнее редактирование: 29 июл 2015
  16. voldemarich

    voldemarich Активный участник Пользователь

    Баллы:
    63
    Гляжу, и питон добавил. Замечательно, может, даже напишу чего-нибудь, уже давно не занимаюсь, времени нет. На forth идея была нова + визуально легче эмбеддилось, а потому его и юзали. А сейчас функционал хоть и большой, но varscript стал фрэймворком Bukkit API.
     
  17. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Коробочная поддержка питона остановилась на версии 0.6, как и всех остальных JSR223-совместимых языков.
    Сейчас, в версии 1.+, чтобы кодить на питоне, нужно запустить скрипт на груви, который скачает и запустит питон.
    Код:
    @Grab(group='org.python', module='jython-standalone', version='2.5.2')
     
  18. Tiberiumk

    Tiberiumk Активный участник Пользователь

    Баллы:
    76
    Skype:
    tiberium_11111
    Имя в Minecraft:
    Tiberium
    А как потом скрипты создавать на питоне?
     
  19. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Нужно на груви запустить интерпретатор питона.
    Например, создаем скрипт:
    Код:
    @Grab(group='org.python', module='jython-standalone', version='2.5.2')
    import org.python.util.PythonInterpreter;
    
    // создаем интерпретатор
    PythonInterpreter interp = new PythonInterpreter();
    // передаем в него нужные переменные из груви-окружения
    interp.set("workspace",workspace)
    interp.set("global",global)
    interp.set("server",server)
    // запускаем файл
    interp.execfile("plugins/varscript/scripts/python/test.py")
    Теперь создаем файл plugins/varscript/scripts/python/test.py, в котором пишем скрипт на питоне.
    При запуске этого груви-скрипта запустится питоновский скрипт.
     
  20. Tiberiumk

    Tiberiumk Активный участник Пользователь

    Баллы:
    76
    Skype:
    tiberium_11111
    Имя в Minecraft:
    Tiberium
    Скрипты на питоне пишутся таким же образом, как для старых версий VarScript'а ? Т.е. доступ к BukkitAPI и тому подобное
     
  21. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Обновление до версии 1.2
    https://www.spigotmc.org/resources/varscript.9190/
    Тут очень-очень много накопленных за полгода изменений.
    Вот основные:

    1. Гит!

    Да, он работает. Но в рамках плагина - только на чтение. Теперь можно разрабатывать скрипты локально и затем отправлять их на удаленный сервер. Или же скачать готовый проект со всеми плюшками по ссылке.
    Пример:
    Клонируем себе проект по ссылке в папку project1
    /ws git clone httр://mygitserver/user/bukkit-project.git project1
    При необходимости авторизации в гите вводим логин и пароль.
    По умолчанию проект не создает локальных бренчей и пытается сделать чекаут origin/master
    Переключаемся в воркспейс project1
    /ws set project1
    Если нам нужен другой бренч, мы можем выбрать любой из списка:
    /ws git branch all
    А теперь переключиться в нужный бренч:
    /ws git checkout origin/dev
    Также можно откатиться на любой коммит. Историю коммитов можно посмотреть командой:
    /ws git log
    Теперь добавляем воркспейс в автозагрузку:
    /ws autorun add project1
    Если не хочется перезагружаться, мы можем запустить его немедленно:
    /ws start project1
    Допустим, нам нужно синхронизировать проект с удаленным репозиторием.
    /ws fetch remote
    При необходимости авторизации в гите снова вводим логин и пароль.
    Хорошо, мы синхронизировали проект. Чтобы применить изменения, нужно снова сделать чекаут в нужную ветку:
    /ws git checkout origin/dev
    Это всё. Для тех, кто знаком с гитом, это не будет проблемой.
    В общем случае, чтобы скопировать себе и запустить чей-то готовый проект, достаточно ввести только эти команды:
    /ws git clone httр://mygitserver/user/bukkit-project.git project1
    /ws autorun add project1
    /ws start project1

    Поэтому распространять скрипты будет проще.

    2. Воркспейс может использовать отдельную директорию
    По умолчанию это plugins/VarScript/autorun/<имя>.
    При запуске воркспейса из директории ищется файл main.groovy, а в остальном это аналогично обычным autorun-скриптам.
    Еще одно замечание: если создать класс в этой директории, он будет доступен для всех groovy скриптов.

    3. Воркспейсы теперь в глобальной области видимости
    Каждый созданный воркспейс доступен по своему имени.
    Вот наглядный пример:
    Код:
    // File autorun/ws_badPlayers.groovy
    badNames = ["Nagibator", "Anonymous"]
    Код:
    // File autorun/ws_security.groovy
    isNameBad = { player ->
        player.name in ws_badPlayers.badNames
    }
    /> ws_security.isNameBad(me)
    [workspaceName]> false

    При обращении к воркспейсу он загружается автоматически.

    4. Автозагрузка
    Теперь скрипт недостаточно скопировать в папку autorun. Нужно явно его добавить в список автозагрузки:
    /ws autorun add [workspace]
    Это касается как обычных groovy файлов, так и проектов.

    Также исправлены некоторые баги:
    - ошибка в workspace API при остановке генератора скриптов
    - на некоторых дедиках VarScript вообще не запускался (ограничения безопасности доступа к домашней папке)
    - помощь ко командам: /ws help и /ws git help
    - исправлены ошибки в таб-комплитере.
     

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