metro80

tunnel2

Jun 12th, 2014
3,567
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.70 KB | None | 0 0
  1. -- Tunnel x 2 - v2.2 --
  2. ----- Setup -----
  3.  
  4. args = {...}
  5. slot = 1
  6. dis = 0
  7. chestPlaced = false
  8. chestNum = 0
  9. chest = false
  10. isResume = false
  11. fuel = turtle.getFuelLevel()
  12.  
  13. turtle.select(slot)
  14. term.clear()
  15. term.setCursorPos(1,1)
  16.  
  17. function printUsage()
  18.     print("Usage:")
  19.     print("tunnel2 <Length> [StopOnBlockAb]")
  20. end
  21.  
  22. ----- Check if args valid -----
  23.  
  24. if #args > 2 then
  25.     printUsage()
  26.     error()
  27.    
  28. elseif #args < 1 then
  29.     printUsage()
  30.     error()
  31.    
  32. elseif tonumber(args[1]) == nil then
  33.     printUsage()
  34.     print("Length must be a number!")
  35.     error()
  36.  
  37. end
  38.  
  39. len = tonumber(args[1])
  40.  
  41. if fuel < len*2 then
  42.     print("Not enough fuel to go "..len.." blocks!")
  43.     error()
  44. end
  45.  
  46. ----- Functions -----
  47.  
  48. function getVers(code)
  49.     local response = http.get(
  50.         "http://pastebin.com/raw.php?i="..code
  51.     )
  52.        
  53.     if response then
  54.         local sResponse = response.readAll()
  55.         response.close()
  56.         return sResponse
  57.     else
  58.         return false
  59.     end
  60. end
  61.  
  62. function seeCur()
  63.     file = fs.open("tunnel2", "r")
  64.     v = file.readAll()
  65.     file.close()
  66.     return v
  67. end
  68.  
  69. function PrintCentered(sText)
  70.     local w, h = term.getSize()
  71.     local x, y = term.getCursorPos()
  72.     x = math.max(math.floor((w / 2) - (#sText / 2)), 0)
  73.     term.setCursorPos(x, y)
  74.     print(sText)
  75. end
  76.  
  77. function updateScreen()
  78.     sleep(1)
  79.     term.setBackgroundColor(colors.cyan)
  80.     term.clear()
  81.     term.setCursorPos(1, 4)
  82.     PrintCentered("Updating...")
  83.     print("\n\n")
  84.     PrintCentered("[I         ]")
  85.     shell.run("pastebin get 2ybU4SQW tunnel3")
  86.     sleep(3)
  87.     term.clear()
  88.     term.setCursorPos(1, 4)
  89.     PrintCentered("Updating...")
  90.     print("\n\n")
  91.     PrintCentered("[I         ]")
  92.     sleep(0.5)
  93.     term.setCursorPos(1, 4)
  94.     PrintCentered("Updating...")
  95.     print("\n\n")
  96.     PrintCentered("[III       ]")
  97.     sleep(0.5)
  98.     fs.delete("tunnel2")
  99.     term.setCursorPos(1, 4)
  100.     PrintCentered("Updating...")
  101.     print("\n\n")
  102.     PrintCentered("[IIIII     ]")
  103.     sleep(0.5)
  104.     fs.move("tunnel3", "tunnel2")
  105.     term.setCursorPos(1, 4)
  106.     PrintCentered("Updating...")
  107.     print("\n\n")
  108.     PrintCentered("[IIIIIII   ]")
  109.     sleep(0.5)
  110.     term.setCursorPos(1, 4)
  111.     PrintCentered("Updating...")
  112.     print("\n\n")
  113.     PrintCentered("[IIIIIIIIII]")
  114.     sleep(0.5)
  115.     PrintCentered("Finished!")
  116.     sleep(1)
  117.     term.setBackgroundColor(colors.black)
  118.     term.clear()
  119.     term.setCursorPos(1,1)
  120.     error()
  121. end
  122.  
  123. function turnAround()
  124.     turtle.turnRight()
  125.     turtle.turnRight()
  126. end
  127.  
  128. function BAEnd()
  129.     turnAround()
  130.     for i=1,dis do
  131.         local success = turtle.forward()
  132.         if not success then
  133.             while true do
  134.                 success = turtle.forward()
  135.                 if success then break end
  136.             end
  137.         end
  138.     end
  139.     turnAround()
  140.     print("Absence of block found!")
  141.     error()
  142. end
  143.  
  144. function mainDig()
  145.     if turtle.detect() then
  146.         turtle.digUp()
  147.         if dis % 12 ~= 0 then
  148.             turtle.digDown()
  149.         end
  150.         turtle.turnLeft()
  151.         turtle.dig()
  152.         turnAround()
  153.         if chest then
  154.             chest = false
  155.         else
  156.             turtle.dig()
  157.         end
  158.         turtle.turnLeft()
  159.         turtle.dig()
  160.         if turtle.detect() then
  161.             while true do
  162.                 turtle.dig()
  163.                 if not turtle.detect() then
  164.                     break
  165.                 end
  166.             end
  167.         end
  168.         local success = turtle.forward()
  169.         if not success then
  170.             while true do
  171.                 success = turtle.forward()
  172.                 if success then break end
  173.             end
  174.         end
  175.         dis = dis + 1
  176.         save(len, dis, chestNum)
  177.     else
  178.         if args[2] then
  179.             BAEnd()
  180.         else
  181.             local success = turtle.forward()
  182.             if not success then
  183.                 while true do
  184.                     success = turtle.forward()
  185.                     if success then break end
  186.                 end
  187.             end
  188.             dis = dis + 1
  189.             save(len, dis, chestNum)
  190.         end
  191.     end
  192. end
  193.  
  194. function placeTorch()
  195.     turtle.select(16)
  196.     turtle.digDown()
  197.     turtle.placeDown()
  198.     turtle.select(1)
  199. end
  200.  
  201. function placeChest()
  202.     chestPlaced = true
  203.     chestNum = chestNum + 1
  204.     chest = true
  205.     turtle.turnRight()
  206.     if turtle.detect() then
  207.         turtle.dig()
  208.     end
  209.     turtle.select(15)
  210.     turtle.place()
  211.     for i=1,14 do
  212.         turtle.select(i)
  213.         turtle.drop()
  214.     end
  215.     turtle.select(slot)
  216.     turtle.turnLeft()
  217. end
  218.  
  219. function save(l, d, c)
  220.     local file = fs.open("tunnel2Save", "w")
  221.     file.writeLine(l)
  222.     file.writeLine(d)
  223.     file.writeLine(c)
  224.     file.close()
  225. end
  226.  
  227. function resume()
  228.     isResume = true
  229.     local save1 = fs.open("tunnel2Save", "r")
  230.     len = tonumber(save1.readLine())
  231.     dis = tonumber(save1.readLine())
  232.     chestNum = tonumber(save1.readLine())
  233.     if chestNum > 0 then
  234.         chestPlaced = true
  235.     end
  236.     save1.close()
  237.     term.clear()
  238.     term.setCursorPos(1,1)
  239.    
  240.     print("Please turn me forward using the arrow keys, then press enter.")
  241.     while true do
  242.         local event, kp = os.pullEvent("key")
  243.         if kp == 203 then
  244.             turtle.turnLeft()
  245.         elseif kp == 205 then
  246.             turtle.turnRight()
  247.         elseif kp == 28 then
  248.             break
  249.         end
  250.     end
  251.    
  252.     term.clear()
  253.     term.setCursorPos(1,1)
  254.     save(len, dis, chestNum)
  255.    
  256.     for i=1,len - dis do
  257.         mainDig()
  258.         if dis % 12 == 0 then
  259.             placeTorch()
  260.         end
  261.         item = turtle.getItemCount(14)
  262.         if item > 0 then
  263.             placeChest()
  264.         end
  265.     end
  266.  
  267.     turnAround()
  268.     for i=1,dis do
  269.         local success = turtle.forward()
  270.         if not success then
  271.             while true do
  272.                 success = turtle.forward()
  273.                 if success then break end
  274.             end
  275.         end
  276.     end
  277.     turnAround()
  278.  
  279.     fs.delete("tunnel2Save")
  280.  
  281.     print("Finished!")
  282.     if chestPlaced then
  283.         print("There are "..chestNum.." chest(s) in the tunnel.")
  284.     end
  285.     error()
  286. end
  287.  
  288. ----- Main Chunk -----
  289.  
  290. --Update Check--
  291.  
  292. print("Checking for update...")
  293. cv = seeCur()
  294. nv = getVers("2ybU4SQW")
  295. if not nv then
  296.     printError("Failed to connect to pastebin.")
  297.     sleep(2)
  298.     term.clear()
  299.     term.setCursorPos(1,1)
  300. elseif cv == nv then
  301.     print("No update found.")
  302.     sleep(0.5)
  303.     term.clear()
  304.     term.setCursorPos(1,1)
  305. else
  306.     print("New update found!")
  307.     updateScreen()
  308. end
  309.  
  310. term.clear()
  311. term.setCursorPos(1,1)
  312.  
  313. --Save Check--
  314.  
  315. if fs.exists("tunnel2Save") and isResume == false then
  316.     print("Tunnel x 2 has found a save file. Do you want to continue previous dig?")
  317.     local m = 0
  318.     print("[ Yes ]")
  319.     print("  No  ")
  320.     while true do
  321.         local event, kp = os.pullEvent("key")
  322.         oldx, oldy = term.getCursorPos()
  323.         if m < 1 then m = 1 end
  324.         if m > 2 then m = 2 end
  325.         if kp == 200 then m = m - 1 end
  326.         if kp == 208 then m = m + 1 end
  327.         if kp == 28 and m == 1 then
  328.             print("Resuming...")
  329.             resume()
  330.         end
  331.         if kp == 28 and m == 2 then
  332.             print("Deleting previous dig file...")
  333.             fs.delete("tunnel2Save")
  334.             print("Starting...")
  335.             sleep(1)
  336.             term.clear()
  337.             term.setCursorPos(1,1)
  338.             break
  339.         end
  340.         if m == 1 then
  341.             term.setCursorPos(1, oldy - 1)
  342.             term.clearLine()
  343.             term.setCursorPos(1, oldy - 2)
  344.             term.clearLine()
  345.             print("[ Yes ]")
  346.             print("  No  ")
  347.         end
  348.         if m == 2 then
  349.             term.setCursorPos(1, oldy - 1)
  350.             term.clearLine()
  351.             term.setCursorPos(1, oldy - 2)
  352.             term.clearLine()
  353.             print("  Yes  ")
  354.             print("[ No ]")
  355.         end
  356.     end
  357. else
  358.     local file = fs.open("tunnel2Save", "w")
  359.     file.close()
  360. end
  361.  
  362. --Gain Resources--
  363.  
  364. if not isResume then
  365.     turtle.select(15)
  366.     print("Please drop some chests above me.")
  367.     while true do
  368.         local bool = turtle.suckUp()
  369.         if bool then break end
  370.     end
  371.    
  372.     turtle.select(16)
  373.     print("Please drop a stack of torches above me.")
  374.     while true do
  375.         local bool = turtle.suckUp()
  376.         if bool then break end
  377.     end
  378. end
  379.  
  380. term.clear()
  381. term.setCursorPos(1,1)
  382. sleep(1)
  383.  
  384. --Main Dig--
  385.  
  386. turtle.select(slot)
  387.  
  388. if not isResume then
  389.     for i=1,len do
  390.         mainDig()
  391.         if dis % 12 == 0 then
  392.             placeTorch()
  393.     end
  394.         item = turtle.getItemCount(14)
  395.         if item > 0 then
  396.             placeChest()
  397.         end
  398.     end
  399.  
  400.     turnAround()
  401.     for i=1,dis do
  402.         local success = turtle.forward()
  403.         if not success then
  404.             while true do
  405.                 success = turtle.forward()
  406.                 if success then break end
  407.             end
  408.         end
  409.     end
  410. end
  411.  
  412. turnAround()
  413.  
  414. fs.delete("tunnel2Save")
  415.  
  416. print("Finished!")
  417. if chestPlaced then
  418.     print("There are "..chestNum.." chest(s) in the tunnel.")
  419. end
Advertisement
Add Comment
Please, Sign In to add comment