Утилита My World Edit Scripts

  • Автор темы Автор темы DrLego
  • Дата начала Дата начала

DrLego

Участник
Пользователь
Баллы
33
My World Edit Scripts - проект Harch'a, члена Квадратной Команды.

Он разработал 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
Видео о скриптах:
 
Первое и второе итак без скриптов есть.
 
Первое и второе итак без скриптов есть.
Первого и второго без скриптов нету. Если есть, то попрошу рассказать как делать.
видел такое же оформление на **-minecraft.ru
Я постил где только мог) Но нигде не пустили
 
Я смотрю MM второй раз светится на руведре. В первый раз, если мне память не изменяет, вишер (жаль ушел, хотя подробностей не знаю) перевод бросал.
 
Первого и второго без скриптов нету. Если есть, то попрошу рассказать как делать.

Я постил где только мог) Но нигде не пустили
//set 25%Stone,50%ironore,25%coalore это к первому
А второе вроде //overlay с теми же параметрами что и set
 
//set 25%Stone,50%ironore,25%coalore это к первому
А второе вроде //overlay с теми же параметрами что и set

На set такое правда есть. Но у меня не set, а replace. Т.е. замена. А вот такого в WE я не нашёл.
Overlay и Replace с этими параметрами не работают :(
Поэтому и написал эти скрипты.
Но основной скрипт - UltraCommandBlock. ИМХО для мапмейкеров - очень хорошее решение.

В будущем планируем на буржуйские форума запостить, в том числе и на форум с WE. Но для этого надо все мануалы переводить, а это очень сложная работа. Особенно если учесть, что я не знаю английского.
 
Назад
Верх