TheDarkVoid

Turtle Quarry

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