Advertisement
dracoix

Patched Turtle v1.2

Jul 13th, 2012
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.08 KB | None | 0 0
  1. local tArgs = { ... }
  2. if #tArgs < 1 then
  3.     print( "Usage: excavate <diameter> <dive>" )
  4.     return
  5. end
  6.  
  7. -- Mine in a quarry pattern until we hit something we can't dig
  8. local size = tonumber( tArgs[1] )
  9. if size < 1 then
  10.     print( "Excavate diameter must be positive" )
  11.     return
  12. end
  13.  
  14. local depth = 0
  15.  
  16. local collected = 0
  17.  
  18. local xPos,zPos = 0,0
  19. local xDir,zDir = 0,1
  20. local xOrig,zOrig,yOrig = 0,0,0
  21.  
  22. if #tArgs > 1 then
  23.     yOrig = tonumber( tArgs[2] )   
  24. end
  25.  
  26. local function dump()
  27.     turtle.back()
  28.     turtle.back()
  29.     turtle.turnLeft()
  30.     turtle.turnLeft()
  31.     turtle.select(1)
  32.     turtle.drop()
  33.     turtle.select(2)
  34.     turtle.drop()
  35.     turtle.select(3)
  36.     turtle.drop()
  37.     turtle.select(4)
  38.     turtle.drop()
  39.     turtle.select(5)
  40.     turtle.drop()
  41.     turtle.select(6)
  42.     turtle.drop()
  43.     turtle.select(7)
  44.     turtle.drop()
  45.     turtle.select(8)
  46.     turtle.drop()
  47.     turtle.select(9)
  48.     turtle.drop()
  49.     turtle.select(1)
  50.     turtle.back()
  51.     turtle.back()
  52.     turtle.turnLeft()
  53.     turtle.turnLeft()
  54. end
  55.  
  56.  
  57. local function collect()
  58.     collected = collected + 1
  59.     if math.fmod(collected, 25) == 0 then
  60.         print( "Mined "..collected.." blocks." )
  61.     end
  62.    
  63.     for n=1,9 do
  64.         if turtle.getItemCount(n) == 0 then
  65.             return true
  66.         end
  67.     end
  68.    
  69.     print( "No empty slots left." )
  70.     return false
  71. end
  72.  
  73. local function tryForwards()
  74.     while not turtle.forward() do
  75.         if turtle.dig() then
  76.             if not collect() then
  77.                 return false
  78.             end
  79.         else
  80.             -- give sand a chance to fall
  81.             sleep(0.8)
  82.             if turtle.dig() then
  83.                 if not collect() then
  84.                     return false
  85.                 end
  86.             else
  87.                 return false
  88.             end
  89.         end
  90.     end
  91.     xPos = xPos + xDir
  92.     zPos = zPos + zDir
  93.     return true
  94. end
  95.  
  96. local function tryDown()
  97.     if not turtle.down() then
  98.         if turtle.digDown() then
  99.             if not collect() then
  100.                 return false
  101.             end
  102.         end
  103.         if not turtle.down() then
  104.             return false
  105.         end
  106.     end
  107.     depth = depth + 1
  108.     if math.fmod( depth, 10 ) == 0 then
  109.         print( "Descended "..depth.." metres." )
  110.     end
  111.     return true
  112. end
  113.  
  114. local function turnLeft()
  115.     turtle.turnLeft()
  116.     xDir, zDir = -zDir, xDir
  117. end
  118.  
  119. local function turnRight()
  120.     turtle.turnRight()
  121.     xDir, zDir = zDir, -xDir
  122. end
  123.  
  124. print( "Excavating..." )
  125.  
  126. local reseal = false
  127. if turtle.digDown() then
  128.     reseal = true
  129. end
  130.  
  131. local function goBack()
  132.     print ( "Going down..." )
  133.     while yOrig > depth do
  134.         if turtle.down() then
  135.             depth = depth + 1
  136.         elseif turtle.digDown() then
  137.             collect()
  138.         else
  139.             sleep( 0.5 )
  140.         end
  141.     end
  142. end
  143.  
  144. while true do
  145. local alternate = 0
  146. local done = false
  147. while not done do
  148.     goBack()
  149.     for n=1,size do
  150.         for m=1,size-1 do
  151.             if not tryForwards() then
  152.                 done = true
  153.                 break
  154.             end
  155.         end
  156.         if done then
  157.             break
  158.         end
  159.         if n<size then
  160.             if math.fmod(n + alternate,2) == 0 then
  161.                 turnLeft()
  162.                 if not tryForwards() then
  163.                     done = true
  164.                     break
  165.                 end
  166.                 turnLeft()
  167.             else
  168.                 turnRight()
  169.                 if not tryForwards() then
  170.                     done = true
  171.                     break
  172.                 end
  173.                 turnRight()
  174.             end
  175.         end
  176.     end
  177.     if done then
  178.         break
  179.     end
  180.    
  181.     if size > 1 then
  182.         if math.fmod(size,2) == 0 then
  183.             turnRight()
  184.         else
  185.             if alternate == 0 then
  186.                 turnLeft()
  187.             else
  188.                 turnRight()
  189.             end
  190.             alternate = 1 - alternate
  191.         end
  192.     end
  193.    
  194.     if not tryDown() then
  195.         done = true
  196.         break
  197.     end
  198. end
  199.  
  200. xOrig = xPos
  201. zOrig = zPos
  202. yOrig = depth
  203. print( "Returning to surface..." )
  204.  
  205. -- Return to where we started
  206. while depth > 0 do
  207.     if turtle.up() then
  208.         depth = depth - 1
  209.     elseif turtle.digUp() then
  210.         collect()
  211.     else
  212.         sleep( 0.5 )
  213.     end
  214. end
  215.  
  216. if xPos > 0 then
  217.     while xDir ~= -1 do
  218.         turnLeft()
  219.     end
  220.     while xPos > 0 do
  221.         if turtle.forward() then
  222.             xPos = xPos - 1
  223.         elseif turtle.dig() then
  224.             collect()
  225.         else
  226.             sleep( 0.5 )
  227.         end
  228.     end
  229. end
  230.  
  231. if zPos > 0 then
  232.     while zDir ~= -1 do
  233.         turnLeft()
  234.     end
  235.     while zPos > 0 do
  236.         if turtle.forward() then
  237.             zPos = zPos - 1
  238.         elseif turtle.dig() then
  239.             collected = collected + 1
  240.         else
  241.             sleep( 0.5 )
  242.         end
  243.     end
  244. end
  245. while zDir ~= 1 do
  246.     turnLeft()
  247. end
  248.  
  249. -- Seal the hole
  250. if reseal then
  251.     turtle.placeDown()
  252. end
  253.  
  254. print( "Mined "..collected.." blocks total." )
  255.  
  256. dump()
  257.  
  258. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement