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

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

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

  1. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Создать задачу, которая исполняется, например, с периодом в 20 тиков\\
    Она сканирует всех игроков.\\
    для каждого игрока:\\
    {\\
    если у него стекло на голове\\
    и у этого стекла имя = "скафандр"\\
    установить кол-во пузырьков в максимум\\
    }\\
    Можно не беспокоиться о быстродействии и сделать период даже в 1 тик. Но это лишнее. Пойдет и 20.\\
     
    ITrAnEI нравится это.
  2. stew

    stew Старожил

    Баллы:
    103
    Skype:
    antonov330
    Имя в Minecraft:
    StewMan
    ДОБАВЬ В СКАЙП..
    блин.. забыл капс вырубить
     
  3. stew

    stew Старожил

    Баллы:
    103
    Skype:
    antonov330
    Имя в Minecraft:
    StewMan
    когда будет порт на 1,4,6?
     
    I-Am-Black-Overlord и Сникерсни нравится это.
  4. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    В конце этой недели возьмусь.
    Сейчас хвосты надо сдавать, а я бездельник, тунеядец и пофигист :D
    Если не терпится, то сразу как сяду за него, выпущу фикс (версию 0.4.0.1) - для работы на новом CB. функционал отличаться не будет.
    А вообще надеюсь в этом году выпустить полноценный 0.4.1 (с блекджеком и nbt-редактором), где-нибудь 31го числа.. В крайнем случае он будет после новогодних праздников.
     
    ITrAnEI и stew нравится это.
  5. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Как и обещал.
    Вот ссылка
    https://docs.google.com/open?id=0B50fBoyxANzsUzJTaS1kQnhIaHM
    Версия 0.4.1
    Точнее это порт старой версии на CB 1.4.6
    Я решил не заморачиваться, и просто удалил функции из за которых плагин не запускался.
    • Не работают команды с предметами (/vsitemsave /vsitemload /vsitem />fi и т.д.)
    • Отключен встроенный NBT редактор
    • Отключены функции переименования предметов, изменения книг, черепов.
    Остальной функционал в порядке.

    Дальнейшие планы:
    Глобальное обновление для версий 0.5.х
    Как всегда, меня не устраивает текущий вариант, если можно сделать намного лучше :cool:
    Будет общий Runtime для всех программ на сервере, с постраничным выделением памяти
    Пытаюсь сделать еще строенный оптимизатор потребляемой памяти (что-то вроде garbage collection)
    Из новых фишек будет возможность передавать объекты между программами, делать вызов любых процедур из общей памяти.
    Переделаю конвертер типов.
    Много фишек в направлении RPG
    API
    Будут закрытые исходники :D
    И еще может сменю название.
     
    stew и ITrAnEI нравится это.
  6. MYXOMOPX

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

    Баллы:
    78
    Skype:
    MYXOMOPX
    Имя в Minecraft:
    MYXOMOPX
    Скрипт для генерации островов: http://pastebin.com/yvGVnXjq
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]
    Как использовать:
    1)Создаем файл plugins/varscript/scripts/island.var и копируем в него текст с pastebin
    2)Заходим в игру, строим небольшую площадку в воздухе.
    3)Берем блок травы в первый слот, блок земли во второй слот и камень в третий.
    4)Пишем />>f island
    5)Нажимаем правой кнопкой мыши по нашей площадке.
    6)Нажимаем левой кнопкой мыши по воздуху.
    7)Остров готов!
     
    Hilgert, Hephest, ITrAnEI и 3 другим нравится это.
  7. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    MYXOMOPX, я не устаю удивляться!!!!
     
    Hilgert и ITrAnEI нравится это.
  8. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Добавлю..
    Во первых:
    Генерируются только летающие острова. При попытке генерировать остров в воде - скорее всего он уйдет глубоко под землю и выскочит корнем с высоты 256 блоков. При попытке сделать такой невысоко над землей - возможно будет тот же эффект.
    Во вторых:
    Можно изменить материал для построения острова.
    В первом слоте инвентаря - верхний слой острова, во втором - промежуточный (глубина 2-3 блока) и в третьем слоте - основной материал. Ледяные острова или из песка и песчаника - запросто!
    И на последок:
    Многие любят говорить о "Это какая же аццкая нагрузка на сервер!"...
    Генерировать остров скриптом получается в 10-50 раз быстрее, чем скопировать его же ворлдедитом.
    Нам удалось сделать остров размером 200x200x500. Примерно секунд за 30 он был готов :). Несколько раз обошел циклично высоту карты. Острова, которые на скриншотах, были сделаны быстрее, чем за секунду.
     
    I-Am-Black-Overlord и ITrAnEI нравится это.
  9. stew

    stew Старожил

    Баллы:
    103
    Skype:
    antonov330
    Имя в Minecraft:
    StewMan
    VARSCRIPT: IllegalArgumentException No enum constant me.dpohvar.varscript.utils.event.BukkitListenerFormer.EventType.PlayerInteract
    а я только пытался написать >>f island, всё по инструкции
     
  10. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    версию сервера и плагина плз.
    скрипт для varscript 4.1
    для 4.0 немного по другому:
    нужно
    REG(PlayerInteract)
    заменить на
    REG(INT) или REG(INTERACT)
     
  11. stew

    stew Старожил

    Баллы:
    103
    Skype:
    antonov330
    Имя в Minecraft:
    StewMan
    1.4.5 vs4.0.1
     
  12. stew

    stew Старожил

    Баллы:
    103
    Skype:
    antonov330
    Имя в Minecraft:
    StewMan
    заменил, теперь VARSCRIPT: IllegalArgumentException No enum constant me.dpohvar.varscript.utils.event.BukkitListenerFormer.EventType.Interact
     
  13. MYXOMOPX

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

    Баллы:
    78
    Skype:
    MYXOMOPX
    Имя в Minecraft:
    MYXOMOPX
    Вот версия для Varscript 4.01 http://pastebin.com/vLXfA107
     
  14. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Погорячился я насчет версии 0.5
    Возможно заброшу разработку Varscript в пользу этого.
     
  15. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Скоро будут незначительные изменения в синтаксисе.
    Вот нынешняя идея:

    1 Локальная среда исполнения для каждого игрока.​
    Переменные будут сохраняться в среде, причем независимо от языка (Varscript, JavaScript или любой другой)​
    т.е. можно будет прописать:​
    /> 10:20:30 "Zombie" SPAWNMOB %mob
    /js mob.setHealth(15);

    2 ООП + прототипное наследование​

    В основе языка лежит стек данных, очередь команд и набор переменных. Достаточно сложно будет добавить объекты в его конструкцию. Пример под спойлером
    Глупо будет применять такие конструкции для исполнения в чате. Однако в связи с тем, что среда исполнения сохраняется (у нас есть доступ к объекту в любое время) - можно использовать объекты, построенные ранее, например вызовом скрипта из файла или любого объекта, способного содержать скрипт.
    Вот наброски:
    Код выбирает некоторую платформу из блоков, затем разрушает ее.
    Код:
    Platform: {
        Blocks: <ARRAY
        Destroy: {
            @Blocks { 0 SETBLOCK DROP } EACH
        }
        THIS
    }
    ME 5 SPHERE Platform %pl1
    ME 6 SPHERE Platform %pl2
    @pl1.Blocks %b1
    pl1.Destroy
    1 WAIT
    pl2.Destroy
    Platform: { ... } - это конструктор платформы. Точнее, полю "Platform" присваивается новая функция-конструктор
    Blocks: <ARRAY - записать в поле Blocks текущего объекта значение из стека, преобразованное в массив
    Destroy: { ... } - записать в поле Destroy функцию, которая разрушает блоки
    THIS - вернуть объект (а не просто выполнить функцию)
    ME 5 SPHERE Platform %pl1 - берется сфера из блоков вокруг игрока (радиус 5 блоков), затем создается объект-платформа и записывается в переменную "pl1". Т.к. поля pl1 нет у данного объекта, значение записывается в глобальную область видимости, доступную всем скриптам и языкам у данного игрока/того кто вызвал код.
    ME 5 SPHERE Platform %pl2 - аналогично, платформа радиусом в 6 блоков записывается в "pl2"
    @pl1.Blocks %b1 - поле "Blocks" объекта pl1 записывается в переменную b1
    pl1.Destroy - вызывается метод Destroy объекта pl1 (блоки платформы уничтожаются)
    1 WAIT - ждем секунду
    pl2.Destroy - уничтожаем вторую платформу
    А суть всё та же:
    val %var - запись в переменную (или поле)
    @var - чтение переменной
    Насчет наследования - пока не решил. И надо ли оно?
     
  16. _DokeR_

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

    Баллы:
    103
    Skype:
    gta-ilya
    Имя в Minecraft:
    SuperDoker
    Плагин класс
     
  17. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Поделись навыками! :) Вчера полдня бился: обрабатываю большую территорию.
    В цикле надо пройтись по площади 1000х1000 -- все нормально, обрабатывается за 30 секунд. Правда игроков выкидывает с сервера ;)

    Тем же циклом (там частично оптимизировано - блоки сгруппированы по чанкам, пока чанк не обработается к другим блокам не перехожу) охватываю территорию 2000х2000 - всё. Вешалка. Сервер виснет минут на 10, после чего переполнение памяти.

    Сейчас вот думаю разбиваь на группы, скажем по сотне чанков и обрабатывать последовательно. Но.. как-это ненормально.

    Как у тебя обрабатываются массивы чанков? Есть какой-то "секрет"?
     
  18. Автор темы
    DPOH-VAR

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

    Баллы:
    153
    Skype:
    dpohvar
    Сейчас у меня дела обстоят так:
    Цикл проходит по чанкам в основном потоке. Примерно через каждые 2 секунды выполнение останавливается, проходит 10-20 серверных тиков, затем обработка возобновляется. Этот перерыв нужен, чтоб игроки не повылетали с сервера и не очень-то замечали лаги. Можно увеличить время исполнения цикла до 5 секунд - но лаги будет заметно. Больше 15 секунд - грозит вылетом игроков.
    Желательно максимально упростить код в цикле. Т.е. не вычислять внутри, какой ID блока нужен, а сразу брать из уже готового массива.

    Раньше я использовал асинхронный вариант - т.е. менял блоки в параллельном потоке. Перерыв не требовался, но был огромный риск получить ConcurrentModificationException.

    Будет беда, если недалеко находятся игроки) Поэтому ради оптимизации я с помощью скрипта убираю их с территории. Вся проблема в том, что сервер генерирует огромную кучу пакетов (изменения для каждого блока) и передает игрокам. Была идея на самом деле, как сделать замену блока без перессылки пакета (через рефлексии), но провалилась благодаря постоянным крашам буккита.
     
  19. fromgate

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

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Понятно. Я вот тоже к этому прихожу. С одной стороны задержка увеличит время выполнения, с другой стороны, чанки которые надо выгрузить - выгрузятся и не будет переполнения памяти.
     
  20. stew

    stew Старожил

    Баллы:
    103
    Skype:
    antonov330
    Имя в Minecraft:
    StewMan
    что с 1.4.7?
     

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