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

Улыбнула ачивка "This is Minecraft". Пока видео смотрел захотелось сделать такую, и вот те на: она есть!
Каким IDE Вы пользуетесь для Груви?
 
Каким IDE Вы пользуетесь для Груви?
Intellij IDEA 13 очень даже ничего справляется, но в каждом скрипте приходится вручную указывать используемые переменные и их тип. Я написал на нем модули metaclasses и NBTTools
IDEA 12 в этом плане хуже работает с груви.
Для простеньких скриптов достаточно Sublime Text
на худой конец пойдет и Notepad++, подсветка синтаксиса у него отличная.
 
Просто не знал какой ИДЕ использовать. На одном компе Сублайм. А на втором только НПП стоял. Нашел для НПП
 
Очередной модуль на груви
https://github.com/DPOH-VAR/VarScript/blob/master/groovy-modules/yaml.groovy
Предназначен для работы с данными в формате YAML

Модуль использует библиотеку SnakeYAML, добавляет следуюшие функции:
def loadYaml(File file) - чтение YAML из файла
def loadYaml(InputStream is) - чтение YAML из потока
def loadYaml(String data) - чтение YAML из строки.
Все три метода возвращают обработанный парсером объект.

String dumpYaml(def data) - сохранение объекта в формат YAML, метод вернет строку
boolean dumpYaml(def data, OutputStream is) - сохранение объекта в формат YAML в поток
boolean dumpYaml(def data, File file)- сохранение объекта в формат YAML и запись в файл
Последние два метода возвращают true в случае успеха.


И вот простенький пример работы модулей yaml и NBTTools:
1) Сохраняем свой инвентарь в файл:
/g> dumpYaml( nbt(me).Inventory, new File("inventory.yml") )
Содержимое файла будет примерно таким:
YAML:
- id: 1
  Damage: 0
  Count: 3
  Slot: 0
- id: 145
  Damage: 2
  Count: 1
  Slot: 1
- id: 403
  Damage: 0
  Count: 1
  tag:
    StoredEnchantments:
    - id: 21
      lvl: 3
  Slot: 2
- id: 314
  Damage: 0
  Count: 1
  tag:
    RepairCost: 2
    display:
      Name: Шлем из золота
  Slot: 103
2) Изменяем файл и загружаем инвентарь обратно:
/g> nbt(me) {it.Inventory = loadYaml(new File("inventory.yml")) }

PS: все данные формата nbt прекрасно конвертируются в YAML и обратно.
У меня уже появилась идея добавить такую фичу в плагин PowerNBT ;)
 
Переделал модуль CustomAchievements.
Теперь всё хранится в .yml файлах (раньше хранилось в .nbtz)
Скачать можно тут
 
Релиз мини-игры DarkRuna!

Скачать:
https://drive.google.com/file/d/0B9AYr_oGwl1YRUE5ZXIwN3NVSlk/edit?usp=sharing
Требования:
VarScript 0.5.6
PowerNBT 0.5.3 или новее
Остальные зависимости содержатся в архиве
Содержимое архива закинуть в папку /plugins

Суть игры:
Игрок присоединяется к арене, его задача - убить других игроков с помощью рун. Руны хаотично спавнятся на арене. При убийстве игрока из него выпадает артефакт. Кто его поднимет - получает очки.
За очки можно покупать новые руны или улучшать свои способности.

Список рун:
Fire:
При броске - руна поджигает землю и рядом стоящих игроков
При попадании - поджигает конкретного игрока
При использовании на себя - включает эффект DemonRun​
Water:
При броске - окатывает водой все по радиусу.
Игроки в радиусе получают статус Wet
При использовании на себя - игрок становится мокрым (статус Wet)​
Freeze:
При броске - вокруг руны все замораживается
При использовании - игрок замораживается сам. (статус Freeze)​
Lightning:
При броске - в руну бьет молния.
При использовании на себя - игрок получает щит (статус Shield)​
Curse:
При броске - все в радиусе действия получают статус curse
При использовании на себя - игрок сам получает статус.
Blast:
При броске - руна взрывается, нанося урон по радиусу
При использовании - игрок получает реактивное ускорение​
Astral:
При броске - игрок телепортируется туда, где упала руна.
При попадании в игрока - они поменяются местами.
При использовании - игрок получит статус Astral (невидимый)​
Life:
При использовании - восстанавливает здоровье (эффект Healing)
количество hp зависит от уровня руны.
При попадании в противника - из него высасываются жизни и передаются игроку. Но при промахе - фигвам :p​

Статусы:
Различные статусы могут накладываться на игрока при использовании рун или окружающей среды.
Статус может:
- устанавливаться на какое-то время;
- устанавливаться навсегда;
- применяться моментально (не остается).
Каждый игрок видит свои статусы слева на скорборде.
Все статусы сбрасываются после смерти.

Wet (мокрый) / временный статус:
Игрок получает этот статус, если он в воде, или его намочили с помощью рун.
этот статус снимает эффекты огня и проклятья.
Игрок становится более уязвим ко льду и молнии.
Не может использовать DemonRun
Игрок становится мокрым, если наступил в воду.
Неуязвим к эффекту curse.
Эффект: водяные брызги от игрока.​
Fire (огонь) / временный статус:
Игрок просто горит.
Взрывается при проклятии.
Игрока нельзя заморозить.
Если игрок был мокрый - высохнет.
Если игрок имел curse - он взорвется.
Эффект: игрок горит огнем и получает дамаг.​
DemonRun / временный статус:
Игрок загорается, но не получает урона
Иммунитет к огню.
Взрывается при проклятии.
Теряет статус при намокании или заморозке
Поджигает ближайших противников
Ускоряется передвижение (в зависимости от уровня)
Эффект: лавовые брызги от игрока​
Freeze / временный статус:
Игрок не может двигаться или использовать руны.
Не намокает.
Эффект: ноги игрока застывают в снегу.​
Curse / временный статус:
Ослепляет игрока и снижает скорость перемещения
Игрок уязвим к огню (взорвется)
Статус очищается водой или при ударе молнии
Эффект: фиолетовая аура вокруг игрока.​
Astral / временный статус:
Игрок становится невидимым.
Переходя в астрал, очищает эффект curse
Эффект - еще не придумали ;)​
Shield / временный статус:
Вокруг игрока появляется электростатический щит
Все в радиусе действия щита получают небольшой урон (статус Lightning)
Щит отталкивает от игрока все летящие в него руны. (в обратном направлении)
Эффект - от игрока исходят искры.​
Silent / постоянный статус, не отображается:
Игрок не может использовать руны, подбирать их или выбрасывать.
Игрок не может нанести кому-то урон.
Обычно устанавливается вместе с заморозкой (Freeze)​
Lightning / мгновенный статус:
Мгновенный статус при ударе игрока молнией / током
Наносит урон (в зависимости от уровня)
Если игрок мокрый - урон удваивается.
Если игрок сухой и имеет электростатический щит - он не получает уронЭффект - от игрока при ударе исходят искры.​
Healing / мгновенный статус:
Мгновенно пополняет здоровье игрока
Снимает эффект curse
Эффект - сердечки над головой.

​
Команды:
/darkruna help - Выводит список всех команд с краткими описаниями
/darkruna runa - Посмотреть свои руны, а также руны, которые можно купить
/darkruna runa <Руна> - Покажет информацию о руне
/darkruna runa <Руна> upgrade <Способность> - Прокачивает руну
/darkruna slots - Покажет сколько у Вас слотов и сколько нужно монет для покупки еще одного слота
/darkruna slots buy - Купить слот
/darkruna list - Отобразит список всех арен
/darkruna money - Отобразит количество денег
/darkruna join <Арена> - Присоединиться к арене. Пермит: darkruna.join.<арена>
/darkruna leave - Выйти из текущей арены
/darkruna start <Арена> - запустить арену. Пермит: darkruna.start.<арена>
/darkruna stop <Арена> - остановит арену. Пермит: darkruna.stop.<арена>
/darkruna create <Параметры> - создаст арену. Пермит: darkruna.create
Пример: /darkruna create Name=MyArena AutoStart
Параметры:
Name - Имя арены. Обязательный параметр.
AutoStart - запускать ли арену автоматически при старте\релоуде сервера
AX, AY, AZ, BX, BY, BZ, World - Координаты арены.
Координаты можно не указывать, если выделить арену с помощью WorldEdit​
/darkruna kick <Игрок> - кикнет игрока из игры. Пермит: darkruna.kick.<арена>
Алиас для команды /darkruna - /dr
​
Прекрасный плагин, продолжайте в том же духе:coffee:
 
Начну с того, что я не осилил прочесtь все 11 страниц, информации слишком много(оставил на завтра), и ничего не понятно. Хотел подключить модуль Helljump, понять как оно работает. Делал по этой инструкции.
/> @FirstArena PRINT - выдает Null

Ну и лог 1.6.4
2014-01-23 23:34:29 [INFO] NullPointerException at [1:42]
PLAYERS ME 4 SPHERE SCAN NULL @FirstArena:start
>> {} at [1:42] :start for Program{CraftBlock{chunk=CraftChunk{x=-10z=6},x=-154,y=73,z=101,type=COMMAND,data=1}}
2014-01-23 23:34:29 [SEVERE] me.dpohvar.varscript.vs.exception.ThreadTrace: NullPointerException at [1:42]
PLAYERS ME 4 SPHERE SCAN NULL @FirstArenaВ§6:startВ§r
2014-01-23 23:34:29 [SEVERE] at me.dpohvar.varscript.vs.Thread.runFunctions(Thread.java:143)
2014-01-23 23:34:29 [SEVERE] at me.dpohvar.varscript.vs.ThreadRunner.runThreads(ThreadRunner.java:33)
2014-01-23 23:34:29 [SEVERE] at me.dpohvar.varscript.command.CommandRunVS.onCommand(CommandRunVS.java:38)
2014-01-23 23:34:29 [SEVERE] at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
2014-01-23 23:34:29 [SEVERE] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:192)
2014-01-23 23:34:29 [SEVERE] at net.minecraft.server.v1_6_R3.TileEntityCommand.a(TileEntityCommand.java:101)
2014-01-23 23:34:29 [SEVERE] at net.minecraft.server.v1_6_R3.BlockCommand.a(BlockCommand.java:47)
2014-01-23 23:34:29 [SEVERE] at net.minecraft.server.v1_6_R3.WorldServer.a(WorldServer.java:571)
2014-01-23 23:34:29 [SEVERE] at net.minecraft.server.v1_6_R3.WorldServer.doTick(WorldServer.java:207)
2014-01-23 23:34:29 [SEVERE] at net.minecraft.server.v1_6_R3.MinecraftServer.t(MinecraftServer.java:565)
2014-01-23 23:34:29 [SEVERE] at net.minecraft.server.v1_6_R3.DedicatedServer.t(DedicatedServer.java:240)
2014-01-23 23:34:29 [SEVERE] at net.minecraft.server.v1_6_R3.MinecraftServer.s(MinecraftServer.java:483)
2014-01-23 23:34:29 [SEVERE] at net.minecraft.server.v1_6_R3.MinecraftServer.run(MinecraftServer.java:415)
2014-01-23 23:34:29 [SEVERE] at net.minecraft.server.v1_6_R3.ThreadServerApplication.run(SourceFile:583)
2014-01-23 23:34:29 [SEVERE] Caused by: me.dpohvar.varscript.vs.exception.CommandException: NullPointerException at [1:42]
PLAYERS ME 4 SPHERE SCAN NULL @FirstArenaВ§6:startВ§r
2014-01-23 23:34:29 [SEVERE] at me.dpohvar.varscript.vs.CommandDebug.runWorker(CommandDebug.java:29)
2014-01-23 23:34:29 [SEVERE] at me.dpohvar.varscript.vs.Function.runCommands(Function.java:75)
2014-01-23 23:34:29 [SEVERE] at me.dpohvar.varscript.vs.Context.runCommands(Context.java:90)
2014-01-23 23:34:29 [SEVERE] at me.dpohvar.varscript.vs.Thread.runFunctions(Thread.java:134)
2014-01-23 23:34:29 [SEVERE] ... 13 more
2014-01-23 23:34:29 [SEVERE] Caused by: java.lang.NullPointerException
2014-01-23 23:34:29 [SEVERE] at me.dpohvar.varscript.vs.init.InitDynamic$11.run(InitDynamic.java:302)
2014-01-23 23:34:29 [SEVERE] at me.dpohvar.varscript.vs.init.InitDynamic$11.run(InitDynamic.java:298)
2014-01-23 23:34:29 [SEVERE] at me.dpohvar.varscript.vs.CommandDebug.runWorker(CommandDebug.java:25)
2014-01-23 23:34:29 [SEVERE] ... 16 more

Даже не знаю с чего начать в изучении этого чуда.
 
Начну с того, что я не осилил прочесtь все 11 страниц, информации слишком много(оставил на завтра), и ничего не понятно. Хотел подключить модуль Helljump, понять как оно работает. Делал по этой инструкции.
/> @FirstArena PRINT - выдает Null
Для начала нужно убедиться, что включен чедулер
/scheduler on
и включена сама задача
/task FirstArena on
теперь можно попробовать перезагрузить задачу:
/task FirstArena reload
смотрим в консоль на наличие ошибок.
Задача должна была создать переменную FirstArena, которая содержит нужную арену.
/> @FirstArena PRINT
Если и теперь она выдает NULL - значит ошибка в задаче.

PS: Этот модуль тестировался с VarScript 0.5.6 и 0.5.7, PowerNBT 0.5.4
не тестировал с PowerNBT 0.6.x
 
Для начала нужно убедиться...

VarScript 0.5.7

В туторе было написано создать таск фаил по пути plugins/VarScript/scripts/vs/tasks/FirstArena.yml, а необходимо было plugins/VarScript/tasks/FirstArena.yml
Все отлично работает =)
 
Последнее редактирование:
А где можно взять item script
Я его забросил. Он был написан на VarScript синтаксисе, у которого сейчас не работают пару функций.
Может быть, позже переделаю его на Groovy.
 
А что насчет дальнейшей пазработки плагина? И что вы думаете о перспективности рпг сервера со своим клиентом, самописными плагинами, var scriptom и др. Bukkit плагинами, модами, сайтом, и рпг сюжетом, созданном с помощью мода custom npc? Я почти все сделал, но сомневаюсь в перспективности в материальном плане. Сам я программист неплохой, есть команда.
 
RunFMe, мы все видели "никакие" сервера с точки зрения продуманности, но при этом заполненные "под завязку" и наоборот - сервера очень хорошо продуманные с уникальными самописными плагинами и т.п., но... без игроков.
Так что главное не только тех оснащение, но и умение поддерживать интерес людей к серверу.
 
RunFMe, мы все видели "никакие" сервера с точки зрения продуманности, но при этом заполненные "под завязку" и наоборот - сервера очень хорошо продуманные с уникальными самописными плагинами и т.п., но... без игроков.
Так что главное не только тех оснащение, но и умение поддерживать интерес людей к серверу.
Я имею ввиду то, насколько живым майн остается на данный момент, играют ли в него нормальные люди или уже все. Дело в том, что раньше движения в этой области было много, сейчас же про майн вспоминают только школьники(агро) да программисты, типа вас. Но я в этом не уверен, поэтому и спросил так ли это. Сейчас думаю запускать проект или нет.
 
DPOH-VAR, Ты богоподобен.
Либо я слепой либо тут не написано.

Никак не пойму как ставить модули и движки да вобще всё.
Ктонибудь объясните как с нуля поставить Hell Jump очень хочу на свой сервер!
 
Мда... Этот плагин гениален. Он позволяет делать плагины за несколько секунд... Ну, кроме нереально сложных. А плагин не популярен только, лишь потому что школо агро не хочет разбираться даже в такой простоте. Автор молодец. Продолжай в том же духе. А еще, я думаю, можно сделать файл с описанием всех функций(команд), чтобы это была просто стена текста с таким же описанием как в майнкрафте, но в текстовике.
 
Последнее редактирование:
Мда... Этот плагин гениален. Он позволяет делать плагины за несколько секунд... Ну, кроме нереально сложных. А плагин не популярен только, лишь потому что школо агро не хочет разбираться даже в такой простоте. Автор молодец. Продолжай в том же духе. А еще, я думаю, можно сделать файл с описанием всех функций(команд), чтобы это была просто стена текста с таким же описанием как в майнкрафте, но в текстовике.
Я уже хочу отказаться от всех варскриптовых команд. Оставляю только для совместимости старых скриптов и модулей.
Этих команд всего 500-700. Тут нет методов для работы с пакетами, нельзя использовать новые классы (добавленные в 1.7), а кое-какие команды вообще приходится каждый раз переделывать от версии в версии.
Поэтому призываю всех использовать Groovy!
Тут нет стековой системы, а вся документация есть на jd.bukkit.org
Метаклассы позволяют упростить команды:
me.setHealth(10) как me.hp = 10
me.teleport(loc) как me >> loc
и т.д.

Функции из метаклассов описаны тут.
Для новичков это будет очень сложно. Но можно все решить с помощью хороших подробных туториалов.
 
@DPOH-VAR, Привет.
Тут ты писал вот что -
ykaT9HJ_RQ4.jpg

А куда теперь закидывать Hell Jump?
Папка Modules не создаётся, может надо её создать?
 
Назад
Верх