SHARE
TWEET

Untitled

a guest Mar 22nd, 2019 57 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. --Begin clear function
  2. local function clear()
  3.   term.clear()
  4.   term.setCursorPos(1,1)
  5. end
  6. --End clear function
  7.  
  8. --Begin drawMenu function
  9. local function drawMenu()
  10.         clear()
  11.         for i = 1,#options-1 do
  12.                 if sel == i then write("*") end
  13.                 print(options[i].." "..tostring(values[i]))
  14.         end
  15.         if sel == 8 then
  16.                 print("\n\n\n["..options[8].."]")
  17.         else
  18.                 print("\n\n\n"..options[8])
  19.         end
  20. end
  21. --End drawMenu function
  22.  
  23. --Begin setValue function
  24. local function setValue(value)
  25.         if value == "Disabled" then
  26.                 value = false
  27.         else
  28.                 value = true
  29.         end
  30.         return value
  31. end
  32. --End setValue function
  33.  
  34. --Begin toggle function
  35. local function toggle(able)
  36.         if able == "Disabled" then
  37.                 able = "Enabled"
  38.         else
  39.                 able = "Disabled"
  40.         end
  41.         return able
  42. end
  43. --End toggle function
  44.  
  45. --Begin saveProgress function
  46. local function saveProgress()
  47.         fs.delete("btProgress")
  48.         d = fs.open("btProgress", "w")
  49.         d.writeLine("This contains the current position of the turtle in btunnel.")
  50.         d.writeLine(loc)
  51.         d.writeLine(tostring(curLength))
  52.         d.writeLine(tostring(length))
  53.         d.writeLine(facing)
  54.         d.close()
  55. end
  56. --End saveProgress function
  57.  
  58. --Begin loadProgress function
  59. local function loadProgress()
  60.         d = fs.open("btProgress", "r")
  61.         comment1 = d.readLine()
  62.         loc = d.readLine()
  63.         curLength = tonumber(d.readLine())
  64.         length = tonumber(d.readLine())
  65.         facing = d.readLine()
  66. end
  67. --End loadProgress function
  68.  
  69. --Begin saveSettings function
  70. local function saveSettings()
  71.         if fs.exists("btSettings") then
  72.                 fs.delete("btSettings")
  73.         end
  74.         h = fs.open("btSettings","w")
  75.         h.writeLine("--Better Tunnel Settings")
  76.         h.writeLine("--Deleting will reset settings")
  77.         h.close()
  78.         h = fs.open("btSettings","a")
  79.         h.writeLine(orders)
  80.         h.writeLine(useChests)
  81.         h.writeLine(useEnder)
  82.         h.writeLine(useTorches)
  83.         h.writeLine(bridgeGaps)
  84.         h.writeLine(tonumber(compID))
  85.         h.writeLine(tonumber(fuelSlot))
  86.         h.writeLine(tunnelType)
  87.         h.close()
  88. end
  89. --End saveSettings function
  90.  
  91. --Begin checkChests function
  92. local function checkChests()
  93.         if useChests then
  94.                 max = 15
  95.                 if chests == 0 then
  96.                         if useEnder then
  97.                                 print("\nPlease input an enderchest into slot "..chestSlot.."...")
  98.                         else
  99.                                 print("\nPlease input chests into slot "..chestSlot.."...")
  100.                         end
  101.                         while chests == 0 do
  102.                                 chests = turtle.getItemCount(chestSlot)
  103.                                 sleep(1)
  104.                         end
  105.                 end
  106.         end
  107. end
  108. --End the checkChests function
  109.  
  110. --Begin the checkTorches function
  111. local function checkTorches()
  112.         if useTorches then
  113.                 if useChests then
  114.                         torchSlot = 15
  115.                         torches = turtle.getItemCount(torchSlot)      
  116.                         max = 14
  117.                 else
  118.                         torchSlot = 16
  119.                         torches = turtle.getItemCount(torchSlot)
  120.                         max = 15
  121.                 end
  122.                 if torches == 0 then
  123.                         print("\nPlease input torches into slot "..torchSlot.."...")
  124.                         while torches == 0 do
  125.                                 torches = turtle.getItemCount(torchSlot)
  126.                                 sleep(1)
  127.                         end
  128.                 end
  129.         end
  130. end
  131. --End the checkTorches function
  132.  
  133. --Begin loadSettings function
  134. local function loadSettings()
  135.         h = fs.open("btSettings", "r")
  136.         comment1 = h.readLine()
  137.         comment2 = h.readLine()
  138.         orders = h.readLine()
  139.         useChests = h.readLine()
  140.         useEnder = h.readLine()
  141.         useTorches = h.readLine()
  142.         bridgeGaps = h.readLine()
  143.         compID = tonumber(h.readLine())
  144.         fuelSlot = tonumber(h.readLine())
  145.         tunnelType = h.readLine()
  146.         h.close()
  147.         max = 16
  148.         checkChests()
  149.         checkTorches()
  150. end
  151. --End loadSettings function
  152.  
  153. --Begin findLoc function
  154. local function findLoc()
  155.         if facing == "right" then
  156.                 if loc == "top" then
  157.                         dig()
  158.                         down()
  159.                         loc = "mid"
  160.                         dig()
  161.                         down()
  162.                         loc = "bot"
  163.                         dig()
  164.                         turtle.turnLeft()
  165.                         facing = "forw"
  166.                         forward()
  167.                         length = length+1
  168.                 elseif loc == "mid" then
  169.                         dig()
  170.                         down()
  171.                         loc = "bot"
  172.                         dig()
  173.                         turtle.turnLeft()
  174.                         facing = "forw"
  175.                         forward()
  176.                         length = length+1
  177.                 elseif loc == "bot" then
  178.                         dig()
  179.                         turtle.turnLeft()
  180.                         facing = "forw"
  181.                         forward()
  182.                         length = length+1
  183.                 end
  184.         end
  185. end
  186. --End findLoc function
  187.  
  188. --Begin modemExists function
  189. local function modemExists()
  190.         if peripheral.getType("right") == "modem" then
  191.                 return true
  192.         end
  193.         return false
  194. end
  195. --End modemExists function
  196.  
  197. --Begin invalid function
  198. local function invalid()
  199.         print("\nInvalid")
  200.         sleep(1)
  201. end
  202. --End invalid function
  203.  
  204. --Begin isValid function
  205. local function isValid(check, isOrders)
  206.         vType = type(check)
  207.         check = string.lower(check)
  208.         if not isOrders or isOrders == nil then
  209.                 if check == "y" or check == "n" and vType == "string" then
  210.                         return true
  211.                 end
  212.         else
  213.                 if check == "u" or check == "r" and vType == "string" then
  214.                         return true
  215.                 end
  216.         end
  217.         return false
  218. end
  219. --End isValid function
  220.  
  221. --Begin the useFuel function
  222. local function useFuel()
  223.         clear()
  224.         if useFuelSlot then
  225.                 continue = false
  226.                 repeat
  227.                         clear()
  228.                         print("What slot would you like the fuel to be in?: ")
  229.                         fuelSlot = tonumber(read())
  230.                         if fuelSlot == torchSlot or fuelSlot == chestSlot or fuelSlot > 16 then
  231.                                 continue = false
  232.                                 invalid()
  233.                         else
  234.                                 if fuelSlot == max then
  235.                                         max = max-1
  236.                                 end
  237.                                 print("\nPlease input fuel into slot ",fuelSlot,"...")
  238.                                 fuelAmount = turtle.getItemCount(fuelSlot)
  239.                                 while fuelAmount == 0 do
  240.                                         fuelAmount = turtle.getItemCount(fuelSlot)
  241.                                         sleep(1)
  242.                                 end
  243.                                 continue = true
  244.                         end
  245.                 until continue
  246.         end
  247.         continue = true
  248. end
  249. --End the useFuel Function
  250.  
  251. --Begin dropoff function
  252. local function dropOff()
  253.         turtle.digUp()
  254.         turtle.select(chestSlot)
  255.         turtle.placeUp()
  256.         for i = 1,max do
  257.                 if turtle.getItemCount(i) > 0 and i ~= fuelSlot then
  258.                         turtle.select(i)
  259.                         turtle.dropUp()
  260.                 end
  261.         end
  262.         if useEnder == true then
  263.                 sleep(2)
  264.                 turtle.select(chestSlot)
  265.                 turtle.digUp()
  266.         end
  267.         turtle.select(1)
  268. end
  269. --End dropoff function
  270.  
  271. --Begin dig function
  272. local function dig()
  273.         while turtle.detect() do
  274.                 turtle.dig()
  275.         end
  276. end
  277. --End dig function
  278.  
  279. --Begin up function
  280. function up(num)
  281.         curUp = 1
  282.         if num == nil then
  283.                 num = 1
  284.         end
  285.         while curUp <= num do
  286.                 if not turtle.up() then
  287.                         turtle.digUp()
  288.                         turtle.attackUp()
  289.                 else
  290.                         curUp = curUp+1
  291.                 end
  292.         end
  293. end
  294. --End up function
  295.  
  296. --Begin forward function
  297. function forward(num)
  298.         curForw = 1
  299.         if num == nil then
  300.                 num = 1
  301.         end
  302.         while curForw <= num do
  303.                 if not turtle.forward() then
  304.                         turtle.dig()
  305.                         turtle.attack()
  306.                 else
  307.                         curForw = curForw+1
  308.                 end
  309.         end
  310. end
  311. --End forward function
  312.  
  313. --Begin down function
  314. function down(num)
  315.         curDown = 1
  316.         if num == nil then
  317.                 num = 1
  318.         end
  319.         while curDown <= num do
  320.                 if not turtle.down() then
  321.                         turtle.digDown()
  322.                         turtle.attackDown()
  323.                 else
  324.                         curDown = curDown+1
  325.                 end
  326.         end
  327. end
  328. --End down function
  329.  
  330. --Begin the tryRefuel function
  331. local function tryRefuel()
  332.         for i = 1,max do
  333.                 if turtle.getItemCount(i) > 0 then
  334.                         turtle.select(i)
  335.                         if turtle.refuel(1) then
  336.                                 return true
  337.                         end
  338.                 end
  339.         end
  340.         turtle.select(1)
  341.         return false
  342. end
  343. --End the tryRefuel function
  344.  
  345. --Begin refuel function
  346. local function refuel()
  347.         curFuel = turtle.getFuelLevel()
  348.         if curFuel == "unlimited" or curFuel >= 10 then
  349.                 return
  350.         else
  351.                 if not tryRefuel() then
  352.                         print("Please supply more fuel to coninue...")
  353.                         while not tryRefuel() do
  354.                                 sleep(1)
  355.                         end
  356.                 end
  357.         end
  358. end
  359. --End refuel function
  360.  
  361. --Begin the stackFuel function
  362. local function stackFuel()
  363.         for i = 1,16 do
  364.                 if turtle.getItemCount(i) > 0 and i ~= fuelSlot and i < max then
  365.                         turtle.select(i)
  366.                         if turtle.compareTo(fuelSlot) then
  367.                                 turtle.transferTo(fuelSlot, turtle.getItemCount(i))
  368.                         end
  369.                 end
  370.         end
  371.         turtle.select(1)
  372. end
  373. --End the stackFuel function
  374.  
  375. --Begin tunnel function
  376. local function tunnel(tunLength)
  377.         for i = 1,tunLength do
  378.                 if useTorches then
  379.                         turtle.select(torchSlot)
  380.                         if torch == 9 or curLength == 1 or curLength == tunLength-1 then
  381.                                 turtle.digDown()
  382.                                 turtle.placeDown()
  383.                                 turtle.select(1)
  384.                                 torch = 1
  385.                         else
  386.                                 torch = torch+1
  387.                         end
  388.                         turtle.select(1)
  389.                 end
  390.                 if bridgeGaps and not turtle.detectDown() then
  391.                         turtle.placeDown()
  392.                 end
  393.                 print("Current tunnel length: ",curLength-1)
  394.                 refuel()
  395.                 turtle.turnLeft()
  396.                 dig()
  397.                 up()
  398.                 dig()
  399.                 if tunnelType == "3x3" then
  400.                         up()
  401.                         dig()
  402.                 end
  403.                 turtle.turnRight()
  404.                 turtle.turnRight()
  405.                 dig()
  406.                 down()
  407.                 dig()
  408.                 if tunnelType == "3x3" then
  409.                         down()
  410.                         dig()
  411.                 end
  412.                 turtle.turnLeft()
  413.                 if useFuelSlot == true then
  414.                         stackFuel()
  415.                 end
  416.                 refuel()
  417.                 if useChests then
  418.                         if turtle.getItemCount(max) > 0 then
  419.                                 dropOff()
  420.                         end
  421.                 end
  422.                 turtle.select(1)
  423.                 turtle.dig()
  424.                 forward()
  425.                 curLength = curLength+1
  426.                 saveProgress()
  427.                 saveSettings()
  428.         end
  429. end
  430. --End tunnel function
  431.  
  432.  
  433. --Begin Main code
  434. --[[Check if the turtle already began a tunnel and needs to finish it now
  435. if fs.exists("btProgress") then
  436.         print("I need to continue with my tunnel!")
  437.         loadProgress()
  438.         loadSettings()
  439.         findLoc()
  440. end
  441. --]]
  442.  
  443. --Declare Variables
  444. max = 16
  445. continue = false
  446. torchSlot = 15
  447. chestSlot = 16
  448. curLength = 1
  449. useSettings = false
  450. compID = 1
  451. facing = "right"
  452. torches = turtle.getItemCount(torchSlot)
  453. chests = turtle.getItemCount(chestSlot)
  454.  
  455. values={
  456.         "User",
  457.         "Disabled",
  458.         "Disabled",
  459.         "Disabled",
  460.         "Disabled",
  461.         "3x3",
  462.         "Disabled"
  463. }
  464. orders = values[1]
  465. useChests = values[2]
  466. useEnder = values[3]
  467. useTorches = values[4]
  468. bridgeGaps = values[5]
  469. tunnelType = values[6]
  470. useFuelSlot = values[7]
  471.  
  472. options={
  473.         "Receive orders via:",
  474.         "Use chests:",
  475.         "Use Enderchests:",
  476.         "Use Torches:",
  477.         "Bridge Gaps:",
  478.         "Tunnel Type:",
  479.         "Specific Slot for Fuel:",
  480.         "Continue"
  481. }
  482.  
  483. clear()
  484. print("Better Tunnel v2.0")
  485. sleep(2.5)
  486.  
  487. --If a settings file exists, ask the user if they want to load it
  488. if fs.exists("btSettings") then
  489.         continue = false
  490.         repeat
  491.                 clear()
  492.                 print("A settings file was found.")
  493.                 print("Would you like to load it?(Y/N): ")
  494.                 load = read()
  495.                 load = string.lower(load)
  496.                 if load == "y" then
  497.                         useSettings = true
  498.                         continue = true
  499.                 elseif load == "n" then
  500.                         useSettings = false
  501.                         continue = true
  502.                 else
  503.                         invalid()
  504.                 end
  505.         until continue
  506. else
  507.         useSettings = false
  508. end
  509.  
  510. --If they chose to load it, it will load the setting from the file
  511. if useSettings then
  512.         loadSettings()
  513. else--If the file didn't exist or the user chose not to load it, the program will ask the user for settings
  514.         sel = 1--The first option is selected when the screen is first drawn
  515.  
  516.         clear()--clear the screen before starting
  517.         while true do
  518.                 clear()
  519.                 drawMenu()--draw the menu
  520.                 event, key=os.pullEvent("key")--wait for a key to be pressed
  521.                 if key == keys.up and sel ~= 1 then--long and excessive logic(I feel it could be improved) to decide what to select next
  522.                         sel = sel-1
  523.                 elseif key == keys.down and sel ~= 8 then
  524.                         sel = sel+1
  525.                 elseif key == keys.enter then
  526.                         if sel == 1 then
  527.                                 if values[1] == "User" then
  528.                                         values[1] = "Rednet"
  529.                                 else
  530.                                         values[1] = "User"
  531.                                 end
  532.                         elseif sel == 2 then
  533.                                 values[2] = toggle(values[2])
  534.                                 if values[2] == "Disabled" and values[3] ~= "Disabled" then
  535.                                         values[3] = toggle(values[3])
  536.                                 end
  537.                         elseif sel == 3 then
  538.                                 values[3] = toggle(values[3])
  539.                                 if values[3] == "Enabled" and values [2] ~= "Enabled" then
  540.                                         values[2] = toggle(values[2])
  541.                                 end
  542.                         elseif sel == 4 then
  543.                                 values[4] = toggle(values[4])
  544.                         elseif sel == 5 then
  545.                                 values[5] = toggle(values[5])
  546.                         elseif sel == 6 then
  547.                                 if values[6] == "3x3" then
  548.                                         values[6] = "2x3"
  549.                                 else
  550.                                         values[6] = "3x3"
  551.                                 end
  552.                         elseif sel == 7 then
  553.                                 values[7] = toggle(values[7])
  554.                         elseif sel == 8 then
  555.                                 orders = values[1]
  556.                                 useChests = setValue(values[2])
  557.                                 useEnder = setValue(values[3])
  558.                                 useTorches = setValue(values[4])
  559.                                 bridgeGaps = setValue(values[5])
  560.                                 useFuelSlot = setValue(values[7])
  561.                                 break
  562.                         end
  563.                 end
  564.         end
  565.         checkChests()
  566.         checkTorches()
  567.         useFuel()
  568. end
  569.  
  570. if (not modemExists() and (orders == "Rednet")) then
  571.         clear()
  572.         print("No modem was detected on this turtle!")
  573.         print("User input has been automatically selected.")
  574.         orders = "User"
  575.         sleep(3)
  576. end
  577.  
  578. --Run the tunnel function based on the orders chosen
  579. if orders == "Rednet" then
  580.         rednet.open("right")
  581.         clear()
  582.         if not useSettings then
  583.                 continue = false
  584.                 repeat
  585.                         print("You chose to receive orders via Rednet.")
  586.                         write("What computer would you like me to accept messages from?: ")
  587.                         compID = tonumber(read())
  588.                         if compID > 0 then
  589.                                 continue = true
  590.                         else
  591.                                 invalid()
  592.                         end
  593.                 until continue
  594.         end
  595.         clear()
  596.         print("I will listen for orders from the computer with id: "..compID)
  597.         id, msg = rednet.receive()
  598.         if id == tonumber(compID) then
  599.                 length = msg
  600.                 checkChests()
  601.                 checkTorches()
  602.                 print("Beginning tunnel with length: "..length)
  603.                 tunnel(length)
  604.         end
  605. elseif orders == "User" then
  606.         repeat
  607.                 clear()
  608.                 print("You chose to receive orders via User.")
  609.                 write("How long would you like the tunnel to be?(In blocks): ")
  610.                 length = tonumber(read())
  611.                 vType = type(length)
  612.                 if vType == "number" then
  613.                         print("Beginning tunnel with length: "..length)
  614.                         continue = true
  615.                         checkChests()
  616.                         checkTorches()
  617.                         tunnel(length)
  618.                 else
  619.                         invalid()
  620.                         continue = false
  621.                 end
  622.         until continue
  623. end
  624.  
  625. clear()
  626. print("I'm done!")
  627. print("I completed a tunnel with length: "..length)
  628.  
  629. if not useSettings then
  630.         print("Would you like to save these settings for use in the next tunnel?(Y/N): ")
  631.         save = read()
  632.         save = string.lower(save)
  633.         if save == "y" then
  634.                 saveSettings()
  635.                 print("Settings have been saved")
  636.                 sleep(2)
  637.         end
  638.  
  639.     end
  640.  
  641. RAW Paste Data
  642. --Begin clear function
  643. local function clear()
  644.   term.clear()
  645.   term.setCursorPos(1,1)
  646. end
  647. --End clear function
  648.  
  649. --Begin drawMenu function
  650. local function drawMenu()
  651.     clear()
  652.     for i = 1,#options-1 do
  653.         if sel == i then write("*") end
  654.         print(options[i].." "..tostring(values[i]))
  655.     end
  656.     if sel == 8 then
  657.         print("\n\n\n["..options[8].."]")
  658.     else
  659.         print("\n\n\n"..options[8])
  660.     end
  661. end
  662. --End drawMenu function
  663.  
  664. --Begin setValue function
  665. local function setValue(value)
  666.     if value == "Disabled" then
  667.         value = false
  668.     else
  669.         value = true
  670.     end
  671.     return value
  672. end
  673. --End setValue function
  674.  
  675. --Begin toggle function
  676. local function toggle(able)
  677.     if able == "Disabled" then
  678.         able = "Enabled"
  679.     else
  680.         able = "Disabled"
  681.     end
  682.     return able
  683. end
  684. --End toggle function
  685.  
  686. --Begin saveProgress function
  687. local function saveProgress()
  688.     fs.delete("btProgress")
  689.     d = fs.open("btProgress", "w")
  690.     d.writeLine("This contains the current position of the turtle in btunnel.")
  691.     d.writeLine(loc)
  692.     d.writeLine(tostring(curLength))
  693.     d.writeLine(tostring(length))
  694.     d.writeLine(facing)
  695.     d.close()
  696. end
  697. --End saveProgress function
  698.  
  699. --Begin loadProgress function
  700. local function loadProgress()
  701.     d = fs.open("btProgress", "r")
  702.     comment1 = d.readLine()
  703.     loc = d.readLine()
  704.     curLength = tonumber(d.readLine())
  705.     length = tonumber(d.readLine())
  706.     facing = d.readLine()
  707. end
  708. --End loadProgress function
  709.  
  710. --Begin saveSettings function
  711. local function saveSettings()
  712.     if fs.exists("btSettings") then
  713.         fs.delete("btSettings")
  714.     end
  715.     h = fs.open("btSettings","w")
  716.     h.writeLine("--Better Tunnel Settings")
  717.     h.writeLine("--Deleting will reset settings")
  718.     h.close()
  719.     h = fs.open("btSettings","a")
  720.     h.writeLine(orders)
  721.     h.writeLine(useChests)
  722.     h.writeLine(useEnder)
  723.     h.writeLine(useTorches)
  724.     h.writeLine(bridgeGaps)
  725.     h.writeLine(tonumber(compID))
  726.     h.writeLine(tonumber(fuelSlot))
  727.     h.writeLine(tunnelType)
  728.     h.close()
  729. end
  730. --End saveSettings function
  731.  
  732. --Begin checkChests function
  733. local function checkChests()
  734.     if useChests then
  735.         max = 15
  736.         if chests == 0 then
  737.             if useEnder then
  738.                 print("\nPlease input an enderchest into slot "..chestSlot.."...")
  739.             else
  740.                 print("\nPlease input chests into slot "..chestSlot.."...")
  741.             end
  742.             while chests == 0 do
  743.                 chests = turtle.getItemCount(chestSlot)
  744.                 sleep(1)
  745.             end
  746.         end
  747.     end
  748. end
  749. --End the checkChests function
  750.  
  751. --Begin the checkTorches function
  752. local function checkTorches()
  753.     if useTorches then
  754.         if useChests then
  755.             torchSlot = 15
  756.             torches = turtle.getItemCount(torchSlot)   
  757.             max = 14
  758.         else
  759.             torchSlot = 16
  760.             torches = turtle.getItemCount(torchSlot)
  761.             max = 15
  762.         end
  763.         if torches == 0 then
  764.             print("\nPlease input torches into slot "..torchSlot.."...")
  765.             while torches == 0 do
  766.                 torches = turtle.getItemCount(torchSlot)
  767.                 sleep(1)
  768.             end
  769.         end
  770.     end
  771. end
  772. --End the checkTorches function
  773.  
  774. --Begin loadSettings function
  775. local function loadSettings()
  776.     h = fs.open("btSettings", "r")
  777.     comment1 = h.readLine()
  778.     comment2 = h.readLine()
  779.     orders = h.readLine()
  780.     useChests = h.readLine()
  781.     useEnder = h.readLine()
  782.     useTorches = h.readLine()
  783.     bridgeGaps = h.readLine()
  784.     compID = tonumber(h.readLine())
  785.     fuelSlot = tonumber(h.readLine())
  786.     tunnelType = h.readLine()
  787.     h.close()
  788.     max = 16
  789.     checkChests()
  790.     checkTorches()
  791. end
  792. --End loadSettings function
  793.  
  794. --Begin findLoc function
  795. local function findLoc()
  796.     if facing == "right" then
  797.         if loc == "top" then
  798.             dig()
  799.             down()
  800.             loc = "mid"
  801.             dig()
  802.             down()
  803.             loc = "bot"
  804.             dig()
  805.             turtle.turnLeft()
  806.             facing = "forw"
  807.             forward()
  808.             length = length+1
  809.         elseif loc == "mid" then
  810.             dig()
  811.             down()
  812.             loc = "bot"
  813.             dig()
  814.             turtle.turnLeft()
  815.             facing = "forw"
  816.             forward()
  817.             length = length+1
  818.         elseif loc == "bot" then
  819.             dig()
  820.             turtle.turnLeft()
  821.             facing = "forw"
  822.             forward()
  823.             length = length+1
  824.         end
  825.     end
  826. end
  827. --End findLoc function
  828.  
  829. --Begin modemExists function
  830. local function modemExists()
  831.     if peripheral.getType("right") == "modem" then
  832.         return true
  833.     end
  834.     return false
  835. end
  836. --End modemExists function
  837.  
  838. --Begin invalid function
  839. local function invalid()
  840.     print("\nInvalid")
  841.     sleep(1)
  842. end
  843. --End invalid function
  844.  
  845. --Begin isValid function
  846. local function isValid(check, isOrders)
  847.     vType = type(check)
  848.     check = string.lower(check)
  849.     if not isOrders or isOrders == nil then
  850.         if check == "y" or check == "n" and vType == "string" then
  851.             return true
  852.         end
  853.     else
  854.         if check == "u" or check == "r" and vType == "string" then
  855.             return true
  856.         end
  857.     end
  858.     return false
  859. end
  860. --End isValid function
  861.  
  862. --Begin the useFuel function
  863. local function useFuel()
  864.     clear()
  865.     if useFuelSlot then
  866.         continue = false
  867.         repeat
  868.             clear()
  869.             print("What slot would you like the fuel to be in?: ")
  870.             fuelSlot = tonumber(read())
  871.             if fuelSlot == torchSlot or fuelSlot == chestSlot or fuelSlot > 16 then
  872.                 continue = false
  873.                 invalid()
  874.             else
  875.                 if fuelSlot == max then
  876.                     max = max-1
  877.                 end
  878.                 print("\nPlease input fuel into slot ",fuelSlot,"...")
  879.                 fuelAmount = turtle.getItemCount(fuelSlot)
  880.                 while fuelAmount == 0 do
  881.                     fuelAmount = turtle.getItemCount(fuelSlot)
  882.                     sleep(1)
  883.                 end
  884.                 continue = true
  885.             end
  886.         until continue
  887.     end
  888.     continue = true
  889. end
  890. --End the useFuel Function
  891.  
  892. --Begin dropoff function
  893. local function dropOff()
  894.     turtle.digUp()
  895.     turtle.select(chestSlot)
  896.     turtle.placeUp()
  897.     for i = 1,max do
  898.         if turtle.getItemCount(i) > 0 and i ~= fuelSlot then
  899.             turtle.select(i)
  900.             turtle.dropUp()
  901.         end
  902.     end
  903.     if useEnder == true then
  904.         sleep(2)
  905.         turtle.select(chestSlot)
  906.         turtle.digUp()
  907.     end
  908.     turtle.select(1)
  909. end
  910. --End dropoff function
  911.  
  912. --Begin dig function
  913. local function dig()
  914.     while turtle.detect() do
  915.         turtle.dig()
  916.     end
  917. end
  918. --End dig function
  919.  
  920. --Begin up function
  921. function up(num)
  922.     curUp = 1
  923.     if num == nil then
  924.         num = 1
  925.     end
  926.     while curUp <= num do
  927.         if not turtle.up() then
  928.             turtle.digUp()
  929.             turtle.attackUp()
  930.         else
  931.             curUp = curUp+1
  932.         end
  933.     end
  934. end
  935. --End up function
  936.  
  937. --Begin forward function
  938. function forward(num)
  939.     curForw = 1
  940.     if num == nil then
  941.         num = 1
  942.     end
  943.     while curForw <= num do
  944.         if not turtle.forward() then
  945.             turtle.dig()
  946.             turtle.attack()
  947.         else
  948.             curForw = curForw+1
  949.         end
  950.     end
  951. end
  952. --End forward function
  953.  
  954. --Begin down function
  955. function down(num)
  956.     curDown = 1
  957.     if num == nil then
  958.         num = 1
  959.     end
  960.     while curDown <= num do
  961.         if not turtle.down() then
  962.             turtle.digDown()
  963.             turtle.attackDown()
  964.         else
  965.             curDown = curDown+1
  966.         end
  967.     end
  968. end
  969. --End down function
  970.  
  971. --Begin the tryRefuel function
  972. local function tryRefuel()
  973.     for i = 1,max do
  974.         if turtle.getItemCount(i) > 0 then
  975.             turtle.select(i)
  976.             if turtle.refuel(1) then
  977.                 return true
  978.             end
  979.         end
  980.     end
  981.     turtle.select(1)
  982.     return false
  983. end
  984. --End the tryRefuel function
  985.  
  986. --Begin refuel function
  987. local function refuel()
  988.     curFuel = turtle.getFuelLevel()
  989.     if curFuel == "unlimited" or curFuel >= 10 then
  990.         return
  991.     else
  992.         if not tryRefuel() then
  993.             print("Please supply more fuel to coninue...")
  994.             while not tryRefuel() do
  995.                 sleep(1)
  996.             end
  997.         end
  998.     end
  999. end
  1000. --End refuel function
  1001.  
  1002. --Begin the stackFuel function
  1003. local function stackFuel()
  1004.     for i = 1,16 do
  1005.         if turtle.getItemCount(i) > 0 and i ~= fuelSlot and i < max then
  1006.             turtle.select(i)
  1007.             if turtle.compareTo(fuelSlot) then
  1008.                 turtle.transferTo(fuelSlot, turtle.getItemCount(i))
  1009.             end
  1010.         end
  1011.     end
  1012.     turtle.select(1)
  1013. end
  1014. --End the stackFuel function
  1015.  
  1016. --Begin tunnel function
  1017. local function tunnel(tunLength)
  1018.     for i = 1,tunLength do
  1019.         if useTorches then
  1020.             turtle.select(torchSlot)
  1021.             if torch == 9 or curLength == 1 or curLength == tunLength-1 then
  1022.                 turtle.digDown()
  1023.                 turtle.placeDown()
  1024.                 turtle.select(1)
  1025.                 torch = 1
  1026.             else
  1027.                 torch = torch+1
  1028.             end
  1029.             turtle.select(1)
  1030.         end
  1031.         if bridgeGaps and not turtle.detectDown() then
  1032.             turtle.placeDown()
  1033.         end
  1034.         print("Current tunnel length: ",curLength-1)
  1035.         refuel()
  1036.         turtle.turnLeft()
  1037.         dig()
  1038.         up()
  1039.         dig()
  1040.         if tunnelType == "3x3" then
  1041.             up()
  1042.             dig()
  1043.         end
  1044.         turtle.turnRight()
  1045.         turtle.turnRight()
  1046.         dig()
  1047.         down()
  1048.         dig()
  1049.         if tunnelType == "3x3" then
  1050.             down()
  1051.             dig()
  1052.         end
  1053.         turtle.turnLeft()
  1054.         if useFuelSlot == true then
  1055.             stackFuel()
  1056.         end
  1057.         refuel()
  1058.         if useChests then
  1059.             if turtle.getItemCount(max) > 0 then
  1060.                 dropOff()
  1061.             end
  1062.         end
  1063.         turtle.select(1)
  1064.         turtle.dig()
  1065.         forward()
  1066.         curLength = curLength+1
  1067.         saveProgress()
  1068.         saveSettings()
  1069.     end
  1070. end
  1071. --End tunnel function
  1072.  
  1073.  
  1074. --Begin Main code
  1075. --[[Check if the turtle already began a tunnel and needs to finish it now
  1076. if fs.exists("btProgress") then
  1077.     print("I need to continue with my tunnel!")
  1078.     loadProgress()
  1079.     loadSettings()
  1080.     findLoc()
  1081. end
  1082. --]]
  1083.  
  1084. --Declare Variables
  1085. max = 16
  1086. continue = false
  1087. torchSlot = 15
  1088. chestSlot = 16
  1089. curLength = 1
  1090. useSettings = false
  1091. compID = 1
  1092. facing = "right"
  1093. torches = turtle.getItemCount(torchSlot)
  1094. chests = turtle.getItemCount(chestSlot)
  1095.  
  1096. values={
  1097.     "User",
  1098.     "Disabled",
  1099.     "Disabled",
  1100.     "Disabled",
  1101.     "Disabled",
  1102.     "3x3",
  1103.     "Disabled"
  1104. }
  1105. orders = values[1]
  1106. useChests = values[2]
  1107. useEnder = values[3]
  1108. useTorches = values[4]
  1109. bridgeGaps = values[5]
  1110. tunnelType = values[6]
  1111. useFuelSlot = values[7]
  1112.  
  1113. options={
  1114.     "Receive orders via:",
  1115.     "Use chests:",
  1116.     "Use Enderchests:",
  1117.     "Use Torches:",
  1118.     "Bridge Gaps:",
  1119.     "Tunnel Type:",
  1120.     "Specific Slot for Fuel:",
  1121.     "Continue"
  1122. }
  1123.  
  1124. clear()
  1125. print("Better Tunnel v2.0")
  1126. sleep(2.5)
  1127.  
  1128. --If a settings file exists, ask the user if they want to load it
  1129. if fs.exists("btSettings") then
  1130.     continue = false
  1131.     repeat
  1132.         clear()
  1133.         print("A settings file was found.")
  1134.         print("Would you like to load it?(Y/N): ")
  1135.         load = read()
  1136.         load = string.lower(load)
  1137.         if load == "y" then
  1138.             useSettings = true
  1139.             continue = true
  1140.         elseif load == "n" then
  1141.             useSettings = false
  1142.             continue = true
  1143.         else
  1144.             invalid()
  1145.         end
  1146.     until continue
  1147. else
  1148.     useSettings = false
  1149. end
  1150.  
  1151. --If they chose to load it, it will load the setting from the file
  1152. if useSettings then
  1153.     loadSettings()
  1154. else--If the file didn't exist or the user chose not to load it, the program will ask the user for settings
  1155.     sel = 1--The first option is selected when the screen is first drawn
  1156.  
  1157.     clear()--clear the screen before starting
  1158.     while true do
  1159.         clear()
  1160.         drawMenu()--draw the menu
  1161.         event, key=os.pullEvent("key")--wait for a key to be pressed
  1162.         if key == keys.up and sel ~= 1 then--long and excessive logic(I feel it could be improved) to decide what to select next
  1163.             sel = sel-1
  1164.         elseif key == keys.down and sel ~= 8 then
  1165.             sel = sel+1
  1166.         elseif key == keys.enter then
  1167.             if sel == 1 then
  1168.                 if values[1] == "User" then
  1169.                     values[1] = "Rednet"
  1170.                 else
  1171.                     values[1] = "User"
  1172.                 end
  1173.             elseif sel == 2 then
  1174.                 values[2] = toggle(values[2])
  1175.                 if values[2] == "Disabled" and values[3] ~= "Disabled" then
  1176.                     values[3] = toggle(values[3])
  1177.                 end
  1178.             elseif sel == 3 then
  1179.                 values[3] = toggle(values[3])
  1180.                 if values[3] == "Enabled" and values [2] ~= "Enabled" then
  1181.                     values[2] = toggle(values[2])
  1182.                 end
  1183.             elseif sel == 4 then
  1184.                 values[4] = toggle(values[4])
  1185.             elseif sel == 5 then
  1186.                 values[5] = toggle(values[5])
  1187.             elseif sel == 6 then
  1188.                 if values[6] == "3x3" then
  1189.                     values[6] = "2x3"
  1190.                 else
  1191.                     values[6] = "3x3"
  1192.                 end
  1193.             elseif sel == 7 then
  1194.                 values[7] = toggle(values[7])
  1195.             elseif sel == 8 then
  1196.                 orders = values[1]
  1197.                 useChests = setValue(values[2])
  1198.                 useEnder = setValue(values[3])
  1199.                 useTorches = setValue(values[4])
  1200.                 bridgeGaps = setValue(values[5])
  1201.                 useFuelSlot = setValue(values[7])
  1202.                 break
  1203.             end
  1204.         end
  1205.     end
  1206.     useFuel()
  1207.     checkChests()
  1208.     checkTorches()
  1209. end
  1210.  
  1211. if (not modemExists() and (orders == "Rednet")) then
  1212.     clear()
  1213.     print("No modem was detected on this turtle!")
  1214.     print("User input has been automatically selected.")
  1215.     orders = "User"
  1216.     sleep(3)
  1217. end
  1218.  
  1219. --Run the tunnel function based on the orders chosen
  1220. if orders == "Rednet" then
  1221.     rednet.open("right")
  1222.     clear()
  1223.     if not useSettings then
  1224.         continue = false
  1225.         repeat
  1226.             print("You chose to receive orders via Rednet.")
  1227.             write("What computer would you like me to accept messages from?: ")
  1228.             compID = tonumber(read())
  1229.             if compID > 0 then
  1230.                 continue = true
  1231.             else
  1232.                 invalid()
  1233.             end
  1234.         until continue
  1235.     end
  1236.     clear()
  1237.     print("I will listen for orders from the computer with id: "..compID)
  1238.     id, msg = rednet.receive()
  1239.     if id == tonumber(compID) then
  1240.         length = msg
  1241.         checkChests()
  1242.         checkTorches()
  1243.         print("Beginning tunnel with length: "..length)
  1244.         tunnel(length)
  1245.     end
  1246. elseif orders == "User" then
  1247.     repeat
  1248.         clear()
  1249.         print("You chose to receive orders via User.")
  1250.         write("How long would you like the tunnel to be?(In blocks): ")
  1251.         length = tonumber(read())
  1252.         vType = type(length)
  1253.         if vType == "number" then
  1254.             print("Beginning tunnel with length: "..length)
  1255.             continue = true
  1256.             checkChests()
  1257.             checkTorches()
  1258.             tunnel(length)
  1259.         else
  1260.             invalid()
  1261.             continue = false
  1262.         end
  1263.     until continue
  1264. end
  1265.  
  1266. clear()
  1267. print("I'm done!")
  1268. print("I completed a tunnel with length: "..length)
  1269.  
  1270. if not useSettings then
  1271.     print("Would you like to save these settings for use in the next tunnel?(Y/N): ")
  1272.     save = read()
  1273.     save = string.lower(save)
  1274.     if save == "y" then
  1275.         saveSettings()
  1276.         print("Settings have been saved")
  1277.         sleep(2)
  1278.     end
  1279. 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