My World Edit Scripts

Тема в разделе "Разработка", создана пользователем Legolas, 21 ноя 2013.

  1. Legolas

    Legolas
    Градостроитель
    2.552
    3.055
    483
    My World Edit Scripts - проект Harch'a, члена Квадратной Команды.
    [​IMG]

    Он разработал 4 скрипта для известного мода/плагина WorldEdit, которые добавляют в него новые возможности. А именно:
    • AdvancedReplace - расширенная замена. Позволяет заменять один или все блоки на массу разных других блоков, с указыванием процентного соотношения.
    • AdvancedOverlay - расширенное покрытие. Позволяет покрыть блоки в выделенной зоне массой разных других блоков, с указыванием процентного соотношения.
    • SkyGridGen - генератор летающих островов.
    • UltraCommandBlock - Глобальный скрипт для работы с командными блоками. Как дополнительный бонус включает удобное стакование.

    Подробнее о скриптах: http://st.minecraft-moscow.com/my-world-edit-scripts/

    Работают с любым типом выделения.
    Функционал соответствует командам из WE (без Advanced), но есть дополнительная возможно выполнять это с неким процентным соотношением (как у команды set в стандартном WE). Так же, так как строка чата minecraftограничена в количестве символов, есть возможно чтения "маски" процентного соотношения из командного блока. Для этого необходимо внутрь выделения поместить командный блок и написать в него следующий текст:
    MASK:%mask%
    Где %mask% и есть наша маска.
    Формат команды:
    //cs AdvancedReplace <block_id> <mask>
    //cs AdvancedOverlay <block_id> <mask>
    Маска пишется стандартно, как у команды set в WE.
    Примеры использования команды:
    Без командного блока: //cs AdvancedReplace 35 50%35:1,20%35:3,30%35:4
    Или с командным блоком: //csAdvancedReplace 35 /getmask
    В командном блоке внутри выделения написано следующее:
    MASK:50%35:1,20%35:3,30%35:4
    С overlay все команды аналогичны. Эти два скрипта практически идентичны. Если у вас сумма процентов будет меньше 100 - остаток будет дополнен воздухом. Если больше 100 - будет учитываться только то, что до 100%.
    Чтобы прочитать помощь, написать следующее:
    //cs AdvancedReplace /?
    Чтобы узнать об авторе:
    //cs AdvancedReplace /author
    Это тестовый скрипт.
    Формат: //cs SkyGridGen <r1> <r2> <r3> <d1> <d2> <d3> [filemask]
    r%i% - количество блоков в обе стороны по соответствующей оси
    d%i% - расстояние между блоками по соответствующей оси
    filemask - чтение маски генерации из файла
    Маски генерации располагаются в папке WorldEdit/SkyGridMask
    Формат у них очень простой: Сначала ID блока, потом через пробел вероятность появления (не обязательно от 1 до 100, любое число, потом всё будет суммироваться и смотреться процентное соотношение).
    Со скриптом стандартно поставляется две маски - обычного мира (StandartMask, читается по умолчанию, если файл не указан) и чисто из песка. Они находятся в папке SkyGridMask. Эту папку надо положить в папку WorldEdit. К сожалению, песок будет падать, потому что таковы особености WE.
    Скрипт дописываться, скорее всего, не будет.
    Глобальный скрипт для работы с командными блоками. Как дополнительный бонус включает удобное стакование.
    ВАЖНО: Он работает ТОЛЬКО с выделениями типа cuboid! С остальными не работает (кроме одной команды, указано будет в её описании).
    ОЧЕНЬ ВАЖНО: изменения текста внутри командных блоков не отменяются командой //undo! Это особенность WE, я её исправить не могу, поэтому думайте перед каким-либо глобальным действием, чтобы не сделать ошибки!
    Команды в скрипте:
    //cs UltraCommandBlock /fill <text> [space_str] - заполнить все командные блоки в выделении текстом <text>. Важно: если в вашем тексте есть пробелы, то их НЕОБХОДИМО заменит на какую либо строку/символ (по вашему желанию, БЕЗ пробелов) и указать его как space_str.
    Примеры:
    //cs UltraCommandBlock /fill Hello
    //cs UltraCommandBlock /fill /tp___@a[x=1,y=2,z=3,r=4]___5___6___7 ___
    //cs UltraCommandBlock /fill /tpTHISISSPACE@a[x=1,y=2,z=3,r=4]THISISSPACE5THISISSPACE6THISISSPACE7 THISISSPACE
    //cs UltraCommandBlock /replace <text1> <text2> [space_str] - заменить <text1> на <text2> во всех командных блоках в выделении. Важно: если в вашем тексте есть пробелы, то их НЕОБХОДИМО заменит на какую либо строку/символ (по вашему желанию, БЕЗ пробелов) и указать его как space_str.
    Примеры:
    //cs UltraCommandBlock /replace Hello Hi
    //cs UltraCommandBlock /fill Hello Go$home! $
    //cs UltraCommandBlock /fill Hello,_SPACE_friends! Go_SPACE_home! _SPACE_
    //cs UltraCommandBlock /clear - очищает все командные блоки в выделении.
    Примеров использования даже писать не буду, ибо он только один :)
    //csUltraCommandBlock /version - узнать версию скрипта.
    //csUltraCommandBlock /author - прочитать об авторе скрипта.
    //csUltraCommandBlock /testerror - проверить наличие ошибок в командных блоках внутри выделения. Указывает саму ошибку и координаты командного блока с ошибкой. Так же предупреждает о пустых командных блоках.
    Следующие команды и составляют главный функционал этого скрипта.
    //cs UltraCommandBlock /stack - стакование выделения.
    Подробная справка: //cs UltraCommandBlock /stack /?
    //cs UltraCommandBlock /stack <number_of_stack> <mask> [flag]
    number_of_stack - сколько раз произвести стакование.
    mask - маска стакования. Нужна для заполнения командных блоков при стаковании. Если мы не хотим трогать командные блоки, или же их в выделении нет - пишем /no.
    Формат маски стакования: NAME_PARAM_1=VALUE_PARAM_1!STEP_PARAM_1;NAME_PARAM_2=VALUE_PARAM_2!STEP_PARAM_2;...
    Пример маски стакования: SuperX=1!2;SuperXX=34!45;SuperXXX=56!89;Yahoo=45!23;
    Теперь разберёмся, зачем нужна маска стакования и как она используется. Внутри командных блоков мы можем использовать переменные.
    Пример командного блока с переменными: /tp @a $SuperX$ $SuperXX$ $SuperXXX$
    Как видим, переменная может иметь любое имя, но чтобы показать, что это переменная, мы заключаем её в знаки $. Т.е. выглядит это так: $NAME$
    Причём скрипту не интересно, что именно там написано. Может быть любой текст, не обязательно команды. Например (текст в командном блоке): Yalublugulyat $NNN$ raz
    А маска нам указывает следующее: начальное значение переменной и её шаг при стаке.
    Начальное значение - сама переменная в исходном выделении. Каждый этап стакования к этой переменной прибавляется указанное второе значение. То есть маска x=1!1; положит переменную x в исходном выделении 1, в первом этапе стака 2, во втором этапе стака 3 и так далее. Может быть сколько угодно переменных. Так же, разумеется, если переменная в маске не указана - она скопируется в исходном формате. Т.е. можно делать сначала стак в одну сторону, меняя только одну переменную, потом стак вверх, к примеру, меняя вторую переменную и так далее. Подробнее это можно увидеть в видео.
    Пример:
    //cs UltraCommandBlock /stack 58 SuperX=1!2;SuperXX=34!45;SuperXXX=56!89;Yahoo=45!23;
    Но при таком стаковании в исходном выделении переменные не изменяются. Чтобы они изменялись - надо поставить флаг /a. Чтобы не изменялись - флаг /f. Это очень важно. Если поменять в исходном выделении переменные - вы их туда уже вернуть не сможете автоматически, только руками, так как //undo не отменяет изменения внутри командных блоков.
    Примеры:
    //cs UltraCommandBlock /stack 58 x=1!1; /a
    //cs UltraCommandBlock /stack 58 x=1!1; /f
    //cs UltraCommandBlock /stack 58 /no /a
    //cs UltraCommandBlock /stack 58 /no /f
    Если маска /no, то этот флаг не имеет смысла (/f или /a).
    Так же после этого можно ставить флаг направления (если не ставить - туда, куда смотрим).
    /n - север
    /w - запад
    /e - восток
    и так далее, по первой букве направления.
    Пример: //cs UltraCommandBlock /stack 58 /no /f /u - стакуем вверх, маски нет.
    Пример: //csUltraCommandBlock /stack 58 x=1!4; /f /d - стакуем вниз, x от 1 с шагом 4, в исходном выделении ничего не меняется.
    Но возникает вопрос - а зачем нам стак этот БЕЗ маски, если есть обычный стак WE?
    Дело в том, что есть ещё два параметра.
    Первый после направления - вектор сдвига при стаке. Каждый стак будет происходить сдвиг стакованного элемента по этому вектору. По умолчанию вектор сдвига 0,0,0.
    Пример использования: //cs UltraCommandBlock /stack 58 x=1!4; /f /d 0,-1,0 - стакуем вниз, x от 1 с шагом 4, в исходном выделении ничего не меняется, при стаке каждый шаг идёт сдвиг на один блок вниз, т.е. между "большими" блоками, которые стакуются, будет расстояние в один блок. Подробнее показано в видео.
    И второй параметр - блоки для стакования.
    Есть две возможно - указать, какие блоки стаковать или же указать, какие блоки не стаковать.
    +:id1,id2,... - стаковать ТОЛЬКО блоки с id1, id2, ...
    -:id1,id2,... - стаковать ВСЕ блоки кроме тех, у которых id1, id2, ...
    Поддерживается указание второго параметра id, т.е. 35:3 - шерсть определённого цвета.
    Так же если мы хотим, к примеру, охватить сразу ВСЮ шерсть, пишем 35:-1, т.е. второй -1 означает, что мы берём все возможные модификации блока.
    Если вы работаете с воздухом, настоятельно рекомендуется писать 0:-1 из-за ошибок генерации карты minecraft, я видел блоки воздуха с различными вторыми параметрами.
    Примеры:
    //cs UltraCommandBlock /stack 58 x=1!4; /a/s 0,-1,0 +:35:-1 - стакуем 58 раз на юг, маска введена, в исходном выделении переменные тоже меняются на их значения, вектор сдвига каждый раз вниз на один блок, стакуем ТОЛЬКО шерсть (ВСЮ).
    //cs UltraCommandBlock /stack 58 x=1!4; /a/s 0,-1,0 +:35 - стакуем 58 раз на юг, маска введена, в исходном выделении переменные тоже меняются на их значения, вектор сдвига каждый раз вниз на один блок, стакуем ТОЛЬКО БЕЛУЮ шерсть (НЕ ВСЮ).
    //cs UltraCommandBlock /stack 58 x=1!4; /a/s 0,-1,0 +:35,12 - стакуем 58 раз на юг, маска введена, в исходном выделении переменные тоже меняются на их значения, вектор сдвига каждый раз вниз на один блок, стакуем ТОЛЬКО БЕЛУЮ шерсть (НЕ ВСЮ) и песок.
    //cs UltraCommandBlock /stack 58 x=1!4; /a/s 0,-1,0 -:35,12 - стакуем 58 раз на юг, маска введена, в исходном выделении переменные тоже меняются на их значения, вектор сдвига каждый раз вниз на один блок, стакуем всё, кроме БЕЛОЙ шерсти (а другие цвета стакуем!) и песка.
    //cs UltraCommandBlock /stack 58 x=1!4; /a/s 0,-1,0 -:35,12 - стакуем 58 раз на юг, маска введена, в исходном выделении переменные тоже меняются на их значения, вектор сдвига каждый раз вниз на один блок, стакуем всё, кроме ЛЮБОЙ шерсти и песка.
    //cs UltraCommandBlock /fix и //cs UltraCommandBlock /unfix
    Две команды для работы с абсолютными и относительными координатами.
    /fix - выполняет "фиксацию" выделения в мире, т.е. все координаты (КРОМЕ тех, которые находятся внутри квадратных скобок!) преобразовывает в абсолютные.
    /unfix - выполняет "разфиксацию" выделения в мире, т.е. все координаты (КРОМЕ тех, которые находятся внутри квадратных скобок!) преобразовывает в относительные.
    Пример:
    При /unfix команда в командном блоке вида /tp @p[x=1,y=2,z=3,r=4] 1 2 3 преобразуется в /tp @p[x=1,y=2,z=3,r=4] <x> <y> <z>, где то, что в <> скобках - относительные координаты (и наоборот, при /fix - в абсолютные)
    При таких действиях будет сохранятся работоспособность конструкции. Но перемещать её всё-равно в большинстве случаев будет нельзя, потому что есть ещё квадратные скобки, в них координаты могут ссылаться на другие части внутри механизма, при перемещении эти координаты будут ссылаться всё на те же места МИРА. Для этого есть флаг /all (для обеих команд) - делает то же самое, но ещё и в квадратных скобках. Minecraft НЕ поддерживает относительные координаты в квадратных скобках, поэтому при использовании /unfix /all для работы механизма после перемещения надо ОБЯЗАТЕЛЬНО выполнить /fix /all на нём. Подробнее показано в видео.
    //cs UltraCommandBlock /createtemplate
    Ну и осталась последняя команда, которая пока в стадии разработки. Эта команда работает с любым типом выделения. Мы что-либо выделяем и нам создаётся набор командных блоков по маске (пока доступно 4 переменных - $x$, $y$, $z$ и $block_id$, которые соответствуют координатам рассматриваемого блока из выделения и его id), которую мы записали в командный блок, на который встали. Всё подробно показано в видео. Описывать подробно не буду, так как команда не доработана.
    Примеры:
    //cs UltraCommandBlock /createtemplate
    //cs UltraCommandBlock /createtemplate +:12,34,56
    //cs UltraCommandBlock /createtemplate -:12,34,56
    Так же в данном скрипте раз в сутки выводится реклама, которая указывает на создателей скрипта и даёт их координаты для связи.
    В планах: доработка /createtemplate, на 1.7 версии создание функционала работы с вагонетками с командными блоками (их спавн, заполнение и так далее).

    Внимание! Для работы ЛЮБЫХ скриптов требуется наличие скриптового движка Rhino! Для сервера скопируйте файл js.jar из папки Rhino в папку: папка сервера/plugins/WorldEdit
    Для одиночной игры скопируйте файлы из архива js.jar в Винрар архив Application Data\.minecraft\bin\WorldEdit с заменой файлов.
    Чтобы установить скрипты нужно создать папку "craftscript" в папке "WorldEdit" и скопировать туда файлы скриптов с расширением .js

    Видео о скриптах:




     
    Gallen, Trololochan, Kirya124gl и 4 другим нравится это.
  2. DefektX

    DefektX
    Строитель
    19
    10
    78
    классно, я подписался ))
     
    Harch нравится это.
  3. Pyps_3000

    Pyps_3000
    Подрядчик
    234
    134
    193
    Идея крутая, спасибо Харч) Жаль только, что это только для одиночки и своих серверов (там где ты модератор или админ), но всё равно пригодится. [mail1]
     
  4. Legolas

    Legolas
    Градостроитель
    2.552
    3.055
    483
    Почему только для одиночки то? Ставить можно на абсолютно любой сервер.
     
  5. Pyps_3000

    Pyps_3000
    Подрядчик
    234
    134
    193
    Вроде же это только админам доступно? (командный блок и ввод команд туда)
     
  6. Legolas

    Legolas
    Градостроитель
    2.552
    3.055
    483
    Эм... На своём сервере ты сам себе админ. А на ММ такого не поставят.
     
  7. ScayTrase

    ScayTrase
    Архитектор
    1.042
    612
    343
    ну дак он вроде и пишет (или уже отредактировал) что для одиночки или своих серверов.
     
  8. Harch

    Harch
    Администратор
    812
    577
    378
  9. OOIIOOOO

    OOIIOOOO
    Бригадир
    187
    281
    148
    legolas.. я помню 2012-2013
     
  10. Harch

    Harch
    Администратор
    812
    577
    378
    Если что, квадратная команда есть и не развалилась даже, Леголас тоже имеется)) Более того, я потихоньку возвращаюсь на мм и в майн)
     
    MaroG и OOIIOOOO нравится это.
  11. OOIIOOOO

    OOIIOOOO
    Бригадир
    187
    281
    148
    Harch, Добре)
    А не подскажешь кто состоит в Квадратной Команде?
    вот эта ссылка битая из заглавного сообщения темы
     
  12. Harch

    Harch
    Администратор
    812
    577
    378
    Pabloader, Legolas, Kyokata, WinChester, Harch. Вроде на настоящее время это полный состав.
     
    OOIIOOOO нравится это.