Программа позволяет черепахе работать наподобие карьера из BuildCraft'а. Пользователь настраивает глубину и высоту области, которую будет разрабатывать черепаха. Разгрузка инвентаря происходит при помощи труб из BuildCraft'а. Алгоритм раскопок почти не отличается от предшественника - программы Черепаха-автошахтёр, написанной Hadmi: при старте программы черепаха начнет копать вниз пока не достигнет заданной глубины, после чего будет расширять карьер во все стороны. Как только инвентарь заполнится, черепаха вернется на поверхность, трубы присоединятся, и лут начнет выкачиваться. Как только инвентарь освободится, черепаха снова пойдет вниз, и так по циклу. В случае если кончится топливо, то, если активирован режим аварийной заправки, черепаха попробует заправиться из собственного инвентаря, если у нее это не получится, или данный режим был отключен, то черепаха будет аврийно эвакуирована на поверхность.
Особенности программы:
[*] Диалоговая настройка программы
[*] Защита от падающих блоков
[*] Слежение за уровнем топлива
[*] Режим энергосбережения
[*] Режим аварийной заправки
[*] Возможность аварийной эвакуации
[/list]
Инструкция по установке:
[*] Устанавливаем черепаху на поверхность.
[*] Подключаем к ней деревянную трубу из BuildCraft'а, питаемую двигателем.
[*] Активируем двигатель, или, в режиме энергосбережения, подводим от него цепь редстоуна к черепахе. (Рекомендуется второе, т.к. постоянная работа двигателя будет мешать заправке черепахи топливом)
[*] Записываем код на черепаху. Не обязательно перебивать его в ручную. Достаточно создать и сохранить пустую программу, после чего ее файл сохранится в .minecraft\saves\Ваш_мир\computer\id_компьютера, где его можно спокойно редактировать блокнотом.
[*] Запускаем программу и производим настройку при помощи диалогового режима:
[*] Вводим высоту поверхности, на которой изначально стоит черепаха.
[*] Вводим высоту потолка шахты, которую будет разрабатывать черепаха.
[*] Вводим высоту шахты. Откладывается вниз от предыдущего значения.
[*] Включаем или выключаем режимы энергосбережения и аварийной заправки (при нехватке топлива черепаха попытается заправиться тем, что сама же добыла).
[*] Проверяем правильность введенного и подтверждаем начало работы.
[/list][*] Готово. Черепаха начала добычу.
[/list]
Примечания:
[*] Если играете в сингле - не выходите из майнкрафта пока черепаха на забое, иначе она выключится и останется там. Доставать муторно.
[*] Чтобы проще поймать ее на поверхности достаточно выключить откачивающий лут двигатель (в режиме энергосбережения - сломать цепочку реда к двигателю) - с полным инвентарем черепаха копать не уйдет.
[*] Будьте осторожны если захотите посмотреть черепаху в работе, на забое обычно все залито лавой.
[*] Не забывайте своевременно заправлять вашего труженника топливом. Для этого когда черепаха поднимется на поверхность проверяйте текст терминала. Если там написано что нехватает топлива, то положите топливо в первый слот черепахи.
[/list]
Код программы:
-- Ввод параметров карьераprint("Enter the initial height of the turtle: ")startHeight = tonumber(read())print("Enter the initial height of the quarry: ")quarryStartHeight = tonumber(read())print("Enter the height of the quarry: ")quarryHeight = tonumber(read())print("Activate the power saving mode? (y/n): ")isPowersaving = read()print("Activate emergency refueling? (y/n)")isEmergencyRefueling = read()print("Setting is complete[paste][/paste] Start digging? (y/n)")choice = read()if choice == "n" then exit()end-- Функции работы карьера-- Функция начальной инициализацииinitialization = function() print("Initialization[paste][/paste][paste][/paste][paste][/paste]") xrem = 1 yrem = 0 zrem = 0 vecrem = 2 x = 0 y = 0 z = 0 vec = 1 quarryHeight = quarryHeight - 1 print("Initialization finished[paste][/paste]")end-- Спуск в шахтуtoMine = function() h = startHeight while h > quarryStartHeight do if turtle[paste][/paste]detectDown() then turtle[paste][/paste]digDown() end turtle[paste][/paste]down() h = h - 1 endend-- Подъем из шахтыtoBase = function() h = quarryStartHeight while h < startHeight do turtle[paste][/paste]up() h = h + 1 endend-- Перемещение в заданную точкуmoveToPosition = function(xp, yp, zp, vecp) if z > zp then while z > zp do if turtle[paste][/paste]detectUp() then turtle[paste][/paste]digUp() end turtle[paste][/paste]up() z = z - 1 end else while z < zp do if turtle[paste][/paste]detectDown() then turtle[paste][/paste]digDown() end turtle[paste][/paste]down() z = z + 1 end end if x > xp then while vec ~= 3 do turtle[paste][/paste]turnLeft() vec = vec + 1 if vec > 4 then vec = 1 end end while x > xp 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 < xp 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 > yp then while vec ~= 2 do turtle[paste][/paste]turnLeft() vec = vec + 1 if vec > 4 then vec = 1 end end while y > yp 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 < yp 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 ~= vecp do turtle[paste][/paste]turnLeft() vec = vec + 1 if vec > 4 then vec = 1 end endend-- Функция считывания предыдущего прогрессаloadProgress = function() print("Loading progress[paste][/paste][paste][/paste][paste][/paste]") file = io[paste][/paste]open("turtle-miner[paste][/paste]cfg", "a") file:close() file = io[paste][/paste]open("turtle-miner[paste][/paste]cfg", "r") test = file:read() if test ~= nil then xrem = tonumber(test) yrem = tonumber(file:read()) zrem = tonumber(file:read()) vecrem = tonumber(file:read()) end file:close() print("Progress was loaded[paste][/paste]")end-- Функция сохранения прогрессаsaveProgress = function() print("Saving progress[paste][/paste][paste][/paste][paste][/paste]") xrem = x yrem = y zrem = z vecrem = vec file = io[paste][/paste]open("turtle-miner[paste][/paste]cfg", "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() print("Progress was saved[paste][/paste]")end-- Функция разгрузкиunloading = function() print("Unloading extracted resources[paste][/paste][paste][/paste][paste][/paste]") if isPowersaving == "y" 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(16) ~= 0 do sleep(1) end if isPowersaving == "y" 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 print("Resources was unloaded[paste][/paste]")end-- Функция проверки уровня топливаcheckFuelLevel = function() if turtle[paste][/paste]getFuelLevel() <= (2 * (x + y + z + startHeight - quarryStartHeight)) then return false else return true endend-- Функция слежения за уровнем топливаcheckingFuelLevel = function() if not checkFuelLevel() then if isEmergencyRefueling == "y" then emergencyRefueling() else evacuation() refueling() moveToPosition(xrem, yrem, zrem, vecrem) end endend-- Заправкаrefueling = function() print("The refueling began[paste][/paste]") print("Place the fuel into the first slot[paste][/paste]"); sleep(7) turtle[paste][/paste]select(1) turtle[paste][/paste]refuel() while turtle[paste][/paste]getFuelLevel() < (2 * (xrem + yrem + zrem + startHeight - quarryStartHeight)) do print("- Not enough fuel[paste][/paste] Put more fuel[paste][/paste]") sleep(7) turtle[paste][/paste]refuel() end print("- The current amount of fuel: "[paste][/paste][paste][/paste]turtle[paste][/paste]getFuelLevel()[paste][/paste][paste][/paste]"[paste][/paste]") print("Refuelling finished[paste][/paste]")end-- Функция эвакуацииevacuation = function() print("The evacuation began[paste][/paste]") saveProgress() moveToPosition(0, 0, 0, 1) toBase() print("The evacuation was completed[paste][/paste]") refueling() toMine() moveToPosition(xrem, yrem, zrem, vecrem)end-- Экстренная заправкаemergencyRefueling = function() print("Began an emergency refueling") for i = 1, 16, 1 do turtle[paste][/paste]select(i) turtle[paste][/paste]refuel() if checkFuelLevel() then turtle[paste][/paste]select(1) break end end turtle[paste][/paste]select(1) if not checkFuelLevel() then print("Emergency refueling failed[paste][/paste]") evacuation() else print("The emergency refueling was completed[paste][/paste]") endend-- Основная функция добычи и движенияmining = function() -- Если черепаха находится наверху шахты (z = quarryStartHeight), -- то продвигаемся на блок вперед и начинаем спуск вниз[paste][/paste] -- Если черепаха находится где-то посередине продолжаем спуск вниз, -- разрушая блоки перед собой[paste][/paste] Если черепаха достигла низа, то перемещаем ее к верху шахты: if z ~= quarryHeight 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 endend-- Тело программыinitialization()loadProgress()if turtle[paste][/paste]getFuelLevel() < (2 * (xrem + yrem + zrem + startHeight - quarryStartHeight)) then refueling()endwhile true do unloading() toMine() moveToPosition(xrem, yrem, zrem, vecrem) checkingFuelLevel() while turtle[paste][/paste]getItemCount(16) == 0 do mining() checkingFuelLevel() end saveProgress() moveToPosition(0, 0, 0, 1) toBase()end