Advertisement
jackl_Ftw

Bore

May 1st, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.37 KB | None | 0 0
  1. --[[
  2.   File:      BORE
  3.   Version:   2.0
  4.   Purpose:   A utiltiy for hollowing, widening and excavation of tunnels, rooms, ceilings, walls and floors.
  5.   Author(s): da404lewzer [http://turtlescripts.com/profile/da404lewzer]
  6.              zachdyer [http://turtlescripts.com/profile/zachdyer]
  7.   Project:   http://turtlescripts.com/project/gjdgxt
  8.   License:   Creative Commons Attribution-ShareAlike 3.0 Unported License.
  9.              http://creativecommons.org/licenses/by-sa/3.0/
  10. ]]
  11.  
  12.  
  13. local tArgs, lookingRight, lookingUp, autoRefuel = {...}, true, false, true
  14. local noRefuelFlagSet, lookingLeftFlagSet, lookingDownFlagSet = false, false, false
  15. local length = tonumber(tArgs[1]) or 0
  16. local width  = tonumber(tArgs[2]) or 0
  17. local height = tonumber(tArgs[3]) or 0
  18. local isRunning = true
  19. local travelL, travelW, travelH, travelR = 0, 0, 0, 0
  20. local w,h = term.getSize()
  21. local blocksBroken = 0
  22.  
  23. if tArgs[1] == "update" then
  24.     local sCode, sFile, sPin = "gjdgxt", "bore", ""
  25.     local sPath = shell.resolve( sFile )
  26.     write( "Connecting to TurtleScripts.com... " )
  27.     local response = http.post("http://api.turtlescripts.com/getFileRaw/"..textutils.urlEncode( sCode ),"pin="..sPin)
  28.     if response then
  29.         local sResponse = response.readAll()
  30.         response.close()
  31.         local file = fs.open( sPath, "w" )
  32.         file.write( sResponse )
  33.         file.close()
  34.         print( " " )
  35.         print( "Remote: #"..sCode )
  36.         print( "Local: "..sFile )
  37.         print( "[===========================] 100%" )
  38.         print(string.len(sResponse).." bytes")
  39.         print( " " )
  40.         print( "Update Complete." )
  41.         print( " " )
  42.     else
  43.         print( "Failed to update." )
  44.         print( " " )
  45.     end
  46.     isRunning = false
  47. end
  48.  
  49. if isRunning then
  50.     if #tArgs > 3 then
  51.         for i=4, #tArgs do
  52.             local flag = tArgs[i]
  53.             if flag == "--no_refuel" then
  54.                 autoRefuel = false
  55.                 noRefuelFlagSet = true
  56.             elseif flag == "--left" then
  57.                 lookingRight = false
  58.                 lookingLeftFlagSet = true
  59.             elseif flag == "--down" then
  60.                 lookingUp = true
  61.                 lookingDownFlagSet = true
  62.             end
  63.         end
  64.     end
  65. end
  66.  
  67. function printUsage()
  68.     print(" Usage: ")
  69.     print("   bore <L> <W> <H>")
  70.     print("   bore <L> <W> <H> [flags]")
  71.     print("   bore update")
  72.     print(" Flags:")
  73.     print("   --no_refuel")
  74.     print("   --left (right-to-left)")
  75.     print("   --down (excavate mode)")
  76.     print(" ")
  77. end
  78. local function tryRefuel()
  79.     for n=1,16 do
  80.         if turtle.getItemCount(n) > 0 then
  81.             turtle.select(n)
  82.             if turtle.refuel(1) then
  83.                 return true
  84.             end
  85.         end
  86.     end
  87.     turtle.select(1)
  88.     return false
  89. end
  90. local function drawFuelLevel()
  91.     term.clear()
  92.     local fuelLevel = turtle.getFuelLevel()
  93.     if fuelLevel < length * width * height then
  94.         term.setBackgroundColor(colors.white)
  95.         term.setTextColor(colors.black)
  96.     end
  97.     local fuel = " Fuel: " .. fuelLevel
  98.     term.setCursorPos(w - #fuel+1, 1)
  99.     term.write(fuel)
  100.     term.setBackgroundColor(colors.black)
  101.     term.setTextColor(colors.white)
  102.     term.setCursorPos(1,2)
  103.     term.write(" Size:   " .. length .. "L x " .. width .. "W x " .. height .. "H")
  104.     term.setCursorPos(1,3)
  105.     term.write(" Volume: " .. blocksBroken .. " of " ..(length * width * height) .. " Blocks")
  106.     if fuelLevel < 1 then
  107.         term.setCursorPos(1,5)
  108.         term.write(" Oh Noes! I ran out of fuel!")
  109.         term.setCursorPos(1,7)
  110.         term.write(" Q to Quit,")
  111.         term.setCursorPos(1,8)
  112.         term.write(" Any other key to refuel")
  113.     elseif fuelLevel < length * width * height then
  114.         term.setCursorPos(1,5)
  115.         term.write(" I may not be able to finish the task: Low Fuel :(")
  116.     end
  117.     local n = 2
  118.     if noRefuelFlagSet then
  119.         term.setCursorPos(w-6, n)
  120.         term.write("-Refuel")
  121.     else
  122.         term.setCursorPos(w-6, n)
  123.         term.write("+Refuel")
  124.     end
  125.     n = n+2
  126.     term.setCursorPos(w-4, n)
  127.     if lookingDownFlagSet then
  128.       if lookingLeftFlagSet then
  129.           term.write("<--#")
  130.           term.setCursorPos(w-1, n+1)
  131.           term.write("|")
  132.           term.setCursorPos(w-1, n+2)
  133.           term.write("v")
  134.       else
  135.           term.write("#-->")
  136.           term.setCursorPos(w-4, n+1)
  137.           term.write("|")
  138.           term.setCursorPos(w-4, n+2)
  139.           term.write("v")
  140.       end
  141.     else
  142.       if lookingLeftFlagSet then
  143.           term.setCursorPos(w-1, n)
  144.           term.write("^")
  145.           term.setCursorPos(w-1, n+1)
  146.           term.write("|")
  147.           term.setCursorPos(w-4, n+2)
  148.           term.write("<--#")
  149.       else
  150.           term.setCursorPos(w-4, n)
  151.           term.write("^")
  152.           term.setCursorPos(w-4, n+1)
  153.           term.write("|")
  154.           term.setCursorPos(w-4, n+2)
  155.           term.write("#-->")
  156.       end
  157.     end
  158.     n = n+3
  159. end
  160. local function checkFuel()
  161.     drawFuelLevel()
  162.     if turtle.getFuelLevel() < 1 then
  163.         if autoRefuel then
  164.             while isRunning and turtle.getFuelLevel() < 1 do
  165.                 if tryRefuel() then
  166.                     return true
  167.                 else
  168.                     local event, p1,p2,p3 = os.pullEvent()
  169.                     if event == "key" and p1 == keys.q then
  170.                         isRunning = false
  171.                         return false
  172.                     end
  173.                 end
  174.             end
  175.         else
  176.             isRunning = false
  177.             return false
  178.         end
  179.     end
  180.     return true
  181. end
  182. function digDirection(dir, digDir)
  183.     if not checkFuel() or not isRunning then
  184.         returnToBase()
  185.     else
  186.         if isRunning then
  187.             while dir() == false do
  188.                 digDir()
  189.                 blocksBroken = blocksBroken + 1
  190.                 if not isRunning then
  191.                     return false
  192.                 end
  193.             end
  194.             return true
  195.         end
  196.     end
  197.     return false
  198. end
  199. function digForward()
  200.     if lookingLeftFlagSet then
  201.         if travelR == 3 then
  202.             travelW = travelW + 1
  203.         elseif travelR == 1 then
  204.             travelW = travelW - 1
  205.         end
  206.     else
  207.         if travelR == 1 then
  208.             travelW = travelW + 1
  209.         elseif travelR == 3 then
  210.             travelW = travelW - 1
  211.         end
  212.     end
  213.     return digDirection(turtle.forward, turtle.dig)
  214. end
  215. function digUp()
  216.     if digDirection(turtle.up, turtle.digUp) then
  217.         if lookingDownFlagSet then
  218.             travelH = travelH - 1
  219.         else
  220.             travelH = travelH + 1
  221.         end
  222.         return true
  223.     end
  224.     return false
  225. end
  226. function digDown()
  227.     if digDirection(turtle.down, turtle.digDown) then
  228.         if lookingDownFlagSet then
  229.             travelH = travelH + 1
  230.         else
  231.             travelH = travelH - 1
  232.         end
  233.         return true
  234.     end
  235.     return false
  236. end
  237. function checkRotation()
  238.     if travelR > 3 then travelR = 0 end
  239.     if travelR < 0 then travelR = 3 end
  240. end
  241. function turnLeft(count)
  242.     for i=1, count do
  243.         turtle.turnLeft()
  244.         travelR = travelR - 1
  245.         checkRotation()
  246.     end
  247. end
  248. function turnRight(count)
  249.     for i=1, count do
  250.         turtle.turnRight()
  251.         travelR = travelR + 1
  252.         checkRotation()
  253.     end
  254. end
  255. function returnToBase()
  256.     for i = 1, travelW do
  257.         turtle.back()
  258.     end
  259.     for i = 1, travelH do
  260.         if lookingDownFlagSet then
  261.             turtle.up()
  262.         else
  263.             turtle.down()
  264.         end
  265.     end
  266.     if travelL > 1 then
  267.         if lookingRight == true then
  268.             turnRight(1)
  269.         else
  270.             turnLeft(1)
  271.         end
  272.     end
  273.     for i = 1, travelL, 1 do
  274.        turtle.back()
  275.     end
  276. end
  277. function doWork()
  278.     if digForward() and isRunning then
  279.         if lookingRight then
  280.             turnRight(1)
  281.         else
  282.             turnLeft(1)
  283.         end
  284.         for i = 1, length, 1 do
  285.             travelL = i
  286.             lookingUp = not lookingUp --flip it
  287.             for j = 1, height, 1 do
  288.                 for i = 1, width - 1, 1 do
  289.                     if not digForward() or not isRunning then
  290.                         return false
  291.                     end
  292.                 end
  293.                 lookingRight = not lookingRight --flip it
  294.                 if j < height then
  295.                     if lookingUp == true then
  296.                         if checkFuel() then
  297.                             if not digUp() or not isRunning then
  298.                                 return false
  299.                             end
  300.                             turnRight(2)
  301.                         end
  302.                     else
  303.                         if checkFuel() then
  304.                             if not digDown() or not isRunning then
  305.                                 return false
  306.                             end
  307.                             turnRight(2)
  308.                         end
  309.                     end
  310.                 end
  311.                 if not isRunning then
  312.                     return false
  313.                 end
  314.             end
  315.             if lookingRight == true and i < length then
  316.                 turnRight(1)
  317.                 if not digForward() or not isRunning then
  318.                     return false
  319.                 end
  320.                 turnRight(1)
  321.             elseif i < length then
  322.                 turnLeft(1)
  323.                 if not digForward() or not isRunning then
  324.                     return false
  325.                 end
  326.                 turnLeft(1)
  327.             end
  328.             if not isRunning then
  329.                 return false
  330.             end
  331.         end
  332.     end
  333. end
  334.  
  335.  
  336. if isRunning then
  337.   if length == 0 or width == 0 or height == 0 then
  338.       printUsage()
  339.   else
  340.       print(" ")
  341.       print("Starting...")
  342.       sleep(0.5)
  343.       doWork()
  344.       drawFuelLevel()
  345.       returnToBase()
  346.       drawFuelLevel()
  347.       term.setCursorPos(1, 5)
  348.       if isRunning then
  349.           print(" Finished.")
  350.       else
  351.           if turtle.getFuelLevel() < 1 then
  352.               print(" Goodbye cruel world! x_x        ")          
  353.               print(" ")            
  354.               print("                                   ")            
  355.               print("                                   ")            
  356.           end        
  357.       end
  358.   end
  359. end        
  360. sleep(0.1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement