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

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

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

  1. cyber_lis

    cyber_lis Активный участник Девелопер Пользователь

    Баллы:
    68
    А можно пример скрипта на python. Человек заходит на сервер и ему пишут в чат: "Добропожаловать, %username%"
     
  2. Artem0001

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

    Баллы:
    78
    Имя в Minecraft:
    eWaster
    Хех я щас в Турции, приеду напишу
     
  3. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Код:
    import org.bukkit.event.player.PlayerLoginEvent
    PlayerLoginEvent=org.bukkit.event.player.PlayerLoginEvent
    
    def greeter (event):
        player = event.getPlayer()
        player.sendMessage("Добропожаловать, "+player.getName())
    
    workspace.addEvent(greeter,PlayerLoginEvent)
    
     
  4. cyber_lis

    cyber_lis Активный участник Девелопер Пользователь

    Баллы:
    68
    Спасибо ^___^
     
  5. Artem0001

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

    Баллы:
    78
    Имя в Minecraft:
    eWaster
    тоже спасибки)
     
  6. Автор темы
    DPOH-VAR

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

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

    Tutorials
    << here >>, in progress.

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

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

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

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

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

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

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

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

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

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

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

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



    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 }
    }

    Скоро ждите релиз мини-игры 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
  13. MYXOMOPX

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

    Баллы:
    78
    Skype:
    MYXOMOPX
    Имя в Minecraft:
    MYXOMOPX
  14. Автор темы
    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.
     
  15. jwplaster

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

    Баллы:
    173
    Skype:
    jwplaster.smartworld
    Имя в Minecraft:
    QviNSteN
    ИМХО это лишнее...
     
  16. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Я правильно понимаю, что фактически скрипты будут распространяться через github. А пользователям VarScript, которые не умеют, не хотят, не могут разбираться с программированием, по сути будет достаточно знать название скрипта чтобы установить его с github'а?
     
  17. Автор темы
    DPOH-VAR

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

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

    На данный момент скрипты можно распространять с помощью maven, что чуть тяжелее. Разработчику нужно скомпилировать скрипт и выложить jar в репозиторий. А пользователь должен использовать Grape, чтобы загрузить библиотеку себе. Таким образом, например, мы распространяем MimicChest
    Текущее состояние:
    Варскрипту ничего не стоит подгрузить недостающие зависимости. Теперь, кроме 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: каждый проект, содранный гитом, должен иметь свой набор классов и скриптов. В то же время классы должны быть в общей видимости, чтобы разные проекты могли взаимодействовать между собой. Работаю над этим.

    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
  18. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @DPOH-VAR
    Грустно это, конечно :(

    Ну и теоретически, людей может пугать такая история развития: сначала forth, потом js, теперь groovy... Что будет потом? ;)
     
  19. voldemarich

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

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

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

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

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