TheDarkVoid

Turtle Quarry

Mar 17th, 2014
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 12.04 KB | None | 0 0
  1. local relX = 0 --relative position from home
  2. local relY = 0 --relative position from home
  3. local relZ = 1 --relative position from home
  4. local curDir = 0 --Current Direction the turtle is facing relative to home chest
  5. local YLevel = 1 --Y level the turtle is at, used for Post-resume
  6. local sizeX = 1 --Size of Quarry
  7. local sizeY = 1 --Size of Quarry
  8. local sizeZ = 1 --Size of Quarry
  9. local X = 1 --saved pos for resume, this is the for loop's i value
  10. local Y = 1     --saved pos for resume, this is the for loop's i value
  11. local Z = 1 --saved pos for resume, this is the for loop's i value
  12. local facing = 2 --saved facing dir for resume
  13. local atHome = true --is the turtle at home
  14. local swap = false --is the turtle minging left to right or right to left
  15. local hasStarted = false
  16. local isGoingHome = false
  17. local hasCompleted = false
  18. local isResume = false
  19. function Start() --initalize
  20.         print("Define Quarry Size")
  21.         write("X: ")
  22.         sizeX = tonumber(read())
  23.         write("Z: ")
  24.         sizeZ = tonumber(read())
  25.         write("Y: ")
  26.         sizeY = tonumber(read())
  27.         print("Starting...")
  28.         CheckFuel()
  29.         Turn("right", 2)
  30.         Move("forward", 1)
  31.         Move("down", 2)
  32.         turtle.digDown()
  33.         hasStarted = true
  34.         atHome = false
  35.         while hasCompleted == false do
  36.                 Dig(1,YLevel,1, sizeX, sizeY, sizeZ)
  37.                 if isGoingHome == true then
  38.                         GoHome()
  39.                 end
  40.                 print("Looping")
  41.         end
  42.         --print("Done!")
  43. end
  44. function Dig(curX, curY, curZ, curSizeX, curSizeY, curSizeZ) --digging control
  45.         for i=tonumber(curY), curSizeY, 1 do
  46.                 for i=tonumber(curX), curSizeX, 1 do
  47.                         for i = tonumber(curZ), curSizeZ-1, 1 do
  48.                                 --print("moving in Z, ".. curDir.." i: "..i)
  49.                                 if CheckStatus() == false then
  50.                                         isGoingHome = true
  51.                                         Z = i
  52.                                         print("Got Full, Going Home")
  53.                                         break
  54.                                 end
  55.                                 Move("forward", 1)
  56.                                 turtle.digDown()
  57.                                 if not i == sizeZ then
  58.                                         turtle.dig()
  59.                                 end
  60.                                 turtle.digUp()
  61.                                 if curDir == 0 then
  62.                                         relZ = relZ -1
  63.                                 elseif curDir == 2 then
  64.                                         relZ = relZ +1
  65.                                 end
  66.                                 --os.sleep(1)
  67.                         end
  68.                         if isGoingHome == true then
  69.                                 X = i
  70.                                 break
  71.                         end
  72.                         if i < sizeX then
  73.                                 if swap then
  74.                                         --print("moving right")
  75.                                         if curDir == 2 then
  76.                                                 Turn("right", 1)
  77.                                                 Move("forward", 1)
  78.                                                 Turn("right", 1)
  79.                                         elseif curDir == 0 then
  80.                                                 Turn("left", 1)
  81.                                                 Move("forward", 1)
  82.                                                 Turn("left", 1)
  83.                                         end
  84.                                 elseif not swap then
  85.                                         --print("moving left")
  86.                                         if curDir == 0 then
  87.                                                 Turn("right", 1)
  88.                                                 Move("forward", 1)
  89.                                                 Turn("right", 1)
  90.                                         elseif curDir == 2 then
  91.                                                 Turn("left", 1)
  92.                                                 Move("forward", 1)
  93.                                                 Turn("left", 1)
  94.                                         end
  95.                                 end
  96.                                 relX = relX +1
  97.                                 turtle.digDown()
  98.                                 turtle.dig()
  99.                                 turtle.digUp()
  100.                         elseif i == sizeX then
  101.                                 if swap == true then
  102.                                         Turn("right",2)
  103.                                 elseif swap == false then
  104.                                         Turn("left",2)
  105.                                 end
  106.                         end
  107.                         --print("moving in X, ".. curDir.." i: "..i)
  108.                         --os.sleep(1)
  109.                 end
  110.                 if isResume == ture then
  111.                         isResume = false
  112.                         break
  113.                 end
  114.                 if isGoingHome == true then
  115.                         Y = i
  116.                         break
  117.                 end
  118.                 CheckFuel()
  119.                 if i < sizeY then
  120.                         Move("down", 3)
  121.                         turtle.digDown()
  122.                         swap = not swap
  123.                         --print("swap stat: "..tostring(swap))
  124.                         --print("moving in Y, ".. curDir.." i: "..i)
  125.                         --os.sleep(1)
  126.                 end
  127.                 if i >= sizeY then
  128.                         isGoingHome = true
  129.                         hasStarted = false
  130.                         hasCompleted = true
  131.                         break
  132.                 end
  133.                 YLevel = i
  134.         end
  135. end
  136. function CheckStatus() -- check if inventory is full
  137.         if turtle.getItemCount(15) > 0 then
  138.                 return false
  139.         else
  140.                 return true
  141.         end
  142. end
  143. function Resume() -- sets the turtle up for a resume
  144.         print("Resuming...")
  145.         isResume = true
  146.         atHome = false
  147.         isGoingHome = false
  148.         Turn("right", 2)
  149.         Move("forward", math.abs(Z))
  150.         if X < 0 then
  151.                 Turn("right", 1)
  152.         end
  153.         if X > 0 then
  154.                 Turn("left", 1)
  155.         end
  156.         Move("forward", math.abs(X))
  157.         while not curDir == facing do
  158.                 Turn("right", 1)
  159.         end
  160.         Move("down", math.abs(Y))
  161.         Dig(math.abs(X),math.abs(Y),math.abs(Z),sizeX-math.abs(X), sizeY-math.abs(Y), sizeZ-math.abs(Z))
  162. end
  163. function GoHome() --sends the turtle home
  164.         print("Going Home...")
  165.         --print(X .. ","..Y..","..Z .."Dir: "..curDir)
  166.         facing = curDir
  167.         Move("up", math.abs(relY))
  168.         if curDir == 2 then
  169.                 Turn("left",2)
  170.         end
  171.         if not curX == nil then
  172.                 if curX < 0 then
  173.                         Turn("right", 1)
  174.                 end
  175.                 if curX > 0 then
  176.                         Turn("left", 1)
  177.                 end
  178.         end
  179.         Move("forward", math.abs(relX))
  180.         if curDir == 1 then
  181.                 Turn("left",1)
  182.         end
  183.         if curDir == 2 then
  184.                 Turn("left",2)
  185.         end
  186.         if curDir == 3 then
  187.                 Turn("right",1)
  188.         end
  189.         Move("forward", math.abs(relZ))
  190.         print("Got Home")
  191.         atHome = true
  192.         CheckFuel()
  193.         Deposit()
  194. end
  195. function CheckFuel() -- checks the fuel level, refuels and gets more is the turtle is at home
  196.         print("Refueling...")
  197.         turtle.select(16)
  198.         if atHome == true then
  199.                 if turtle.getItemCount(16) <= 1 then
  200.                         GetFuel()
  201.                 end
  202.         end
  203.         turtle.select(16)
  204.         while turtle.getFuelLevel() <= 500 do
  205.                 turtle.refuel(1)
  206.         end
  207.         turtle.select(1)
  208.         print("Fuel Level: ".. turtle.getFuelLevel());
  209. end
  210. function GetFuel() -- gets more fuel
  211.         print("Getting More Fuel...")
  212.         Move("up",1)
  213.         while turtle.getItemCount(16) < 64 do
  214.                 turtle.suck(1)
  215.         end
  216.         Move("down",1)
  217.         --Deposit()
  218. end
  219. function Deposit() -- deposits items
  220.         print("Depositing Items...");
  221.         for i=1, 15, 1 do
  222.                 turtle.select(i)
  223.                 turtle.drop()
  224.         end
  225.         turtle.select(1)
  226.         if hasStarted == true then
  227.                 Resume()
  228.         else
  229.                 return
  230.         end
  231. end
  232. function Turn(dir, count) --turn controller to keep track of direction
  233.         if dir == "left" then
  234.                 for i=1, count, 1 do
  235.                         --print("turing Left, cur Dir: "..curDir )
  236.                         turtle.turnLeft()
  237.                         curDir = curDir - 1
  238.                         if curDir < 0 then
  239.                                 curDir = 3
  240.                         end
  241.                         --print("turned Left, new Dir: "..curDir )
  242.                         --print("left, current Dir: "..curDir)
  243.                 end
  244.         end
  245.         if dir == "right" then
  246.                 for i=1, count, 1 do
  247.                         --print("turning Right, cur Dir: "..curDir )
  248.                         turtle.turnRight()
  249.                         curDir = curDir + 1
  250.                         if curDir > 3 then
  251.                                 curDir = 0
  252.                         end
  253.                         --print("turned right, new Dir: "..curDir )
  254.                         --print("right, current Dir: "..curDir)
  255.                 end
  256.         end
  257. end
  258. function Move(dir, dist) --move controller to insure propper movement and keep track of relative position
  259.         if dir == "forward" then
  260.                 for i=1, dist, 1 do
  261.                         while not turtle.forward() do
  262.                                 if turtle.detect() then
  263.                                         turtle.dig()
  264.                                 else
  265.                                         turtle.attack()
  266.                                 end
  267.                                 --turtle.forward()
  268.                                 --break
  269.                         end
  270.                         --if curDir == 0 then
  271.                                 --relZ = relZ - 1
  272.                         --end
  273.                         --if curDir == 2 then
  274.                                 --relZ = relZ + 1
  275.                         --end
  276.                         --if curDir == 1 then
  277.                                 --relZ = relX + 1
  278.                         --end
  279.                         --if curDir == 3 then
  280.                                 --relZ = relX - 1
  281.                         --end
  282.                 end
  283.         end
  284.         if dir == "up" then
  285.                 for i=1, dist, 1 do
  286.                         --print("Moving up...")
  287.                         while turtle.up() == false do
  288.                                 if turtle.detectUp() then
  289.                                         turtle.digUp()
  290.                                 else
  291.                                         turtle.attackUp()
  292.                                 end
  293.                                 --turtle.up()
  294.                                 --break
  295.                         end
  296.                         relY = relY + 1
  297.                 end
  298.         end
  299.         if dir == "down" then
  300.                 for i=1, dist, 1 do
  301.                         while not turtle.down() do
  302.                                 if turtle.detectDown() then
  303.                                         turtle.digDown()
  304.                                 else
  305.                                         turtle.attackDown()
  306.                                 end
  307.                                 --turtle.down()
  308.                                 --break
  309.                         end
  310.                         relY = relY - 1
  311.                 end
  312.         end
  313. end
  314. Start() --Calls Start
  315. print("Done!")
Advertisement
Add Comment
Please, Sign In to add comment