Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local relX = 0 --relative position from home
- local relY = 0 --relative position from home
- local relZ = 1 --relative position from home
- local curDir = 0 --Current Direction the turtle is facing relative to home chest
- local YLevel = 1 --Y level the turtle is at, used for Post-resume
- local sizeX = 1 --Size of Quarry
- local sizeY = 1 --Size of Quarry
- local sizeZ = 1 --Size of Quarry
- local X = 1 --saved pos for resume, this is the for loop's i value
- local Y = 1 --saved pos for resume, this is the for loop's i value
- local Z = 1 --saved pos for resume, this is the for loop's i value
- local facing = 2 --saved facing dir for resume
- local atHome = true --is the turtle at home
- local swap = false --is the turtle minging left to right or right to left
- local hasStarted = false
- local isGoingHome = false
- local hasCompleted = false
- local isResume = false
- function Start() --initalize
- print("Define Quarry Size")
- write("X: ")
- sizeX = tonumber(read())
- write("Z: ")
- sizeZ = tonumber(read())
- write("Y: ")
- sizeY = tonumber(read())
- print("Starting...")
- CheckFuel()
- Turn("right", 2)
- Move("forward", 1)
- Move("down", 2)
- turtle.digDown()
- hasStarted = true
- atHome = false
- while hasCompleted == false do
- Dig(1,YLevel,1, sizeX, sizeY, sizeZ)
- if isGoingHome == true then
- GoHome()
- end
- print("Looping")
- end
- --print("Done!")
- end
- function Dig(curX, curY, curZ, curSizeX, curSizeY, curSizeZ) --digging control
- for i=tonumber(curY), curSizeY, 1 do
- for i=tonumber(curX), curSizeX, 1 do
- for i = tonumber(curZ), curSizeZ-1, 1 do
- --print("moving in Z, ".. curDir.." i: "..i)
- if CheckStatus() == false then
- isGoingHome = true
- Z = i
- print("Got Full, Going Home")
- break
- end
- Move("forward", 1)
- turtle.digDown()
- if not i == sizeZ then
- turtle.dig()
- end
- turtle.digUp()
- if curDir == 0 then
- relZ = relZ -1
- elseif curDir == 2 then
- relZ = relZ +1
- end
- --os.sleep(1)
- end
- if isGoingHome == true then
- X = i
- break
- end
- if i < sizeX then
- if swap then
- --print("moving right")
- if curDir == 2 then
- Turn("right", 1)
- Move("forward", 1)
- Turn("right", 1)
- elseif curDir == 0 then
- Turn("left", 1)
- Move("forward", 1)
- Turn("left", 1)
- end
- elseif not swap then
- --print("moving left")
- if curDir == 0 then
- Turn("right", 1)
- Move("forward", 1)
- Turn("right", 1)
- elseif curDir == 2 then
- Turn("left", 1)
- Move("forward", 1)
- Turn("left", 1)
- end
- end
- relX = relX +1
- turtle.digDown()
- turtle.dig()
- turtle.digUp()
- elseif i == sizeX then
- if swap == true then
- Turn("right",2)
- elseif swap == false then
- Turn("left",2)
- end
- end
- --print("moving in X, ".. curDir.." i: "..i)
- --os.sleep(1)
- end
- if isResume == ture then
- isResume = false
- break
- end
- if isGoingHome == true then
- Y = i
- break
- end
- CheckFuel()
- if i < sizeY then
- Move("down", 3)
- turtle.digDown()
- swap = not swap
- --print("swap stat: "..tostring(swap))
- --print("moving in Y, ".. curDir.." i: "..i)
- --os.sleep(1)
- end
- if i >= sizeY then
- isGoingHome = true
- hasStarted = false
- hasCompleted = true
- break
- end
- YLevel = i
- end
- end
- function CheckStatus() -- check if inventory is full
- if turtle.getItemCount(15) > 0 then
- return false
- else
- return true
- end
- end
- function Resume() -- sets the turtle up for a resume
- print("Resuming...")
- isResume = true
- atHome = false
- isGoingHome = false
- Turn("right", 2)
- Move("forward", math.abs(Z))
- if X < 0 then
- Turn("right", 1)
- end
- if X > 0 then
- Turn("left", 1)
- end
- Move("forward", math.abs(X))
- while not curDir == facing do
- Turn("right", 1)
- end
- Move("down", math.abs(Y))
- Dig(math.abs(X),math.abs(Y),math.abs(Z),sizeX-math.abs(X), sizeY-math.abs(Y), sizeZ-math.abs(Z))
- end
- function GoHome() --sends the turtle home
- print("Going Home...")
- --print(X .. ","..Y..","..Z .."Dir: "..curDir)
- facing = curDir
- Move("up", math.abs(relY))
- if curDir == 2 then
- Turn("left",2)
- end
- if not curX == nil then
- if curX < 0 then
- Turn("right", 1)
- end
- if curX > 0 then
- Turn("left", 1)
- end
- end
- Move("forward", math.abs(relX))
- if curDir == 1 then
- Turn("left",1)
- end
- if curDir == 2 then
- Turn("left",2)
- end
- if curDir == 3 then
- Turn("right",1)
- end
- Move("forward", math.abs(relZ))
- print("Got Home")
- atHome = true
- CheckFuel()
- Deposit()
- end
- function CheckFuel() -- checks the fuel level, refuels and gets more is the turtle is at home
- print("Refueling...")
- turtle.select(16)
- if atHome == true then
- if turtle.getItemCount(16) <= 1 then
- GetFuel()
- end
- end
- turtle.select(16)
- while turtle.getFuelLevel() <= 500 do
- turtle.refuel(1)
- end
- turtle.select(1)
- print("Fuel Level: ".. turtle.getFuelLevel());
- end
- function GetFuel() -- gets more fuel
- print("Getting More Fuel...")
- Move("up",1)
- while turtle.getItemCount(16) < 64 do
- turtle.suck(1)
- end
- Move("down",1)
- --Deposit()
- end
- function Deposit() -- deposits items
- print("Depositing Items...");
- for i=1, 15, 1 do
- turtle.select(i)
- turtle.drop()
- end
- turtle.select(1)
- if hasStarted == true then
- Resume()
- else
- return
- end
- end
- function Turn(dir, count) --turn controller to keep track of direction
- if dir == "left" then
- for i=1, count, 1 do
- --print("turing Left, cur Dir: "..curDir )
- turtle.turnLeft()
- curDir = curDir - 1
- if curDir < 0 then
- curDir = 3
- end
- --print("turned Left, new Dir: "..curDir )
- --print("left, current Dir: "..curDir)
- end
- end
- if dir == "right" then
- for i=1, count, 1 do
- --print("turning Right, cur Dir: "..curDir )
- turtle.turnRight()
- curDir = curDir + 1
- if curDir > 3 then
- curDir = 0
- end
- --print("turned right, new Dir: "..curDir )
- --print("right, current Dir: "..curDir)
- end
- end
- end
- function Move(dir, dist) --move controller to insure propper movement and keep track of relative position
- if dir == "forward" then
- for i=1, dist, 1 do
- while not turtle.forward() do
- if turtle.detect() then
- turtle.dig()
- else
- turtle.attack()
- end
- --turtle.forward()
- --break
- end
- --if curDir == 0 then
- --relZ = relZ - 1
- --end
- --if curDir == 2 then
- --relZ = relZ + 1
- --end
- --if curDir == 1 then
- --relZ = relX + 1
- --end
- --if curDir == 3 then
- --relZ = relX - 1
- --end
- end
- end
- if dir == "up" then
- for i=1, dist, 1 do
- --print("Moving up...")
- while turtle.up() == false do
- if turtle.detectUp() then
- turtle.digUp()
- else
- turtle.attackUp()
- end
- --turtle.up()
- --break
- end
- relY = relY + 1
- end
- end
- if dir == "down" then
- for i=1, dist, 1 do
- while not turtle.down() do
- if turtle.detectDown() then
- turtle.digDown()
- else
- turtle.attackDown()
- end
- --turtle.down()
- --break
- end
- relY = relY - 1
- end
- end
- end
- Start() --Calls Start
- print("Done!")
Advertisement
Add Comment
Please, Sign In to add comment