Привет! Небольшое предисловие. Программа которую я подготовил сделана специально для того чтобы получить доступ на сервер. Код может быть ужасен, потому что это моя первая программа на Lua. Да сегодня утром я еще ничего не знал о Lua, а пару дней назад я не знал о OpenComputers и вообще что в к майнкрафту появилась куча интересных плагинов. Последний раз я играл в майнкрафт в 2012 году и это была ванилла. А теперь к делу - программа эта одновременно интерпритатор макроязыка который я назвал IronMacros и библиотека которая позволяет его расширять. Синтаксис довольно аутистский но очень краткий. Пример тестового макроса (скрины результата приложены):
S1# select 1st slot
R020C# make 2
R060B# 6 cubes
R0502# x5 cubes planes
P0M# place cube go up
>^<WWWWW#move next stripe
S2# select pickaxe
R0502
XFM
<^>WWWWW
XFM<^>#star cut U
R030A
R0402
XFM
<^>WWWW
WXF<^>
R0502
XFM#star cut R
W<^>XF
WWXFWW
<^>
R030C
XFMXFMMXF
<^>WWW
<^>
R0502
XFM
Можно одной строкой (жесть):
S1R020CR060BR0502P0M>^<WWWWWS2R0502XFM<^>WWWWWXFM<^>R030AR0402XFM<^>WWWWWXF<^>R0502XFMW<^>XFWWXFWW<^>R030CXFMXFMMXF<^>WWW<^>R0502XFM
Результат:
Сама библиотека/интерпритатор:
Как использовать: 1. Пишем макрос сохраняем в файл 2. В терминале пишем ironmacros <filename> filename это имя нашего макроса 3. Profit Имплементированные макрокоманды # - комментарий, после символа вся строка пропускается ^ - двигаться вперед V - двигаться назад > - повернуться вправо < - повернуться влево M - двигаться вверх W - двигаться вниз RXXYY - цикл, где XX количество повторов в 16тиричной системе. YY количество команд, которые следует повторять в 16тиричной системе ( считаются только команды, аргументы, передаваемые командам, упускаются) SX - выбрать слот инвентаря с номером X, номер X 16тиричный PX - поставить блок впереди себя X - на какой сайд ставить (аналог place([side])) XY - махнуть активным слотом (атака/поломка блоков) где Y по какому сайду бить (аналог swing([side]) при передаче в качестве параметра F вызывается подефолту swing() Ну и как вы уже заметили (я надеюсь) сейчас все это заточено исключительно под робота. Вкратце о внутренностях: 1. функции управления литералами макрокоманд registerMacros(symbol, func) unregisterMacros(symbol) регистрирует или снимает регистрацию заданного символа. func функция обработчик например так:
im = require("ironmacros")
local func = function() print("ZzzZzzZzzZ") end
im.registerMacros("Z",func)
теперь если записать в макрос Z будет в терминал будет напечатано "ZzzZzzZzzZ" Эти функции нужны лишь для того что бы расширять язык. Для пользования текущей версией они не нужны. 2. функции исполнения run(filename) - открывает файл в котором записана последовательность макрокоманд и запускает ее. filename - имя файла readCmd() - читает макрокоманду соответственно значению регистра pc(pc.x pc.y) exec(cmd) - запускает команду cmd на исполнение. Под командой имеется ввиду макрокоманда "Z" или ">" Эти функции нужны лишь для того что бы расширять язык. Для пользования текущей версией они не нужны. 3. Функции управления регистром fstep([count]) - функция инкрементирует значение регистра pc.x (если требуется инкрементировать pc.y , pc.x присваивается 1 ). count опционально коллчество шагов dstep([count]) - функция инкрементирует pc.y присваивает pc.x 1 если больше нет команд на исполнение заканчивает скрипт. count опционально коллчество шагов set(reg, val) - установить регистр reg ("x" или "y") на значение val Эти функции нужны лишь для того что бы расширять язык. Для пользования текущей версией они не нужны. 4. Добавление своей макро команды В исходнике все макрокоманды добавлены используя вышеприведенные функции. Можно ознакомится, там все просто. Раздел REGISTRED DEFAULT MACROSES PS Да забыл pastebin.com: lib: http://pastebin.com/eBbZrRGi macros: http://pastebin.com/Q4DRDKDV