shell-scripte-code/strip.lua

809 lines
31 KiB
Lua
Raw Normal View History

2022-09-13 11:16:19 +02:00
--[[Updated Version by Silvamord]]--
--[[For questions and support go to https://discord.gg/thegrindspot]]--
--[[Copyright PrinceTommen - Script developed for Cyepicx (twitch.tv/cyepicx)]]--
--[[You are all allowed to use it as long as you don't pretend it's yours]]--
--[[Have fun !]]--
version =" 3.6"
--[[
Release Note:
3.6: Updated to work with tweaked.cc
os.pullEvent calls filtered to "keys" only
key compares from pullEvent now use the keys enum instead of magic numbers.
3.5: Added: Multiple item slots system, including the items to throw (suggested by Portsanta and Cyepicx)
Major interface enhancements to make the configuration faster in spite of the new options
Enhanced item shortage security, supporting the multiple slots
New functions to manage I/O in a more compact way (suggested by Niseg)
3.41: Fixed: Important glitch when the turtle returned to its starting position with a certain configuration
Displaying issues
3.4: Added: Favorite configuration system
Ability to choose the direction of the series of parallel tunnels (right or left)
Support of execution without torches or chests (will not try to place them)
Security that stops the turtle when it runs out of chests or torches (suggested by Cyepicx)
Chests and torches status updated automatically
Security that requires the user to press enter before the turtle starts (suggested by Cyepicx)
The turtle now returns to its starting position after it finishes
New rotation function as well a a specific torch placing function
Fixed: The turtle will now properly finish the hub after mining an odd number of tunnels
The torch placement has been modified to avoid conflicts with chests
3.3: Added: Enderchest Support (suggested by Niseg and Daniteh)
Release note
3.2: Fixed: Very important chest placing issue (only appeared in 3.1)
3.1: Added: New mining pattern for more efficiency (suggested by Niseg)
Smarter fuel management: Will now consume the "stored" fuel before refueling
Can now consume any type of fuel supported by turtles (check the wiki)
Fuel type can be changed while the turtle is mining
Optimized the mining of 3 blocks high tunnels
Better interface, instructions remain visible and a line is dedicated to the fuel status (updated automatically)
Option to throw cobblestone automatically (suggested by Niseg)
Fixed: Refueling issue in certain circumstances (reported by Cyepicx)
]]--
function resetScreen()
term.clear()
term.setCursorPos(14,1)
write("Mining Turtle")
term.setCursorPos(5,2)
write("For CyanideEpic and his friends")
term.setCursorPos(1,13)
write("By PrinceTommen, version "..version)
term.setCursorPos(1,4)
end
function textOutput(output_message, x_screen_pos, z_screen_pos, clear_area)
term.setCursorPos(x_screen_pos,z_screen_pos)
if clear_area == 0 then
clear_area = string.len(output_message)
end
write(output_message..string.rep(" ", (clear_area - string.len(output_message))))
end
function securedInput(x_screen_pos, z_screen_pos, nature, lower_value, upper_value, example1, example2)
example = {example1, example2}
local function shortExample(example_int, example, boolStringPart)
tableShortExample = {}
tableShortExample[example_int] = example[example_int].." ("..string.sub(string.lower(example[example_int]), 1, 1)..") "
if boolStringPart then
return string.sub(string.lower(example[example_int]), 1, 1)
else
return tableShortExample[example_int]
end
end
incipit = shortExample(1, example, false).."/ "..shortExample(2, example, false)..": "
if nature == "text" then
repeat
textOutput(incipit, x_screen_pos, z_screen_pos, 39)
term.setCursorPos(string.len(incipit)+1,z_screen_pos)
user_input = string.sub(string.lower(read()), 1, 1)
until (user_input == shortExample(1, example, true) or user_input == shortExample(2, example, true))
elseif nature == "integer" then
repeat
textOutput(" ", x_screen_pos, z_screen_pos, (39 - x_screen_pos))
term.setCursorPos(x_screen_pos,z_screen_pos)
user_input = tonumber(read())
until (user_input >= lower_value and user_input <= upper_value)
end
return user_input
end
function clearLines(firstLine, lastLine)
a = 1
for a=1, (lastLine-firstLine+1) do
textOutput("", 1, (firstLine+a-1), 40)
end
end
function convertToBool(var, boolTrue)
if var == boolTrue then
var = true
else
var = false
end
return var
end
function turn(FacingAngle, Bool_rotation, Rotation_integer)
if Bool_rotation then
for u=1, Rotation_integer do
turtle.turnRight()
end
FacingAngle = FacingAngle + Rotation_integer
else
for u=1, Rotation_integer do
turtle.turnLeft()
end
FacingAngle = FacingAngle - Rotation_integer
end
FacingAngle = math.abs((FacingAngle - 1)%4+1)
return FacingAngle
end
local function refuel()
turtle.select(torches_slots+current_slot[2])
while not(turtle.refuel(1)) do
for f=1, fuel_slots do
current_slot[2], shortage[2] = rotateSlot(2, torches_slots+1, fuel_slots)
turtle.select(torches_slots+current_slot[2])
if turtle.refuel(1) then
boolRefuel = true
break
else
boolRefuel = false
end
end
if not(boolRefuel) then
textOutput("No Fuel -", 1, 11, 0)
current_slot[2], shortage[2] = manageShortage(2, torches_slots+1, torches_slots+fuel_slots)
end
end
refuel_count = 80 - turtle.getFuelLevel()
textOutput("Fuel OK -", 1, 11, 0)
return refuel_count
end
function moveForward(FacingAngle, Boolfb, moving_integer, digUpBool, digDownBool, refuel_count)
local moving_count = 1
for moving_count=1,moving_integer do
if (refuel_count == 80) then
refuel_count = refuel()
end
Bool1 = false
while not(Bool1) do
if (Boolfb) then
turtle.dig()
Bool1 = turtle.forward()
if (digUpBool) then
turtle.digUp()
end
if (digDownBool) then
turtle.digDown()
end
else
Bool1 = turtle.back()
if not(Bool1) then
turn(FacingAngle, true, 2)
turtle.dig()
turn(FacingAngle, false, 2)
end
end
end
moving_count = moving_count + 1
refuel_count = refuel_count + 1
end
return refuel_count
end
function moveUp(Boolud, moving_integer, refuel_count, Bool_DigFront)
local moving_count = 1
for moving_count=1, moving_integer do
if (refuel_count == 80) then
refuel_count = refuel()
end
Bool2 = false
if Bool_DigFront then
turtle.dig()
end
while not(Bool2) do
if (Boolud) then
turtle.digUp()
Bool2 = turtle.up()
else
turtle.digDown()
Bool2 = turtle.down()
end
end
moving_count = moving_count + 1
refuel_count = refuel_count + 1
end
return refuel_count
end
function manageShortage(managedItem, initial_item_slot, final_item_slot)
textOutput("The turtle has used all the "..(itemNames[managedItem+3]).." intitially given. Have you refilled all the "..(itemNames[managedItem+3]).." slots ?", 1, 4, 0)
textOutput("Press enter if all the "..(itemNames[managedItem+3]).." slots are refilled (slots "..(initial_item_slot).." to "..(final_item_slot)..").", 1, 7, 0)
repeat
turn(FacingAngle, true, 4)
os.startTimer(1)
press, key = os.pullEvent("key")
until (key == keys.enter)
clearLines(4,10)
current_slot[managedItem] = 1
shortage[managedItem] = false
return current_slot[managedItem], shortage[managedItem]
end
function rotateSlot(managedItem, control_slot, rotation_controler)
if (turtle.getItemCount(control_slot) == 0) or (managedItem == 2) then
if current_slot[managedItem]==rotation_controler and (managedItem ~= 2) then
shortage[managedItem] = true
else
current_slot[managedItem]=((current_slot[managedItem])%rotation_controler)+1
end
end
return current_slot[managedItem], shortage[managedItem]
end
function inventoryManagement(refuel_count,Right_or_Left,throw_cobble)
function fullInventory(n)
n = m + 1
repeat
item_count = turtle.getItemCount(n)
if (item_count ~= 0) then
boolSlotOccupied = true
n = n + 1
else
boolSlotOccupied = false
end
until (boolSlotOccupied == false) or (n == 17)
return n
end
if Chest_approval then
m = torches_slots + chests_slots + fuel_slots + garbage_slots
thrown_slots = 0
if (turtle.getItemCount(16) ~= 0) and (m~=16) then
if fullInventory(m)==17 then
if throw_stuff then
for k=1, garbage_slots do
for j=1, (16-m) do
turtle.select(m - garbage_slots + k)
Bool_match_stuff = turtle.compareTo(m+j)
if Bool_match_stuff then
thrown_slots = thrown_slots + 1
turtle.select(m+j)
turtle.drop()
end
end
turtle.select(m - garbage_slots + k)
turtle.drop(turtle.getItemCount(m - garbage_slots + k)-1)
end
for z = (m+1), 16 do
for u = (z+1), 16 do
if turtle.getItemCount(u)~=0 then
turtle.select(u)
turtle.transferTo(z)
end
end
end
end
if not(throw_stuff) or ((thrown_slots <= 2) and (fullInventory(n)>15)) then
if shortage[3] then
textOutput("No Chests", 24, 11, 0)
current_slot[3], shortage[3] = manageShortage(3, torches_slots+fuel_slots+1, torches_slots+fuel_slots+chests_slots)
end
textOutput("Chests OK", 24, 11, 0)
if (Right_or_Left == "left") then
FacingAngle = turn(FacingAngle, true, 1)
else
FacingAngle = turn(FacingAngle, false, 1)
end
refuel_count = moveForward(FacingAngle, true, 1, false, true, refuel_count)
turtle.select(torches_slots+fuel_slots+current_slot[3])
turtle.digDown()
turtle.placeDown()
for u=(m+1),16 do
if turtle.getItemCount(u)~=0 then
turtle.select(u)
turtle.dropDown()
end
end
if enderchest then
turtle.select(torches_slots+fuel_slots+1)
turtle.drop()
turtle.digDown()
end
current_slot[3], shortage[3] = rotateSlot(3, torches_slots+fuel_slots+current_slot[3], chests_slots)
refuel_count = moveForward(FacingAngle, false, 1, false, false, refuel_count)
if (Right_or_Left == "left") then
FacingAngle = turn(FacingAngle, false, 1)
else
FacingAngle = turn(FacingAngle, true, 1)
end
end
end
end
end
turtle.select(1)
return refuel_count
end
function placeTorch(Position)
if Torch_approval then
if shortage[1] then
textOutput("No Torches -", 11, 11, 0)
current_slot[1], shortage[1] = manageShortage(1, 1, torches_slots)
end
textOutput("Torches OK -", 11, 11, 0)
turtle.select(current_slot[1])
if Position == "front" then
turtle.dig()
turtle.place()
elseif Position == "below" then
turtle.digDown()
turtle.placeDown()
elseif Position == "up" then
turtle.digUp()
turtle.placeUp()
end
current_slot[1], shortage[1] = rotateSlot(1, current_slot[1], torches_slots)
end
end
function digVerticalLayer(refuel_count, FacingAngle, Width, Height, Height_Position, Bool_Torches, Right_or_Left)
if Right_or_Left then
Right_or_Left = "left"
else
Right_or_Left = "right"
end
done_columns = 0
if (Height_Position == "up") then
for columns=1, math.floor(Width/4) do
turtle.digUp()
if (Height > 3) then
refuel_count = moveUp(true, 1, refuel_count, false)
turtle.dig()
refuel_count = moveUp(false, (Height-2), refuel_count, true)
turtle.digDown()
end
refuel_count = moveForward(FacingAngle, true, 2, true, true, refuel_count)
refuel_count = inventoryManagement(refuel_count, Right_or_Left, throw_cobble)
if (Height > 3) then
refuel_count = moveUp(false, 1, refuel_count, false)
turtle.dig()
refuel_count = moveUp(true, (Height-2), refuel_count, true)
turtle.digUp()
end
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
done_columns = done_columns + 1
if (Width - 4*done_columns ~= 0) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
end
end
if ((Width - 4*math.floor(Width/4)) == 0) then
Height_Position = "up"
elseif ((Width - 4*math.floor(Width/4)) == 1) then
turtle.digUp()
refuel_count = moveUp(false, (Height-3), refuel_count, false)
turtle.digDown()
refuel_count = inventoryManagement(refuel_count, Right_or_Left, throw_cobble)
Height_Position = "down"
elseif ((Width - 4*math.floor(Width/4)) >= 2) then
if (Height > 3) then
refuel_count = moveUp(true, 1, refuel_count, false)
turtle.dig()
refuel_count = moveUp(false, (Height-2), refuel_count, true)
turtle.digDown()
end
turtle.digUp()
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
refuel_count = inventoryManagement(refuel_count, Right_or_Left, throw_cobble)
Height_Position = "down"
if ((Width - 4*math.floor(Width/4)) == 3) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
refuel_count = moveUp(true, (Height - 3), refuel_count, false)
turtle.digUp()
Height_Position = "up"
end
end
elseif (Height_Position == "down") then
for columns=1, math.floor(Width/4) do
turtle.digDown()
if (Height > 3) then
refuel_count = moveUp(false, 1, refuel_count, false)
turtle.dig()
refuel_count = moveUp(true, (Height - 2), refuel_count, true)
turtle.digUp()
end
refuel_count = moveForward(FacingAngle, true, 2, true, true, refuel_count)
if (Height > 3) then
refuel_count = moveUp(true, 1, refuel_count, false)
turtle.dig()
refuel_count = moveUp(false, (Height - 2), refuel_count, true)
turtle.digDown()
end
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
done_columns = done_columns + 1
if (Width - 4*done_columns ~= 0) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
end
refuel_count = inventoryManagement(refuel_count, Right_or_Left, throw_cobble)
if (done_columns%2 == 0) and Bool_Torches then
FacingAngle = turn(FacingAngle,true , 1)
placeTorch("front")
FacingAngle = turn(FacingAngle, false, 1)
end
end
if ((Width - 4*math.floor(Width/4)) == 0) then
Height_Position = "down"
elseif ((Width - 4*math.floor(Width/4)) == 1) then
turtle.digDown()
refuel_count = moveUp(true, (Height - 3), refuel_count, false)
turtle.digUp()
Height_Position = "up"
elseif ((Width - 4*math.floor(Width/4)) >= 2) then
if (Height > 3) then
refuel_count = moveUp(false, 1, refuel_count, false)
turtle.dig()
refuel_count = moveUp(true, (Height - 2), refuel_count, true)
turtle.digUp()
end
turtle.digDown()
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
Height_Position = "up"
if ((Width - 4*math.floor(Width/4)) == 3) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
refuel_count = moveUp(false, (Height - 3), refuel_count, false)
turtle.digDown()
refuel_count = inventoryManagement(refuel_count, Right_or_Left, throw_cobble)
Height_Position = "down"
end
end
end
return refuel_count, Height_Position
end
enderchest, throw_stuff, Chest_approval, Torch_approval, Chest_mismatch, Torch_mismatch = false, false, false, false, false, false
shortage, itemNames = {false, false, false}, {"torch", "fuel", "chest", "torches", "fuel", "chests"}
resetScreen()
if (io.open("favorite", "r") ~= nil) then
resetScreen()
textOutput("Do you wish to use your favorite configuration ?", 1, 4, 0)
Favorite_approval = securedInput(1, 6, "text", 0, 0, "Yes", "No")
if (Favorite_approval == "y") then
handle = fs.open("favorite", "r")
input = handle.readAll()
handle.close()
favorite = textutils.unserialize(input)
tunnels_integer = favorite.tunnels_integer
Width = favorite.Width
Height = favorite.Height
Length = favorite.Length
tunnels_separation = favorite.tunnels_separation
throw_stuff = favorite.throw_stuff
enderchest = favorite.enderchest
Torch_approval = favorite.Torch_approval
Chest_approval = favorite.Chest_approval
end
end
if (io.open("favorite", "r") == nil) or ((io.open("favorite", "r") ~= nil) and (Favorite_approval == "n")) then
resetScreen()
textOutput("Number of parallel tunnels ? ", 1, 4, 0)
tunnels_integer = securedInput(37, 4, "integer", 1, 1000, " ", " ")
textOutput("Width of the tunnels ? ", 1, 5, 0)
Width = securedInput(37, 5, "integer", 1, 1000, " ", " ")
term.setCursorPos(1,6)
textOutput("Height of the tunnels ? ", 1, 6, 0)
Height = securedInput(37, 6, "integer", 1, 200, " ", " ")
if (Height < 3) then
Height = 3
end
term.setCursorPos(1,7)
textOutput("Length of the tunnels ? ", 1, 7, 0)
Length = securedInput(37, 7, "integer", 1, 100000, " ", " ")
if (tunnels_integer > 1) then
term.setCursorPos(1,8)
textOutput("Separating blocks between tunnels ? ", 1, 8, 0)
tunnels_separation = securedInput(37, 8, "integer", 1, 1000, " ", " ")
else
tunnels_separation = 0
end
resetScreen()
textOutput("To use regular chests, press c", 1, 4, 0)
textOutput("To use an enderchest, press e", 1, 5, 0)
textOutput("To use torches, press t", 1, 6, 0)
textOutput("To throw away specific items, press p", 1, 7, 0)
textOutput("Press enter once you have chosen all the options you wanted to activate.", 1, 11, 0)
while true do
press, key = os.pullEvent("key")
if press == "key" and key == keys.enter then
break
elseif key == keys.c then
if Chest_approval then
Chest_approval = false
textOutput("", 10, 9, 11)
else
Chest_approval = true
textOutput("Chests,", 10, 9, 11)
end
elseif key == keys.e then
if enderchest then
enderchest = not(enderchest)
textOutput("", 10, 9, 11)
else
Chest_approval = true
enderchest = true
textOutput("Enderchest,", 10, 9, 11)
end
elseif key == keys.t then
if Torch_approval then
Torch_approval = false
textOutput("", 1, 9, 8)
else
Torch_approval = true
textOutput("Torches,", 1, 9, 8)
end
elseif key == keys.p then
if throw_stuff then
throw_stuff = not(throw_stuff)
textOutput("", 22, 9, 12)
else
throw_stuff = true
textOutput("Throw items.", 22, 9, 12)
end
end
end
resetScreen()
textOutput("Do you want to save this configuration as your favorite ?", 1, 4, 0)
New_favorite = securedInput(1, 6, "text", 0, 0, "Yes", "No")
if (New_favorite == "y") then
favorite = {}
favorite.tunnels_integer = tunnels_integer
favorite.Width = Width
favorite.Height = Height
favorite.Length = Length
favorite.tunnels_separation = tunnels_separation
favorite.Torch_approval = Torch_approval
favorite.Chest_approval = Chest_approval
favorite.throw_stuff = throw_stuff
favorite.enderchest = enderchest
output = textutils.serialize(favorite)
handle = fs.open("favorite", "w")
handle.write(output)
handle.close()
end
end
resetScreen()
textOutput("To manage extra slots, press s", 1, 4, 0)
textOutput("This option allows you to have several torches/fuel/chests slots, as well as different items to throw", 1, 6, 0)
textOutput("Else, press enter to skip this step.", 1, 10, 0)
torches_slots, chests_slots, garbage_slots = 0, 0, 0
while true do
press, key = os.pullEvent("key")
if press == "key" and key == keys.enter then
fuel_slots = 1
break
elseif key == keys.s then
repeat
turtle.select(1)
resetScreen()
textOutput("Number of fuel slots ? ", 1, 4, 0)
fuel_slots = securedInput(29, 4, "integer", 1, 16, " ", " ")
slot_total = fuel_slots
if Torch_approval then
textOutput("Number of torches slots ? ", 1, 5, 0)
torches_slots = securedInput(29, 5, "integer", 1, 16, " ", " ")
slot_total = slot_total + torches_slots
end
if Chest_approval and not(enderchest) then
textOutput("Number of chests slots ? ", 1, 6, 0)
chests_slots = securedInput(29, 6, "integer", 1, 16, " ", " ")
slot_total = slot_total + chests_slots
end
if throw_stuff then
textOutput("Number of undesired items ? ", 1, 7, 0)
garbage_slots = securedInput(29, 7, "integer", 1, 16, " ", " ")
slot_total = slot_total + garbage_slots
end
until (slot_total < 16)
break
end
end
resetScreen()
if (tunnels_integer > 1) then
textOutput("The first tunnel will be in front of the turtle. Do you want the tunnels to be dug on the right or on the left of the first tunnel (They will be parallel to the first one) ?", 1, 4, 0)
Bool_direction = securedInput(1, 9, "text", 0, 0, "Right", "Left")
end
if (tunnels_integer == 1) and (Width > 1) then
textOutput("In front of the turtle will be one side of the tunnel. Do you want it to mine the rest on the left or on the right ?", 1, 4, 0)
Bool_direction = securedInput(1, 9, "text", 0, 0, "Right", "Left")
end
resetScreen()
if Torch_approval then
if torches_slots > 1 then
textOutput("Torches in the slots 1 to "..torches_slots, 1, 4, 0)
else
torches_slots = 1
textOutput("Torches in the slot 1", 1, 4, 0)
end
end
if fuel_slots > 1 then
textOutput("Fuel in the slots "..(torches_slots+1).." to "..(torches_slots+fuel_slots), 1, 5, 0)
else
fuel_slots = 1
textOutput("Fuel in the slot "..(torches_slots+1), 1, 5, 0)
end
if Chest_approval and not(enderchest) then
if chests_slots > 1 then
textOutput("Chests in the slots "..(torches_slots+fuel_slots+1).." to "..(torches_slots+fuel_slots+chests_slots), 1, 6, 0)
else
chests_slots = 1
textOutput("Chests in the slot "..(torches_slots+fuel_slots+1), 1, 6, 0)
end
end
if enderchest then
textOutput("The enderchest in the slot "..(torches_slots+fuel_slots+1), 1, 6, 0)
chests_slots = 1
end
if throw_stuff then
if garbage_slots > 1 then
textOutput("Please make sure there are samples of the items to throw in the slots "..(torches_slots+fuel_slots+chests_slots+1).." to "..(torches_slots+fuel_slots+chests_slots+garbage_slots), 1, 8, 0)
else
garbage_slots = 1
textOutput("Please make sure there is a sample of the item to throw in the slot "..(torches_slots+fuel_slots+chests_slots+1), 1, 8, 0)
end
end
if (Bool_direction == "r") then
Bool_direction = true
else
Bool_direction = false
end
textOutput("Press enter to start", 1, 11, 0)
while true do
press, key = os.pullEvent("key")
if press == "key" and key == keys.enter then
break
end
end
resetScreen()
textOutput("", 1, 11, 20)
if Torch_approval and (turtle.getItemCount(1) == 0) then
textOutput("The torches slot is empty. Are you sure you want to use torches ?", 1, 4, 0)
Torch_approval = convertToBool(securedInput(1, 6, "text", 0, 0, "Yes", "No"), "y")
elseif Torch_approval and (turtle.getItemCount(1) ~= 0) then
for u = 1, torches_slots-1 do
turtle.select(u+1)
if not(turtle.compareTo(1)) then
Torch_mismatch = true
end
end
if Torch_mismatch then
resetScreen()
textOutput("All the slots dedicated to the torches have not been set up correctly. Are you sure you want to use torches ?", 1, 4, 0)
Torch_approval = convertToBool(securedInput(1, 7, "text", 0, 0, "Yes", "No"), "y")
end
end
if Chest_approval and (turtle.getItemCount(torches_slots + fuel_slots + 1) == 0) then
resetScreen()
textOutput("The chests slot is empty. Are you sure you want to use chests ?", 1, 4, 0)
Chest_approval = convertToBool(securedInput(1, 6, "text", 0, 0, "Yes", "No"), "y")
elseif Chest_approval and (turtle.getItemCount(torches_slots + fuel_slots + 1) ~= 0) then
for u = 1, chests_slots-1 do
turtle.select(torches_slots + fuel_slots + u + 1)
if not(turtle.compareTo(torches_slots + fuel_slots + 1)) then
Chest_mismatch = true
end
end
if Chest_mismatch then
resetScreen()
textOutput("All the slots dedicated to the chests have not been set up correctly. Are you sure you want to use chests ?", 1, 4, 0)
Chest_approval = convertToBool(securedInput(1, 7, "text", 0, 0, "Yes", "No"), "y")
end
end
if Torch_approval then
empty_torches_slots = 0
for u = 1, torches_slots do
if turtle.getItemCount(u) == 0 then
empty_torches_slots = empty_torches_slots + 1
end
end
if empty_torches_slots == torches_slots then
shortage[1] = true
end
textOutput("No Torches -", 11, 11, 0)
end
if Torch_approval and (turtle.getItemCount(1) ~= 0) then
shortage[1] = false
textOutput("Torches OK -", 11, 11, 0)
end
if Chest_approval then
empty_chests_slots = 0
for u = 1, chests_slots do
if turtle.getItemCount(torches_slots + fuel_slots + u) == 0 then
empty_chests_slots = empty_chests_slots + 1
end
end
if empty_chests_slots == chests_slots then
shortage[3] = true
end
textOutput("No Chests -", 24, 11, 0)
end
if Chest_approval and (turtle.getItemCount(torches_slots + fuel_slots + 1) ~= 0) then
shortage[3] = false
textOutput("Chests OK -", 24, 11, 0)
end
textOutput("Fuel OK -", 1, 11, 0)
refuel_count = 80 - turtle.getFuelLevel()
FacingAngle, tunnel_forth, current_slot= 0, true, {1, 1, 1}
refuel_count = moveUp(true, 1, refuel_count, false)
if (Width == 1) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
end
for done_tunnels=1, tunnels_integer do
if (Width >= 2) then
for done_layers=1, math.ceil(Length/2) do
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
FacingAngle = turn(FacingAngle, Bool_direction, 1)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, Width, Height, "down", false, Bool_direction)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, Width, Height, Height_Position, false, not(Bool_direction))
FacingAngle = turn(FacingAngle, Bool_direction, 1)
if (done_layers%4 == 0) then
refuel_count = moveUp(false, 1, refuel_count, false)
FacingAngle = turn(FacingAngle, Bool_direction, 1)
placeTorch("front")
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count = moveUp(true, 1, refuel_count, false)
end
end
elseif (Width == 1) then
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, 2*math.ceil(Length/2), Height, "down", true, Bool_direction)
end
if (Height_Position == "up") then
refuel_count = moveUp(false, (Height - 3), refuel_count, false)
Height_Position = "down"
end
if tunnel_forth and (tunnels_integer - done_tunnels >= 1) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
FacingAngle = turn(FacingAngle, Bool_direction, 1)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, ((2*Width)+tunnels_separation), Height, "down", false, not(Bool_direction))
if (Height_Position == "up") then
refuel_count = moveUp(false, (Height - 3), refuel_count, false)
Height_Position = "down"
end
FacingAngle = turn(FacingAngle, Bool_direction, 1)
placeTorch("below")
elseif not(tunnel_forth) then
refuel_count = moveForward(FacingAngle, true, 1, true, false, refuel_count)
FacingAngle = turn(FacingAngle, Bool_direction, 1)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, ((2*Width)-1+tunnels_separation), Height, "down", false, Bool_direction)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, ((2*Width)-1+tunnels_separation), Height, Height_Position, false, not(Bool_direction))
if (Height_Position == "up") then
refuel_count = moveUp(false, (Height - 3), refuel_count, false)
Height_Position = "down"
end
FacingAngle = turn(FacingAngle, Bool_direction, 2)
refuel_count = moveForward(FacingAngle, true, (Width-2), true, true, refuel_count)
placeTorch("front")
FacingAngle = turn(FacingAngle, not(Bool_direction), 2)
refuel_count = moveForward(FacingAngle, true, (Width-2), true, true, refuel_count)
if (tunnels_integer - done_tunnels ~= 0) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, (tunnels_separation+1), Height, Height_Position, false, Bool_direction)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, (tunnels_separation+1), Height, Height_Position, false, not(Bool_direction))
refuel_count = moveForward(FacingAngle, false, tunnels_separation, true, true, refuel_count)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
placeTorch("front")
FacingAngle = turn(FacingAngle, not(Bool_direction), 2)
end
end
if tunnel_forth and (tunnels_integer - done_tunnels == 0) and (Width > 1) then
refuel_count = moveForward(FacingAngle, false, 2*math.ceil(Length/2), false, false, refuel_count)
FacingAngle = turn(FacingAngle, Bool_direction, 1)
refuel_count = moveForward(FacingAngle, true, 1, false, false, refuel_count)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, (Width - 1), Height, Height_Position, false, Bool_direction)
FacingAngle = turn(FacingAngle, Bool_direction, 1)
refuel_count = moveForward(FacingAngle, true, 1, false, false, refuel_count)
FacingAngle = turn(FacingAngle, Bool_direction, 1)
refuel_count, Height_Position = digVerticalLayer(refuel_count, FacingAngle, (Width - 1), Height, Height_Position, false, not(Bool_direction))
if (Height_Position == "up") then
refuel_count = moveUp(false, (Height - 3), refuel_count, false)
Height_Position = "down"
end
refuel_count = moveForward(FacingAngle, false, (Width - 2), false, false, refuel_count)
FacingAngle = turn(FacingAngle, Bool_direction, 2)
end
if (Width == 1) and (tunnels_integer - done_tunnels ~= 0) then
refuel_count = moveForward(FacingAngle, true, 1, true, true, refuel_count)
elseif (Width == 1) and (tunnels_integer - done_tunnels == 0) and tunnel_forth then
refuel_count = moveForward(FacingAngle, false, (2*math.ceil(Length/2)), false, false, refuel_count)
end
tunnel_forth = not(tunnel_forth)
end
refuel_count = moveUp(false, 1, refuel_count, false)
if (Width == 1) and not(tunnel_forth) then
refuel_count = moveForward(FacingAngle, false, 1, false, false, refuel_count)
turn(FacingAngle, Bool_direction, 1)
end
refuel_count = moveForward(FacingAngle, false, ((tunnels_integer*Width) - 1 + (tunnels_separation*(tunnels_integer - 1))), false, false, refuel_count)
FacingAngle = turn(FacingAngle, not(Bool_direction), 1)
refuel_count = moveForward(FacingAngle, true, 1, false, false, refuel_count)
resetScreen()
write("Done. I hope I worked well !")
term.setCursorPos(1,8)