Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --Header
- local tArgs = { ... }
- if #tArgs ~= 3 then
- print( "Syntax: adv_excavate <length> <height> <width>" )
- return
- end
- local target = {
- x = math.ceil( tonumber(tArgs[1]) ),
- y = math.ceil( tonumber(tArgs[2]) ),
- z = math.ceil( tonumber(tArgs[3]) )
- }
- if (target.x < 1) or (target.y < 1) or (target.z < 1) then
- print( "Volume must be greater than or equal to 1 block" )
- return
- end
- local volume = target.x * target.y * target.z
- local number_of_layers = math.ceil(target.y / 3)
- local path_length = (number_of_layers * target.x * target.z) + (target.y - 1) + 1 --full layers + movement between layers + initial move downwards
- local fuel = turtle.getFuelLevel()
- if (fuel < path_length) then
- print("Not enough fuel. Please refuel first!")
- print("Fuel needed: "..path_length)
- print("Fuel stored: "..fuel)
- return
- end
- --Header Ende
- --Funktionen
- --shortcuts
- function downwardsMove() --auch initaler Move
- if turtle.detectDown() then
- turtle.digDown()
- end
- turtle.down()
- end
- function dig()
- if turtle.detect() then
- turtle.dig()
- end
- end
- function digUp()
- if turtle.detectUp() then
- turtle.digUp()
- end
- end
- function digDown()
- if turtle.detectDown() then
- turtle.digDown()
- end
- end
- --shortcuts ende
- function singleDig(layer, row, step)
- if not (step == target.x) then
- dig()
- end
- if not ( (layer == number_of_layers) and (target.y%3 == 1) ) then
- digUp()
- end
- if not ( (layer == number_of_layers) and not (target.y%3 == 0) ) then
- digDown()
- end
- end
- function singleStep(layer, row, step)
- singleDig(layer, row, step)
- if not (step == target.x) then
- while not turtle.forward() do
- singleDig(layer, row, step)
- end
- end
- end
- function singleRow(layer, row)
- for step = 1, target.x do
- singleStep(layer, row, step)
- end
- end
- function turn(layer, row)
- if (target.z%2 == 0) and (layer%2 == 0) then --Spezialfall Spiegelung wenn z gerade und layer gerade
- if (row%2 == 1) then
- turtle.turnLeft()
- elseif (row%2 == 0) then
- turtle.turnRight()
- end
- else --z ungerade oder ungerade layer
- if (row%2 == 1) then
- turtle.turnRight()
- elseif (row%2 == 0) then
- turtle.turnLeft()
- end
- end
- end
- function singleLayer(layer)
- for row = 1, target.z do
- singleRow(layer, row)
- if not (row == target.z) then
- turn(layer, row)
- while not turtle.forward() do
- turtle.dig()
- end
- turn(layer, row)
- end
- end
- end
- function excavate()
- downwardsMove()
- if not (target.y == 1) then
- downwardsMove()
- end
- for layer = 1, number_of_layers do
- singleLayer(layer)
- if not (layer == number_of_layers - 1) then
- steps = 3
- elseif (layer == number_of_layers - 1) and (target.y%3 == 1) then
- steps = 2
- else
- steps = 3
- end
- if not (layer == number_of_layers) then
- for i = 1, steps do
- downwardsMove()
- end
- turtle.turnLeft()
- turtle.turnLeft()
- end
- end
- end
- --Funktionen Ende
- --Programm
- excavate()
- --Programm Ende
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement