Инструкция: ставим черепаху на землю, подводим к ней трубы с двигателем для сбора накопанного, записываем прогу, редактируем параметры глубины, запускаем.
Все, дело пошло. Черепаха начнет копать вниз пока не достигнет заданной в параметрах глубины, после этого будет копать карьер во все стороны, постепенно увеличивая его радиус. Когда инвентарь черепахи заполнится, она перестанет копать и поднимется на поверхность тем же путем которым пришла. Трубы присоединятся, начнет выкачиваться лут. Когда инвентарь будет полностью свободен черепаха снова пойдет вниз на нелегкие шахтерские заработки.
В принципе похоже на карьер, но есть свои плюсы - не требует энергии и может сразу копать на больших глубинах что увеличивает шанс нахождения ценных ресурсов.
Отредактируйте переменные в тексте программы в зависимости от условий работы черепахи:
hmax - высота поверхности, на которой изначально стоит черепаха (координата y)
hdig - координата y, на которой будет работать черепаха
hcarry - высота шахты, которую будет копать черепаха. Откладывается вниз от hdig, то есть если вы настроите hdig=20 и hcarry=7, черепаха будет копать на глубине от 13 до 20
powersaving - измените на true если не хотите чтобы питающий трубу двигатель работал постоянно. При разгрузке черепаха будет подавать редстоун сигнал на все свои боковые стороны. Можно провести редстоун от черепахи к двигателю, тогда он будет работать только во время разгрузки. Позволяет экономить топливо/электроэнергию/не давать перегреваться двигателю.
Код:
hmax=65hdig=17hcarry=8powersaving=false-- Функция спуска в шахту[paste][/paste] Опускаемся вниз до тех пор пока текущая глубина h не станет равной глубине hdig:dwn=function() h=hmax while h>hdig do if turtle[paste][/paste]detectDown then turtle[paste][/paste]digDown() end turtle[paste][/paste]down() h=h-1 endend--Функция подъема из шахты:up2freedom=function() h=hdig while h<hmax do turtle[paste][/paste]up() h=h+1 endend-- Функция перемещения в заданную точку[paste][/paste] Используется в двух случаях: 1[paste][/paste] с параметрами 0,0,0,1 для перемещения к вертикальному "лифту" и последующего подъема на поверхность[paste][/paste] 2[paste][/paste] С передачей к этой функции запомненных координат предыдущего спуска, чтобы черепашка могла вернуться к работе с того места где она закончила[paste][/paste] x, y, z, vec - текущие координаты черепахи[paste][/paste] xde, yde [paste][/paste][paste][/paste][paste][/paste] - координаты места куда должна переместиться черепаха при помощи этой функции[paste][/paste] xrem, yrem [paste][/paste][paste][/paste][paste][/paste] - запомненные координаты предыдущего спуска[paste][/paste] Координата vec - условное направление, в котором смотрит черепаха[paste][/paste] 1 - вперед, 2 - лево, 3 - назад, 4 - вправоback2pos=function(xde,yde,zde, vecde) if z>zde then while z>zde do if turtle[paste][/paste]detectUp() then turtle[paste][/paste]digUp() end turtle[paste][/paste]up() z=z-1 end else while z<zde do if turtle[paste][/paste]detectDown() then turtle[paste][/paste]digDown() end turtle[paste][/paste]down() z=z+1 end end if x>xde then while vec~=3 do turtle[paste][/paste]turnLeft() vec=vec+1 if vec>4 then vec=1 end end while x>xde do -- Фикс на падающие блоки типа песка и гравия - ждем пол секунды и проверяем, не свалилось ли чего с потолка: while turtle[paste][/paste]detect() do turtle[paste][/paste]dig() sleep(0[paste][/paste]5) end turtle[paste][/paste]forward() x=x-1 end else while vec~=1 do turtle[paste][/paste]turnLeft() vec=vec+1 if vec>4 then vec=1 end end while x<xde do while turtle[paste][/paste]detect() do turtle[paste][/paste]dig() sleep(0[paste][/paste]5) end turtle[paste][/paste]forward() x=x+1 end end if y>yde then while vec~=2 do turtle[paste][/paste]turnLeft() vec=vec+1 if vec>4 then vec=1 end end while y>yde do while turtle[paste][/paste]detect() do turtle[paste][/paste]dig() sleep(0[paste][/paste]5) end turtle[paste][/paste]forward() y=y-1 end else while vec~=4 do turtle[paste][/paste]turnLeft() vec=vec+1 if vec>4 then vec=1 end end while y<yde do while turtle[paste][/paste]detect() do turtle[paste][/paste]dig() sleep(0[paste][/paste]5) end turtle[paste][/paste]forward() y=y+1 end end while vec~=vecde do turtle[paste][/paste]turnLeft() vec=vec+1 if vec>4 then vec=1 end end end-- По факту программа стартует отсюда, сверху были описания функций, которые будут активироваться по мере надобности-- Координаты на которых остановилась черепаха во время прошлого спуска[paste][/paste] Обычно считываются из файла либо хранятся с предыдущего спуска[paste][/paste] Но так как это может быть первым спуском черепахи то их необходимо задать, тем самым заодно установив удобное месторасположение для старта выкапывания карьера:xrem=1yrem=0zrem=0vecrem=2-- Сбрасываем текущие координаты на стандартные[paste][/paste] Именно с ними (0,0,0,1) черепаха всегда перемещается вверх-вниз по лифтуx=0y=0z=0vec=1-- Уменьшаем заданное пользователем значение высоты на 1, так как в системе координат черепахи z начинается с нуля:hcarry=hcarry-1-- Нам необходимо сохранять координаты предыдущего спуска даже между выключениями клиента игры, чтобы бедная черепаха не начинала каждый раз рыть с нуля[paste][/paste] Поэтому создаем если он еще не создан файл для их хранения:file = io[paste][/paste]open("miner[paste][/paste]lua", "a") file:close()-- Открываем файл на чтение:file = io[paste][/paste]open("miner[paste][/paste]lua", "r") -- Читаем первое значение из файла: test=file:read() -- Если оно не равно null значит файл уже существовал и можно спокойно прочитать оттуда координаты: if test~=nil then xrem=test yrem=file:read() zrem=file:read() vecrem=file:read() -- Необходимо перевести строковой тип переменных, который им присвоился при чтении из файлов обратно в числовой: xrem=tonumber(xrem) yrem=tonumber(yrem) zrem=tonumber(zrem) vecrem=tonumber(vecrem) end file:close()while true do-- Модуль разгрузки[paste][/paste] Нужно поставить его до спуска черепахи чтобы она не ушла в шахту с полным инвентарем[paste][/paste] Это опасно не только потерей времени но и сбоем системы координат, так как черепаха закончит свою работу и сохранит координаты окончания работ до того как подойдет к стене:-- Проверка активности энергосберегающего режима, отправка сигналов редстоуна если активен: if powersaving==true then rs[paste][/paste]setOutput("left",true) rs[paste][/paste]setOutput("right",true) rs[paste][/paste]setOutput("front",true) rs[paste][/paste]setOutput("back",true) end -- Ждем пока полностью освободится инвентарь: while turtle[paste][/paste]getItemCount(9)~=0 do sleep(1) end if powersaving==true then rs[paste][/paste]setOutput("left",false) rs[paste][/paste]setOutput("right",false) rs[paste][/paste]setOutput("front",false) rs[paste][/paste]setOutput("back",false) end -- Вызываем функцию спуска в шахту: dwn() -- Перемещаемся к месту где мы закончили благодаря функции back2pos: back2pos(xrem,yrem,zrem,vecrem) -- Копаем до тех пор пока в инвентаре есть хотя бы одна свободная ячейка: while turtle[paste][/paste]getItemCount(9)==0 do -- Если черепаха находится наверху шахты (z=hcarry), то продвигаемся на блок вперед и начинаем спуск вниз[paste][/paste] Если черепаха находится где-то посередине продолжаем спуск вниз, разрушая блоки перед собой[paste][/paste] Если черепаха достигла низа, то перемещаемся к верху шахты: if z~=hcarry then if turtle[paste][/paste]detect() then turtle[paste][/paste]dig() end if turtle[paste][/paste]detectDown() then turtle[paste][/paste]digDown() end turtle[paste][/paste]down() z=z+1 else while turtle[paste][/paste]detect() do turtle[paste][/paste]dig() sleep(0[paste][/paste]5) end while z~=0 do turtle[paste][/paste]up() z=z-1 end turtle[paste][/paste]forward() -- Черепаха переместилась, меняем текущие координаты в зависимости от стороны куда она смотрит: if vec==1 then x=x+1 end if vec==2 then y=y-1 end if vec==3 then x=x-1 end if vec==4 then y=y+1 end -- Если модуль х равно модулю у это значит что черепаха находится в углу шахты и пора повернуть налево: if math[paste][/paste]abs(x)==math[paste][/paste]abs(y) then turtle[paste][/paste]turnLeft() vec=vec+1 if vec>4 then vec=1 end end -- При у=1 и х>0 происходит увеличение "радиуса" квадрата, по которому крутится черепаха: if y==1 and x>0 then turtle[paste][/paste]turnRight() while turtle[paste][/paste]detect() do turtle[paste][/paste]dig() sleep(0[paste][/paste]5) end turtle[paste][/paste]forward() turtle[paste][/paste]turnLeft() x=x+1 end end end -- Добычу ресурсов закончили, теперь запоминаем наши текущие координаты и заодно пишем их в файл: xrem=x yrem=y zrem=z vecrem=vec file = io[paste][/paste]open("miner[paste][/paste]lua", "w") file:write(xrem[paste][/paste][paste][/paste]"\n") file:write(yrem[paste][/paste][paste][/paste]"\n") file:write(zrem[paste][/paste][paste][/paste]"\n") file:write(vecrem[paste][/paste][paste][/paste]"\n") file:close() -- Возвращаемся к лифту: back2pos(0,0,0,1) -- Поднимаемся на поверхность: up2freedom()end
Примечания:
Если играете в сингле - не выходите из майнкрафта пока черепаха на забое, иначе она выключится и останется там. Доставать муторно.
Чтобы проще поймать ее на поверхности достаточно выключить откачивающий лут двигатель (в режиме энергосбережения - сломать цепочку реда к двигателю) - с полным инвентарем черепаха копать не уйдет.
Будьте осторожны если захотите посмотреть черепаху в работе, на забое обычно все залито лавой.