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

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

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

  1. zhenya27

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

    Баллы:
    68
    Имя в Minecraft:
    zhenya
    мда.... норм, лайк
     
  2. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Модуль NBTWrapper

    Фактически - это замена плагина PowerNBT
    Позволяет редактировать предметы, энтити и блоки.
    Скачать, посмотреть и т.д: [pastebin.com] ( < 500 строк )

    Что он из себя представляет

    Всего лишь два класса-обертки:

    class NBTCompound implements Map
    Содержит внутри себя объект {nms}.NBTTagCompound, позволяет работать с ним как с обычной мапой. В мапу можно класть объекты следующих типов:
    byte, short, int, long, float, double, String, int[], byte[], Map, Collection.
    Они будут автоматически преобразованы в NBTBase и занесены в nms объект.
    Когда берем из мапы объект - он тоже преобразуется к одному из выше перечисленных типов.​

    class NBTList implements List
    Реализация списка. Обертка над {nms}.NBTTagList. С ним можете работать как с обычной коллекцией объектов. Типы преобразуются так же, как и в NBTCompound
    Как использовать

    1. функция nbt(Object) позволяет получить NBTCompound у объекта (это может быть Entity, Block, ItemStack)
    Код:
    def myNbtData = nbt me
    print myNbtData
    2. функция nbt(Object, NBTCompound) установит объекту новые теги.
    Вернет true, если все прошло успешно, или же false в случае неудачи
    Код:
    def result = nbt me, myNbtData
    print result
    3. функция nbt(Object, Closure) позволяет просмотреть или изменить теги объекта.
    Вернет результат вычисления замыкания (фигурной скобки)
    Код:
    def myMaxHealth = nbt (me) { it.Attributes[0].Base }
    print myMaxHealth
    
    nbt (me) {
        it.Attributes[0].Base += 20
        it.HealF = it.Attributes[0].Base as float
        it.Inventory.clear()
    }
    4. функция nbt(Map) создаст новый NBTCompound, основываясь на переданной мапе
    Код:
    def myCompound = nbt( [
        foo: "bar",
        number: 15,
        list: [1,2,3]
    ] )
    5. функция nbt(Collection) создаст новый NBTList. Можно вызывать с переменным числом аргументов вместо коллекции
    Код:
    def numbers = nbt( [1, 2, 3, 4, 6, 7] )
    def primes = nbt 2, 3, 5, 7, 11
    С помощью этих функций можно в полной мере работать с NBT-данными.
    Например, вот так можно циклически двигать строки на табличке blockSign:
    Код:
     def rotateLines = {
        def t = it.Text1
        it.Text1 = it.Text2
        it.Text2 = it.Text3
        it.Text3 = it.Text4
        it.Text4 = t
    }
    nbt (blockSign rotateLines)
     
    slavik123123123, Hephest, MrGiffi и ещё 1-му нравится это.
  3. Benseeley

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

    Баллы:
    123
    можно это великолепие на последнюю версию? или же и так будет работать? и да, кинул джар-файл варскрипта в папку "плагины", запустил сервер, ничего не сгенерировалось... всё это делать в том же самом джарнике?
     
  4. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Этот скриптик только для версии 0.4
    Мобыть мы сделаем для 0.5, но на груви.
     
  5. Benseeley

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

    Баллы:
    123
    DPOH-VAR, жду-не дождусь, очень уж полезный скрипт!
     
  6. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Сейчас я совершенствую систему планировщика.
    Будет работать он так:
    В папке plugins/VarScript/scheduler располагаются директории events,conditions,actions с классами.
    К примеру, файл plugins/VarScript/scheduler/events/CLICK.class будет отвечать за событие клика по блоку.
    файл plugins/VarScript/scheduler/actions/BROADCAST.class будет отсылать сообщение всем игрокам

    В папке plugins/VarScript/scheduler/tasks будут по старинке лежать yml файлы задач.

    Пример: plugins/VarScript/scheduler/tasks/test.monitor.yml

    enabled: true
    description: Описание задачи
    init:
    - SET gm = SURVIVAL
    events:
    - CLICK 225 74 161 world
    - CLICK 225 74 159 world
    actions:
    - BROADCAST "&cBlock is clicked? Arrrr!"
    - BEAN $Player velocity = 2:2:2 gameMode = $gm health = 10
    - BEAN $Block data=7


    При нажатии на любой из двух блоков произойдет следующее:
    - сообщение Block is clicked? Arrrr!
    - игрок получит ускорение (2,2,2), игровой режим SURVIVAL, а также установит кол-во жизней в 10.
    - блок, на который нажали, получит data = 7

    PS:
    А еще будет раздел reactions (запустится, если хотя бы одно условие оказалось ложным) :D:D:D
    Посмотреть вложение 15471 Посмотреть вложение 15471 Посмотреть вложение 15472 Посмотреть вложение 15473 Посмотреть вложение 15474 Посмотреть вложение 15475 Посмотреть вложение 15476 Посмотреть вложение 15477
     
    Последнее редактирование: 30 ноя 2013
    Оригинало_о и FedorNogopletov нравится это.
  7. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Создаю репозиторий для модулей.
    https://github.com/DPOH-VAR/VarScript/tree/master/groovy-modules
    Тут можно найти свеженькие модули на груви.
    На данный момент там имеются:
    1. NBTTools.groovy - полностью заменяет все функции PowerNBT. Позволяет работать с NBT-данными как с обычными хешмапами и списками.
    2. metaclasses.groovy - упрощает написание других скриптов. Однако для использования ее в модулях - нужно указать зависимость от metaclasses

    Текущая версия работает с 1.7.2, полет нормальный)
     
    fromgate нравится это.
  8. DigitalMisha

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

    Баллы:
    58
    Кстате, а можно любой диалект ЕКМЫ использовать? ActionScript можно?
     
  9. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Нет. Используется только тот, который установлен в вашей java-машине.
    В большинстве случаев это движок Rhino 1.7R4, и он использует синтаксис javascript.
    К тому же я не видел движка ActionScript, реализуемого на java-машине.
     
  10. DigitalMisha

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

    Баллы:
    58
    Кстате, а как можно использовать Jython с этим чудом?
     
  11. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    1) Скачать jar (ищите на офсайте)
    ~10 мегабайт
    Убедиться, что внутри архива лежит метаинформация о службе
    файл \META-INF\services\javax.script.ScriptEngineFactory
    я использовал jython-2.7-b1.jar

    2) Поместить этот файл в папку lib и запустить сервер
    Советую добавить ключи перед запуском:
    -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled
    Они изменяют поведение GC, чтобы он мог выгружать неиспользуемые объекты и классы.

    3) Видим сообщение в консоли:
    [23:23:24 INFO]: [VarScript] load jython 2.7.0
    lang: python 2.7
    name: python,jython
    extension: py


    4) Пользуемся!
    Я не предусмотрел отдельной команды для работы с питоном, поэтому придется обращаться к нему по имени:
    >->> jython Server.worlds[0].time
    [23:23:24 INFO]: [VarScript] 17451

    Можно юзать команды в игре:
    /-> python команда
    /->> python команда и вывод результата на экран


     
    fromgate нравится это.
  12. DigitalMisha

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

    Баллы:
    58
    проблема в том, что я не смог найти jar
     
  13. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Серьезно?
     
  14. DigitalMisha

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

    Баллы:
    58
    А разве это не инсталятор?
     
  15. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    jython-2.5.4-rc1.jar - не инсталлятор.
    Это именно тот jar, который нужен варскрипту.
    PS:
    jython при использовании создает немного мусора в директории lib\cachedir\packages\
    У меня он занимает примерно 1.5Mb и периодически увеличивается.
     
  16. DigitalMisha

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

    Баллы:
    58
    Мусор я переживу. Просто многие просят Питоно-подобный синтаксис. И я подумал почем бы не использовать Питон?
     
  17. snake302

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

    Баллы:
    78
    Имя в Minecraft:
    mr_snake302
    Есть туториал по работе с mysql?
    Запись данных в mysql?
     
  18. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    varscript не имеет своих команд для работы с MySQL
    Теоретически можно использовать механизм рефлексий, но это не удобно.

    Я советую взять любой скриптовый движок и выполнить всю работу с MySQL на нем.
    К примеру, подключить groovy и использовать JDBC (туториал)
    То же самое можно сделать на JavaScript (он установлен по умолчанию), если есть определенные знания языка и особенностей движка Rhino.
     
    Likeobot и Hephest нравится это.
  19. snake302

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

    Баллы:
    78
    Имя в Minecraft:
    mr_snake302
    У меня пишет, что нету прав на команду />
    пермиссионов никакх не стоит

    только через консоль пашет


    upd:

    :O с PEX не работает, как убрал - заработало
     
    Последнее редактирование: 8 янв 2014
  20. MYXOMOPX

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

    Баллы:
    78
    Skype:
    MYXOMOPX
    Имя в Minecraft:
    MYXOMOPX
    Написал модуль кастомных достижений!
    • Создание ачивки: /g> CustomAchievements.addAchievement("название","отображаемое название","описание")
    • Выдать игроку ачивку: /g> CustomAchievements.giveAchievement("ник игрока","название ачивки") P.S. если у игрока она уже есть - ничего не произойдет
    • Проверить ачивку у игрока: /g>> CustomAchievements.hasAchievement("ник игрока","название ачивки")
    • Показать игроку его ачивки: /g> CustomAchievements.selfListAchievements("имя игрока")
    • Показать ачивки игрока всем: /g> CustomAchievements.printListAchievements("ник игрока")
    • Показать игрку ачивки которые существуют: /g> CustomAchievements.selfAllAchievements("ник игрока")
    • Удалить ачивку: /g> CustomAchievements.removeAchievement("название ачивки")
    Ставим на спавне нажимную плиту, под нее командный блок и пишем в него:
    • /g> CustomAchievements.selfListAchievements(" @p ".trim())
    И когда игрок наступит - ему выведутся все его ачивки.
    • /g> CustomAchievements.selfAllAchievements(" @p ".trim())
    При нажатии на плиту, игрок увидит все ачивки, которые вы создали.

    Пишем в чат /g> CustomAchievements.addAchievement("SecretRoom","Secret room! ^_^","Find the secret room").
    Делаем секретную комнату, в ней ставим кнопку, командный блок, в который пишем:
    • /g> CustomAchievements.giveAchievement(" @p ".trim(),"SecretRoom")
    При нажатии на эту кнопку, игрок получит ачивку. ^_^

    в архивах уже есть 5 созданных мной достижений.
    This is MINECRAAAFT - столкнуть кого-нибудь с обрыва так, что-бы он умер!
    But.. you tried D: - сломать алмазную руду золотой киркой.
    Nice trick: - спрыгнуть на лошади в небытие.
    Munchausen!: - скрафтить любой фейерверк из плагина Munchausen Fireworks.
    Steep miner!: - быть в 5 блоках от взрывающегося TNT и не смотреть на взрыв.
    Может быть чуть позже добавлю обычные команды (/customachievement give...)
     
    BaO и Hephest нравится это.

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