Advertisement
AleksDolgop

Computercraft turtle dig_room

Feb 14th, 2020
364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 5.70 KB | None | 0 0
  1.  
  2. local tArgs = { ... }
  3. if #tArgs ~= 3 then
  4.         print( "Usage: dig_roomV2 <Width><Length><0/1>" )
  5.         return
  6. end
  7.  
  8. local goTo
  9. local checkFuel
  10. local chackInv
  11.  
  12. local width    = tonumber( tArgs[1] )
  13. local length    = tonumber( tArgs[2] )
  14. local DIRECT    = tonumber( tArgs[3] )
  15. if width < 1 then
  16.     print( "X size must be positive" )
  17.     return
  18. end
  19. if length < 1 then
  20.     print( "Depth must be positive" )
  21.     return
  22. end
  23. if DIRECT ~= 0 and DIRECT ~= 1 then
  24.     print( "Direct left = 0, right = 1" )
  25.     return
  26. end
  27.  
  28. local xPos = 0
  29. local yPos = 0
  30. local xDir = 1
  31. local yDir = 0
  32.  
  33. local function checkInv()
  34.     if turtle.getItemCount(16) > 0 then
  35.         buf_x, buf_y, buf_xDir, buf_yDir = xPos, yPos, xDir, yDir
  36.         goTo(0, 0, -1, 0)
  37.         dropItems()
  38.         goTo(buf_x, buf_y, buf_xDir, buf_yDir)
  39.         return true
  40.     end
  41.     return false
  42. end
  43.  
  44. local function checkFuel()
  45.     if turtle.getFuelLevel() == 0 then
  46.         print("Low fuel, wait fuel...")
  47.         while turtle.getFuelLevel() == 0 do
  48.             turtle.refuel()
  49.             sleep(1)
  50.         end
  51.     end
  52. end
  53.  
  54. local function dig(noCenter)
  55.     while turtle.detectUp() do turtle.digUp() end
  56.     checkInv()
  57.     while turtle.detect() and not noCenter do turtle.dig() end
  58.     checkInv()
  59.     turtle.digDown()
  60.     checkInv()
  61. end
  62.  
  63. local function forward()
  64.     if not turtle.forward() then
  65.         checkFuel()
  66.         turtle.attack()
  67.         return false
  68.     end
  69.     xPos = xPos + xDir
  70.     yPos = yPos + yDir
  71.     -- print(xPos, yPos, xDir, yDir)
  72.     return true
  73. end
  74.  
  75. local function turnRight()
  76.     if not turtle.turnRight() then
  77.         checkFuel()
  78.         turtle.attack()
  79.         return false
  80.     end
  81.     xDir, yDir = -yDir, xDir
  82.     return true
  83. end
  84.  
  85. local function turnLeft()
  86.     if not turtle.turnLeft() then
  87.         checkFuel()
  88.         turtle.attack()
  89.         return false
  90.     end
  91.     xDir, yDir = yDir, -xDir
  92.     return true
  93. end
  94.  
  95. function fastTurn(xd, yd)
  96.     local turnsLeft = 0
  97.     local turnsRight = 0
  98.     local buf_xDir = xDir
  99.     local buf_yDir = yDir
  100.     while buf_xDir ~= xd or buf_yDir ~= yd do
  101.         buf_xDir, buf_yDir = buf_yDir, -buf_xDir
  102.         turnsLeft = turnsLeft + 1
  103.     end
  104.     buf_xDir = xDir
  105.     buf_yDir = yDir
  106.     while buf_xDir ~= xd or buf_yDir ~= yd do
  107.         buf_xDir, buf_yDir = -buf_yDir, buf_xDir
  108.         turnsRight = turnsRight + 1
  109.     end
  110.     if turnsRight < turnsLeft then
  111.         return true
  112.     else
  113.         return false
  114.     end
  115. end
  116.  
  117. function goTo(x, y, xd, yd)
  118.     if x > xPos then
  119.         turn = fastTurn(1, 0)
  120.         while xDir ~= 1 do
  121.             if turn then
  122.                 turnRight()
  123.             else
  124.                 turnLeft()
  125.             end
  126.         end
  127.         while xPos ~= x do
  128.             forward()
  129.         end
  130.         --------------------------------
  131.         if y > yPos then
  132.             turn = fastTurn(0, 1)
  133.             while yDir ~= 1 do
  134.                 if turn then
  135.                     turnRight()
  136.                 else
  137.                     turnLeft()
  138.                 end
  139.             end
  140.             while yPos ~= y do
  141.                 forward()
  142.             end
  143.         else
  144.             turn = fastTurn(0, -1)
  145.             while yDir ~= -1 do
  146.                 if turn then
  147.                     turnRight()
  148.                 else
  149.                     turnLeft()
  150.                 end
  151.             end
  152.             while yPos ~= y do
  153.                 forward()
  154.             end
  155.         end
  156.     else
  157.         if y > yPos then
  158.             turn = fastTurn(0, 1)
  159.             while yDir ~= 1 do
  160.                 if turn then
  161.                     turnRight()
  162.                 else
  163.                     turnLeft()
  164.                 end
  165.             end
  166.             while yPos ~= y do
  167.                 forward()
  168.             end
  169.         else
  170.             turn = fastTurn(0, -1)
  171.             while yDir ~= -1 do
  172.                 if turn then
  173.                     turnRight()
  174.                 else
  175.                     turnLeft()
  176.                 end
  177.             end
  178.             while yPos ~= y do
  179.                 forward()
  180.             end
  181.         end
  182.         --------------------------------
  183.         turn = fastTurn(-1, 0)
  184.         while xDir ~= -1 do
  185.             if turn then
  186.                 turnRight()
  187.             else
  188.                 turnLeft()
  189.             end
  190.         end
  191.         while xPos ~= x do
  192.             forward()
  193.         end
  194.     end
  195.     --------------------------------
  196.     turn = fastTurn(xd, yd)
  197.     while xDir ~= xd or yDir ~= yd  do
  198.         if turn then
  199.             turnRight()
  200.         else
  201.             turnLeft()
  202.         end
  203.     end
  204. end
  205.  
  206. function dropItems()
  207.     local i = 1
  208.     while i <= 16 do
  209.         turtle.select(i)
  210.         turtle.drop()
  211.         i = i + 1
  212.     end
  213.     turtle.select(1)
  214.     return true
  215. end
  216.  
  217. Inc = 0
  218. turnEd = false
  219. while Inc < length do
  220.     Jinc = 0
  221.     while Jinc < width-1 do
  222.         -- print(Inc, Jinc)
  223.         dig()
  224.         forward()
  225.         Jinc = Jinc + 1
  226.     end
  227.     Inc = Inc + 1
  228.     if Inc == length then
  229.         dig(true)
  230.         break
  231.     end
  232.     if not turnEd then
  233.         if DIRECT == 0 then
  234.             turnLeft()
  235.             dig()
  236.             forward()
  237.             turnLeft()
  238.         else
  239.             turnRight()
  240.             dig()
  241.             forward()
  242.             turnRight()
  243.         end
  244.         turnEd = true
  245.     else
  246.         if DIRECT ~= 0 then
  247.             turnLeft()
  248.             dig()
  249.             forward()
  250.             turnLeft()
  251.         else
  252.             turnRight()
  253.             dig()
  254.             forward()
  255.             turnRight()
  256.         end
  257.         turnEd = false
  258.     end  
  259. end
  260.  
  261. goTo(0,0,-1,0)
  262. dropItems()
  263. turnRight()
  264. turnRight()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement