bwcbwc

Computercraft branchmine turtle program

Feb 25th, 2013
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.51 KB | None | 0 0
  1. local tArgs = { ... }
  2. if #tArgs ~= 2 then
  3.     print( "Usage: branchmine <tunnellength> <tunnelcount>" )
  4.     return
  5. end
  6.  
  7. -- Mine in a parallel tunnel pattern until we hit something we can't dig
  8. local length = tonumber( tArgs[1] )
  9. local tunnels= tonumber( tArgs[2] )
  10. if length < 1 then
  11.     print( "Tunnel length must be positive.\n" )
  12.     return
  13. end
  14. if tunnels < 1 then
  15.     print( "# of tunnels must be positive.\n" )
  16.     return
  17. end
  18.  
  19. local function refuel()
  20.     local fuelLevel = turtle.getFuelLevel()
  21.     if fuelLevel == "unlimited" or fuelLevel > 0 then
  22.         return
  23.     end
  24.    
  25.     local function tryRefuel()
  26.         for n=1,16 do
  27.             if turtle.getItemCount(n) > 0 then
  28.                 turtle.select(n)
  29.                 if turtle.refuel(1) then
  30.                     turtle.select(1)
  31.                     return true
  32.                 end
  33.             end
  34.         end
  35.         turtle.select(1)
  36.         return false
  37.     end
  38.    
  39.     if not tryRefuel() then
  40.         print( "Add more fuel to continue." )
  41.         while not tryRefuel() do
  42.             sleep(1)
  43.         end
  44.         print( "Resuming Tunnel." )
  45.     end
  46. end
  47.  
  48. local collected=0
  49.  
  50. local function collect()
  51.     collected = collected + 1
  52.     if math.fmod(collected, 25) == 0 then
  53.         print( "Mined "..collected.." items." )
  54.     end
  55. end
  56.  
  57. local function tryDig()
  58.     while turtle.detect() do
  59.         if turtle.dig() then
  60.             collect()
  61.             sleep(0.3)
  62.         else
  63.             return false
  64.         end
  65.     end
  66.     return true
  67. end
  68.  
  69. local function tryForward()
  70.     refuel()
  71.     while not turtle.forward() do
  72.         if turtle.detect() then
  73.             if not tryDig() then
  74.                 return false
  75.             end
  76.         elseif turtle.attack() then
  77.             collect()
  78.         else
  79.             sleep( 0.3 )
  80.         end
  81.     end
  82.     return true
  83. end
  84.  
  85. local function tryDigUp()
  86.     while turtle.detectUp() do
  87.         if turtle.digUp() then
  88.             collect()
  89.             sleep(0.3)
  90.         else
  91.             return false
  92.         end
  93.     end
  94.     return true
  95. end
  96.  
  97. local function tryUp()
  98.     refuel()
  99.     while not turtle.up() do
  100.         if turtle.detectUp() then
  101.             if not tryDigUp() then
  102.                 return false
  103.             end
  104.         elseif turtle.attackUp() then
  105.             collect()
  106.         else
  107.             sleep( 0.3 )
  108.         end
  109.     end
  110.     return true
  111. end
  112.  
  113. local function tryDigDown()
  114.  while turtle.detectDown() do
  115.   if turtle.digDown() then
  116.    collect()
  117.    sleep(0.3)
  118.   else
  119.    return false
  120.   end
  121.  end
  122.  return true
  123. end
  124.  
  125. local function tryDown()
  126.     refuel()
  127.     while not turtle.down() do
  128.         if turtle.detectDown() then
  129.             if not tryDigDown() then
  130.                 return false
  131.             end
  132.         elseif turtle.attackDown() then
  133.             collect()
  134.         else
  135.             sleep( 0.3 )
  136.         end
  137.     end
  138.     return true
  139. end
  140.  
  141. local function t3x1(iLgth, bInclCurrent)
  142.    if ( type(iLgth) ~= "number" or type(bInclCurrent) ~= "boolean" ) then
  143.       return false
  144.    end
  145.    if (bInclCurrent == false ) then
  146.       tryForward()
  147.    end
  148.    for n=1,iLgth do
  149.          turtle.placeDown()
  150.          tryUp()
  151.          tryDigUp()
  152.          tryDown()
  153.  
  154.       if n<iLgth then
  155.              tryDig()
  156.               if not tryForward() then
  157.                     print( "Aborting Tunnel." )
  158.                 break
  159.            end
  160.          else
  161.            print( "Tunnel complete." )
  162.       end
  163.    end
  164. end
  165.  
  166. local ht=0
  167. ht=math.floor(tunnels / 2)
  168.  
  169. for n=1,ht do
  170.     t3x1(length+1, true)
  171.     turtle.turnLeft()
  172.     t3x1(3, false)
  173.     turtle.turnLeft()
  174.     t3x1(length, false)
  175.     turtle.turnRight()
  176.     t3x1(3, false)
  177.     turtle.turnRight()
  178.     sleep(0.5)
  179. end
  180. if (tunnels % 2) ~= 0 then
  181.     t3x1(length, false)
  182.     turtle.turnLeft()
  183.     turtle.turnLeft()
  184.     for rt=1,length do
  185.         tryForward()
  186.     end
  187.     turtle.turnRight()
  188.     turtle.turnRight()
  189. else
  190.    turtle.turnRight()
  191.    for n=1,3 do
  192.       tryForward()
  193.    end
  194.    turtle.turnLeft()
  195. end
  196. -- clear the cross passage
  197. turtle.turnRight()
  198. local t1=tunnels - 1
  199. for n=1,t1 do
  200.     t3x1(3,false)
  201. end
  202. turtle.turnLeft()
Advertisement
Add Comment
Please, Sign In to add comment