SHARE
TWEET

Untitled

a guest Apr 21st, 2019 100 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --[[
  2.     Lazy Nub Tunneller v0.03
  3.    
  4.     Will tell your turtle how to build
  5.     an amazingly wonderful tunnel for you,
  6.     with torch and chest placement if requested.
  7.    
  8.     Chest(s) slot = 14
  9.     Fuel slot = 15
  10.     Torch(s) slot = 16 
  11.    
  12.     Minimum Length = 1
  13.             Width = 1
  14.             Height = 3
  15.    
  16.     If you wish to skip the UI and start tunneller with commands directly
  17.     the format is:
  18.    
  19.     <program name> <Length> <Width> <Height> [Torch Distance]
  20.    
  21.     ie: lnt 16 1 3 6
  22.    
  23.     This would start the tunnel with a length of 16 width of 1
  24.     height of 3 and torches spaced 6 apart. The torches can be
  25.     omitted from the line and none will be placed.
  26.    
  27.     With this option tunneller assumes you have enough fuel and torches in place.
  28.     If you use the command line method it will assume you wish to use chests if the
  29.     chest slot is occupied.
  30.    
  31.     If any of your numbers fail the limits of the program it will
  32.     default to normal UI operation.
  33.    
  34.     ComputerCraft Posting: http://www.computercraft.info/forums2/index.php?/topic/13224-lazy-nub-tunneller/
  35.     PasteBin: http://pastebin.com/xjsLsCZ9
  36.     YouTube: http://youtu.be/DVF4VAfNfio
  37.  
  38.     Load into turtle with:
  39.     pastebin get xjsLsCZ9 lnt
  40.    
  41.     Then start it with:
  42.     lnt
  43.    
  44.     Changes:
  45.     June 2  -   Released v0.01
  46.     June 3  -   UI fixes command line option added  v0.02
  47.     June 4  -   Added inventory drop-off
  48.    
  49. ]]--
  50.  
  51.     local running = true
  52.     local tunnelLength = 0
  53.     local tunnelWidth = 0
  54.     local tunnelHeight = 0
  55.     local tunnel = 0
  56.     local chestSlot = 14
  57.     local fuelSlot = 15
  58.     local torchSlot = 16
  59.     local placeChest = false
  60.     local placeTorch = false
  61.     local torchDistance = 0
  62.     local lastEmptySlot = 13
  63.     local neededFuel = 0
  64.     local args = { ... }
  65.     local params = false
  66.     local block = 1
  67.  
  68. --[[ Robust Turtle
  69.  Modified version of
  70.  Robust Turtle API by SpeedR
  71.  integrated
  72. ]]--
  73.  
  74.     local digDelay = .7
  75.     local digTries = 25
  76.  
  77. local function outOfResource()
  78.   print("Ran out of a resource. Block: ",block , ".")
  79.   print("Refill, then say something to proceed.")
  80.   read()
  81. end
  82.  
  83. --Digging with gravel/sand detection
  84. function dig()
  85.   local tries = 0
  86.   while turtle.detect() do
  87.     turtle.dig()
  88.     sleep(digDelay)
  89.     tries = tries + 1
  90.     if tries>digTries then
  91.       print("Error: dug for too long.")
  92.       return false
  93.     end
  94.   end
  95.   return true
  96. end
  97.  
  98. function digUp()
  99.   local tries = 0
  100.   while turtle.detectUp() do
  101.     turtle.digUp()
  102.     sleep(digDelay)
  103.     tries = tries + 1
  104.     if tries>digTries then
  105.       print("Error: dug up for too long.")
  106.       return false
  107.     end
  108.   end
  109.   return true
  110. end
  111.  
  112. function digDown()
  113.   local tries = 0
  114.   while turtle.detectDown() do
  115.     turtle.digDown()
  116.     sleep(digDelay)
  117.     tries = tries + 1
  118.     if tries>digTries then
  119.       print("Error: dug down for too long.")
  120.       return false
  121.     end
  122.   end
  123.   return true
  124. end
  125.  
  126.  
  127. --Traveling: Goes in the direction no matter what (almost)
  128. --Will not be stopped by blocks or mobs
  129. function forward(l)
  130.   l=l or 1
  131.   for i=1,l do
  132.     local tries = 0
  133.     while turtle.forward() ~= true do
  134.       turtle.dig()
  135.       turtle.attack()
  136.       sleep(digDelay)
  137.       tries = tries + 1
  138.       if tries>digTries then
  139.         print("Error: can't move forward.")
  140.         return false
  141.       end
  142.     end
  143.   end
  144.   return true
  145. end
  146.  
  147. function up(l)
  148.   l=l or 1
  149.   for i=1,l do
  150.     local tries = 0
  151.     while turtle.up() ~= true do
  152.       turtle.digUp()
  153.       turtle.attackUp()
  154.       sleep(digDelay)
  155.       tries = tries + 1
  156.       if tries>digTries then
  157.         print("Error: can't move up.")
  158.         return false
  159.       end
  160.     end
  161.   end
  162.   return true
  163. end
  164.  
  165. function down(l)
  166.   l=l or 1
  167.   for i=1,l do
  168.     local tries = 0
  169.     while turtle.down() ~= true do
  170.       turtle.digDown()
  171.       turtle.attackDown()
  172.       sleep(digDelay)
  173.       tries = tries + 1
  174.       if tries>digTries then
  175.         print("Error: can't move down.")
  176.         return false
  177.       end
  178.     end
  179.   end
  180.   return true
  181. end
  182.  
  183. function back(l)
  184.   l=l or 1
  185.   for i=1,l do
  186.     if turtle.back() ~= true then
  187.       turnAround()
  188.       forward()
  189.       turnAround()
  190.     end
  191.   end
  192. end
  193.  
  194.  
  195. --Place blocks
  196. --Does not place when there's already the right block.
  197. function place(block)
  198.   turtle.select(block)
  199.   if turtle.compare()==false then
  200.     if turtle.getItemCount(block)==0 then
  201.       outOfResource(block)
  202.     end
  203.     dig()
  204.     turtle.place()
  205.   end
  206. end
  207.  
  208. function placeUp(block)
  209.   turtle.select(block)
  210.   if turtle.compareUp()==false then
  211.     if turtle.getItemCount(block)==0 then
  212.       outOfResource(block)
  213.     end
  214.     digUp()
  215.     turtle.placeUp()
  216.   end
  217. end
  218.  
  219. function placeDown(block)
  220.   turtle.select(block)
  221.   if turtle.compareDown()== false then
  222.     if turtle.getItemCount(block)== 0 then
  223.       outOfResource(block)
  224.     end
  225.     digDown()
  226.     turtle.placeDown()
  227.   end
  228. end
  229.  
  230. function placeRight(block)
  231.   turtle.turnRight()
  232.   place(block)
  233.   turtle.turnLeft()
  234. end
  235.  
  236. function placeLeft(block)
  237.   turtle.turnLeft()
  238.   place(block)
  239.   turtle.turnRight()
  240. end
  241.  
  242. function placeBack(block)
  243.   turnAround()
  244.   place(block)
  245.   turnAround()
  246. end
  247.  
  248. --place row     e.g. placeRow(up, marble, forward, 15)
  249. function placeRow(placeDir, block, travelDir, l)
  250.   l=l or 1
  251.   for i=1,l do
  252.     if placeDir == "forward" then
  253.       place(block)
  254.     elseif placeDir == "up" then
  255.       placeUp(block)
  256.     elseif placeDir == "down" then
  257.       placeDown(block)
  258.     elseif placeDir == "right" then
  259.       placeRight(block)
  260.     elseif placeDir == "left" then
  261.       placeLeft(block)
  262.     elseif placeDir == "back" then
  263.       placeBack(block)
  264.     else
  265.       print('"', placeDir, '" is not a valid direction!')
  266.       return false
  267.     end
  268.     if travelDir == "forward" then
  269.       forward()
  270.     elseif travelDir == "up" then
  271.       up()
  272.     elseif travelDir == "down" then
  273.       down()
  274.     elseif travelDir == "right" then
  275.       strafeRight()
  276.     elseif travelDir == "left" then
  277.       strafeLeft()
  278.     elseif travelDir == "back" then
  279.       back()
  280.     else
  281.       print('"', travelDir, '" is not a valid direction!')
  282.       return false
  283.     end
  284.   end
  285.   return true
  286. end
  287.  
  288.  
  289. --Turning
  290. function turnAround()
  291.   turtle.turnRight()
  292.   turtle.turnRight()
  293. end
  294.  
  295. function right()
  296.   turtle.turnRight()
  297. end
  298.  
  299. function left()
  300.   turtle.turnLeft()
  301. end
  302.  
  303. function goRight(l)
  304.   l=l or 1
  305.   turtle.turnRight()
  306.   forward(l)
  307. end
  308.  
  309. function goLeft(l)
  310.   l=l or 1
  311.   turtle.turnLeft()
  312.   forward(l)
  313. end
  314.  
  315. function strafeRight(l)
  316.   l=l or 1
  317.   goRight(l)
  318.   turtle.turnLeft()
  319. end
  320.  
  321. function strafeLeft(l)
  322.   l=l or 1
  323.   goLeft(l)
  324.   turtle.turnRight()
  325. end
  326. --[[ End of Robust Turtle
  327. ]]--
  328.  
  329.  
  330. function dumpInv()                          --Dumps inventory to chest
  331.     print("Placing chest..")
  332.     placeDown(chestSlot)
  333.     for i = 1,lastEmptySlot do
  334.         turtle.select(i)
  335.         turtle.dropDown()
  336.     end
  337.     print("Emptied into chest..")
  338.     turtle.select(1)   
  339. end
  340.  
  341. function checkSpace()  
  342. --[[
  343.     will remove noiseblocks and compress in future version maybe
  344.     if turtle.getItemCount(lastEmptySlot) > 0 then
  345.         print("Trying to make room...")
  346.         for i = 2,lastEmptySlot,1 do
  347.             if turtle.getItemCount(i)> 0 then
  348.                 for j = i-1,1,-1 do
  349.                     turtle.select(i-j)
  350.                     turtle.transferTo(j)
  351.                     ut = read()
  352.                 end
  353.             end
  354.         end
  355.         ]]--
  356.         if turtle.getItemCount(lastEmptySlot) > 0 then
  357.             dumpInv()
  358.         end
  359.    
  360. end
  361.  
  362. --[[ MAIN START ]]--
  363.  
  364. if (#args < 3 or #args > 4) then                -- Parse command line arguments if found
  365.     params = false
  366.     print("Command Line Option Skipped...")
  367.     print("program name <Length> <Width> <Height> [Torch Distance]")
  368. else
  369.     params = true
  370.     tunnelLength = tonumber(args[1])
  371.     tunnelWidth = tonumber(args[2])
  372.     tunnelHeight = tonumber(args[3])
  373.     if #args == 4 then
  374.         torchDistance = tonumber(args[4])
  375.         placeTorch = true
  376.         if type( torchDistance ) ~= "number" or torchDistance < 1 then
  377.             params = false
  378.         end
  379.     end
  380.     if turtle.getItemCount(chestSlot) > 0 then
  381.         placeChest = true
  382.     end
  383.     if type(tunnelLength) ~= "number" or tunnelLength < 1 or
  384.        type(tunnelWidth) ~= "number" or tunnelWidth < 1 or
  385.        type(tunnelHeight) ~= "number" or tunnelHeight < 3 or
  386.        turtle.getFuelLevel() < 1 then
  387.         params = false
  388.     end
  389. end
  390.  
  391. if params == false then                         -- Start UI if invalid or no command line
  392.     term.clear()
  393.     term.setCursorPos (1, 1)
  394.     print("Lazy Nub Tunneller v0.03")
  395.     print("=====================")
  396.     while tunnelLength < 1 do
  397.         print("What length of tunnel (min = 1): ")
  398.         tunnelLength = tonumber(read())
  399.         if type( tunnelLength ) ~= "number" or tunnelLength == 0 then
  400.             print ("I was expecting a number 1 or higher...")
  401.             print ("Lets try that again.")
  402.             tunnelLength = 0
  403.         end
  404.     end
  405.     while tunnelWidth < 1 do
  406.         print("What width of tunnel (min = 1): ")
  407.         tunnelWidth = tonumber(read())
  408.         if type( tunnelWidth ) ~= "number" or tunnelWidth == 0 then
  409.             print ("I was expecting a number 1 or higher...")
  410.             print ("Lets try that again.")
  411.             tunnelWidth = 0
  412.         end
  413.     end
  414.     while tunnelHeight < 3 do
  415.         print("What height of tunnel (min = 3): ")
  416.         tunnelHeight = tonumber(read())
  417.         if type( tunnelHeight ) ~= "number" or tunnelHeight < 3 then
  418.             print ("I was expecting a number 3 or higher...")
  419.             print ("Lets try that again.")
  420.             tunnelHeight = 0
  421.         end
  422.     end
  423.     print("Use Torches (y/n): ")
  424.     ut = read()
  425.     if ut == "y" or ut == "Y" then
  426.         placeTorch = true
  427.         while torchDistance < 1 do
  428.             print("Place How Far Apart (suggest 6): ")
  429.             torchDistance = tonumber(read())
  430.             if type( torchDistance ) ~= "number" or torchDistance < 1 then
  431.                 print ("I was expecting a number 1 or higher...")
  432.                 print ("Lets try that again.")
  433.                 torchDistance = 0
  434.             end
  435.         end
  436.        
  437.         -- check if enough torches.. still need to verify this check total
  438.  
  439.         if ((tunnelLength/torchDistance)*(tunnelWidth/torchDistance)) > (turtle.getItemCount(torchSlot)) then
  440.             turtle.select(torchSlot)
  441.             print("Place about "..((math.ceil(tunnelLength/torchDistance)*math.ceil(tunnelWidth/torchDistance))+2).." in slot "..torchSlot.." <ENTER>")
  442.             ut = read()
  443.             turtle.select(1)
  444.         end
  445.     end
  446.     print("Use Chests (y/n): ")
  447.     ut = read()
  448.     if ut == "y" or ut == "Y" then
  449.         placeChest = true
  450.         turtle.select(chestSlot)
  451.         while turtle.getItemCount(chestSlot) < 1 do
  452.             print("Place at least 1 chest in slot "..chestSlot)
  453.             print("Press <ENTER> when done.")
  454.             ut = read()
  455.         end
  456.         turtle.select(1)
  457.     end
  458.  
  459.     -- check for fuel in turtle at start matches needed level
  460.    
  461.     neededFuel = ((tunnelLength*tunnelWidth)+((tunnelHeight-3)*(tunnelLength*tunnelWidth)))+1
  462.     if turtle.getFuelLevel() < neededFuel then
  463.         turtle.select(fuelSlot)
  464.         turtle.refuel(1)
  465.         turtle.select(1)
  466.     end
  467.     if turtle.getFuelLevel() < neededFuel then
  468.         print("Fuel Level at: "..turtle.getFuelLevel())
  469.         while turtle.getFuelLevel() < neededFuel do
  470.             turtle.select(fuelSlot)
  471.             print ("Place fuel item into slot "..fuelSlot.." and press <Enter>")
  472.             ut = read()
  473.             turtle.refuel(1)
  474.             print("Fuel Level at: "..turtle.getFuelLevel())
  475.         end
  476.         turtle.select(1)
  477.     end
  478. end
  479.  
  480. -- Main loop
  481.    
  482. while running do
  483.     up()
  484.     for tunnel = 1,tunnelLength do
  485.         forward()
  486.         digUp()
  487.         digDown()
  488.         if placeChest == true then
  489.             checkSpace()
  490.         end
  491.         if tunnel%torchDistance == 0 then
  492.             placeDown(torchSlot)
  493.         end
  494.         if tunnelHeight > 3 then
  495.             for Height = 4,tunnelHeight,1 do
  496.                 up()
  497.                 digUp()
  498.             end
  499.             for Height = tunnelHeight,4,-1 do
  500.                 down()
  501.             end
  502.         end
  503.         if tunnelWidth > 1 then
  504.             if tunnel%2 == 0 then
  505.                 left()
  506.             else
  507.                 right()
  508.             end
  509.             for width = 2,tunnelWidth do
  510.                 forward()
  511.                 digUp()
  512.                 digDown()
  513.                 if placeChest == true then
  514.                     checkSpace()
  515.                 end
  516.                 if ((width%torchDistance == 0) and (tunnel%torchDistance == 0)) then
  517.                     placeDown(torchSlot)
  518.                 end            
  519.                 if tunnelHeight > 3 then
  520.                     for Height = 4,tunnelHeight,1 do
  521.                         up()
  522.                         digUp()
  523.                     end
  524.                     for Height = tunnelHeight,4,-1 do
  525.                         down()
  526.                     end
  527.                 end
  528.             end
  529.             if tunnel%2 == 0 then
  530.                 right()
  531.             else
  532.                 left()
  533.             end
  534.         end
  535.     end
  536.     down()
  537.     if placeTorch == true then
  538.         turnAround()
  539.         place(torchSlot)
  540.         turnAround()
  541.     end
  542.     if placeChest then
  543.         if tunnelLength%2==0 then
  544.             left()
  545.         else
  546.             right()
  547.         end
  548.         back()
  549.         up()
  550.         dumpInv()
  551.         forward()
  552.         if tunnelLength%2==0 then
  553.             right()
  554.         else
  555.             left()
  556.         end
  557.         down()
  558.     end
  559.     running = false
  560. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top