- Баллы
- 123
- Имя в Minecraft
- Artarious
А на 1.7.2/4 всё действует?Надо создать. С тебя лайк.
Не могли бы скинуть папку VarScript с Hell Jump
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
А на 1.7.2/4 всё действует?Надо создать. С тебя лайк.
К сожалению HellJump не работает на 1.7. Только на 1.5(Со старой версией PowerNBT).А на 1.7.2/4 всё действует?
Не могли бы скинуть папку VarScript с Hell Jump
/> @Helljump PRINT
/> @PlayerSaver PRINT
Тебе уже сказали что не работает на 1.7.Помогите!
Когда проверяю
Пишет null!!!Код:/> @Helljump PRINT /> @PlayerSaver PRINT
Versions:
VarScript 0.5.4.
PowerNBT v0.5.1 beta
-------------------
Helljump кинул в plugins/VarScript/scripts/vs/modules
PlayerSaver кинул в plugins/VarScript/scripts/vs/modules
FirstArena кинул в plugins/VarScript/tasks
----
В чём дело?
Может кто-то сделает туториал(видио урок) по Helljump?
def server = BukkitHTTPServer.newServer([
host: "0.0.0.0", // рабочий адрес http сервера])
port: 8011, // http порт
pathStatic: "webserver/static", // статичный контент
pathExecute: "webserver/execute", // обработчики, скрипты
// добавить HTTP заголовок в ответ
exchange.header("Expires","Tue, 31 Jan 2012 15:02:53 GMT")
// установить статус ответа
exchange.setStatus(200)
// отправить статус и заголовки
exchange.sendHeaders()
// отправить чистый текст
exchange.send("text")
// отправить массив байт
exchange.send( new File("filename.txt") )
// распарсить object как строку JSON и отправить клиенту
exchange.sendJson( object )
// установить куки
exchange.setCookie("key", "val", )
// установить куки со сроком годности
exchange.setCookie("key", "val", new Date() )
// закрыть соединение
exchange.close()
// исполнить файл и вернуть результат
def result = exchange.include("filename.js")
// прочитать JSON-объект из тела запроса
def json = excnange.getJson()
// получить JSON-объект из строки
def json = excnange.getJson('{"foo":"bar"}')
include "filename.groovy" // подключить файл
setStatus 404 // установить статус ответа
header "Content-Type", "text/html" // добавить заголовок
sendJson([a:1, b:2]) // отправить объект как JSON строку
send "text" // просто отослать текст
send new File("filename") // отправить файл
setCookie "key", "value", new Date() + 10 // установить куки на 10 дней
getJson() // прочитать объект JSON из тела запроса
import fr.xephi.authme.api.API
if (method != "POST") return "POST only"
switch (query.action) {
case "logout":
session.player = null
case "check":
return asJson([player: session.player])
case "login":
def auth = API.checkPassword query.login, query.password
if (auth) session.player = query.login
else session.player = null
return asJson([result: auth, player: session.player])
}
А как же HellJump на Groovy? Работа идёт?Модуль BHTTPServer
это небольшой HTTP сервер, написанный на груви
простое и удобное решение для создания веб-интерфейса с использованием AJAX
Посмотреть вложение 18449
Зависимости:
Установка:
- VarScript 0.5.7 or или более поздний o.5.x
- Java 7 или Java 8 с опцией -noverify
Использование:
- Установить VarScript
- Установить Groovy:
- Создаем директорию ./lib в корне сервера
- Скачиваем Groovy (binary zip)
- Находим groovy-all-*-indy.jar и кладем его в директорию ./lib
- Запустить сервер
- Дождаться сообщения:
[VarScript] load Groovy Scripting Engine 2.0
lang: Groovy 2.2.0-rc-3
name: groovy,Groovy
extension: groovy- Остановить сервер
- Установить модуль BHTTPServer:
- Скачиваем BHTTPServer.groovy
- Кладем его в ./plugins/VarScript/scripts/Groovy/modules/
- Открываем в блокноте и изменяем конфигурацию (в конце файла):
- Запустить сервер и дождаться сообщения:
[VarScript] [Groovy] <#> module BHTTPServer loaded.- Создать index.html в static директории
- Готово: http://localhost:8011
pathStatic - это директория с статичными страницами и файлами. Там нужно располагать html, js, и другие файлы
pathExecute - директория со скриптами
Для написания скриптов можно использовать groovy, javascript или любой другой язык, совместимый с варскриптом.
Запрос вида http://localhost:8011/login попытается запустить скрипт ./webserver/execute/login.js или ./webserver/execute/login.groovy
В скриптах доступны переменные:
method - метод. строка: "GET", "POST", "OPTIONS" и т.д.
query - мапа <string, string> содержащая запрос в ссылке
cookie - мапа <string, string> содержащая куки
session - мапа <string,?> содержит переменные текущей сессии
exchange - интерфейс для работы с http-запросом и ответом
Также доступен весь Bukkit API
Можно добавить свои jar библиотеки или классы в директорию ./lib
если скрипт вернет строку или файл - от будет отправлен клиентуJavaScript:// добавить HTTP заголовок в ответ exchange.header("Expires","Tue, 31 Jan 2012 15:02:53 GMT") // установить статус ответа exchange.setStatus(200) // отправить статус и заголовки exchange.sendHeaders() // отправить чистый текст exchange.send("text") // отправить массив байт exchange.send( new File("filename.txt") ) // распарсить object как строку JSON и отправить клиенту exchange.sendJson( object ) // установить куки exchange.setCookie("key", "val", ) // установить куки со сроком годности exchange.setCookie("key", "val", new Date() ) // закрыть соединение exchange.close() // исполнить файл и вернуть результат def result = exchange.include("filename.js") // прочитать JSON-объект из тела запроса def json = excnange.getJson() // получить JSON-объект из строки def json = excnange.getJson('{"foo":"bar"}')
если скрипт вернет true - соединение останется открытым
Для языка groovy доступны следующие алиасы:
Пример: login.groovy: Позволяет авторизоваться на сайте при помощи AuthMeКод:include "filename.groovy" // подключить файл setStatus 404 // установить статус ответа header "Content-Type", "text/html" // добавить заголовок sendJson([a:1, b:2]) // отправить объект как JSON строку send "text" // просто отослать текст send new File("filename") // отправить файл setCookie "key", "value", new Date() + 10 // установить куки на 10 дней getJson() // прочитать объект JSON из тела запроса
Скачать этот пример (.html-ки и скрипты на groovy. он на скриншоте)Код:import fr.xephi.authme.api.API if (method != "POST") return "POST only" switch (query.action) { case "logout": session.player = null case "check": return asJson([player: session.player]) case "login": def auth = API.checkPassword query.login, query.password if (auth) session.player = query.login else session.player = null return asJson([result: auth, player: session.player]) }
он давно готов, но без командной оболочки.А как же HellJump на Groovy? Работа идёт?
и не будет.Хочу вики(он давно готов, но без командной оболочки.
http://exe.on.ufanet.ru/varscript/Helljump.groovy
Создание арены:
1) построить ее
2) встать в центр и ввести
/g>> loc = me.location
3) ввести
/g>> arena = new helljump_0_2.HellJumpArena("arena-name",loc,10)
тут "arena-name" - название арены
10 - радиус от центра
Готово!
Теперь чтобы начать играть со всеми, кто на сервере:
/g>> arena.start(Server.onlinePlayers as List)
Чтобы взять в игру только игроков только рядом с собой в радиусе 5 пишем
/g>> arena.start( Server.onlinePlayers.findAll {it.location.distance(me.location)<5})
Экстренная остановка текущей игры:
/g>> arena.stop()
Если арена надоела, можно ее удалить (завершить обработку)
/g>> arena.remove()
VarScript 0.6.1Эта версия плагина работает только со скриптодвижками. Благодаря тому, что больше не нужно изобретать велосипед, размер jarки уменьшился с 1.2 мб до 46 кб.
Загрузчик классов
Все библиотеки и классы из директории ./lib теперь грузятся не отдельным загрузчиком, а тем же, который грузит плагины.
Поддержка синтаксиса
Вот несколько движков, с которыми я успел протестировать варскрипт:
python - jython 2.7.0 - OK.
ECMAScript - Mozilla Rhino 1.7 release 3 - OK
php - Caucho Quercus Script Engine 4.0.37 - не умеет ставить переменные
ruby - JSR 223 JRuby Engine 1.7.6 - не умеет читать и ставить переменные
Groovy - Groovy Scripting Engine 2.0 - OK
Scala - Scala Interpreter 1.0 - только для скриптов и библиотек
lua - Luaj Luaj-jse 3.0-beta2 - не читает и не ставит переменные
ECMAScript - Oracle Nashorn 1.8.0 - прячет локальные переменные
ECMAScript - Google V8 3.19.14 - не читает и не ставит переменные
Таким образом лучше всего lдля работы подходят groovy, python и javascript
Рабочее пространство
При исполнении команды игрок получает свое рабочее пространство. В нем он может хранить переменные, исполнять код, регистрировать события и таймеры. В любой момент его можно отключить, удалить или сменить. При отключении - останавливаются все таймеры и зарегистрированные события. При удалении - пропадают все сохраненные данные.
Пример:
/workspace set w1 - установлено рабочее пространство w1
/js> foo = "bar"
/js> print(foo) - выведет bar
/workspace set w2 - установлено пространство w2
/js> print(foo) - ошибка, переменная foo не определена
/js> foo = "baz"
/js> print(foo) - выведет baz
/workspace set w1 - вернулись на w1
/js> print(foo) - выведет bar
Скрипты
Все скрипты располагаются в ./plugins/VarScript/scripts/
Чтобы исполнить скрипт, нужно ввести имя файла полностью.
/>> myScript.js
Язык определяется расширением файла
Переменные
Доступные переменные, в порядке приоритета:
me - как и раньше
workspace - текущее рабочее пространство
server - сервер
pluginManager - менеджер плагинов
classLoader - загрузчик классов
server - сервер
переменные рабочего пространства
названия плагинов
общие пользовательские константы
пользовательские константы для конкретного языка (планируется)
имена игроков онлайн
Модули
А нету ихи не будет.
Вместо модуля нужно создавать заранее рабочее пространство:
/plugins/VarScript/workspace/testWorkspace/TestWorkspace.js
Скрипт загрузится автоматически при старте сервера
имя папки и скрипта должны совпадать (но имя скрипта обязательно с прописной буквы в юниксах)
Модуль может состоять из нескольких файлов.
Чтобы подключить другой файл, можно использовать команду
workspace.include("NextFile.groovy")
Язык скрипта может не совпадать с текущим.
Старые модули не сложно переделывать под новый формат.
Команды
/engine - список доступных скриптодвижков
/engine [name] - информация о конкретном движке
/workspace - текущее рабочее пространство
/workspace list - просмотр всех загруженных
/workspace set [workspace] <player> - сменить себе или другому игроку
/workspace set-default [workspace] <player> - задать по умолчанию
/workspace get <player> - посмотреть рабочее пр-во у игрока
/workspace stop <workspace> - остановить пр-во (по имени или свое)
/workspace unload <workspace> - выгрузить пр-во
/workspace reload <workspace> - перезагрузить пр-во
/workspace load <workspace> - загрузить принудительно
/workspace unload-all - выгрузить пр-во
/workspace reload-all - перезагрузить пр-во
/workspace load-all - загрузить все неподгруженные пр-ва
/>> [script-file] - запустить скрипт в файле
/> [language] [lang-code] - исполнить команду на каком-либо языке
/g> [groovy-code] - исполнить команду на груви
/js> [javascript-code] - исполнить команду на js
/py> [python-code] - исполнить команду на питоне
Зависимости
Одно рабочее пространство может зависеть от другого.
Устанавливается зависимость так: Foo.js (foo зависит от bar)
bar = workspace.require("bar")
В этом случае произойдет загрузка пространства bar. В случае ошибки модуль foo тоже не загрузится.
если зависимость не жесткая, можно сделать так:
bar = workspace.depend("bar")
Теперь при ошибке bar просто будет равен null.
На самом деле эта часть еще нуждается в доработке
Регистрация событий и таймеров
Примеры регистрации событий на js и groovy
JavaScript:var PlayerInteractEvent = org.bukkit.event.player.PlayerInteractEvent // регистрация события var handlerId = workspace.addHandler(function(event){ // обработка события event.getPlayer().sendMessage("Interact") },PlayerInteractEvent) // остановка события workspace.stopHandler(handlerId)Код:import org.bukkit.event.player.PlayerInteractEvent def handlerId = workspace.addHandler( { event -> event.player.sendMessage "Interact" } ,PlayerInteractEvent) // остановка события workspace.stopHandler handlerIdPython:import org.bukkit.event.player.PlayerMoveEvent PlayerMoveEvent=org.bukkit.event.player.PlayerMoveEvent # регистрация handlerId=workspace.addHandler(lambda event: event.getPlayer().sendMessage("move") ,PlayerMoveEvent) # остановка workspace.stopHandler(handlerId)
Регистрация периодичного таймера
Регистрация задержкиJavaScript:var period = 20 // период 20 тиков var timerId = workspace.addInterval(function(){ print("It's time!") }, period) // остановка workspace.stopInterval(timerId)
Python:delay=100 # задержка timerId=workspace.addTimeout(lambda: server.broadcastMessage("5 seconds left") ,delay) # и остановка workspace.stopTimeout(timerId)
Мне кажется сейчас VarScript уже может обойтись вики: нужно несколько примеров и.... описание Bukkit APIХочу вики(

1) Да, мой синтаксис varscript был велосипедом. Однако некоторым пользователям он показался удобнее, чем js или груви. В то время я не знал о существовании стандарта JSR-223, да и сейчас о нем мало кто знает, даже из профессиональных программистов. Сейчас я отказываюсь от VS-синтаксиса в пользу развития модулей на уже существующих языках.Какой же большой и сложный велосипед, который по сути является игрушкой для собственного самообучения.
Смысл всего этого?
Смысл всего это развития, появление, отмирание возможностей, функциональностей, если всё это по сути используется только одним человеком, автором?
Это плагин не для широкой публики: документации нет, то, что есть - недостаточно, как этим пользоваться нормальному человеку не понятно.
Может быть стоит попробовать в сторону для народа? Чтобы этим начали в большем количестве пользоваться?
Мало того, что придумал свой собственный синтаксис (я же не ошибаюсь?), добавил какие-то извращения, чтобы работать с этим на js, потом ещё добавил поддержку других языков(не ошибаюсь?)
А на какой весь этот винегред обычному поцанёнку?
Обрезать кучу ненужного, оставить какие-нить плюшки-конструкторы, чтобы любой желающий смог собрать свою мини арену с супер-способностями - вот секрет успеха, это привлечёт почёт, большее уважение и известность, а так же возможно и появятся другие заинтересованные люди, кто захочет работать над твоим проектом.
А пока, это игра в одни ворота.
Кучу плюшей и модулей выкладываешь ты, но вот чётко структурированной документации нет, хорошего исходного кода с подробными комментариями нет. Хорошего обоснования идеи нет, как и чёткого набора описания плюсов и минусов, только на собственном опыте и в ходе разборок можно с этим разбираться.Думаю, что под 0.6 стоит завести отдельную тему, т.к. плагины многим отличаются.1) Да, мой синтаксис varscript был велосипедом. Однако некоторым пользователям он показался удобнее, чем js или груви. В то время я не знал о существовании стандарта JSR-223, да и сейчас о нем мало кто знает, даже из профессиональных программистов. Сейчас я отказываюсь от VS-синтаксиса в пользу развития модулей на уже существующих языках.
2) Плагин используется только мной? Не смешите. Я согласен, что плагин не для широкой публики. Основное его предназначение - написание скриптов. Хотите писать скрипты - учите язык.
Изучить ECMAScript можно с нуля за 3-5 дней, если сильно хотеть. Для тех, кто знает хоть один ЯП - проблем не будет.
3) В этой теме я выкладываю кучу плюшек(модулей) с аренами, мини-играми и прочими ништяками. Если бы я делал это только для себя, не было бы смысла публиковать исходники.
Я постепенно буду переписывать старые модули под 0.6 (во многих скриптах нужно лишь пару строчек заменить). Если нужен какой-то скрипт - пишите, поставлю в приоритет.
этим плагином можно всё сделать. вот сам и делай.Можно ли на этом плагин сделать аномалии как в сталкере? А именно: игрок наступает на какой-нибудь блок, сверху блока появляется огонь, как от зажигалки, или же простой урон.
Судя по документации, я далеко пойдуэтим плагином можно всё сделать. вот сам и делай.
